Changelog¶
1.0.0¶
A static Zig build of every command, one binary per architecture (x86_64, aarch64) built for
linux-muslon zig-common 0.8.0:probe,status,resolve,retire,gc,run,resumeandrollback, with and without--ledger-config, plusledger-maintenanceandbuild-eventsas subcommands. Its output matches the Python tool byte for byte except whereCOMPAT.mdlists a deliberate difference. Releases carry the binaries,SHA256SUMSand build provenance attestations.CI checks both builds against each other. A differential runs every command and compares the trees and journals it leaves. A crash matrix kills a run, a rollback and a retire at every fault step (295 cases). A fail matrix gives every step an I/O error (152 cases). The signal, ledger, metadata, access-control, build-events and real-EasyBuild suites also run against the binary.
TESTMAP.mdmaps each test that imports the Python code to what covers it for the binary, and CI fails on a missing row.Fix: a run killed right after
RENAME_EXCHANGEresumes to the published state, and a rollback killed right after its exchange rolls back once.Fix (binary): an allocation failure stops the program. It never runs
ebwith the parent environment and without the staged install paths. A restore that cannot be recorded is not ignored. A damaged build-events state file is refused instead of crashing. Error text names the errno the kernel gave.Fix (binary): a missing
eb-stackis “cannot start”, as in Python, and a stop during ledger delivery kills the ledger’s process group first.The ledger call keeps the first 64 KiB of each stream, returns when
eb-stackexits and stops any process it left behind.Documentation: https://stackhands.github.io/eb-staged-rebuild/, with the release-binary install and the Zig build’s differences.
0.4.4¶
Restore the required access control list before removing inherited virtual ACL views, retaining the selected publication policy.
Accept an unlisted NFSv4-family EINVAL probe only when the same inspection lists a readable POSIX access ACL. Listed, denied and POSIX failures remain errors.
Keep the command’s reported version consistent with the distribution metadata.
0.4.3¶
From the
fix/cluster-record-lockline, on the directory-swap model: a publication-preparation program that leaves a staged tree without build evidence blocks the swap; an empty or relative--prepareis refused before anything runs; a sealed (read-only) install takes the run marker and moves beside the live tree through a writable window on its top directory; a read-only module stage is cleared through the owned-tree cleanup on resume; the preparation context names each staged tree asgenerationtoo; a prepared access policy is published and rolled back even when the module bytes did not change. The branch’s prepare, publication-metadata, read-only, sealed-install, ledger-policy and bounded-output tests come along, written for the swap model; its generation-pointer gc and outbox suites stay on the branch.
0.4.2¶
The ledger tests and the pinned-ledger CI action build eb-stack 0.7.0 (defb6ae); the ledger CLI’s receipt, tile-log and checkpoint lines are unchanged from 0.6.2.
0.4.1¶
ledger_maintenance.anchoraccepts theindex checkpointline eb-stack 0.6.0 prints after the head’s checkpoint once the tile log has sealed a run (every 256 records), instead of refusing the receipt.
0.4.0¶
eb_staged_rebuild.build_eventsrecordsstarted,finishedandabortedledger events around one build command through a durable outbox, andeb_staged_rebuild.ledger_maintenancebackfills observed history, publishes daily signed anchors, proves the anchor chain and projects package history from a verified log (docs/howto/build-events.md,docs/howto/ledger.md).The ledger adapter and the maintenance verifier read the eb-stack 0.5.2 CLI: the receipt is the first line
ledger append,ledger headandledger verifyprint, exactly one tile-log or checkpoint line for the same size and root follows it (none for the size-0 head of an empty log), and a tile log is written beside every private ledger copy beforeledger verifyaudits it._boundedruns the ledger CLI through pipes and kills its process group on every exit, including a signal to the caller, so an interrupted delivery leaves no eb-stack process behind.
0.3.1¶
EasyBuild 5.4.1 is in the bwrap key table: its
bwrap_info.jsoncarriesbwrap_installpath_softwareandbwrap_installpath_modules(easybuild-framework-v5.4.1,easybuild/tools/bwrap.py), soprobeon a 5.4.1 whose Python the probe cannot import reports the keys as read from source instead of unknown.
0.3.0¶
Pair the local flock lock with a POSIX record lock on
.lock.posix. Cross-node coherence is still unmeasured. A 0.2.0 flock-only process does not take the sidecar.Module-file replacement keeps ownership, mode, and the listed access control list bytes. A stale privileged temporary file is refused.
Drain a build’s process group before the writer lock is released.
Refuse garbage collection when a tracked module cannot be read, and keep a hidden sibling that a module reaches through a symlink. Removal stays on the sibling’s filesystem and owned directories.
Record a directory-swap publication in an eb-stack ledger outbox. The record’s
locationis the stable install directory. The journal schema is 4 when a ledger policy is frozen, and schema 2 otherwise. Schema 1 and schema 3 generation-pointer journals are refused.This version creates no git tag.
Recorded checks use ext4.
Cross-node locking remains
open-004.Behavior on the general parallel file system remains
open-004.
0.2.0¶
Stage rebuilds with automatic bubblewrap, user/mount-namespace, and documented unsandboxed install-path fallback selection.
Publish complete trees with
renameat2(RENAME_EXCHANGE)and a restoring ordinary-rename fallback for unsupported filesystems.Keep one
flockacross build and publish; add transactional rollback and interrupted-fallback recovery.Make dry-run report sandbox and swap decisions without invoking EasyBuild.
Add exhaustive failure injection for build, journal, swap, module, link, and rollback paths.
Bump the journal schema to 2; version 1 generation-pointer runs are refused instead of being interpreted as directory-swap transactions.
Name retention and kernel constants and record their sources.
Add Org-mode how-to, reference, baseline design audit, and
open-004recommendations.