Row 76 builds as briefed; its brief's 'replies show in the inbox' line was wrong. A read-only bus read of replies, shown on the Console receipt, is row 81 (#1575), held behind the cutover. Option (b), a Console message.receive, is refused because receive marks delivery. Co-Authored-By: Claude Opus 5.5 <[email protected]>
3.5 KiB
Console: show the reply to a web send (2026-10-11)
Status: written by Sage, lead. It follows docs/plans/BRIEF-TEMPLATE.md.
From Dewey's question while building row 76 (#1570). Lead decision 97.
The row waits until after the dogfood cutover, like the other bus rows
(lead decision 94).
Show replies to a message without receiving them
Problem
Row 76's brief said a web send's replies "show in the inbox as today". That was wrong. Dewey checked the code on 2026-10-11 and Sage confirmed it:
- The bus
inboxread returns only open decisions routed to the human (packages/bus/src/broker.mjs, theinboxcase). A message to the human never appears there. - The runner's reply is a RESULT
message.sendtohumanwithin_reply_toset (packages/harness/src/runner.mjs). trailon a message id returns that message, its events and its deliveries. Nothing readsin_reply_to, so replies are not in it.message.receivewrites adeliveredrow for each message it returns. A Console that received the human's messages would take them away frommosaic talk, which prints only undelivered ones.
So after a web send, Jason sees the receipt and the delivery state but not
the PM's answer. The answer shows up on his next mosaic talk, which
prints every undelivered message to the human before it waits. The CLI's
timeout message (packages/cli/src/cli.mjs, the talk function) says
"the next mosaic talk or mosaic inbox shows it", and the inbox half is
wrong for the same reason.
Owner and reviewer
Owner: Dewey, after row 76 and row 59 (both edit files this row reads or changes). Reviewer: Darkwing.
Files owned
packages/bus/src/broker.mjs, a read for replies onlypackages/bus/src/views.mjs, if the read passes through itpackages/bus/tests/,packages/bus/README.md, the reads section onlypackages/webui/src/,packages/webui/README.md,packages/webui/tests/packages/cli/src/cli.mjs, thetalktimeout message only, andpackages/cli/tests/agents/dewey/work/queue-<row>/
What ships
- A bus read that, given a message id, returns the messages whose
in_reply_tois that id, oldest first, at most 50. It writes no delivery or read row and changes nothing. Dewey picks whether it is a new read verb or a field ontrail, and says why in the packet. - The read is open to the same sessions as the other reads (human and
reader). An id that names no message in the business refuses
message-not-found, asmessage.senddoes forin_reply_to. (trailreturns an empty list instead; this read doesn't copy that.) - The Console receipt for a web send shows the replies that read
returns, refreshed with the page. A reply shown there still reaches
mosaic talkunchanged. - The CLI timeout message names only
mosaic talk. - The webui README says where a reply shows and that the Console never marks one delivered or read.
- Tests: a reply listed and its delivery rows unchanged; a message with
no reply; the cap and order; an unknown id;
mosaic talkstill receives a reply after the Console has shown it; the new timeout message.
Out of scope
Receiving or marking messages from the Console, any write verb, the
human transport, the deliveries schema, decisions in the browser
(REQ-DEC-3) and conversations with T3 seats (CHAT-07).
Gate
Darkwing approves on the row's issue naming the candidate manifest. The
bus, webui, control-board and cli node suites and every
scripts/test-*.sh green on Sage's gate rerun.