Fold public-acme into route-proxy; drop dhcpcd and cloudflare-dns (hq ADR 0226) #84

Merged
mesh-admin merged 1 commits from feat/route-proxy-names-its-public-issuer into main 2026-10-06 13:04:29 +00:00
Contributor

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.

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`.
jschoubben added 1 commit 2026-10-06 13:03:08 +00:00
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.
jschoubben force-pushed feat/route-proxy-names-its-public-issuer from 82ef84aa49 to 57d524f4ef 2026-10-06 13:03:08 +00:00 Compare
mesh-admin merged commit 8f5a75ab9b into main 2026-10-06 13:04:29 +00:00
mesh-admin deleted branch feat/route-proxy-names-its-public-issuer 2026-10-06 13:04:29 +00:00
Author
Contributor

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.

<!-- 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`.
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#84