carlos / platform Public

docs: add EIP-eviction and error-throttle rollout watch items

Self-review catch: backhaulTransports never evicting on EIP
reassociation and the unthrottled backhaul 502 ErrorHandler are both
minor deferred findings from Task 4's review that are genuinely
rollout-relevant (box replacement, dial-failure noise during arming)
even though neither was T7-tagged in the ledger.
Paul Campbell pushed by paul@keymail.dev d5705d8c29807b5faec4132a2d60f3062193ab79 parent a2943cb
1 file changed, +23 −0
  • docs/superpowers/plans/2026-08-22-multi-region-backhaul.md +23 −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 743c01469..44ff9d203 100644
--- a/docs/superpowers/plans/2026-08-22-multi-region-backhaul.md
+++ b/docs/superpowers/plans/2026-08-22-multi-region-backhaul.md
@@ -696,6 +696,29 @@ plan's own spec Part 4 describes.
something this branch introduces; recorded here as the cross-ref
Task 5's review asked for, not as new scope for this plan.
+### Deferred code-quality items worth a rollout-time watch
+
+13. **`backhaulTransports` is keyed by EIP and never evicts.** Task 4's
+ review flagged this as a minor, deferred item, and it turns real once
+ boxes actually get replaced: an EIP re-association (box replacement,
+ which the fleet already does routinely — see the IMDS-blip EIP-hold
+ logic Task 1 built) leaves the OLD EIP's cached `*http.Transport`
+ (`internal/edge/edge.go:184`, `backhaulTransports sync.Map`) stranded
+ in the map forever rather than pruned — bounded by the number of
+ distinct EIPs a deployment's boxes have ever held over its lifetime,
+ not by anything that self-cleans. Not a correctness bug (a new EIP
+ gets its own entry; the stale one is just dead weight), but worth
+ revisiting once box replacement during multi-region operation is a
+ routine event rather than a hypothetical.
+14. **The backhaul 502 `ErrorHandler` is unthrottled**
+ (`logThrottled` key `"backhaul-error "+box`, per-box but every dial
+ failure still logs). During the dev/Kass and flagship-AU rollout
+ exercises (item 3 above), a misconfigured home map or a genuinely
+ dead box will produce one line per failed request rather than a
+ throttled cadence — expected noise during the arming window, not a
+ defect, but flagged so it isn't mistaken for something worse the
+ first time it's seen live.
+
**Full gate** (env `GOCACHE=/tmp/claude-1001/gocache GOFLAGS=-mod=mod
GOPROXY=off`): `go build ./...`, `go vet ./...`, `GOOS=darwin go build
./...`, `go test ./... -count=1`, `gofmt -l` on touched files — all