From 170af163bc633c59cc88ed0569ba1c279f88d7c8 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Fri, 30 Oct 2026 01:24:16 -0600 Subject: [PATCH 1/3] docs(status): the CI day, 2026-10-30 early Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01HS8WZziDnyxunC23MUxrLp --- plan/STATUS.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/plan/STATUS.md b/plan/STATUS.md index 288e925..3b26abb 100644 --- a/plan/STATUS.md +++ b/plan/STATUS.md @@ -19,6 +19,25 @@ owner's), **P12** (max testing, after P11c), and P10's re-audit itself and red until they land. Every push is watched; a docs-only push is never made alone (it cancels the running gate). +**2026-10-30, early.** The Linux gate on `main` is green again +(`659a4266`, `cc6bb25d`) after a day of fixes the waves' merges owed: +P8's gate on the spec script's package export, P8's event +`period.attested` no longer an "unknown" example, the eval's close +step, P5's demo-books test out of the server-only build, the update +tests' races with the host's staging (and their messages: programs +compared by hash, never by bytes, which had cost GitHub a whole step +log). macOS, in its own workflow now so its log is readable at once, +went from "the server didn't say ready" to one store test: the harness +spelled Linux's data folder and joined words without quoting (a macOS +root has a space), BSD `script` and bash 3.2 differ, `/tmp` is +`/private/tmp`, and a deep root's sockets needed a short private link +under `/tmp` (a product fix, `root.rs::short_link_for`); setup now +reads the default root canonically (a product fix too). P11c's branch +compiles and runs the suite on Windows; its Linux gate is green; the +Windows job's remaining failures were tests of other units spelled for +Unix (the backup remote check, a books home's listing), fixed on +`main`. The two-user HTTP door on Windows is its last unverified piece. + **Who builds.** The owner chose (the question tool) that this planning session is the EM and launches Sonnet subagents in parallel worktrees, From ccc5d219419ddf55ed18c470ef04539a7ca6a6d0 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Fri, 30 Oct 2026 01:44:55 -0600 Subject: [PATCH 2/3] test(cli): the staged-update test no longer asserts the staged folder is gone The gate on d326894c (twice green before): after the apply, the new host's next look staged 9.0.0 again within the test's window on the runner, since the test's newer program is this binary with bytes appended and its compiled version never catches up with the feed's. The program in place and the kept previous copy are the apply. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01HS8WZziDnyxunC23MUxrLp --- crates/ledger-cli/tests/update.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/ledger-cli/tests/update.rs b/crates/ledger-cli/tests/update.rs index 8410e57..8aaafb4 100644 --- a/crates/ledger-cli/tests/update.rs +++ b/crates/ledger-cli/tests/update.rs @@ -917,7 +917,11 @@ fn the_host_stages_a_daily_update_and_the_next_start_applies_it() { wait_for(10, || sha256(&home.program()) == sha256(&next)), "the staged update wasn't applied" ); - assert!(wait_for(10, || !home.updates().join("staged").exists())); + // Whether `staged/` is gone is not asserted: the test's "newer" + // program is this binary with bytes appended, so its compiled version + // never catches up with the feed's, and the new host's next look (the + // knob makes it soon) may stage 9.0.0 again. The kept copy below and + // the program in place are what the apply means. assert!( home.updates() .join("previous") From 8f0e5f0841a3824a77fd14ea31a524b3187a5f40 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Fri, 30 Oct 2026 02:17:36 -0600 Subject: [PATCH 3/3] test(store): two setup answers compared as the system spells them (macOS) Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01HS8WZziDnyxunC23MUxrLp --- crates/ledger-store/tests/root.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/ledger-store/tests/root.rs b/crates/ledger-store/tests/root.rs index 079fb9f..6d0b58b 100644 --- a/crates/ledger-store/tests/root.rs +++ b/crates/ledger-store/tests/root.rs @@ -189,7 +189,11 @@ fn the_root_is_found_without_the_environment() { fn setup_makes_a_private_root_and_its_folders() { let home = tmp("setup"); let (root, report) = Root::setup(home.path(), None, None).unwrap(); - assert_eq!(root.path(), default_root(home.path())); + // The root as the system spells it (macOS: /tmp is /private/tmp). + assert_eq!( + root.path(), + default_root(&std::fs::canonicalize(home.path()).unwrap()) + ); assert!(report.created && !report.tightened && !report.recorded); assert_eq!(mode(root.path()), 0o700); for sub in ["books", "run", "legacy"] { @@ -225,7 +229,10 @@ fn setup_records_a_root_chosen_elsewhere_and_forgets_it_when_back_to_default() { let fresh = tmp("setup-xdg"); let xdg = fresh.path().join("xdg"); let (root, report) = Root::setup(fresh.path(), None, Some(&xdg)).unwrap(); - assert_eq!(root.path(), xdg.join("wanderbooks")); + assert_eq!( + root.path(), + std::fs::canonicalize(&xdg).unwrap().join("wanderbooks") + ); assert!(report.recorded); assert_eq!( Root::find_in(fresh.path(), None).unwrap().path(),