The mesh delivers the launcher, which is the last link in self-update #56

Merged
jschoubben merged 1 commits from feat/142-the-mesh-delivers-the-launcher into main 2026-09-30 10:19:08 +00:00
Owner

novox/hq ADR 0141 and issue 142. A version was being delivered to a machine and nothing started it: the launcher on these machines predates the versions mechanism and runs the fixed binary path, so the delivery was correct and inert.

Delivered as a file resource, not inside an archive, and that difference is why this is safe. A file is written atomically — temp file in the same directory, then rename — so the running launcher keeps the inode it was started from and the next start picks up the new one. An archive writes in place with O_TRUNC, which would cut the file a running shell is reading halfway through.

The manifest therefore carries a second copy of the script, and a test refuses any difference between it and packaging/nox-mesh-host-launch. Proven by drifting one and watching it fail. Two copies of a script is a bad thing to accept; the alternative was writing over a running supervisor.

Together the two resources close the loop: the version lands, the running host stands aside because it sees one delivered, and the launcher that starts next is the one that looks in versions/ and picks the newest by arrival.

make check clean.

novox/hq ADR 0141 and issue 142. A version was being delivered to a machine and nothing started it: the launcher on these machines predates the versions mechanism and runs the fixed binary path, so the delivery was correct and inert. **Delivered as a file resource, not inside an archive, and that difference is why this is safe.** A file is written atomically — temp file in the same directory, then rename — so the running launcher keeps the inode it was started from and the next start picks up the new one. An archive writes in place with `O_TRUNC`, which would cut the file a running shell is reading halfway through. The manifest therefore carries a second copy of the script, and a test refuses any difference between it and `packaging/nox-mesh-host-launch`. Proven by drifting one and watching it fail. Two copies of a script is a bad thing to accept; the alternative was writing over a running supervisor. Together the two resources close the loop: the version lands, the running host stands aside because it sees one delivered, and the launcher that starts next is the one that looks in `versions/` and picks the newest by arrival. `make check` clean.
jschoubben added 1 commit 2026-09-30 10:19:01 +00:00
novox/hq ADR 0141 and 04-ISSUES/142. A version was being delivered to a
machine and nothing started it: the launcher on these machines predates
the versions mechanism and runs the fixed binary path, so the delivery was
correct and inert.

Delivered as a FILE resource, not as part of an archive, and the
difference is the whole reason this is safe. A file is written atomically —
temp file in the same directory, then rename — so the running launcher
keeps the inode it was started from and the next start picks up the new
one. An archive writes in place with truncate, which would cut the file a
running shell is reading halfway through.

The manifest therefore carries a second copy of the script, and a test
refuses any difference between it and packaging/nox-mesh-host-launch.
Proven by drifting one and watching it fail. Two copies of a script is a
bad thing to accept, and the alternative was writing over a running
supervisor.

Together the two resources complete the loop: the version lands, the
running host stands aside because it sees one delivered, and the launcher
that starts next is the one that looks in versions/ and picks the newest
by arrival.
jschoubben merged commit e6d48cf537 into main 2026-09-30 10:19:08 +00:00
jschoubben deleted branch feat/142-the-mesh-delivers-the-launcher 2026-09-30 10:19:08 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-host#56