Files

4.2 KiB

Row 142 round 1 review (Filbert): approve

Candidate: manifest sha256 1220d1341f35527ebd9c2b8cc86fa049617a19a751f6e72b87e5c483517348e7, 4 paths, base 8e2c5c2d0, packet agents/researcher/work/queue-142/ in df5bbfb82. The paths are cli.mjs, verbs.test.mjs, docs/TOOLS.md and packages/cli/README.md. The README is in by Sage's ruling (sage-0388).

Rebuild

  • A fresh worktree at refactor HEAD with row142.patch applied. Every manifest hash matched and git diff --check was clean.
  • The added lines have no dash, curly-quote or control characters. The packet manifest checks.
  • No commit from 8e2c5c2d0 to HEAD touches a manifest path.

What I checked and found correct

  • The filter. if (!follow && m.in_reply_to !== sent.id) continue; sits before the print and before message.read, so a skipped message is neither printed nor read.
    • !follow implies receiveOnly is false, so sent is always set where sent.id is read.
    • Under --follow and follow the line is inert, so both behave as before.
  • What a skipped message becomes. message.receive marks each row it returns as delivered and never returns a delivered row again (broker.mjs:1258). A skipped message is therefore delivered but unread.
    • mosaic inbox pages messages, keeps those without read, and prints each in full with formatMessage.
    • So "leaves the rest unread for mosaic inbox" holds, and the new timeout text ("mosaic inbox shows it") is true.
  • The human's unread messages block nothing. The thread release check counts only messages to the thread instance.
  • Tests against the brief.
    • Test 1 has another role's note (cto) and the same role's unsolicited note (coder, no in_reply_to) arrive before the reply. It asserts that neither is printed, that there is exactly one message.read, and that mosaic inbox lists both in full as 2 unread.
    • The same-role case matters. It catches a filter on the sender instead of in_reply_to (my mutant B below).
    • --wait 5 turns a never-printed reply into an assertion failure, not a hang.
    • The late-reply test now asserts the next talk skips it, reads nothing, and inbox lists it. The Console replies assertion is kept.
  • The docs. The TOOLS.md and README text match the code.

Notes (non-blocking)

  1. Skipped messages can't be marked read from the CLI.
    • The only message.read caller in cli and webui is talk's loop.
    • follow receives only undelivered messages, so it won't print them either. Researcher's build.md discloses this.
    • So mosaic inbox's unread list only grows. A follow-up could add a way to mark them read, for example on inbox.
  2. The Console's send-section text is now false for users. packages/webui/src/public/bus.js:280 says the next mosaic talk in a terminal still prints each reply, and :261 says the same in a comment.
    • send-browser.test.mjs:105 asserts that text. broker.mjs:1519 has the same comment.
    • These are outside the row's files, and public/ needs decision 123. They are on Researcher's follow-up list, and I'd queue the Console text soon, since users see it.
  3. One TOOLS.md line is longer than the paragraph's wrap (the line ending "stop sends SIGTERM to a run's runner after checking it in"). Cosmetic, and doc-only under decision 137.

What I ran and what I took from receipts

I ran, as single files on the candidate with TMPDIR set and Docker disabled:

Test file Result
cli verbs 6/6
cli follow 6/6
cli tester 6/6

I also ran two mutants of my own on cli.mjs, one at a time against verbs.test.mjs. The tree matched the manifest again afterwards.

Mutant verbs
A: skip after the print (every message printed, only the reply read) 2 fail
B: filter on from_role !== to instead of in_reply_to 2 fail

From Researcher's receipts, not rerun by me:

  • m1 to m6, all killed by assertion, with 3 controls passing (mutants-run.txt). This includes their disclosed correction: m3 first ended by timeout and was rerun after --wait 5.
  • The gate from 22:39:44Z to 22:43:18Z, all rc=0 (suites-run.txt): cli 206, business 101, bus 214, plugins 21, tasks 97, webui 113, harness 90, seat 135, and the ten scripts/test-*.sh.

I took no slot.