carlos / platform Public

docs: close the T7 ruling in both plans, not only the spec

The spec carries the ruling; three plan sites still declared it open,
including the live stage-5 arming checklist an operator reads. Each is
annotated in its own document's style, historical text left standing:

- backhaul plan item 5 ("Open ruling requested for Paul") — Resolved
  (2026-08-24), naming both halves and the still-owed numbered issue.
- steering plan Task 8's checklist ("the egress ruling request stays
  open (#-ref)") — RULED (2026-08-24), superseding the placeholder, with
  the roll-before-arming ordering it implies for step 0.
- steering plan rollout notes ("stays open, no issue number yet") —
  RULED inside the very window the backhaul plan asked it be decided in.
- steering plan "For Paul" ("a decision on the containment approach...
  is needed") — no longer blocking; the one question left is PRICING,
  shipped absorbed by default.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell pushed by paul@keymail.dev 3af777ef8de45530535a2c47aba0f7b5bbceb051 parent e3d2fee
2 files changed, +62 −0
  • docs/superpowers/plans/2026-08-22-multi-region-backhaul.md +25 −0
  • docs/superpowers/plans/2026-08-23-multi-region-steering.md +37 −0
diff --git a/docs/superpowers/plans/2026-08-22-multi-region-backhaul.md b/docs/superpowers/plans/2026-08-22-multi-region-backhaul.md
index 79e338ea9..dbff81597 100644
--- a/docs/superpowers/plans/2026-08-22-multi-region-backhaul.md
+++ b/docs/superpowers/plans/2026-08-22-multi-region-backhaul.md
@@ -625,6 +625,31 @@ b. **Visibility for the two stuck-state paths before steering sends
ruling should be recorded as a numbered issue once Paul rules on the
containment approach.
+ **Resolved (2026-08-24) — the ruling landed; this item is closed.**
+ Both halves are implemented and dormant on a single box; the
+ authoritative statement is the spec's **Amendment (2026-08-24)** in
+ Part 3 of `docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md`.
+ *Containment:* the semaphore option above was taken — a per-home-box
+ in-flight cap on the SENDING edge (`CARLOS_BACKHAUL_MAX_INFLIGHT`,
+ default 64), answering 503 + `Retry-After: 2` at the limit with no
+ dial, logged on the throttled per-box key `"backhaul-saturated "+box`.
+ A slot is held for the life of the hop's response, streams and
+ upgrades included. *Attribution:* the missing half above is closed
+ too, on the HOME box rather than by relocating the meter — the one
+ meter site keeps counting each hop-served exchange exactly once and
+ additionally annotates it into two additive, `omitempty`, SUBSET
+ fields on `usage.EdgeRow` (`hop_requests`/`hop_bytes_out`), so every
+ backhauled byte is attributed to the route, account and app that
+ caused it. The territorial cross-ref is honored: the shapes live in
+ `internal/usage`, `internal/edge` only gained a flag parameter.
+ *Pricing stays Paul's*: `backhaul_gb` is reserved in the meter
+ vocabulary and wired into nothing — bills are byte-identical to
+ before, absorbed by default. The numbered issue this item asks for is
+ still owed, to be filed carrying the ruling's text when the PR opens.
+ Rollout: must be on every box of a deployment before that deployment
+ arms a second edge (ahead of the steering plan's arming checklist
+ step 0).
+
### Constraint for Part 4 / plan 3 (steering) to honor
6. **Pool narrowing: steered non-shared-pool routes must not get
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 4f7d48737..074da8dd6 100644
--- a/docs/superpowers/plans/2026-08-23-multi-region-steering.md
+++ b/docs/superpowers/plans/2026-08-23-multi-region-steering.md
@@ -350,6 +350,15 @@ func desiredState(routes []registry.Route, edges []edgesFileView, appsDomain str
commands ready-to-run); edges-file `role` over-claim note (steering
reads the ARMED-EDGE set, not roles — unaffected, but read-local
still wants the replica role first, restated).
+ **RULED (2026-08-24), superseding this item's "egress ruling request
+ stays open (#-ref)":** the T7 ruling landed — sender-side per-home-box
+ in-flight cap plus home-box hop annotation, pricing deferred to Paul
+ and absorbed by default. Authoritative text: the **Amendment
+ (2026-08-24)** in Part 3 of
+ `docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md`.
+ The arming checklist below is unchanged except for its ordering: the
+ ruling's code must be rolled to every box of a deployment BEFORE that
+ deployment arms a second edge, i.e. ahead of step 0.
- [x] Full gate; commit `docs: steering rollout notes`.
## Rollout notes (filled by Task 8 at execution)
@@ -605,6 +614,21 @@ rollout notes and constraints where they name Part 4 directly.
window the backhaul plan called out ("today it is dormant/low-volume
by construction... which is the window in which to decide, not
after") ends the moment stage 5 begins.
+ **RULED (2026-08-24), inside that window:** the ruling landed and both
+ halves are implemented — containment is the semaphore option named
+ above (a per-home-box in-flight cap on the sending edge,
+ `CARLOS_BACKHAUL_MAX_INFLIGHT`, default 64, 503 + `Retry-After: 2` at
+ the limit with no dial), and attribution is a home-box hop annotation
+ (`usage.EdgeRow`'s additive, `omitempty`, SUBSET `hop_requests` /
+ `hop_bytes_out`), so backhauled bytes are attributed to the route,
+ account and app that caused them. Pricing them stays Paul's call and
+ ships absorbed: `backhaul_gb` is reserved and wired into nothing, so
+ bills are byte-identical to before. Authoritative text: the
+ **Amendment (2026-08-24)** in Part 3 of
+ `docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md`.
+ Still owed: the numbered issue, to be filed with the ruling's text
+ when the PR opens. Stage-5 consequence: this must be rolled to every
+ box of a deployment before that deployment arms its second edge.
### Deferred-minor triage (every task's ledger entry, included or excluded with a reason)
@@ -721,6 +745,19 @@ the task's own two fix rounds. Nothing left to triage.
later") is needed before or alongside the stage-5 arming decision —
raised here rather than left buried in plan 2's own notes, since this
is the plan whose stage-5 work makes the ruling time-sensitive.
+ **RULED (2026-08-24) — no longer blocking, one question left.** The
+ containment approach is decided and built (per-home-box in-flight cap
+ on the sending edge, default 64, 503 + `Retry-After: 2`), as is
+ attribution (home-box `hop_requests`/`hop_bytes_out` on
+ `usage.EdgeRow`); see the **Amendment (2026-08-24)** in Part 3 of
+ `docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md`.
+ What is still Paul's: **whether backhauled bytes should be PRICED** (a
+ `backhaul_gb` rate-card line or an egress multiplier) or absorbed as a
+ platform cost of any-edge serving. Shipped default: absorbed — the
+ counters accumulate dormant, so the decision can be made on real data
+ after stage 5, and nothing in the engineering depends on the answer.
+ Also owed: file the numbered issue carrying the ruling's text, and
+ roll this to every box of a deployment before arming its second edge.
- **PR routing**: this branch merges to `main` directly — no stack, no
base branch other than `main` (see the PR body, drafted in the task
report).