Non-technical end users
Two teams tried to reserve the same block of houses at the same time. The first team got them; the second team was told "sorry, already taken." We need to give each team a distinct block.
Back-filled by scripts/backfill_legacy_runs.sh — historical run predates campaign.meta.json emission.
Run focus
What this campaign tested: Whether the CIDR fix alone was sufficient. It was — for whichever campaign won the dispatch race.
What it demonstrated: The two campaigns must have distinct CIDRs because they're intended to run concurrently. Picking the same /24 creates a distributed system of one: whichever terraform calls CreateVPC first wins, the other blows up.
AI NHI analysis · Claude Opus 4.7
RED at Terraform init + apply in 12 s. Hermes created 10.251.0.0/24 first; OpenClaw's identical request was 422-rejected with overlap.
Two teams tried to reserve the same block of houses at the same time. The first team got them; the second team was told "sorry, already taken." We need to give each team a distinct block.
Surfaces the concurrent-dispatch requirement as a first-class constraint in the infra design. Two-campaign-per-release is the intended cadence; resource naming + addressing must be orthogonal across agent_group values.
DO API: POST /v2/vpcs returns 422 "This range/size overlaps with another VPC network in your account: aim-a2a-hermes-..." when the CIDR is already allocated. Fix introduced local.vpc_cidr map: openclaw → 10.251.0.0/24, hermes → 10.252.0.0/24. Firewall rules that previously hardcoded 10.260.0.0/24 now reference digitalocean_vpc.a2a.ip_range so there's one source of truth and the partition works for both.
Partition CIDR by agent_type; dispatch r4.