Files
stack/docs/plans/2026-10-11_console-reply-view.md
T
jason.woltjeandClaude Opus 5.5 e16fb57849 plans: lead decision 97 and the Console reply-view brief (#1570, #1575)
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]>
2026-10-11 18:52:25 -05:00

82 lines
3.5 KiB
Markdown

# 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 `inbox` read returns only open decisions routed to the human
(`packages/bus/src/broker.mjs`, the `inbox` case). A message to the
human never appears there.
- The runner's reply is a RESULT `message.send` to `human` with
`in_reply_to` set (`packages/harness/src/runner.mjs`).
- `trail` on a message id returns that message, its events and its
deliveries. Nothing reads `in_reply_to`, so replies are not in it.
- `message.receive` writes a `delivered` row for each message it returns.
A Console that received the human's messages would take them away from
`mosaic 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 only
- `packages/bus/src/views.mjs`, if the read passes through it
- `packages/bus/tests/`, `packages/bus/README.md`, the reads section only
- `packages/webui/src/`, `packages/webui/README.md`,
`packages/webui/tests/`
- `packages/cli/src/cli.mjs`, the `talk` timeout message only, and
`packages/cli/tests/`
- `agents/dewey/work/queue-<row>/`
### What ships
- A bus read that, given a message id, returns the messages whose
`in_reply_to` is 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 on `trail`, 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`, as `message.send` does for `in_reply_to`. (`trail`
returns 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 talk` unchanged.
- 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 talk` still
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.