docs: release notes for 0.2.7 (bug 004 fix)
Author:
Chris Tusa <chris.tusa@leafscale.com>
Date:
Jul 21, 2026 14:52
Changeset:
52776291f356d1577d37a00569affe0887c715eb
Branch:
default
Changed files:
Diff
diff -r 2c9056d3e170 -r 52776291f356 docs/RELEASE_NOTES.md --- a/docs/RELEASE_NOTES.md Tue Jul 21 14:38:45 2026 -0500 +++ b/docs/RELEASE_NOTES.md Tue Jul 21 14:52:10 2026 -0500 @@ -1,5 +1,29 @@ # zyginit Release Notes +## 0.2.7 — 2026-07-21 + +**Bug-fix release.** Fixes bug 004 — running the `zyginit` binary as a +non-PID-1 process (classically `zyginit -v` to check the version) fell through +into supervisor mode and **clobbered the live PID-1 control socket**, silently +breaking `zygctl` control of the running system until reboot. Three defenses: + +- **Version flags exit safely.** `-v`, `-V`, and `--version` print the version + and exit — but only when not running as PID 1. The Hammerhead kernel passes + `-v` (verbose) as a boot-arg to init, so that path must never short-circuit, + or PID 1 would return from `main()` and be re-exec'd in a loop. +- **The control socket is guarded.** `create_socket` now `connect()`-probes the + path and refuses to unlink/rebind a socket a live server is already listening + on; a non-PID-1 instance that cannot own the socket exits cleanly. PID 1 + keeps running without a control socket rather than halting. +- **Non-PID-1 supervisor mode is opt-in.** A non-PID-1 run now requires + `--supervisor-test`; a bare `zyginit ...` on a host where zyginit already + owns PID 1 refuses and exits before any setup. The integration harnesses and + the CLAUDE.md dev-run invocation pass the flag. + +Builds clean and passes the full integration suite (104/104) on **Reef 0.7.7**; +no source changes were required for the 0.7.7 toolchain (its newly-rejected +program shapes are all Active-Object-related, which zyginit does not use). + ## 0.2.6 — 2026-07-21 **Bug-fix release.** Fixes bug 003 — spurious `exit=-1` service failures in