plan: T1 region source re-ruled — AWS region via IMDS + CARLOS_AWS_REGION override, never the placement code (review catch)
1 file changed,
+10
−2
docs/superpowers/plans/2026-08-23-multi-region-steering.md+10 −2
diff --git a/docs/superpowers/plans/2026-08-23-multi-region-steering.md b/docs/superpowers/plans/2026-08-23-multi-region-steering.md| index 2bb55264a..5a292f43f 100644 |
| --- a/docs/superpowers/plans/2026-08-23-multi-region-steering.md |
| +++ b/docs/superpowers/plans/2026-08-23-multi-region-steering.md |
| @@ -91,8 +91,16 @@ zones are Route53 — dated spec note in Task 8). |
| **Interfaces:** |
| - Produces: the edges-file schema gains `"region":"<aws-region>"` |
| - (omitempty; value = `CARLOS_REGION` env, empty when unset) — Task 4's |
| - converger requires it for latency records. `edgesFileLoop` seeds its |
| + (omitempty). **RULED (controller, 2026-08-23, superseding the original |
| + sketch):** the value is the AWS region (e.g. `eu-west-1`), NOT |
| + `CARLOS_REGION` (which is the CARLOS placement code, `ie` — Task 1's |
| + review caught the mismatch). Source: IMDS at loop arm |
| + (`/latest/meta-data/placement/region`, same token idiom as |
| + `readPublicIP`), overridden by `CARLOS_AWS_REGION` when set (testing / |
| + non-EC2). Empty on non-EC2 boxes → such an edge is unarmed for |
| + steering, which is correct (health checks target EIPs). Task 4's |
| + armed gate additionally validates the AWS-region pattern |
| + (`^[a-z]{2}(-[a-z]+)+-\d$`), never just non-empty. `edgesFileLoop` seeds its |
| change-gate from the bucket at arm. |
| - [ ] **Step 1: failing tests** — (a) seed: pre-populate the fake store |