resolv-conf: /etc/resolv.conf is now a roster fact rendered from index .Holders "mesh-dns-resolver" (this machine first when it holds the seat, then by name), no 1.1.1.1 line, options timeout:1 attempts:2 edns0. Still requires wildcard-resolution (refusal when no resolver exists, delivery order).
dnsmasq: comments and the dns-udp listen's why say the seat may have several holders. This rewrites /etc/dnsmasq.conf once, so dnsmasq restarts once on each holder.
module check ok for both. Merge after mesh-controller feat/the-mesh-has-two-resolvers is rolled out: an older controller cannot render .Holders and would refuse resolv-conf on every machine. The resource id changes (resolv -> fact-resolvers); the host removes before it writes, so the file is replaced in the same apply.
hq ADR 0223.
- `resolv-conf`: `/etc/resolv.conf` is now a roster fact rendered from `index .Holders "mesh-dns-resolver"` (this machine first when it holds the seat, then by name), no `1.1.1.1` line, `options timeout:1 attempts:2 edns0`. Still requires `wildcard-resolution` (refusal when no resolver exists, delivery order).
- `dnsmasq`: comments and the dns-udp listen's why say the seat may have several holders. This rewrites `/etc/dnsmasq.conf` once, so dnsmasq restarts once on each holder.
`module check` ok for both. **Merge after** mesh-controller `feat/the-mesh-has-two-resolvers` is rolled out: an older controller cannot render `.Holders` and would refuse resolv-conf on every machine. The resource id changes (`resolv` -> `fact-resolvers`); the host removes before it writes, so the file is replaced in the same apply.
musl asks every nameserver at once and takes the first reply, so a public
resolver's NXDOMAIN for a mesh name beat the mesh's answer in every Alpine
container (hq ADR 0223). resolv-conf now renders /etc/resolv.conf from the
holders of mesh-dns-resolver, this machine first when it holds one; dnsmasq's
comments say the seat may have several holders.
Deliverynovox/mesh-catalog@b4b86c1452d5 — 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 dnsmasq, new: modules/resolv-conf, sent nowhere; no bus step; 2 wait(s) for a person
tier 0: dnsmasq
ace: waits for a person: dnsmasq
novox: waits for a person: dnsmasq
dnsmasq waits for a person: its policy records (module)
dnsmasq provides wildcard-resolution: its consumers are sent again after it
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#73 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@b4b86c1452d5` — **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 dnsmasq, new: modules/resolv-conf, sent nowhere; no bus step; 2 wait(s) for a person
- tier 0: dnsmasq
- ace: waits for a person: dnsmasq
- novox: waits for a person: dnsmasq
- dnsmasq waits for a person: its policy records (module)
- dnsmasq provides wildcard-resolution: its consumers are sent again after it
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#73 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 0223.
resolv-conf:/etc/resolv.confis now a roster fact rendered fromindex .Holders "mesh-dns-resolver"(this machine first when it holds the seat, then by name), no1.1.1.1line,options timeout:1 attempts:2 edns0. Still requireswildcard-resolution(refusal when no resolver exists, delivery order).dnsmasq: comments and the dns-udp listen's why say the seat may have several holders. This rewrites/etc/dnsmasq.confonce, so dnsmasq restarts once on each holder.module checkok for both. Merge after mesh-controllerfeat/the-mesh-has-two-resolversis rolled out: an older controller cannot render.Holdersand would refuse resolv-conf on every machine. The resource id changes (resolv->fact-resolvers); the host removes before it writes, so the file is replaced in the same apply.b14bea0ce7to737f42deb4Delivery
novox/mesh-catalog@b4b86c1452d5— 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 dnsmasq, new: modules/resolv-conf, sent nowhere; no bus step; 2 wait(s) for a person
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.