route-proxy no longer requires or binds acme-ca. Its acme.env states Let's Encrypt production byte for byte as the binding to public-acme rendered it on both proxies on 2026-10-06 (read from mesh-controller.plan): https://acme-v02.api.letsencrypt.org:443/directory, port included, ACME_ROOTS_PATH empty. The proxy names each ACME account directory under /var/lib/route-proxy/acme after a digest of that URL and the trust root (forThisAuthority), so any other spelling would register a new account and reorder every certificate. With it identical: acme-env unchanged → trust does not re-run → same root → same directory, same account, same certificates. The only resource that goes is bound-acme-ca (acme-ca.json), which nothing reads.
public-acme removed (ran nothing; route-proxy was its only consumer).
READMEs of route-proxy and route-adapter updated. (route-adapter's adapter.ts still names cloudflare-dns in one comment; left, TS untouched.)
Checked: mesh-controller module check on the whole catalogue (110 ok); mesh-controller's suite against this tree incl. the new TestRouteProxyKeepsItsPublicAccountDirectory (holds acme.env byte for byte and the trust image digest; verified it fails on a changed URL) and TestTheRetiredNetworkingModulesAreNotInTheCatalogue.
Merge order: hq#128 → mesh-host → this → mesh-controller. Merging this IS the proxy rollout: follow step 0 (baseline serials, acme listing) before merging, and step 3 after, from novox/hq#128. Only after both proxies verify: unassign public-acme on both, unpin the anchor's stale acme-ca pin, module forget public-acme / dhcpcd / cloudflare-dns.
hq ADR 0226 (novox/hq#128).
- **route-proxy** no longer requires or binds `acme-ca`. Its `acme.env` states Let's Encrypt production **byte for byte as the binding to public-acme rendered it** on both proxies on 2026-10-06 (read from `mesh-controller.plan`): `https://acme-v02.api.letsencrypt.org:443/directory`, port included, `ACME_ROOTS_PATH` empty. The proxy names each ACME account directory under `/var/lib/route-proxy/acme` after a digest of that URL and the trust root (`forThisAuthority`), so any other spelling would register a new account and reorder every certificate. With it identical: `acme-env` unchanged → `trust` does not re-run → same root → same directory, same account, same certificates. The only resource that goes is `bound-acme-ca` (`acme-ca.json`), which nothing reads.
- **public-acme** removed (ran nothing; route-proxy was its only consumer).
- **dhcpcd**, **cloudflare-dns** removed: assigned nowhere; nothing requires `public-dns`; `node-uplink` keeps NetworkManager and systemd-networkd.
- READMEs of route-proxy and route-adapter updated. (route-adapter's `adapter.ts` still names cloudflare-dns in one comment; left, TS untouched.)
Checked: `mesh-controller module check` on the whole catalogue (110 ok); mesh-controller's suite against this tree incl. the new `TestRouteProxyKeepsItsPublicAccountDirectory` (holds acme.env byte for byte and the trust image digest; verified it fails on a changed URL) and `TestTheRetiredNetworkingModulesAreNotInTheCatalogue`.
**Merge order: hq#128 → mesh-host → this → mesh-controller.** Merging this IS the proxy rollout: follow step 0 (baseline serials, acme listing) before merging, and step 3 after, from novox/hq#128. Only after both proxies verify: unassign public-acme on both, unpin the anchor's stale `acme-ca` pin, `module forget public-acme / dhcpcd / cloudflare-dns`.
public-acme ran nothing and had one consumer. The proxy now states the issuer itself, byte for byte
what the binding rendered, so its account directory and every certificate stay put. dhcpcd and
cloudflare-dns are assigned nowhere and nothing requires what they provide.
Deliverynovox/mesh-catalog@8f5a75ab9be1 — held since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.
Delivery plan — builds route-adapter, route-proxy, new: modules/cloudflare-dns, modules/dhcpcd, modules/public-acme → ace, novox; no bus step
tier 0: route-adapter, route-proxy
ace: receives route-proxy
novox: receives route-proxy
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#84 merged; its head was not heard by this owner, so it is made from the forge's word
2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@8f5a75ab9be1` — **held** since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on.
**Delivery plan** — builds route-adapter, route-proxy, new: modules/cloudflare-dns, modules/dhcpcd, modules/public-acme → ace, novox; no bus step
- tier 0: route-adapter, route-proxy
- ace: receives route-proxy
- novox: receives route-proxy
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#84 merged; its head was not heard by this owner, so it is made from the forge's word
- 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
hq ADR 0226 (novox/hq#128).
acme-ca. Itsacme.envstates Let's Encrypt production byte for byte as the binding to public-acme rendered it on both proxies on 2026-10-06 (read frommesh-controller.plan):https://acme-v02.api.letsencrypt.org:443/directory, port included,ACME_ROOTS_PATHempty. The proxy names each ACME account directory under/var/lib/route-proxy/acmeafter a digest of that URL and the trust root (forThisAuthority), so any other spelling would register a new account and reorder every certificate. With it identical:acme-envunchanged →trustdoes not re-run → same root → same directory, same account, same certificates. The only resource that goes isbound-acme-ca(acme-ca.json), which nothing reads.public-dns;node-uplinkkeeps NetworkManager and systemd-networkd.adapter.tsstill names cloudflare-dns in one comment; left, TS untouched.)Checked:
mesh-controller module checkon the whole catalogue (110 ok); mesh-controller's suite against this tree incl. the newTestRouteProxyKeepsItsPublicAccountDirectory(holds acme.env byte for byte and the trust image digest; verified it fails on a changed URL) andTestTheRetiredNetworkingModulesAreNotInTheCatalogue.Merge order: hq#128 → mesh-host → this → mesh-controller. Merging this IS the proxy rollout: follow step 0 (baseline serials, acme listing) before merging, and step 3 after, from novox/hq#128. Only after both proxies verify: unassign public-acme on both, unpin the anchor's stale
acme-capin,module forget public-acme / dhcpcd / cloudflare-dns.82ef84aa49to57d524f4efDelivery
novox/mesh-catalog@8f5a75ab9be1— held since 2026-10-06T23:05:28ZHeld for a person: merged without a passing check: only a person decides that it goes on —
mesh-delivery.releasewith why lets it go on.Delivery plan — builds route-adapter, route-proxy, new: modules/cloudflare-dns, modules/dhcpcd, modules/public-acme → ace, novox; no bus step
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.