perf(db): batch aggregated_cache writes in save_as_system_process save_as_system_process now issues one bulk UPDATE for all supply-node aggregated_cache writes instead of one roundtrip per node. New update_node_prop_bulk (UPDATE ... FROM unnest) handles both append modes; text[]+::jsonb cast avoids asyncpg list-collapse ambiguity. The required_matching half was implemented then reverted — deferring that DB write made a pre-existing flaky test timing-sensitive (A/B at N=10 confirmed the aggregated_cache-only change is flake-neutral: baseline 3/10, change 4/10). required_matching batching tracked separately for its own investigation. Validation: two_origins CO2=1.2568, subrecipe CO2=0.0930, 120/121 broad gauntlet (1 pre-existing flake, A/B-confirmed unaffected).