networkmanager, systemd-networkd and dhcpcd each render /etc/resolv.conf (fact resolvers) from one identical template — every mesh-dns-resolver holder, own first, options timeout:1 attempts:2 edns0, no public resolver — and require wildcard-resolution. resolv-conf becomes a stub that declares nothing (still claims node-resolver-config) for one release.
Why not the managers' own mechanisms: NetworkManager's global DNS writes its own header and options line, dhcpcd's hook likewise and reads config only at its next start — neither can write the mesh's file byte for byte. So dns=none / nohook resolv.conf stay and the module declares the file.
Order: mesh-host files-forget-when-held rolled out everywhere first; merge together with mesh-controller resolv-conf-to-uplink (its tests read this). Each machine's next push then hands the file over in one apply. Step 2 (retire-resolv-conf) after resolv-conf is unassigned everywhere.
Checks: module check ok on all four; controller go test ./... against this branch green.
networkmanager, systemd-networkd and dhcpcd each render `/etc/resolv.conf` (fact `resolvers`) from one identical template — every `mesh-dns-resolver` holder, own first, `options timeout:1 attempts:2 edns0`, no public resolver — and require `wildcard-resolution`. resolv-conf becomes a stub that declares nothing (still claims `node-resolver-config`) for one release.
Why not the managers' own mechanisms: NetworkManager's global DNS writes its own header and options line, dhcpcd's hook likewise and reads config only at its next start — neither can write the mesh's file byte for byte. So `dns=none` / `nohook resolv.conf` stay and the module declares the file.
**Order:** mesh-host `files-forget-when-held` rolled out everywhere first; merge together with mesh-controller `resolv-conf-to-uplink` (its tests read this). Each machine's next push then hands the file over in one apply. Step 2 (`retire-resolv-conf`) after resolv-conf is unassigned everywhere.
Checks: `module check` ok on all four; controller `go test ./...` against this branch green.
The program that manages a machine's network is the one that would rewrite
the resolver file, so its module now writes it: networkmanager,
systemd-networkd and dhcpcd render the same template from the resolver's
holders. resolv-conf declares nothing for one release, so every machine
hands the file over in one apply; it is removed once unassigned everywhere.
Deliverynovox/mesh-catalog@ff61578e3e7d — 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 networkmanager, systemd-networkd, new: modules/dhcpcd, modules/resolv-conf, sent nowhere; no bus step; 4 wait(s) for a person
tier 0: networkmanager, systemd-networkd
ace: waits for a person: networkmanager
g14: waits for a person: networkmanager
novox: waits for a person: systemd-networkd
shanks: waits for a person: networkmanager
networkmanager waits for a person: its policy records (module)
systemd-networkd waits for a person: its policy records (module)
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#76 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@ff61578e3e7d` — **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 networkmanager, systemd-networkd, new: modules/dhcpcd, modules/resolv-conf, sent nowhere; no bus step; 4 wait(s) for a person
- tier 0: networkmanager, systemd-networkd
- ace: waits for a person: networkmanager
- g14: waits for a person: networkmanager
- novox: waits for a person: systemd-networkd
- shanks: waits for a person: networkmanager
- networkmanager waits for a person: its policy records (module)
- systemd-networkd waits for a person: its policy records (module)
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#76 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.
networkmanager, systemd-networkd and dhcpcd each render
/etc/resolv.conf(factresolvers) from one identical template — everymesh-dns-resolverholder, own first,options timeout:1 attempts:2 edns0, no public resolver — and requirewildcard-resolution. resolv-conf becomes a stub that declares nothing (still claimsnode-resolver-config) for one release.Why not the managers' own mechanisms: NetworkManager's global DNS writes its own header and options line, dhcpcd's hook likewise and reads config only at its next start — neither can write the mesh's file byte for byte. So
dns=none/nohook resolv.confstay and the module declares the file.Order: mesh-host
files-forget-when-heldrolled out everywhere first; merge together with mesh-controllerresolv-conf-to-uplink(its tests read this). Each machine's next push then hands the file over in one apply. Step 2 (retire-resolv-conf) after resolv-conf is unassigned everywhere.Checks:
module checkok on all four; controllergo test ./...against this branch green.Delivery
novox/mesh-catalog@ff61578e3e7d— 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 networkmanager, systemd-networkd, new: modules/dhcpcd, modules/resolv-conf, sent nowhere; no bus step; 4 wait(s) for a person
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.