# Row 81 (#1575): Console shows the reply to a web send, round 2 Owner: Dewey. Reviewer: Darkwing (lead decision 97), then Sage's gate. Round 1 is `../build.md` (base `ff11aa4b`, manifest `2263ff5f`), approved by Darkwing in comment 27783. Round 2 is a rebase after row 61 (#1550) landed as `6c42344d`, with the two follow-ups from round 1 folded in, as Sage asked. Base `1e5f5958` (queue rev 689, row 61 done). `build.patch` is `git diff --cached --binary 1e5f5958 --` the thirteen paths in `candidate-manifest.sha256`. Apply it with `git apply --index` to a detached worktree of the base; the manifest then checks 13/13 OK. ## What changed from round 1 - **Rebase.** Round 1's `build.patch` applied to `1e5f5958` with `git apply --3way --index`, every file clean, no conflict markers. Row 61 changed three of the twelve paths between `ff11aa4b` and `1e5f5958`: `packages/webui/src/serve.mjs` (`GET /api/task-fields`), `src/public/bus.js` (the "Who may write" task section) and `packages/webui/README.md`. Row 81's hunks in those files are in different places. Checks: - The added and removed lines of round 2's patch equal round 1's, except the two follow-ups below. - Every line row 61 added to the three shared files is still in the candidate. - Row 61's route is served by its own branch in `serve.mjs`, not `busRead`, so `BUS_VERBS` and the new `id` check don't reach it. Row 61's section in `bus.js` reads through `get.api`; row 81 changes only `fetchRead`'s query name for `replies`, which `get.api` doesn't use. No behaviour changes beyond merging the two rows. - **Follow-up 1: `packages/cli/README.md`**, a thirteenth path. The `talk` entry said "No reply in time exits 1; the reply still lands in the inbox", which reads like the timeout wording round 1 removed. It now says "the reply may still come, and the next `mosaic talk` prints it", matching the CLI's timeout message. - **Follow-up 2: `packages/webui/src/bus.mjs`.** The file's opening comment had a 103-character line. Rewrapped at the block's width (76 at most); no words changed. ## Gate (my run on the candidate) Sequential, in a worktree of `1e5f5958` with `build.patch` applied (`gate-summary.txt`): node suites for bus, webui, control-board and cli, plus tasks because row 61 made webui read `packages/tasks/fields.json`; then every `scripts/test-*.sh`. 2026-10-12T19:05:31Z to 19:10:13Z, all rc=0: - `node --test 'packages/
/tests/*.test.mjs'`: bus 102/102, webui 84/84 (round 1's 83 plus row 61's one), control-board 124/124, cli 115/115, tasks 74/74. - `scripts/test-auth.sh`, `test-conductor.sh`, `test-config.sh`, `test-discord.sh`, `test-extension-package.sh`, `test-foundation.sh`, `test-queue.sh`, `test-release.sh`, `test-task.sh`. `build.patch` applied to a second fresh worktree of `1e5f5958` also checks 13/13; that copy is the one the mutants ran in. ## Mutants Round 1's 17 mutants (`mutants.py`, its path pointed at a scratch copy of this candidate), rerun after the gate (`mutants.txt`): all 17 killed, and the copy checked 13/13 again afterwards. The follow-ups change no code, so no new mutant: the README is prose, and the `bus.mjs` edit is inside a comment.