docs: fix round 1 — dev/Kass prerequisite, gate reconciliation
Review catch (Important): plan-2's rollout note 3 (prove backhaul across two REAL boxes on dev/Kass) was missing from the reconciliation — added as step 0 of the arming checklist, explicit that it gates any flagship arming rather than running in parallel with it. Nit: name that plan-2's two MUST-FIX-BEFORE-STAGE-5 gates (seeded change-gate, stuck-state visibility) already landed in this plan's own Task 1 (8bd84c6) — the reconciliation had been silent on them. Docs-only; full gate (build/vet/test/darwin, 30 packages) re-run green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 file changed,
+26
−0
docs/superpowers/plans/2026-08-23-multi-region-steering.md+26 −0
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 dd5fee0c7..86e70b18d 100644 |
| --- a/docs/superpowers/plans/2026-08-23-multi-region-steering.md |
| +++ b/docs/superpowers/plans/2026-08-23-multi-region-steering.md |
| @@ -363,6 +363,20 @@ rollout notes and constraints where they name Part 4 directly. |
| ### Arming checklist (per deployment, in order) |
| +0. **Prove the backhaul path on the dev/Kass deployment across two REAL |
| + boxes — plan-2 rollout note 3 — before any flagship arming.** This is |
| + a PREREQUISITE, not parallel work: nothing in either this branch or |
| + plan 2 (multi-region-backhaul) has run across two real boxes — Task |
| + 6's two-edge e2e (`67de75f`) is in-process, with edges files written |
| + directly into a fake store, not a real cross-box network hop. Arm a |
| + second box on dev/Kass, verify checklist items 1–2 below hold LIVE |
| + (not just in a fake store), drive one real cross-box hop with |
| + `curl --resolve` against the far box's EIP for a host homed on the |
| + near box, and confirm the marker/XFF/one-hop behaviour Task 6 pinned |
| + in-process also holds over a real network hop. Flagship AU remains |
| + the first STEERING target once this proving ground has passed — it |
| + is the spec's designated low-stakes choice for steering specifically, |
| + not a substitute for proving backhaul over a real network first. |
| 1. **Confirm plan-2's stage-5 checklist items 1–2 already hold for this |
| deployment before arming steering at all** (consumed here, not |
| repeated in full — see `2026-08-22-multi-region-backhaul`'s rollout |
| @@ -527,6 +541,18 @@ rollout notes and constraints where they name Part 4 directly. |
| ### Constraints from plan 2 (multi-region-backhaul), checked against what shipped |
| +- **Both of plan 2's whole-branch-final-review MUST-FIX-BEFORE-STAGE-5 |
| + gates already landed, in this plan's own Task 1.** Gate (a) — seed the |
| + edges-file change-gate (`*last`) from the bucket at loop arm, so a |
| + restart during a transient IMDS blip doesn't publish `"eip":""` over a |
| + box's own last-good file — and gate (b) — visibility for the two |
| + silent stuck-state paths (`staleHopRefusal` logging, the backhaul 502 |
| + `ErrorHandler` going through `logThrottled`) — are exactly this plan's |
| + Task 1 (commit `8bd84c6`, "host+edge: stage-5 gates — seeded edges |
| + gate, region field, stuck-state visibility"). Named explicitly here |
| + because the reconciliation above was otherwise silent on them: they |
| + are not still-open items, they are done, and step 0's dev/Kass proving |
| + ground is the next gate in the same sequence, not a duplicate of these. |
| - **Pool narrowing (backhaul plan's constraint #6): honored, and more |
| strictly than asked.** The constraint required that a steered |
| non-shared-pool route only get latency records for the armed edges |