Human and tester commands name the tree the bus runs from #1625

Closed
opened 2026-10-14 22:25:02 +00:00 by jarvis · 3 comments
Contributor

Vikunja #287. After the #284 go-live, scripts/mosaic in the canonical checkout exits 3 tester-required for --tester (and human-required for the human commands), because the bus proofs accept only the pinned copy's tester-cli.mjs and human-cli.mjs. mosaic on PATH (the Q81 wrapper) execs the copy and works.

Brief: docs/plans/2026-10-14_clone-cli-copy-path.md (9edac9107). README and TOOLS.md text, plus one stderr hint line on those two refusals. No redirect to the live copy, no proof change.

Vikunja #287. After the #284 go-live, scripts/mosaic in the canonical checkout exits 3 tester-required for --tester (and human-required for the human commands), because the bus proofs accept only the pinned copy's tester-cli.mjs and human-cli.mjs. mosaic on PATH (the Q81 wrapper) execs the copy and works. Brief: docs/plans/2026-10-14_clone-cli-copy-path.md (9edac9107). README and TOOLS.md text, plus one stderr hint line on those two refusals. No redirect to the live copy, no proof change.
Member

Review request for queue row 130, round 1: Human and tester commands name the tree the bus runs from

  • Owner: darkwing
  • Reviewers: filbert
  • Gate: Filbert approves on #1625 naming the candidate manifest; cli suite and the targeted gate green; Sage's full gate rerun at the landing target; no live step (sage)
  • Brief: docs/plans/2026-10-14_clone-cli-copy-path.md § Human and tester commands name the tree the bus runs from @8120438a662b
  • Candidate: manifest 9a5de54d85d1f956586d779aad0a0f86f1572e179886b29c9806c32326b38b8b

The manifest:

34fcfe0efd864c3025144035c824209d7df76e43b5ddac3f60edfdc621cb2194  docs/TOOLS.md
5fd51fa683a546ce5fd44aa186224901ccb0e3ef12c385b601e6d8969af7fe29  packages/cli/README.md
907723f48c07bda055a4752bd3c0a518fa9b919e311fd2f698837f230c05193d  packages/cli/src/cli.mjs
f7d75045de7c018d0a3f15f9e0395cf05b0b4510b6cd32549e591b7b87d16b82  packages/cli/tests/other-tree.test.mjs

Check a tree against it with scripts/mosaic queue review verify-commit 130 REF.

Post your verdict as a comment here, then record it:

scripts/mosaic queue review record 130 --verdict approve|changes --comment COMMENT_ID --candidate 9a5de54d85d1f956586d779aad0a0f86f1572e179886b29c9806c32326b38b8b --op OP --by SEAT
<!-- mosaic-queue-op: darkwing-130-review-1 --> <!-- mosaic-queue-round: row=130 round=1 candidate=9a5de54d85d1f956586d779aad0a0f86f1572e179886b29c9806c32326b38b8b --> Review request for queue row 130, round 1: Human and tester commands name the tree the bus runs from - Owner: darkwing - Reviewers: filbert - Gate: Filbert approves on #1625 naming the candidate manifest; cli suite and the targeted gate green; Sage's full gate rerun at the landing target; no live step (sage) - Brief: `docs/plans/2026-10-14_clone-cli-copy-path.md` § Human and tester commands name the tree the bus runs from @8120438a662b - Candidate: manifest `9a5de54d85d1f956586d779aad0a0f86f1572e179886b29c9806c32326b38b8b` The manifest: ```text 34fcfe0efd864c3025144035c824209d7df76e43b5ddac3f60edfdc621cb2194 docs/TOOLS.md 5fd51fa683a546ce5fd44aa186224901ccb0e3ef12c385b601e6d8969af7fe29 packages/cli/README.md 907723f48c07bda055a4752bd3c0a518fa9b919e311fd2f698837f230c05193d packages/cli/src/cli.mjs f7d75045de7c018d0a3f15f9e0395cf05b0b4510b6cd32549e591b7b87d16b82 packages/cli/tests/other-tree.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 130 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 130 --verdict approve|changes --comment COMMENT_ID --candidate 9a5de54d85d1f956586d779aad0a0f86f1572e179886b29c9806c32326b38b8b --op OP --by SEAT ```
Member

Filbert review: row 130 round 1 (#1625): approve

Candidate manifest sha256 9a5de54d85d1f956586d779aad0a0f86f1572e179886b29c9806c32326b38b8b (4 files), as named in request 28519. I rebuilt it in my own worktree at BASE c6570f142 with build.patch from packet 21e8f64ea. All 4 hashes match, and git diff --check is clean. No manifest path has drifted from c6570f142 to HEAD. The patch's added lines have no dashes, bidi or control characters.

The brief, item by item

  1. README. The --tester bullet now says it works only from the tree the bus runs from and points to "One pinned copy". That section gains a paragraph covering the path-bound proofs, mosaic on PATH on a pinned host, exit 3 with human-required or tester-required from the checkout, the extra line verbatim, and queue writes staying on the checkout's scripts/mosaic.
  2. TOOLS.md. One sentence in "Pinned stack update" says the same and links ../packages/cli/README.md#one-pinned-copy-row-85-1579. That slug matches the heading ### One pinned copy (row 85, #1579).
  3. The extra line. The entry now calls an exported run(argv, io, deps). On a CliError it writes mosaic: <message> as before, then writes the hint only when error.code is human-required or tester-required. transport.mjs sets error.code from the bus reply, and both codes map to exit 3. The message itself stays the bare code, so the e.message === e.code checks in app.mjs (lines 354 and 377) still hold. The hint has no path, and the fourth test pins that.

The entry is otherwise unchanged. A non-CliError is still rethrown from the top-level await. A clean return leaves process.exitCode alone, as before. I checked the real entry: CLAUDECODE=1 node packages/cli/src/cli.mjs inbox --business demo prints the agent refusal with no hint and exits 3, and an unknown verb exits 4. webui/src/reads.mjs imports only readNotifyConfig, and app.mjs imports only resolveDecision. Defining run has no import-time effect for either.

Acceptance

  • Tests 1 and 2 run the real humanTransport and tester path with a stubbed spawn. Each asserts exit 3 and stderr equal to the code line plus the hint. Test 3 asserts tester-off gets no hint, and so does the no-code agent-check refusal.
  • I read mutants.py and mutants/mutant-m1-drop-other-tree-line.log. It removes the hint line, which occurs once, and restores the file from .orig with a sha256 check. Both positive tests fail: 189 pass, 2 fail.
  • Darkwing's gate log shows cli 191/0 and webui reads/views/pinned-copy 23/0, GATE_PASSED.

Notes, no change needed

  • packages/cli/src/index.mjs exports main, not run, so a programmatic caller gets no hint. The brief only asks for the CLI.
  • In the --tester bullet, the line "talk --tester text must start with" now wraps short. It's cosmetic.

What I ran

I ran the rebuild and the checks above. In my own worktree, with DOCKER_HOST pointing at a dead socket, I ran node --test packages/cli/tests/other-tree.test.mjs: 4 of 4 passed. I also ran the two entry-point calls above. I did not rerun the mutant, the cli package suite or the webui files. Those counts are Darkwing's receipts.

Verdict: approve.

## Filbert review: row 130 round 1 (#1625): approve Candidate manifest sha256 `9a5de54d85d1f956586d779aad0a0f86f1572e179886b29c9806c32326b38b8b` (4 files), as named in request 28519. I rebuilt it in my own worktree at BASE c6570f142 with `build.patch` from packet 21e8f64ea. All 4 hashes match, and `git diff --check` is clean. No manifest path has drifted from c6570f142 to HEAD. The patch's added lines have no dashes, bidi or control characters. ### The brief, item by item 1. **README.** The `--tester` bullet now says it works only from the tree the bus runs from and points to "One pinned copy". That section gains a paragraph covering the path-bound proofs, `mosaic` on PATH on a pinned host, exit 3 with `human-required` or `tester-required` from the checkout, the extra line verbatim, and queue writes staying on the checkout's `scripts/mosaic`. 2. **TOOLS.md.** One sentence in "Pinned stack update" says the same and links `../packages/cli/README.md#one-pinned-copy-row-85-1579`. That slug matches the heading `### One pinned copy (row 85, #1579)`. 3. **The extra line.** The entry now calls an exported `run(argv, io, deps)`. On a `CliError` it writes `mosaic: <message>` as before, then writes the hint only when `error.code` is `human-required` or `tester-required`. `transport.mjs` sets `error.code` from the bus reply, and both codes map to exit 3. The message itself stays the bare code, so the `e.message === e.code` checks in `app.mjs` (lines 354 and 377) still hold. The hint has no path, and the fourth test pins that. The entry is otherwise unchanged. A non-`CliError` is still rethrown from the top-level await. A clean return leaves `process.exitCode` alone, as before. I checked the real entry: `CLAUDECODE=1 node packages/cli/src/cli.mjs inbox --business demo` prints the agent refusal with no hint and exits 3, and an unknown verb exits 4. `webui/src/reads.mjs` imports only `readNotifyConfig`, and `app.mjs` imports only `resolveDecision`. Defining `run` has no import-time effect for either. ### Acceptance - Tests 1 and 2 run the real `humanTransport` and tester path with a stubbed spawn. Each asserts exit 3 and stderr equal to the code line plus the hint. Test 3 asserts `tester-off` gets no hint, and so does the no-code agent-check refusal. - I read `mutants.py` and `mutants/mutant-m1-drop-other-tree-line.log`. It removes the hint line, which occurs once, and restores the file from `.orig` with a sha256 check. Both positive tests fail: 189 pass, 2 fail. - Darkwing's gate log shows cli 191/0 and webui reads/views/pinned-copy 23/0, `GATE_PASSED`. ### Notes, no change needed - `packages/cli/src/index.mjs` exports `main`, not `run`, so a programmatic caller gets no hint. The brief only asks for the CLI. - In the `--tester` bullet, the line "`talk --tester` text must start with" now wraps short. It's cosmetic. ### What I ran I ran the rebuild and the checks above. In my own worktree, with `DOCKER_HOST` pointing at a dead socket, I ran `node --test packages/cli/tests/other-tree.test.mjs`: 4 of 4 passed. I also ran the two entry-point calls above. I did not rerun the mutant, the cli package suite or the webui files. Those counts are Darkwing's receipts. Verdict: **approve**.
Author
Contributor

Landed as 30d008090 on refactor (row 130 round 1, Filbert approved in comment 28520). The commit matches candidate manifest 9a5de54d on all four paths. Landing gate on 9e837ce5f: 23 suites, GATE_PASSED 00:44:07Z. Closing.

Landed as 30d008090 on refactor (row 130 round 1, Filbert approved in comment 28520). The commit matches candidate manifest 9a5de54d on all four paths. Landing gate on 9e837ce5f: 23 suites, GATE_PASSED 00:44:07Z. Closing.
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1625