Candidate 1126314bd522de838aad03689bed41f6b12a33c2d7f30b2eff1b38653f559ae0, 4 files on48b893871. The first gate stopped at script-queue: the pre-A2 fixture check pinned the old header comment. The check now skips comment lines (brief amended in06e964026). Second gate: 24 suites, 0 failed. Co-Authored-By: Claude Opus 5.5 <[email protected]>
4.7 KiB
Row 70 round 1 (#1564): docs for mosaic on PATH
Sage, 2026-10-15. Three doc files and one test. Reviewer: Filbert.
- Brief:
docs/plans/2026-10-11_mosaic-on-path-docs.md, pinned at blobd56345b76f(rev 1314; first pinned atf04bcaddb5, rev 1306). I updated it in4c1b11d93before building, because rows 85 (#1579) and 130 (#1625) changed the facts after it was written on 10-11. The update paragraph sits under "Problem"; "What ships" now names the stack-copy wrapper and the human/queue split. After the first gate I amended it again in06e964026: the acceptance list now allows this row to narrow the pre-A2 fixture check, and no other test or source change. - Base:
48b893871(base.txt), which has rows 49 and 123 in it. The patch is the same diff I first built on 4c1b11d93; it applies cleanly on48b893871and no commit between them touches a manifest path. - Candidate:
build.patch,candidate-manifest.sha256(4 files), manifest file sha2561126314bd522de838aad03689bed41f6b12a33c2d7f30b2eff1b38653f559ae0. The first build (3 files,c8649f2e…) failed the gate; see "Test change".
What changed
| File | Change |
|---|---|
scripts/mosaic |
header comment lines 10-11 replaced by seven comment lines; no code line moved or changed |
docs/TOOLS.md |
seat-launch paragraph: "Not the npm-global mosaic CLI; run by path." replaced; links "Stack copies" in the same file |
packages/seat/README.md |
"Commands" first paragraph replaced; links packages/cli/README.md "One pinned copy" |
packages/queue/tests/dispatch.test.mjs |
the pre-A2 fixture check skips comment lines; see "Test change" |
Each place now says:
scripts/mosaicis the repository wrapper, run by path from the checkout.- A host may put
mosaicon PATH as a wrapper around a pinned copy'sscripts/mosaic(scripts/stack-copy.sh wrapper). The seat README also namesmosaic-oldas the estate CLI it replaced on Jason's host. - On a pinned host the human commands go through
mosaicon PATH. The header also says--tester, and that the checkout exits 3 for them. - Queue commands stay on
scripts/mosaic queuein the canonical checkout, because a copy refuses them.
Evidence for the claims
- Point 4: from the canonical checkout, a read-only
bash ~/.local/share/mosaic-stack/copies/2f57e3c5…/scripts/mosaic queue show 70printedqueue: this queue code (…/copies/2f57e3c5…/packages/queue/src/store.mjs) is not under the canonical root /mnt/storage/src/mosaic-stackand exited 2. The refusal ispackages/queue/src/store.mjs:85. - Point 3: packages/cli/README.md "One pinned copy" (row 130 text) and docs/TOOLS.md "Pinned stack update", which this row links rather than restates.
- Point 2: docs/TOOLS.md "Stack copies" and
scripts/stack-copy.shlines 67-71, which keep the lease line tomosaic-oldand exec the copy'sscripts/mosaic. - The two anchors resolve:
#stack-copies-scriptsstack-copyshis the slug of TOOLS.md "## Stack copies (scripts/stack-copy.sh)", and#one-pinned-copy-row-85-1579is the anchor TOOLS.md already uses for the CLI README section.
Checks
bash -n scripts/mosaicpasses.git diff --checkis clean. The added lines have no em dash, curly quote or control character.- Gate, second run on
48b893871:gate-run.logandgate/. 24 suites, 0 failed. 14 package suites passed 1611 tests (cli 195, seat 132, bus 191). The 10 script suites passed, queue 156/0 with the test change. No flake of #258, #261, #262 or #263 in either run.
Test change
My first build claimed here that dispatch.test.mjs compares behaviour,
not header text. That was wrong. Its test "the pre-A2 fixture is the
script A2 changed" checks that every line of
packages/queue/tests/fixtures/mosaic-pre-a2.sh still appears, in order,
in scripts/mosaic. The fixture carries the two old header lines
("Not the npm-global mosaic CLI ... only reachable as scripts/mosaic"),
so the first gate stopped at script-queue with 155/1 (log kept as
gate-r1-run.log).
Keeping those lines isn't an option: "only reachable as scripts/mosaic" is
false on a pinned host, which is the point of this row. Editing the
fixture would make it no longer the pre-A2 script. So the check now
compares lines that don't start with # . The shebang (#!) stays in.
The pin protects what the script runs, and a header rewrite can't
change that.
Evidence, single file in the candidate tree: dispatch.test.mjs 4/0.
Three mutants on scripts/mosaic, each run against the pre-A2 test,
each fails it (fail 1): drop set -euo pipefail, drop the REPO= line,
drop the shebang.
Out of scope
The Q81 script, packaging for other hosts, and the queue's canonical-root refusal, as the brief says.