From e16fb578490e94414afd30526133fdb9bd40d5a0 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sun, 11 Oct 2026 18:52:25 -0500 Subject: [PATCH] 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 --- docs/plans/2026-09-26_lead-decisions.md | 25 +++++++ docs/plans/2026-10-11_console-reply-view.md | 81 +++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 docs/plans/2026-10-11_console-reply-view.md diff --git a/docs/plans/2026-09-26_lead-decisions.md b/docs/plans/2026-09-26_lead-decisions.md index 051a91127..b52aa7be4 100644 --- a/docs/plans/2026-09-26_lead-decisions.md +++ b/docs/plans/2026-09-26_lead-decisions.md @@ -2101,3 +2101,28 @@ which stay with him. Each item names who decided it and what happened. the faster option. In exchange, the in-stack Mos never runs with its wider authority under Jason's user, with PID-only isolation, for more than the trial. + +97. **Row 76 builds as briefed; the reply view is its own row after the + cutover (2026-10-11).** Dewey found, building row 76 (#1570), that the + brief's "replies show in the inbox as today" is wrong. The bus inbox + lists only open decisions, and nothing reads `in_reply_to`. Sage wrote + that line; the error is Sage's. + - Row 76 goes ahead with Dewey's option (a). Its README says the PM's + reply to a web send shows on Jason's next `mosaic talk`, which + prints every undelivered message to the human first + (`packages/cli/src/cli.mjs`, `talk`). + - Option (b), a Console `message.receive` with no `message.read`, is + refused. `message.receive` writes a `delivered` row, so the Console + would take the reply away from `mosaic talk`. It is also a bus + change, which row 76's brief puts out of scope. + - The web send keeps the broker's default class, INFO. The brief puts + other classes out of scope, and the runner answers any class but + RESULT. + - Row 81 (#1575): a read-only bus read of the replies to a message, + shown on the Console receipt, plus the CLI talk timeout message, + which also names `mosaic inbox` wrongly. Owner Dewey after rows 76 + and 59, reviewer Darkwing. Held behind the cutover with the other + bus rows (decision 94). + - The tradeoff: on cutover day Jason sends from the browser and reads + the answer in the CLI. In exchange no broker change lands before the + cutover and row 76 needs no extra review round. diff --git a/docs/plans/2026-10-11_console-reply-view.md b/docs/plans/2026-10-11_console-reply-view.md new file mode 100644 index 000000000..dd42071d3 --- /dev/null +++ b/docs/plans/2026-10-11_console-reply-view.md @@ -0,0 +1,81 @@ +# 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-/` + +### 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.