carlos / platform Public

docs: record the #277 cert-gate ruling in the spec (2026-08-24)

Part 2 described the challenge read-through and the order gate as bounded
by this box's registry (Allowed). A dated amendment, appended rather than
rewriting the sentence, records the widening: all three cert-adjacent
gates now admit exact home-map names alongside Allowed, with the
mechanism of #277 traced from DNS through the backhaul to the burned LE
budget, the one-label wildcard rule stated as still excluded (PR #180's
bound, with the three refusal tests named), the fail-closed residual
(DNS at neither home nor issuer stays certless at zero LE spend) and the
roll-every-edge-before-arming ordering.

Also corrects the status block's name for the ALPN bound test, which the
widening renamed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell pushed by paul@keymail.dev 2090d3bdd7a9f0d30edbfd77282d64419e894e41 parent 3d2c8bf
1 file changed, +64 −1
  • docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md +64 −1
diff --git a/docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md b/docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md
index f44461f39..4d3425d0b 100644
--- a/docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md
+++ b/docs/superpowers/specs/2026-08-20-multi-region-ingress-design.md
@@ -126,7 +126,7 @@ the one box always holds the housekeeper lease, so behaviour is identical
to today. Residual: tls-alpn-01 (autocert's PREFERRED challenge type) is
NOT end-to-end proven — only http-01 is; tls-alpn-01 has real unit
coverage (`TestMirrorAnswersAnotherEdgesALPNValidation`,
-`TestMirrorALPNReadThroughOnlyForServedHosts`,
+`TestMirrorALPNReadThroughOnlyForServedOrRemoteHomedHosts`,
`TestMirrorNeverServesATokenCertToAnOrdinaryHello`,
`TestALPNTokenCertIsReadLiveNotFromTheSnapshot` in
`internal/edge/certsync_test.go`) but not the e2e proof — tracked as a
@@ -168,6 +168,69 @@ prefix already listed and read on every mirror poll — and is left for a
later sweep rather than solved here; tracked as issue #243 (filed). The
issuer remains the only box that talks to the CA.
+**Amendment (2026-08-24, #277): the three cert-adjacent host gates admit
+exact home-map names, not only this box's own routes.** As shipped, the
+HTTP-01 challenge read-through, the tls-alpn-01 read-through and
+`issuerHostPolicy`'s order gate all bounded on `Edge.Allowed` — this
+box's registry. That was the right anti-stranger bound for a world where
+every box's registry named every host it could be validated for, and
+home-boxed routes falsified it the moment a second edge armed: DNS for
+such a route may point at ANY edge, that edge backhauls to the home box
+with the real SNI, the home box (as issuer) orders — and the CA then
+validates against the box DNS names, whose registry has never heard of
+the host. Every authorization failed, each client retry re-triggered
+another through the backhaul, and five failures burned the name's LE
+per-hostname budget in minutes while the route was down (#277, observed
+in the dev topology).
+
+All three gates now admit a host when it is in this box's registry
+(`Allowed`, unchanged) **or** is an **EXACT** key of the mirrored home
+map (`homeMap.KnownHost`, folded from the same `control/edges/**` objects
+Part 3 already mirrors on the same 30s cadence) — bridged in one place,
+`Edge.deploymentHost`. Both halves stay registry-backed and
+deployment-controlled: edges files are written by each box's own loop
+from its own registry, so a stranger cannot add a name without a control-
+bucket write, which Part 2's trust statement already treats as
+game-over.
+
+**The one-label wildcard rule stays excluded, and that is load-bearing.**
+The home map carries `*.<parent>` catch-all rows verbatim, and `Home()`'s
+one-label fallback makes labels under them dialable. Admitting the
+fallback here would let a stranger's SNI or Host of
+`<anything>.<remote-parent>` drive fresh per-host ACME orders against the
+deployment's single shared account and rate-limit bucket, and spend the
+read-through budgets on invented names — exactly what PR #180's
+exact-registry `Allowed` rule exists to refuse. That rule therefore
+survives verbatim, merely widened from "this box's routes" to "this
+deployment's exactly-named routes"; coverage for labels under a catch-all
+remains the wildcard cert's job, as on a single box. Exact-only loses
+nothing: an order only ever exists for a name that passed the exact gate,
+so a challenge only ever needs answering for an exact name. Refusals are
+pinned by test on all three surfaces
+(`TestHostPolicyRefusesWildcardLabelUnderRemoteCatchAll`,
+`TestALPNReadThroughRefusesWildcardLabelUnderRemoteCatchAll`,
+`TestChallengeReadThroughStillRefusesStrangers`).
+
+*Residual, filed rather than fixed.* An order still only ever STARTS on
+the issuer, because autocert orders lazily out of `GetCertificate`. In a
+3-plus-edge deployment where DNS points at neither the home box nor the
+issuer, no hello ever reaches the issuer and the name simply stays
+certless — **failing closed, with zero LE spend** (a non-issuer answers
+`errNotIssuer` before autocert's cache lookup, so backhauled hellos there
+order nothing). Steering heals the steered case (its latency records
+include the issuer edge) and the custom-domain CNAME guidance covers the
+rest; a proactive issuer-side order nudge for exact home-map names is the
+natural fix and is a follow-up, not an overnight change. Issue #277
+carries this ruling and the residual.
+
+*Rollout.* Read-side only — no wire or storage shape, no new writer, no
+knob — and dormant on single-box deployments, where the fold is empty and
+every gate reduces to `Allowed`. Must be rolled to EVERY edge of a
+deployment before its second edge arms: a not-yet-rolled edge is exactly
+the refusing validator #277 describes. Until then, do not point real DNS
+at a non-home edge for a home-boxed name; that hour-long rate-limit has
+already been paid once.
+
**Issuer death**: the lease expires and the next box's housekeeper takes
over with identical machinery. Distributed certs keep every edge serving
through the gap; a dead issuer costs nothing until the earliest renewal