Merge and roll out to every machine first — before the catalogue moves /etc/resolv.conf (mesh-catalog resolv-conf-to-uplink).
Every orphan is removed before anything is applied. When a whole file moves between modules in one apply (resolv-conf.fact-resolvers → .fact-resolvers, same path), the file was deleted — or given back its pre-mesh original — and every resource before the new owner's turn ran on a machine without it.
Now, mirroring #26 for units: an orphan whole file whose path another declared whole file declares is kept recorded until that resource is recorded, then forgotten (forgotten … handed to it, not removed). The new owner judges drift against what the host last wrote there, keeps nothing as an "original" (the file is the mesh's), and inherits the old record's kept original, so undeclaring the new owner still gives the machine its pre-mesh file back. A failed or skipped new owner leaves the old record, and the next apply hands over again. The plan says forget for it.
Tests: internal/apply/file_handover_test.go — the file is present while every command of the apply runs (fails on main), kept original carried and restored on undeclare, mesh-made file still removed with its last owner, drift reported corrected, plan says forget. go vet ./..., go test ./... green.
**Merge and roll out to every machine first** — before the catalogue moves /etc/resolv.conf (mesh-catalog `resolv-conf-to-uplink`).
Every orphan is removed before anything is applied. When a whole file moves between modules in one apply (resolv-conf.fact-resolvers → <uplink>.fact-resolvers, same path), the file was deleted — or given back its pre-mesh original — and every resource before the new owner's turn ran on a machine without it.
Now, mirroring #26 for units: an orphan whole file whose path another declared whole file declares is kept recorded until that resource is recorded, then forgotten (`forgotten … handed to it, not removed`). The new owner judges drift against what the host last wrote there, keeps nothing as an "original" (the file is the mesh's), and inherits the old record's kept original, so undeclaring the new owner still gives the machine its pre-mesh file back. A failed or skipped new owner leaves the old record, and the next apply hands over again. The plan says `forget` for it.
Tests: `internal/apply/file_handover_test.go` — the file is present while every command of the apply runs (fails on main), kept original carried and restored on undeclare, mesh-made file still removed with its last owner, drift reported `corrected`, plan says forget. `go vet ./...`, `go test ./...` green.
The resolver file moves from resolv-conf to the uplink's holder in one apply.
Orphans go first, so the file was deleted or given back its pre-mesh original
until the new owner's turn came. Now the old record is forgotten once the new
one is recorded at the same path, and the kept original goes with it.
Deliverynovox/mesh-host@24bada7a6f41 — 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 mesh-host → ace, g14, novox, shanks; no bus step
tier 0: mesh-host
ace: receives mesh-host
g14: receives mesh-host
novox: receives mesh-host
shanks: receives mesh-host
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-host#27 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-host@24bada7a6f41` — **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 mesh-host → ace, g14, novox, shanks; no bus step
- tier 0: mesh-host
- ace: receives mesh-host
- g14: receives mesh-host
- novox: receives mesh-host
- shanks: receives mesh-host
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-host#27 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.
Merge and roll out to every machine first — before the catalogue moves /etc/resolv.conf (mesh-catalog
resolv-conf-to-uplink).Every orphan is removed before anything is applied. When a whole file moves between modules in one apply (resolv-conf.fact-resolvers → .fact-resolvers, same path), the file was deleted — or given back its pre-mesh original — and every resource before the new owner's turn ran on a machine without it.
Now, mirroring #26 for units: an orphan whole file whose path another declared whole file declares is kept recorded until that resource is recorded, then forgotten (
forgotten … handed to it, not removed). The new owner judges drift against what the host last wrote there, keeps nothing as an "original" (the file is the mesh's), and inherits the old record's kept original, so undeclaring the new owner still gives the machine its pre-mesh file back. A failed or skipped new owner leaves the old record, and the next apply hands over again. The plan saysforgetfor it.Tests:
internal/apply/file_handover_test.go— the file is present while every command of the apply runs (fails on main), kept original carried and restored on undeclare, mesh-made file still removed with its last owner, drift reportedcorrected, plan says forget.go vet ./...,go test ./...green.Delivery
novox/mesh-host@24bada7a6f41— 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 mesh-host → ace, g14, novox, shanks; no bus step
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.