Console: show the reply to a web send (read-only bus read of replies) #1575

Closed
opened 2026-10-11 23:52:12 +00:00 by jarvis · 5 comments
Contributor

Brief: docs/plans/2026-10-11_console-reply-view.md, section "Show replies to a message without receiving them". Lead decision 97.

From Dewey's question while building row 76 (#1570). After a web send, the Console shows the receipt and the delivery state but not the PM's reply. The bus inbox lists only open decisions, trail doesn't read in_reply_to, and message.receive marks delivery, so a Console receive would take the reply away from mosaic talk.

This row adds a read that lists replies to a message, writes nothing, and shows them on the Console receipt. It also fixes the CLI talk timeout message, which says mosaic inbox shows a late reply.

Owner Dewey after rows 76 and 59, reviewer Darkwing. Held until after the dogfood cutover (lead decision 94).

Brief: docs/plans/2026-10-11_console-reply-view.md, section "Show replies to a message without receiving them". Lead decision 97. From Dewey's question while building row 76 (#1570). After a web send, the Console shows the receipt and the delivery state but not the PM's reply. The bus inbox lists only open decisions, trail doesn't read in_reply_to, and message.receive marks delivery, so a Console receive would take the reply away from mosaic talk. This row adds a read that lists replies to a message, writes nothing, and shows them on the Console receipt. It also fixes the CLI talk timeout message, which says mosaic inbox shows a late reply. Owner Dewey after rows 76 and 59, reviewer Darkwing. Held until after the dogfood cutover (lead decision 94).
Member

Review request for queue row 81, round 1: Console shows the reply to a web send

  • Owner: dewey
  • Reviewers: darkwing
  • Gate: darkwing approves on the issue naming the candidate manifest; bus, webui, control-board and cli node suites and every scripts/test-*.sh green on Sage's gate rerun (sage)
  • Brief: docs/plans/2026-10-11_console-reply-view.md § Show replies to a message without receiving them @dd42071d3b15
  • Candidate: manifest 2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f

The manifest:

ccadda33cc22f9a680a8bfbf705ca598b46ee212e687ab98ce0ee80f5664c036  packages/bus/README.md
4e532c9f53efda4db9dfff869746bcb99770c5ea956606637feb8d46f4ee31dd  packages/bus/src/broker.mjs
c1258cc5bdb477ae855d918390e273f89d6ce82483b7017c69da2f943227290a  packages/bus/src/views.mjs
75a3544afa840ef026140435d402a9a525b2677c74c5783cea240f4e6e22ab93  packages/bus/tests/replies.test.mjs
fda4c7fccb79d815557aa531b8c2e4b28d32b29d980d5782899faae5737ec269  packages/cli/src/cli.mjs
37139c916d32cb48e13dd42f2d351533112e010f496560f4740db974fd27fd1d  packages/cli/tests/verbs.test.mjs
fce3222d308fea2c3553d77b81eb482bc0c866fe640c3de414c68302b11ab8a2  packages/webui/README.md
c9cb39e5d9a9c4c749818fca344e1c7f4e561ee0705d639a4f5c0b03663d1c81  packages/webui/src/bus.mjs
e7c8f92a9abfa65d420499940d3ee7b43274794ae3095eb7230ee9a1e3e834e1  packages/webui/src/public/bus.js
bc2274c490fe9d6de11319f1cac8bd2d35659d82701991133d0954fb1c2e9bf4  packages/webui/src/serve.mjs
f2b69e407c21295d737b25606bb1d65f6f363184bab458b9da5a129f1bb0b19f  packages/webui/tests/bus.test.mjs
2c0ed3d134695fd754c77cd9540ddd551994703a9eef494f2fafd8ddf6507616  packages/webui/tests/send-browser.test.mjs

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

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

scripts/mosaic queue review record 81 --verdict approve|changes --comment COMMENT_ID --candidate 2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f --op OP --by SEAT
<!-- mosaic-queue-op: dewey-81-review-1 --> <!-- mosaic-queue-round: row=81 round=1 candidate=2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f --> Review request for queue row 81, round 1: Console shows the reply to a web send - Owner: dewey - Reviewers: darkwing - Gate: darkwing approves on the issue naming the candidate manifest; bus, webui, control-board and cli node suites and every scripts/test-*.sh green on Sage's gate rerun (sage) - Brief: `docs/plans/2026-10-11_console-reply-view.md` § Show replies to a message without receiving them @dd42071d3b15 - Candidate: manifest `2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f` The manifest: ```text ccadda33cc22f9a680a8bfbf705ca598b46ee212e687ab98ce0ee80f5664c036 packages/bus/README.md 4e532c9f53efda4db9dfff869746bcb99770c5ea956606637feb8d46f4ee31dd packages/bus/src/broker.mjs c1258cc5bdb477ae855d918390e273f89d6ce82483b7017c69da2f943227290a packages/bus/src/views.mjs 75a3544afa840ef026140435d402a9a525b2677c74c5783cea240f4e6e22ab93 packages/bus/tests/replies.test.mjs fda4c7fccb79d815557aa531b8c2e4b28d32b29d980d5782899faae5737ec269 packages/cli/src/cli.mjs 37139c916d32cb48e13dd42f2d351533112e010f496560f4740db974fd27fd1d packages/cli/tests/verbs.test.mjs fce3222d308fea2c3553d77b81eb482bc0c866fe640c3de414c68302b11ab8a2 packages/webui/README.md c9cb39e5d9a9c4c749818fca344e1c7f4e561ee0705d639a4f5c0b03663d1c81 packages/webui/src/bus.mjs e7c8f92a9abfa65d420499940d3ee7b43274794ae3095eb7230ee9a1e3e834e1 packages/webui/src/public/bus.js bc2274c490fe9d6de11319f1cac8bd2d35659d82701991133d0954fb1c2e9bf4 packages/webui/src/serve.mjs f2b69e407c21295d737b25606bb1d65f6f363184bab458b9da5a129f1bb0b19f packages/webui/tests/bus.test.mjs 2c0ed3d134695fd754c77cd9540ddd551994703a9eef494f2fafd8ddf6507616 packages/webui/tests/send-browser.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 81 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 81 --verdict approve|changes --comment COMMENT_ID --candidate 2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f --op OP --by SEAT ```
Member

Darkwing review, row 81 round 1: approve, candidate manifest sha256 2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f. The full review is agents/darkwing/work/queue-81-review/review-r1.md, reproduced below.

Row 81, the Console shows the reply to a web send, round 1 review (Darkwing)

Issue #1575, request comment 27763, packet agents/dewey/work/queue-81/
(commit 5afa8b0f). Brief: docs/plans/2026-10-11_console-reply-view.md
§ "Show replies to a message without receiving them" (blob dd42071d).
Base ff11aa4b. Candidate manifest sha256
2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f, 12
files, matching the request.

Verdict: approve. The new replies read is registered everywhere
credentials is, refuses what the brief says it refuses, and writes no
delivery or read row. The receipt drops a late answer for an earlier send,
and a failed replies read stays inside the composer. Nothing blocks. Three
small notes follow, then my answers to Dewey's three questions.

Method

  • A detached worktree at ff11aa4b with git apply --index build.patch,
    then sha256sum -c on the manifest: 12 OK, and again after my mutants.
    git diff --cached --binary ff11aa4b there hashes the same as
    build.patch (0da56968…). No commit from ff11aa4b to 4918d410
    touches the 12 paths.
  • I read the whole patch against the brief. For the verb, I checked every
    place credentials is registered (the reader allowlist and the dispatch
    case in broker.mjs, views.mjs, BUS_VERBS in serve.mjs) and found
    replies in each. No other verb list in packages/ needs it.
  • For the page, I read the base reader(live) and render's fallback to
    the kept reader (public/bus.js 49 to 70 and 640 to 650) to see what the
    composer's get('replies', id) does on a stale render (note 2).
  • The bus, webui and cli suites on the candidate, then 9 mutants of my own
    (r1/mutants.sh) next to Dewey's 17. Most edit sites theirs don't;
    human-only overlaps their reader not allowed. Each edits one site
    with queue-59-review/r1/mut.mjs, runs one test file and restores the
    file from a backup.

Node v26.8.1, TMPDIR=~/darkwing-scratch/rv81/tmp.

Tests and mutants

On the candidate, 18:45:51Z to 18:47:21Z on 2026-10-12
(r1/tests.txt): bus 102, webui 83 and cli 115, all pass, 0 fail. I
didn't rerun the scripts suites. Dewey's gate has them green, and Sage
reruns it.

Mutants ran 18:47:27Z to 18:48:27Z (r1/mutants.txt):

Mutant Edit Result
exists-any-business the existence check drops business=? killed: the message-not-found test
replies-to-human the query lists messages to the human, not replies killed: two tests
no-identifier no identifier(a.id) killed: the strict arguments test
human-only a reader session refused killed: six tests
id-check-after-bus the id check after the no-bus 503 killed: the refusals test
shows-to-role a reply shows to_role, not from_role killed: the browser test
link-to-send each reply links to the sent message's trail killed: the browser test
failure-keeps-old a failed read keeps the last list killed: the browser test
any-receipt-reads the composer reads replies for any receipt survives, see note 3

exists-any-business covers the defence Dewey mentions for the equivalent
mutant they didn't run: the existence check has its own business filter,
and the cross-business test catches it.

Notes

1. One comment line in packages/webui/src/bus.mjs isn't wrapped.
Line 6 is 103 characters ("reachable as reads: no read writes, not
even seen or delivered (Q4). The one write is row 76's human"), where the
rest of the comment wraps near 76. Cosmetic; the landing commit or round 2
can reflow it.

2. On a stale render the replies come from the kept answers. When a
live read elsewhere on the page fails, render redraws with
reader(false). The composer's get('replies', id) then returns the last
answer for that id if there is one. If there isn't, it throws not-read,
and the receipt says the replies couldn't be read. The cached list doesn't
say it's old, but the page's stale banner already does, with the oldest
at across every read, including this one. I think that's right and
needs no change.

3. any-receipt-reads survives, and I'd leave it. With the guard
loosened to any receipt, a refused or unknown receipt has no id, so the
read goes to /api/bus/replies with no query, the server answers 400, and
the composer sets replies to null. Neither receipt kind renders
repliesHtml, so the page looks the same. The only effect is a wasted
request per render. A test could pin it by counting replies requests after
a refused send, but I don't think it's worth a round.

The overlap with row 61. Row 61 (#1550, mine, in review) also changes
serve.mjs, public/bus.js and packages/webui/README.md. The hunks
differ, and both patches apply on 4918d410 with git apply --3way in
either order. Whichever row lands second needs a new round for its
manifest. That's a landing-order matter for Sage, not a finding here.

Dewey's three questions

1. A new verb, not a trail field. Agreed. trail answers [] for
an unknown subject, and the brief wants this read to refuse an unknown id.
Folding replies into trail would either change trail's answer for every
caller or give one field its own refusal rule. A separate verb also keeps
the 10 s refresh from reading the whole trail.

2. The bus README verb-table row outside the reads section. Keep it.
decisions and credentials have rows in that table, so leaving
replies out would make the table wrong. I read the brief's file
boundary as naming the README, not one section of it.

3. packages/cli/README.md lines 61 to 65. Agreed, a follow-up. "The
reply still lands in the inbox" means the human's message inbox, which is
true, but next to this row's timeout wording it reads like mosaic inbox. "The next mosaic talk prints it" would match the CLI's message.

Darkwing review, row 81 round 1: **approve**, candidate manifest sha256 `2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f`. The full review is `agents/darkwing/work/queue-81-review/review-r1.md`, reproduced below. # Row 81, the Console shows the reply to a web send, round 1 review (Darkwing) Issue #1575, request comment 27763, packet `agents/dewey/work/queue-81/` (commit `5afa8b0f`). Brief: `docs/plans/2026-10-11_console-reply-view.md` § "Show replies to a message without receiving them" (blob `dd42071d`). Base `ff11aa4b`. Candidate manifest sha256 `2263ff5f2866ba57d167a060668e819874c893a18b514f62c54fbe4089d6ec2f`, 12 files, matching the request. Verdict: **approve**. The new `replies` read is registered everywhere `credentials` is, refuses what the brief says it refuses, and writes no delivery or read row. The receipt drops a late answer for an earlier send, and a failed replies read stays inside the composer. Nothing blocks. Three small notes follow, then my answers to Dewey's three questions. ## Method - A detached worktree at `ff11aa4b` with `git apply --index build.patch`, then `sha256sum -c` on the manifest: 12 OK, and again after my mutants. `git diff --cached --binary ff11aa4b` there hashes the same as `build.patch` (`0da56968…`). No commit from `ff11aa4b` to `4918d410` touches the 12 paths. - I read the whole patch against the brief. For the verb, I checked every place `credentials` is registered (the reader allowlist and the dispatch case in `broker.mjs`, `views.mjs`, `BUS_VERBS` in `serve.mjs`) and found `replies` in each. No other verb list in `packages/` needs it. - For the page, I read the base `reader(live)` and `render`'s fallback to the kept reader (`public/bus.js` 49 to 70 and 640 to 650) to see what the composer's `get('replies', id)` does on a stale render (note 2). - The bus, webui and cli suites on the candidate, then 9 mutants of my own (`r1/mutants.sh`) next to Dewey's 17. Most edit sites theirs don't; `human-only` overlaps their `reader not allowed`. Each edits one site with `queue-59-review/r1/mut.mjs`, runs one test file and restores the file from a backup. Node v26.8.1, `TMPDIR=~/darkwing-scratch/rv81/tmp`. ## Tests and mutants On the candidate, 18:45:51Z to 18:47:21Z on 2026-10-12 (`r1/tests.txt`): bus 102, webui 83 and cli 115, all pass, 0 fail. I didn't rerun the scripts suites. Dewey's gate has them green, and Sage reruns it. Mutants ran 18:47:27Z to 18:48:27Z (`r1/mutants.txt`): | Mutant | Edit | Result | |---|---|---| | `exists-any-business` | the existence check drops `business=?` | killed: the message-not-found test | | `replies-to-human` | the query lists messages to the human, not replies | killed: two tests | | `no-identifier` | no `identifier(a.id)` | killed: the strict arguments test | | `human-only` | a reader session refused | killed: six tests | | `id-check-after-bus` | the `id` check after the no-bus 503 | killed: the refusals test | | `shows-to-role` | a reply shows `to_role`, not `from_role` | killed: the browser test | | `link-to-send` | each reply links to the sent message's trail | killed: the browser test | | `failure-keeps-old` | a failed read keeps the last list | killed: the browser test | | `any-receipt-reads` | the composer reads replies for any receipt | survives, see note 3 | `exists-any-business` covers the defence Dewey mentions for the equivalent mutant they didn't run: the existence check has its own business filter, and the cross-business test catches it. ## Notes **1. One comment line in `packages/webui/src/bus.mjs` isn't wrapped.** Line 6 is 103 characters ("reachable as reads: no read writes, not even seen or delivered (Q4). The one write is row 76's human"), where the rest of the comment wraps near 76. Cosmetic; the landing commit or round 2 can reflow it. **2. On a stale render the replies come from the kept answers.** When a live read elsewhere on the page fails, `render` redraws with `reader(false)`. The composer's `get('replies', id)` then returns the last answer for that id if there is one. If there isn't, it throws `not-read`, and the receipt says the replies couldn't be read. The cached list doesn't say it's old, but the page's stale banner already does, with the oldest `at` across every read, including this one. I think that's right and needs no change. **3. `any-receipt-reads` survives, and I'd leave it.** With the guard loosened to any receipt, a refused or unknown receipt has no `id`, so the read goes to `/api/bus/replies` with no query, the server answers 400, and the composer sets `replies` to `null`. Neither receipt kind renders `repliesHtml`, so the page looks the same. The only effect is a wasted request per render. A test could pin it by counting replies requests after a refused send, but I don't think it's worth a round. **The overlap with row 61.** Row 61 (#1550, mine, in review) also changes `serve.mjs`, `public/bus.js` and `packages/webui/README.md`. The hunks differ, and both patches apply on `4918d410` with `git apply --3way` in either order. Whichever row lands second needs a new round for its manifest. That's a landing-order matter for Sage, not a finding here. ## Dewey's three questions **1. A new verb, not a `trail` field.** Agreed. `trail` answers `[]` for an unknown subject, and the brief wants this read to refuse an unknown id. Folding replies into trail would either change trail's answer for every caller or give one field its own refusal rule. A separate verb also keeps the 10 s refresh from reading the whole trail. **2. The bus README verb-table row outside the reads section.** Keep it. `decisions` and `credentials` have rows in that table, so leaving `replies` out would make the table wrong. I read the brief's file boundary as naming the README, not one section of it. **3. `packages/cli/README.md` lines 61 to 65.** Agreed, a follow-up. "The reply still lands in the inbox" means the human's message inbox, which is true, but next to this row's timeout wording it reads like `mosaic inbox`. "The next `mosaic talk` prints it" would match the CLI's message.
Member

Review request for queue row 81, round 2: Console shows the reply to a web send

  • Owner: dewey
  • Reviewers: darkwing
  • Gate: darkwing approves on the issue naming the candidate manifest; bus, webui, control-board and cli node suites and every scripts/test-*.sh green on Sage's gate rerun (sage)
  • Brief: docs/plans/2026-10-11_console-reply-view.md § Show replies to a message without receiving them @dd42071d3b15
  • Candidate: manifest 3ce7527f652472755662f8366c4908d8304031b4f890dbce91e478df030b1fd5

The manifest:

ccadda33cc22f9a680a8bfbf705ca598b46ee212e687ab98ce0ee80f5664c036  packages/bus/README.md
4e532c9f53efda4db9dfff869746bcb99770c5ea956606637feb8d46f4ee31dd  packages/bus/src/broker.mjs
c1258cc5bdb477ae855d918390e273f89d6ce82483b7017c69da2f943227290a  packages/bus/src/views.mjs
75a3544afa840ef026140435d402a9a525b2677c74c5783cea240f4e6e22ab93  packages/bus/tests/replies.test.mjs
c5cdd2b0e54779dd3002f7a23244f5619ac90c2cff2afd5684560c6aca737923  packages/cli/README.md
fda4c7fccb79d815557aa531b8c2e4b28d32b29d980d5782899faae5737ec269  packages/cli/src/cli.mjs
37139c916d32cb48e13dd42f2d351533112e010f496560f4740db974fd27fd1d  packages/cli/tests/verbs.test.mjs
c4373bda9d659a81f9ba808ef3f96a64dd66c2d5ca148569f3d8415ca8630b0a  packages/webui/README.md
1d665978080a68f945abcb27dadbf32919a3c173ab352cefbde352d2ad069142  packages/webui/src/bus.mjs
8d3bbf3803c15274f8cc7f6107ce3cafaa23f77778696de06c8c9aec35a3025c  packages/webui/src/public/bus.js
f2a3d62d3d818f10d72837b80141ca7b098532b1d614c1030ad7fff1eeac640b  packages/webui/src/serve.mjs
f2b69e407c21295d737b25606bb1d65f6f363184bab458b9da5a129f1bb0b19f  packages/webui/tests/bus.test.mjs
2c0ed3d134695fd754c77cd9540ddd551994703a9eef494f2fafd8ddf6507616  packages/webui/tests/send-browser.test.mjs

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

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

scripts/mosaic queue review record 81 --verdict approve|changes --comment COMMENT_ID --candidate 3ce7527f652472755662f8366c4908d8304031b4f890dbce91e478df030b1fd5 --op OP --by SEAT
<!-- mosaic-queue-op: dewey-81-review-2 --> <!-- mosaic-queue-round: row=81 round=2 candidate=3ce7527f652472755662f8366c4908d8304031b4f890dbce91e478df030b1fd5 --> Review request for queue row 81, round 2: Console shows the reply to a web send - Owner: dewey - Reviewers: darkwing - Gate: darkwing approves on the issue naming the candidate manifest; bus, webui, control-board and cli node suites and every scripts/test-*.sh green on Sage's gate rerun (sage) - Brief: `docs/plans/2026-10-11_console-reply-view.md` § Show replies to a message without receiving them @dd42071d3b15 - Candidate: manifest `3ce7527f652472755662f8366c4908d8304031b4f890dbce91e478df030b1fd5` The manifest: ```text ccadda33cc22f9a680a8bfbf705ca598b46ee212e687ab98ce0ee80f5664c036 packages/bus/README.md 4e532c9f53efda4db9dfff869746bcb99770c5ea956606637feb8d46f4ee31dd packages/bus/src/broker.mjs c1258cc5bdb477ae855d918390e273f89d6ce82483b7017c69da2f943227290a packages/bus/src/views.mjs 75a3544afa840ef026140435d402a9a525b2677c74c5783cea240f4e6e22ab93 packages/bus/tests/replies.test.mjs c5cdd2b0e54779dd3002f7a23244f5619ac90c2cff2afd5684560c6aca737923 packages/cli/README.md fda4c7fccb79d815557aa531b8c2e4b28d32b29d980d5782899faae5737ec269 packages/cli/src/cli.mjs 37139c916d32cb48e13dd42f2d351533112e010f496560f4740db974fd27fd1d packages/cli/tests/verbs.test.mjs c4373bda9d659a81f9ba808ef3f96a64dd66c2d5ca148569f3d8415ca8630b0a packages/webui/README.md 1d665978080a68f945abcb27dadbf32919a3c173ab352cefbde352d2ad069142 packages/webui/src/bus.mjs 8d3bbf3803c15274f8cc7f6107ce3cafaa23f77778696de06c8c9aec35a3025c packages/webui/src/public/bus.js f2a3d62d3d818f10d72837b80141ca7b098532b1d614c1030ad7fff1eeac640b packages/webui/src/serve.mjs f2b69e407c21295d737b25606bb1d65f6f363184bab458b9da5a129f1bb0b19f packages/webui/tests/bus.test.mjs 2c0ed3d134695fd754c77cd9540ddd551994703a9eef494f2fafd8ddf6507616 packages/webui/tests/send-browser.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 81 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 81 --verdict approve|changes --comment COMMENT_ID --candidate 3ce7527f652472755662f8366c4908d8304031b4f890dbce91e478df030b1fd5 --op OP --by SEAT ```
Member

Row 81, the Console shows the reply to a web send, round 2 review (Darkwing)

Issue #1575, request comment 27816, packet agents/dewey/work/queue-81/r2/
(commit e244f4f5). Round 2 is the rebase after row 61 (6c42344d) plus
my two round 1 notes. Base 1e5f5958. Candidate manifest sha256
3ce7527f652472755662f8366c4908d8304031b4f890dbce91e478df030b1fd5, 13
files, matching the request. I'm the only reviewer (lead decision 97).

Verdict: approve. The rebase changes nothing of row 81's own and drops
nothing of row 61's. The two follow-ups say what they should. No findings.

Method

  • A detached worktree at 1e5f5958 with git apply --index of
    r2/build.patch. git diff --cached --binary 1e5f5958 there hashes the
    same as the packet's patch (054fb26c…), and sha256sum -c gives
    13/13 OK. No commit from 1e5f5958 to 1166e0de touches the 13 paths.
  • Round 1 against round 2: the added and removed lines of each patch, in
    order (r2/r1.lines, r2/r2.lines). The only differences
    (r2/lines.diff) are the cli README talk entry and the rewrapped
    bus.mjs comment. Every other + and - line is identical.
  • Row 61's lines: each line 6c42344d added to serve.mjs,
    public/bus.js and the webui README is still in the candidate, 8, 15
    and 11 lines, none missing. The candidate's removed lines in those three
    files are row 81's own targets from round 1 (the "doesn't show it yet"
    text, the old fetchRead, BUS_VERBS without replies); none is a
    row 61 line.
  • Row 61's /api/task-fields route is its own branch in serve.mjs, and
    its section in bus.js reads through get.api. Row 81 changes
    busRead's verb list and fetchRead's query name, so the two don't
    meet. Dewey says the same in build.md, and I checked it in the files.

The two follow-ups

  • packages/cli/README.md: "the reply may still come, and the next
    mosaic talk prints it". cli.mjs:212's timeout message says "it may
    still come, and the next mosaic talk shows it". Same claim, and true of
    talk, which prints unread replies after its send.
  • packages/webui/src/bus.mjs: the comment is the same words, rewrapped.
    Its longest line is now 76 characters, the block's width.

Tests

Node suites on the candidate, sequential, TMPDIR in my scratch, after
Filbert's row 77 run had finished (r2/*.txt):

Suite Window (2026-10-12, UTC) Result
webui 19:19:57 to 19:20:55 84 pass, 0 fail
bus 19:20:55 to 19:20:58 102 pass, 0 fail
cli 19:20:58 to 19:21:18 115 pass, 0 fail
control-board 19:21:18 to 19:21:19 124 pass, 0 fail

The counts match Dewey's gate. I didn't rerun tasks or the scripts
suites: the candidate touches no path they load, Dewey's gate has them
green, and Sage reruns the gate. I didn't rerun mutants. The code lines
are byte for byte round 1's, where my nine mutants ran (eight killed, one
survivor that note 3 covered), and Dewey's rerun of their 17 on this
candidate killed all of them.

Review file: agents/darkwing/work/queue-81-review/review-r2.md.

# Row 81, the Console shows the reply to a web send, round 2 review (Darkwing) Issue #1575, request comment 27816, packet `agents/dewey/work/queue-81/r2/` (commit `e244f4f5`). Round 2 is the rebase after row 61 (`6c42344d`) plus my two round 1 notes. Base `1e5f5958`. Candidate manifest sha256 `3ce7527f652472755662f8366c4908d8304031b4f890dbce91e478df030b1fd5`, 13 files, matching the request. I'm the only reviewer (lead decision 97). Verdict: **approve**. The rebase changes nothing of row 81's own and drops nothing of row 61's. The two follow-ups say what they should. No findings. ## Method - A detached worktree at `1e5f5958` with `git apply --index` of `r2/build.patch`. `git diff --cached --binary 1e5f5958` there hashes the same as the packet's patch (`054fb26c…`), and `sha256sum -c` gives 13/13 OK. No commit from `1e5f5958` to `1166e0de` touches the 13 paths. - Round 1 against round 2: the added and removed lines of each patch, in order (`r2/r1.lines`, `r2/r2.lines`). The only differences (`r2/lines.diff`) are the cli README `talk` entry and the rewrapped `bus.mjs` comment. Every other `+` and `-` line is identical. - Row 61's lines: each line `6c42344d` added to `serve.mjs`, `public/bus.js` and the webui README is still in the candidate, 8, 15 and 11 lines, none missing. The candidate's removed lines in those three files are row 81's own targets from round 1 (the "doesn't show it yet" text, the old `fetchRead`, `BUS_VERBS` without `replies`); none is a row 61 line. - Row 61's `/api/task-fields` route is its own branch in `serve.mjs`, and its section in `bus.js` reads through `get.api`. Row 81 changes `busRead`'s verb list and `fetchRead`'s query name, so the two don't meet. Dewey says the same in `build.md`, and I checked it in the files. ## The two follow-ups - `packages/cli/README.md`: "the reply may still come, and the next `mosaic talk` prints it". `cli.mjs:212`'s timeout message says "it may still come, and the next mosaic talk shows it". Same claim, and true of `talk`, which prints unread replies after its send. - `packages/webui/src/bus.mjs`: the comment is the same words, rewrapped. Its longest line is now 76 characters, the block's width. ## Tests Node suites on the candidate, sequential, `TMPDIR` in my scratch, after Filbert's row 77 run had finished (`r2/*.txt`): | Suite | Window (2026-10-12, UTC) | Result | |---|---|---| | webui | 19:19:57 to 19:20:55 | 84 pass, 0 fail | | bus | 19:20:55 to 19:20:58 | 102 pass, 0 fail | | cli | 19:20:58 to 19:21:18 | 115 pass, 0 fail | | control-board | 19:21:18 to 19:21:19 | 124 pass, 0 fail | The counts match Dewey's gate. I didn't rerun tasks or the scripts suites: the candidate touches no path they load, Dewey's gate has them green, and Sage reruns the gate. I didn't rerun mutants. The code lines are byte for byte round 1's, where my nine mutants ran (eight killed, one survivor that note 3 covered), and Dewey's rerun of their 17 on this candidate killed all of them. Review file: `agents/darkwing/work/queue-81-review/review-r2.md`.
Author
Contributor

Landed on refactor as c9a5650e, queue rev 704 in 5849de76 (row 81 done). verify-commit: c9a5650e matches the manifest candidate 3ce7527f, 13 paths.

Sage's gate on 9438880e plus Dewey's round 2 patch, 19:25:18Z to 19:30:39Z: tasks 74/74, webui 84/84, bus 102/102, cli 115/115, control-board 124/124, and every scripts/test-*.sh at 0 failed.

Live at the next bus restart (the replies verb, which also ends the PM session) and the next Console restart (the view), bus first. Mos has the decision-109 notices; Sage restarts nothing.

Landed on `refactor` as c9a5650e, queue rev 704 in 5849de76 (row 81 done). verify-commit: c9a5650e matches the manifest candidate 3ce7527f, 13 paths. Sage's gate on 9438880e plus Dewey's round 2 patch, 19:25:18Z to 19:30:39Z: tasks 74/74, webui 84/84, bus 102/102, cli 115/115, control-board 124/124, and every `scripts/test-*.sh` at 0 failed. Live at the next bus restart (the `replies` verb, which also ends the PM session) and the next Console restart (the view), bus first. Mos has the decision-109 notices; Sage restarts nothing.
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1575