agents: Sage row 70 round 2 packet (#1564, Filbert 28598 findings)
F1: the scripts/mosaic header names mosaic-old. Both doc-only follow-ups are done too, plus the test comment wording. Same base, same 4 files. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# Row 70 round 2 (#1564): docs for `mosaic` on PATH
|
||||
|
||||
Sage, 2026-10-15. Answers Filbert's round 1 verdict, comment 28598 (rev
|
||||
1326). Same brief, still pinned at blob d56345b76ffd (rev 1314).
|
||||
|
||||
- Base: 48b893871 (`base.txt`), as in round 1. No commit since then
|
||||
touches a manifest path (`git log 48b893871..HEAD -- <4 paths>` is empty
|
||||
at 26f4f9701). The landing gate runs on HEAD.
|
||||
- Candidate: `build.patch` (whole change from base), `candidate-manifest.sha256`,
|
||||
the same 4 files as round 1. Manifest file sha256
|
||||
`098b9aefe830c53173f0b673705e2fddfa5b49a9ba23903a045bf72d8875604e`.
|
||||
- `delta.patch`: round 1 tree to round 2 tree, file by file.
|
||||
|
||||
## What changed since round 1
|
||||
|
||||
| Finding | Change |
|
||||
|---------|--------|
|
||||
| F1 (blocking): the `scripts/mosaic` header doesn't name `mosaic-old` | One comment sentence added: "On Jason's host the estate CLI it replaced is `mosaic-old`." No code line moved or changed. |
|
||||
| Doc-only 1: TOOLS.md names neither `mosaic-old` nor the CLI README link | The seat-launch paragraph now names `mosaic-old` and links `../packages/cli/README.md#one-pinned-copy-row-85-1579`, the anchor TOOLS.md already uses at line 357. The exit-code sentences after it are only rewrapped. |
|
||||
| Doc-only 2: the seat README omits TOOLS.md "Stack copies" | The wrapper sentence now links `../../docs/TOOLS.md#stack-copies-scriptsstack-copysh`. |
|
||||
| Non-blocking: the test comment says "Comment lines" | Now "Lines that start with "# " are left out", and it says the shebang and any other line stay in. |
|
||||
|
||||
The two follow-ups were cheap and in files this row owns, so I did them
|
||||
in this round rather than leaving them open.
|
||||
|
||||
## Checks
|
||||
|
||||
- `bash -n scripts/mosaic` passes. `git diff --check` is clean. No added
|
||||
line has an em dash or curly quote. Two added lines exceed 80 columns;
|
||||
both are a single Markdown link that can't wrap.
|
||||
- Both new link targets exist: `docs/TOOLS.md:279` "## Stack copies
|
||||
(`scripts/stack-copy.sh`)" and `packages/cli/README.md:466` "### One
|
||||
pinned copy (row 85, #1579)".
|
||||
- `node --test packages/queue/tests/dispatch.test.mjs` in the round 2
|
||||
tree: pass 4, fail 0.
|
||||
- Mutants on round 2's `scripts/mosaic`, each run against the pre-A2
|
||||
test: `set -euo pipefail` commented out as `# set -euo pipefail`,
|
||||
`REPO=` dropped, shebang dropped. Each fails it (fail 1). Control:
|
||||
dropping header line 12 passes (fail 0), which is the narrowing working
|
||||
as intended. The file was restored and `cmp` matched.
|
||||
- No full gate for this round. Round 1's second gate passed all 24 suites
|
||||
on 48b893871 (`../gate-run.log`). Round 2 changes comments and Markdown
|
||||
only, and the dispatch test that reads them passes. The landing gate
|
||||
reruns everything on HEAD before the commit.
|
||||
@@ -0,0 +1 @@
|
||||
48b8938719d9809bcca8e7948b899687be2719c3
|
||||
@@ -0,0 +1,91 @@
|
||||
diff --git a/docs/TOOLS.md b/docs/TOOLS.md
|
||||
index bba405c3f..baa06fad3 100644
|
||||
--- a/docs/TOOLS.md
|
||||
+++ b/docs/TOOLS.md
|
||||
@@ -171,10 +171,17 @@ leaves one registration record at `<dataRoot>/seats/<layout>/<seat>/registration
|
||||
that the control board reads: seat, project, task, workspace, tmux session,
|
||||
harness, start time, pid. Rewritten on every launch. `seat task` changes the
|
||||
task field only. The four repository seats (`agents/*/launch.sh`) register
|
||||
-themselves through this path unless called with `--check`. Not the
|
||||
-npm-global `mosaic` CLI; run by path. Exit codes: the launch script's own
|
||||
-once it runs; before that 1 could not start, 2 invalid config or seat, 4
|
||||
-usage. Details and the record's fields: `packages/seat/README.md`.
|
||||
+themselves through this path unless called with `--check`. Run it by
|
||||
+path from the checkout. On a pinned host, `mosaic` on PATH is a wrapper
|
||||
+around a pinned copy's `scripts/mosaic`
|
||||
+([Stack copies](#stack-copies-scriptsstack-copysh)) and carries the human
|
||||
+commands; on Jason's host the estate CLI it replaced is `mosaic-old`.
|
||||
+Queue commands stay on `scripts/mosaic queue` in the canonical checkout,
|
||||
+because a copy refuses them ([One pinned
|
||||
+copy](../packages/cli/README.md#one-pinned-copy-row-85-1579)). Exit
|
||||
+codes: the launch script's own once it runs; before that 1 could not
|
||||
+start, 2 invalid config or seat, 4 usage. Details and the record's
|
||||
+fields: `packages/seat/README.md`.
|
||||
|
||||
## Work queue (`scripts/mosaic queue`)
|
||||
|
||||
diff --git a/packages/queue/tests/dispatch.test.mjs b/packages/queue/tests/dispatch.test.mjs
|
||||
index 2280cdb2e..bade63126 100644
|
||||
--- a/packages/queue/tests/dispatch.test.mjs
|
||||
+++ b/packages/queue/tests/dispatch.test.mjs
|
||||
@@ -102,10 +102,13 @@ test("`queue` reaches the queue CLI with the rest of the arguments", (t) => {
|
||||
test("the pre-A2 fixture is the script A2 changed", () => {
|
||||
const fixture = readFileSync(join(HERE, "fixtures", "mosaic-pre-a2.sh"), "utf8");
|
||||
const now = readFileSync(join(SCRIPTS, "mosaic"), "utf8");
|
||||
- // A2 adds lines and removes none.
|
||||
- const lines = now.split("\n");
|
||||
+ // A2 adds lines and removes none. Lines that start with "# " are left out:
|
||||
+ // later rows rewrite the header (row 70), and the pin is on what the script
|
||||
+ // runs. The shebang and any other line stay in.
|
||||
+ const code = (s) => s.split("\n").filter((l) => !l.startsWith("# "));
|
||||
+ const lines = code(now);
|
||||
let i = 0;
|
||||
- for (const l of fixture.split("\n")) {
|
||||
+ for (const l of code(fixture)) {
|
||||
while (i < lines.length && lines[i] !== l) i++;
|
||||
assert.ok(i < lines.length, `pre-A2 line missing: ${l}`);
|
||||
i++;
|
||||
diff --git a/packages/seat/README.md b/packages/seat/README.md
|
||||
index 7796d8887..a94ff8ac4 100644
|
||||
--- a/packages/seat/README.md
|
||||
+++ b/packages/seat/README.md
|
||||
@@ -10,9 +10,15 @@ Issue #1504. Plain ESM, no dependencies, Node 24 or newer.
|
||||
|
||||
## Commands
|
||||
|
||||
-The repository wrapper is `scripts/mosaic`. It is not on PATH and is not
|
||||
-the npm-global `mosaic` CLI from the estate tooling, which has no `launch`
|
||||
-or `seat` command; run it by path.
|
||||
+The repository wrapper is `scripts/mosaic`; run it by path from the
|
||||
+checkout. A host may also put `mosaic` on PATH as a wrapper around a
|
||||
+pinned copy's `scripts/mosaic` (`scripts/stack-copy.sh wrapper`, see
|
||||
+[docs/TOOLS.md, Stack copies](../../docs/TOOLS.md#stack-copies-scriptsstack-copysh)). On
|
||||
+Jason's host the estate CLI it replaced is `mosaic-old`, which has no
|
||||
+`launch` or `seat` command. On a pinned host the human commands go
|
||||
+through `mosaic` on PATH, and queue commands stay on `scripts/mosaic
|
||||
+queue` in the canonical checkout, because a copy refuses them. Details:
|
||||
+[packages/cli/README.md, One pinned copy](../cli/README.md#one-pinned-copy-row-85-1579).
|
||||
|
||||
```
|
||||
scripts/mosaic launch <seat|seat-dir> [--task TEXT] [--project NAME] [--workspace PATH]
|
||||
diff --git a/scripts/mosaic b/scripts/mosaic
|
||||
index 010e1a7e6..d4e35b35a 100755
|
||||
--- a/scripts/mosaic
|
||||
+++ b/scripts/mosaic
|
||||
@@ -7,8 +7,14 @@
|
||||
# `mosaic inbox|decide|tasks|agents|trail|talk|stop|launches` and
|
||||
# `mosaic bus start|stop|status`: the human commands, managed sessions and
|
||||
# the bus host. See packages/cli/README.md.
|
||||
-# Not the npm-global `mosaic` CLI from the estate tooling; this one is
|
||||
-# repository-local and only reachable as scripts/mosaic.
|
||||
+# This is the repository wrapper; run it by path from the checkout. A host
|
||||
+# may also put `mosaic` on PATH as a wrapper that runs a pinned copy's
|
||||
+# scripts/mosaic (scripts/stack-copy.sh wrapper, docs/TOOLS.md "Stack
|
||||
+# copies"). On Jason's host the estate CLI it replaced is `mosaic-old`.
|
||||
+# On a pinned host the human commands and --tester go through
|
||||
+# that `mosaic`, and from a checkout they exit 3. Queue commands stay on
|
||||
+# scripts/mosaic queue in the canonical checkout, because a copy refuses
|
||||
+# them. See packages/cli/README.md "One pinned copy".
|
||||
set -euo pipefail
|
||||
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
# No argument: the full-screen app on a terminal (packages/cli/README.md).
|
||||
@@ -0,0 +1,4 @@
|
||||
9b25469cbdf9718ec83705ea7e9d43d69b79bb14fab81468cc6815953bd41ee2 docs/TOOLS.md
|
||||
b3dd511b0ded5372c21dd02e023145aca5a45663eb18760b120585cd5789b6e9 packages/queue/tests/dispatch.test.mjs
|
||||
549b48cda62ef401fcfd00ef575271f294e362d84d167054d71657729c1e80ed packages/seat/README.md
|
||||
3d371a855ea4ab755aed2eeeb2d94409420d19b127cd5fb6f70e3ca00c1ed90a scripts/mosaic
|
||||
@@ -0,0 +1,58 @@
|
||||
--- r1/docs/TOOLS.md
|
||||
+++ r2/docs/TOOLS.md
|
||||
@@ -175,10 +175,13 @@
|
||||
path from the checkout. On a pinned host, `mosaic` on PATH is a wrapper
|
||||
around a pinned copy's `scripts/mosaic`
|
||||
([Stack copies](#stack-copies-scriptsstack-copysh)) and carries the human
|
||||
-commands. Queue commands stay on `scripts/mosaic queue` in the canonical
|
||||
-checkout, because a copy refuses them. Exit codes: the launch script's own
|
||||
-once it runs; before that 1 could not start, 2 invalid config or seat, 4
|
||||
-usage. Details and the record's fields: `packages/seat/README.md`.
|
||||
+commands; on Jason's host the estate CLI it replaced is `mosaic-old`.
|
||||
+Queue commands stay on `scripts/mosaic queue` in the canonical checkout,
|
||||
+because a copy refuses them ([One pinned
|
||||
+copy](../packages/cli/README.md#one-pinned-copy-row-85-1579)). Exit
|
||||
+codes: the launch script's own once it runs; before that 1 could not
|
||||
+start, 2 invalid config or seat, 4 usage. Details and the record's
|
||||
+fields: `packages/seat/README.md`.
|
||||
|
||||
## Work queue (`scripts/mosaic queue`)
|
||||
|
||||
--- r1/packages/queue/tests/dispatch.test.mjs
|
||||
+++ r2/packages/queue/tests/dispatch.test.mjs
|
||||
@@ -102,8 +102,9 @@
|
||||
test("the pre-A2 fixture is the script A2 changed", () => {
|
||||
const fixture = readFileSync(join(HERE, "fixtures", "mosaic-pre-a2.sh"), "utf8");
|
||||
const now = readFileSync(join(SCRIPTS, "mosaic"), "utf8");
|
||||
- // A2 adds lines and removes none. Comment lines are left out: later rows
|
||||
- // rewrite the header (row 70), and the pin is on what the script runs.
|
||||
+ // A2 adds lines and removes none. Lines that start with "# " are left out:
|
||||
+ // later rows rewrite the header (row 70), and the pin is on what the script
|
||||
+ // runs. The shebang and any other line stay in.
|
||||
const code = (s) => s.split("\n").filter((l) => !l.startsWith("# "));
|
||||
const lines = code(now);
|
||||
let i = 0;
|
||||
--- r1/packages/seat/README.md
|
||||
+++ r2/packages/seat/README.md
|
||||
@@ -12,7 +12,8 @@
|
||||
|
||||
The repository wrapper is `scripts/mosaic`; run it by path from the
|
||||
checkout. A host may also put `mosaic` on PATH as a wrapper around a
|
||||
-pinned copy's `scripts/mosaic` (`scripts/stack-copy.sh wrapper`). On
|
||||
+pinned copy's `scripts/mosaic` (`scripts/stack-copy.sh wrapper`, see
|
||||
+[docs/TOOLS.md, Stack copies](../../docs/TOOLS.md#stack-copies-scriptsstack-copysh)). On
|
||||
Jason's host the estate CLI it replaced is `mosaic-old`, which has no
|
||||
`launch` or `seat` command. On a pinned host the human commands go
|
||||
through `mosaic` on PATH, and queue commands stay on `scripts/mosaic
|
||||
--- r1/scripts/mosaic
|
||||
+++ r2/scripts/mosaic
|
||||
@@ -10,7 +10,8 @@
|
||||
# This is the repository wrapper; run it by path from the checkout. A host
|
||||
# may also put `mosaic` on PATH as a wrapper that runs a pinned copy's
|
||||
# scripts/mosaic (scripts/stack-copy.sh wrapper, docs/TOOLS.md "Stack
|
||||
-# copies"). On a pinned host the human commands and --tester go through
|
||||
+# copies"). On Jason's host the estate CLI it replaced is `mosaic-old`.
|
||||
+# On a pinned host the human commands and --tester go through
|
||||
# that `mosaic`, and from a checkout they exit 3. Queue commands stay on
|
||||
# scripts/mosaic queue in the canonical checkout, because a copy refuses
|
||||
# them. See packages/cli/README.md "One pinned copy".
|
||||
@@ -0,0 +1,5 @@
|
||||
04d4b739c857b63a5148e5dc223ea16d357953e471aa57968979a6ccbcd86638 ./base.txt
|
||||
741dc3475c17cbd70fddec0b15ab360abdf866ca62560f22520165e84917590d ./BUILD.md
|
||||
d120f96aa398d36aff1d73150e83676afb594fee97144606ef1590fd27372386 ./build.patch
|
||||
098b9aefe830c53173f0b673705e2fddfa5b49a9ba23903a045bf72d8875604e ./candidate-manifest.sha256
|
||||
8803315db65bd78812f6fb380d3fc0147d3c6303c528d8dfe05d088146bdfb3b ./delta.patch
|
||||
Reference in New Issue
Block a user