|
root / docs / RELEASE_NOTES.md
RELEASE_NOTES.md markdown 124 lines 4.2 KB

zyginit Release Notes

0.2.1 — 2026-05-15

Patch release with two operational improvements:

  • type = "transient" in 0.1.x-style TOMLs no longer silently demotes
    to daemon. The parser now treats it as task (the renamed type) and
    emits a deprecation warning. This prevents a service that should run
    as a task from hanging in STATE_STARTING after an incomplete upgrade.
  • Missing /etc/zyginit/services/ directory at boot now produces a
    distinct, actionable log message instead of silently entering the
    idle loop. The operator is told to run the migration tool from a
    recovery medium.

0.2.0 — 2026-05-15

Breaking change. The filesystem layout under /etc/zyginit/ is
restructured. Operators upgrading from 0.1.x MUST run the migration
tool before installing 0.2.0 binaries:

/path/to/scripts/migrate-layout.sh --dry-run    # preview
/path/to/scripts/migrate-layout.sh --apply      # apply

The tool is idempotent (safe to re-run) and refuses to proceed if
both old and new layouts coexist for the same service.

New: per-service directory layout

Each service is self-contained:

/etc/zyginit/services/<name>/
├── service.toml
├── start.sh          (optional)
└── stop.sh           (optional)

enabled.d/<name> symlinks target ../services/<name>/ (the
directory), not ../<name>.toml (the file).

New: type = "task" service type

For services that may run for a while but are expected to eventually
exit cleanly — platform probes, one-time setup work, etc. Replaces
the previously-unused type = "transient".

[service]
name = "acpihpd"
type = "task"

Semantics:

  • Exit 0 → STATE_STOPPED (counts as online in the boot banner)
  • Exit ≠ 0 → STATE_FAILED (counts as failed)
  • Never restarts
  • Skips the daemonize handshake (tasks don't double-fork)

New: [condition] block

Declarative pre-flight gating. Services whose conditions fail at
startup go into a new SKIPPED state — they don't fork, don't fail,
don't loop. Supported keys:

[condition]
exists_file     = "/dev/acpihp"
exists_file_any = ["/dev/acpihp", "/dev/acpi"]
command         = "/usr/sbin/acpi_probe"     # 5-second timeout

All specified keys must pass (AND). Absent keys are no-ops. The
command form is bounded by a 5-second timeout.

New: SKIPPED state in zygctl status

Skipped services render with the · (dim) glyph and the skip reason
in the NOTES column. The boot banner and final card include a
"skipped" counter alongside online/failed.

Hammerhead vendoring

The Hammerhead team runs the migration tool against their override
tree in base/usr/src/zyginit/overrides/ as part of consuming this
source drop. Follow the same dry-run → apply pattern.

Other changes

  • Renamed SERVICE_TYPE_TRANSIENTSERVICE_TYPE_TASK in the API.
  • type = "transient" in TOML produces a deprecation warning and is treated as type = "task" (see 0.2.1).

0.1.8 — 2026-05-14

Late-failure race fix. A 1-second settle period after the last tier
catches daemons that fork successfully but die immediately (e.g.,
acpihpd on Hammerhead without ACPI hardware).

0.1.7 — 2026-05-14

Boot screen no longer scrolls the [Z] banner off the top of the
framebuffer. Drop the trailing newline that was advancing the cursor
past the last row.

0.1.6 — 2026-05-14

illumos build fix: <sys/termios.h> now explicitly included for
struct winsize and TIOCGWINSZ. Linux's <sys/ioctl.h> pulls
those in transitively; illumos doesn't.

0.1.5 — 2026-05-14

(Broken on illumos: missing <sys/termios.h> for TIOCGWINSZ — use
0.1.6+.) Spinner-in-tape redesign (option B): each tape row tracks
its own active flag, lifecycle procs update rows in place,
parallel-startup ready. TIOCGWINSZ for dynamic screen size. Oneshot
single-count fix. Dynamic SERVICE column in zygctl status.

0.1.4 — 2026-05-14

Framebuffer-first mode detection (PID 1 + isatty + no TERM defaults
to truecolor). Sets TERM=sun-color in zyginit env so children
inherit it. Plain-mode emit no longer mislabels event types.

0.1.3 — 2026-05-12

Initial visual pass: [Z] sigil, palette, rolling tape, progress
bar, spinner, final cards, mirrored shutdown UI, zygctl status
banner+table.