|

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