Hand a whole file to its new owner instead of removing it first (hq ADR 0223) #27

Merged
mesh-admin merged 1 commits from files-forget-when-held into main 2026-10-05 21:50:48 +00:00
Contributor

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.
mesh-admin added 1 commit 2026-10-05 21:44:52 +00:00
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.
mesh-admin merged commit 24bada7a6f into main 2026-10-05 21:50:48 +00:00
mesh-admin deleted branch files-forget-when-held 2026-10-05 21:50:48 +00:00
Author
Contributor

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.

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

No dependencies set.

Reference: novox/mesh-host#27