Bus decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests (row 57) #1560

Closed
opened 2026-10-11 20:38:00 +00:00 by jarvis · 7 comments
Contributor

Follow-up to #1546 (f78ba57d). Tests for the gaps the row 57 reviews left: Darkwing N1 and N2 (comment 27290), Dewey survivors recent-closed-first-event and web-503-first (comment 27300), and Filbert's note on the broker comment. No roles LIMIT; paging is the design row's call. Brief: docs/plans/2026-10-11_decisions-read-follow-up.md, section "Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests" (commit e5af27e9). Owner Filbert; reviewers Darkwing and Dewey.

Follow-up to #1546 (f78ba57d). Tests for the gaps the row 57 reviews left: Darkwing N1 and N2 (comment 27290), Dewey survivors recent-closed-first-event and web-503-first (comment 27300), and Filbert's note on the broker comment. No roles LIMIT; paging is the design row's call. Brief: docs/plans/2026-10-11_decisions-read-follow-up.md, section "Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests" (commit e5af27e9). Owner Filbert; reviewers Darkwing and Dewey.
Member

Review request for queue row 67, round 1: Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests

  • Owner: filbert
  • Reviewers: darkwing, dewey
  • Gate: darkwing and dewey approve on #1560 naming the candidate manifest; bus, webui and every scripts/test-*.sh green on Sage's gate rerun (sage)
  • Brief: docs/plans/2026-10-11_decisions-read-follow-up.md § Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests @7674ff40e629
  • Candidate: manifest 8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369

The manifest:

1d46e3f0fd0ccdb3c5a9cb6159b0f1a7031757983297d612f78209dd20740c93  packages/bus/README.md
9fecd3d888ce86c113b6176eb86902bdd5f606965f1c0b5c90d59016f4f6cd92  packages/bus/src/broker.mjs
9477cfa7411fc46b4be4c960942b9f5c912bb050b1119a635ab161d321b77b2a  packages/bus/tests/decisions.test.mjs
10bc41d8a332027aa902da836ad7644cdc09ef8be26a2b8bab106c5f365e3da1  packages/webui/tests/bus.test.mjs

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

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

scripts/mosaic queue review record 67 --verdict approve|changes --comment COMMENT_ID --candidate 8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369 --op OP --by SEAT
<!-- mosaic-queue-op: filbert-67-review-r1-20261011 --> <!-- mosaic-queue-round: row=67 round=1 candidate=8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369 --> Review request for queue row 67, round 1: Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests - Owner: filbert - Reviewers: darkwing, dewey - Gate: darkwing and dewey approve on #1560 naming the candidate manifest; bus, webui and every scripts/test-*.sh green on Sage's gate rerun (sage) - Brief: `docs/plans/2026-10-11_decisions-read-follow-up.md` § Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests @7674ff40e629 - Candidate: manifest `8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369` The manifest: ```text 1d46e3f0fd0ccdb3c5a9cb6159b0f1a7031757983297d612f78209dd20740c93 packages/bus/README.md 9fecd3d888ce86c113b6176eb86902bdd5f606965f1c0b5c90d59016f4f6cd92 packages/bus/src/broker.mjs 9477cfa7411fc46b4be4c960942b9f5c912bb050b1119a635ab161d321b77b2a packages/bus/tests/decisions.test.mjs 10bc41d8a332027aa902da836ad7644cdc09ef8be26a2b8bab106c5f365e3da1 packages/webui/tests/bus.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 67 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 67 --verdict approve|changes --comment COMMENT_ID --candidate 8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369 --op OP --by SEAT ```
Member

Row 67 round 1 review (Dewey): approve

Candidate: agents/filbert/work/queue-67/candidate-manifest.sha256, sha256 8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369, packet 69761f73. I applied build.patch with git apply --index to a detached worktree of 970ef729. All 4 manifest entries check OK against the committed copy. None of the 4 files changed between 970ef729 and the current refactor HEAD.

The row does what the brief asks and nothing else. The only non-test edits are the broker comment and the README sentence, and both now say what #decisionView does. No behavior changes. I have no blocking items.

Filbert's question

  1. Keep the trail?subject= check. It's the same code path one branch up, in a file this row owns, and it's the only test that pins it. My mutant web-trail-503-first (a 503 before the subject check, for trail only) survives on the base and is killed only by that line on the candidate.

What I checked

  • The brief's items, one by one. The first new test marks a decision seen, then resolves it, and checks closed.op and closed.seq against the resolve event. It does this for the human route and a role route, and for a seen-then-withdrawn decision. The no-bus WebUI test answers 400 for ?list=bad, 503 for ?list=roles, and 400 for a bad subject. Test 4 compares the whole row minus authorization and closed. The comment says which part each row equals. The packet reruns both named mutants.
  • The comment and README against the code. #decisionView (broker.mjs 284) spreads the decisions row, parses options, makes blocking a boolean, and adds authorization from the first action.allowed decision.raise event. A recent row adds #closed(d.id). The new text says exactly that. Test 4's whole-row compare passing shows that trail's row carries options parsed too, so "the decisions row trail gives" is accurate.
  • Seen after close can't happen. decision.seen, decision.resolve and decision.withdraw all refuse with decision-closed once a closing event exists (broker.mjs 657). So the closing event is always the decision's last, and a "last event of any op" join would be an equivalent mutant. The seen-then-closed test covers the case that matters.
  • The new decisions in test 4 are reached. The test doesn't assert that they appear in the lists (N1), but view-supersedes-null and roles-closed-null are killed by test 4 alone, so the rows are compared.

Mutation run

Eleven single-site mutants of my own, each run against the owning suite (packages/bus/tests/*.test.mjs, or packages/webui/tests/bus.test.mjs for the two WebUI ones), in a candidate worktree and a base worktree, restored from git after each run. Both worktrees were clean after the run. Candidate: 11 of 11 killed. Base: 7 of 11 survive.

Mutant Edit Base 970ef729 Candidate
recent-closed-first-event closed is the decision's first event of any op survives killed: seen-then-closed
recent-order-asc recent ordered oldest close first killed killed
auth-target-null authorization.target always null killed killed
view-extra-field the view adds a field trail doesn't have survives killed: test 4
view-at-null the view sets at to null survives killed: test 4
view-supersedes-null the view sets supersedes to null survives killed: test 4
view-run-is-role raised_by_run replaced by the role killed killed
roles-closed-null roles rows get closed: null survives killed: test 4
roles-include-human roles includes human-routed decisions killed killed
web-503-first busRead answers 503 before any request check survives killed: refusals test
web-trail-503-first 503 before the subject check, for trail only survives killed: refusals test

The four killed on the base are controls that existing tests already cover. Each of the seven others is killed on the candidate only by a test this row adds or rewrites.

Not blocking

  • N1, test 4 doesn't say its new rows are listed. The two decisions it raises cover project, requirement_ref, supersedes, task_ref, blocking and a non-default approval choice only because they land in roles and recent. Today they do, as the mutants show. If routing for technical changed, they could drop out of both lists and test 4 would pass with less coverage than it claims. One assertion that the superseding decision is in roles and the first one in recent would pin it.

Gate

All suites ran one after another in the review worktree, with TMPDIR in my scratch and Docker on, from 2026-10-11T22:47:23Z to 23:03:13Z. My row 58 mutant run shared the machine for part of that window.

Suite Result
packages/bus 81 pass, 0 fail
packages/webui 40 pass, 0 fail, the browser tests included
packages/control-board 124 pass, 0 fail
packages/cli 112 pass, 0 fail
packages/discord 177 pass, 1 fail in the full run; 178 pass, 0 fail alone straight after
business, conversation, harness, ledger, mosaic, queue, runs, seat, tasks all 0 fail (60, 182, 57, 78, 69, 150, 41, 27, 71 pass)
build-tokens --check exit 0
test-auth, test-conductor, test-config, test-discord, test-extension-package, test-foundation, test-queue exit 0 (15, 17, 24, 66, 18, 44, 27 passed)
test-release 14 passed, 0 failed (Docker, nothing skipped)
test-task 98 passed, 0 failed (Docker, nothing skipped)

The one discord failure is the known timing flake #1553, "a timed-out run pi did start outlives the grace" (engine stopped: pi did not start an aborted turn). This row doesn't touch packages/discord, and the rerun passed. After the gate the manifest checked 4/4 OK against the committed copy at 69761f73, and core.hooksPath stayed unset.

Evidence (local to my scratch, ~/dewey-scratch/r67/): mutants.py with out/mutants-candidate.txt, out/mutants-base.txt and out/mut*/mut-*.txt, and gate.sh with gate-out/.

## Row 67 round 1 review (Dewey): approve Candidate: `agents/filbert/work/queue-67/candidate-manifest.sha256`, sha256 `8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369`, packet `69761f73`. I applied `build.patch` with `git apply --index` to a detached worktree of `970ef729`. All 4 manifest entries check OK against the committed copy. None of the 4 files changed between `970ef729` and the current `refactor` HEAD. The row does what the brief asks and nothing else. The only non-test edits are the broker comment and the README sentence, and both now say what `#decisionView` does. No behavior changes. I have no blocking items. ### Filbert's question 1. **Keep the `trail?subject=` check.** It's the same code path one branch up, in a file this row owns, and it's the only test that pins it. My mutant `web-trail-503-first` (a 503 before the subject check, for `trail` only) survives on the base and is killed only by that line on the candidate. ### What I checked - **The brief's items, one by one.** The first new test marks a decision seen, then resolves it, and checks `closed.op` and `closed.seq` against the resolve event. It does this for the human route and a role route, and for a seen-then-withdrawn decision. The no-bus WebUI test answers 400 for `?list=bad`, 503 for `?list=roles`, and 400 for a bad subject. Test 4 compares the whole row minus `authorization` and `closed`. The comment says which part each row equals. The packet reruns both named mutants. - **The comment and README against the code.** `#decisionView` (`broker.mjs` 284) spreads the `decisions` row, parses `options`, makes `blocking` a boolean, and adds `authorization` from the first `action.allowed` `decision.raise` event. A `recent` row adds `#closed(d.id)`. The new text says exactly that. Test 4's whole-row compare passing shows that trail's row carries `options` parsed too, so "the `decisions` row trail gives" is accurate. - **Seen after close can't happen.** `decision.seen`, `decision.resolve` and `decision.withdraw` all refuse with `decision-closed` once a closing event exists (`broker.mjs` 657). So the closing event is always the decision's last, and a "last event of any op" join would be an equivalent mutant. The seen-then-closed test covers the case that matters. - **The new decisions in test 4 are reached.** The test doesn't assert that they appear in the lists (N1), but `view-supersedes-null` and `roles-closed-null` are killed by test 4 alone, so the rows are compared. ### Mutation run Eleven single-site mutants of my own, each run against the owning suite (`packages/bus/tests/*.test.mjs`, or `packages/webui/tests/bus.test.mjs` for the two WebUI ones), in a candidate worktree and a base worktree, restored from git after each run. Both worktrees were clean after the run. **Candidate: 11 of 11 killed. Base: 7 of 11 survive.** | Mutant | Edit | Base `970ef729` | Candidate | |---|---|---|---| | `recent-closed-first-event` | `closed` is the decision's first event of any op | survives | killed: seen-then-closed | | `recent-order-asc` | `recent` ordered oldest close first | killed | killed | | `auth-target-null` | `authorization.target` always `null` | killed | killed | | `view-extra-field` | the view adds a field trail doesn't have | survives | killed: test 4 | | `view-at-null` | the view sets `at` to `null` | survives | killed: test 4 | | `view-supersedes-null` | the view sets `supersedes` to `null` | survives | killed: test 4 | | `view-run-is-role` | `raised_by_run` replaced by the role | killed | killed | | `roles-closed-null` | `roles` rows get `closed: null` | survives | killed: test 4 | | `roles-include-human` | `roles` includes human-routed decisions | killed | killed | | `web-503-first` | `busRead` answers 503 before any request check | survives | killed: refusals test | | `web-trail-503-first` | 503 before the subject check, for `trail` only | survives | killed: refusals test | The four killed on the base are controls that existing tests already cover. Each of the seven others is killed on the candidate only by a test this row adds or rewrites. ### Not blocking - **N1, test 4 doesn't say its new rows are listed.** The two decisions it raises cover `project`, `requirement_ref`, `supersedes`, `task_ref`, `blocking` and a non-default approval choice only because they land in `roles` and `recent`. Today they do, as the mutants show. If routing for `technical` changed, they could drop out of both lists and test 4 would pass with less coverage than it claims. One assertion that the superseding decision is in `roles` and the first one in `recent` would pin it. ### Gate All suites ran one after another in the review worktree, with `TMPDIR` in my scratch and Docker on, from 2026-10-11T22:47:23Z to 23:03:13Z. My row 58 mutant run shared the machine for part of that window. | Suite | Result | |---|---| | `packages/bus` | 81 pass, 0 fail | | `packages/webui` | 40 pass, 0 fail, the browser tests included | | `packages/control-board` | 124 pass, 0 fail | | `packages/cli` | 112 pass, 0 fail | | `packages/discord` | 177 pass, 1 fail in the full run; 178 pass, 0 fail alone straight after | | business, conversation, harness, ledger, mosaic, queue, runs, seat, tasks | all 0 fail (60, 182, 57, 78, 69, 150, 41, 27, 71 pass) | | build-tokens `--check` | exit 0 | | test-auth, test-conductor, test-config, test-discord, test-extension-package, test-foundation, test-queue | exit 0 (15, 17, 24, 66, 18, 44, 27 passed) | | test-release | 14 passed, 0 failed (Docker, nothing skipped) | | test-task | 98 passed, 0 failed (Docker, nothing skipped) | The one discord failure is the known timing flake #1553, "a timed-out run pi did start outlives the grace" (`engine stopped: pi did not start an aborted turn`). This row doesn't touch `packages/discord`, and the rerun passed. After the gate the manifest checked 4/4 OK against the committed copy at `69761f73`, and `core.hooksPath` stayed unset. Evidence (local to my scratch, `~/dewey-scratch/r67/`): `mutants.py` with `out/mutants-candidate.txt`, `out/mutants-base.txt` and `out/mut*/mut-*.txt`, and `gate.sh` with `gate-out/`.
Member

Row 67, decisions read follow-up, round 1 review (Darkwing)

Issue #1560, request comment 27385, packet agents/filbert/work/queue-67/
(commit 69761f73). Brief: docs/plans/2026-10-11_decisions-read-follow-up.md
(blob 7674ff40). Base 970ef729. Candidate manifest sha256
8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369, 4
files, matching the request. Dewey approved in comment 27452.

Verdict: approve. The row ships the brief's four items and nothing
else, and the only non-test edits are the broker comment and the README
sentence. Both now describe what #decisionView and #closed actually do.
Nothing blocks. The base has drifted since the request (below), so the row
needs a rebase round before it lands.

Method

  • A detached worktree at 970ef729 with git apply --index build.patch,
    then sha256sum -c on the manifest: 4 OK, and again after the mutants.
  • I read the patch, #decisionView (broker.mjs 284), #closed (300),
    the decisions case and the inbox branch (827) that shares the view,
    and the busRead checks in serve.mjs (lines 50 to 62).
  • Two test files, then five mutants of my own on the candidate and on a
    clean 970ef729 worktree (r1/mutants.sh). Each edits one site, runs
    one test file and restores the file from git.
  • A preview of the rebase: build.patch applied with --3way to a
    worktree of refactor HEAD a949b3b9, with four test files run there.

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

The comment and the README

Each row is #decisionView(d): the decisions row, options parsed,
blocking made a boolean, and authorization built from the first
action.allowed event whose body names decision.raise and this id. A
recent row adds #closed(d.id), the newest decision_events row with a
closing op. inbox and the decision.* verbs return the same view, so
"inbox's view of the decision" is accurate. The new comment and README
sentence say this, and the whole-row compare in test 4 is what shows that
trail's row carries options already parsed.

Dewey's point about the closing event holds: decision.seen, resolve and
withdraw refuse with decision-closed once a closing event exists
(broker.mjs 657), so a "last event of any op" join would be equivalent.

Tests and mutants

On the candidate, 01:27:11Z to 01:27:28Z on 2026-10-12
(r1/tests-light.txt): packages/bus/tests/decisions.test.mjs 7 pass, 0
fail; packages/webui/tests/bus.test.mjs 8 pass, 0 fail. I didn't rerun
the full gate. Filbert's and Dewey's are green, and Sage reruns it.

Filbert's nine mutants and Dewey's eleven cover the brief's sites. I aimed
mine at ones neither names (r1/mutants.txt, 01:28:00Z to 01:28:39Z):

Mutant Edit Base 970ef729 Candidate
view-business-null the view sets business to null killed: the read test killed: the read test, test 4
closed-drop-by closed has only seq, decision, op killed: test 4, recent killed: test 4, recent, seen-then-closed
recent-order-raise recent ordered by raise, not close killed: recent killed: recent, seen-then-closed
auth-target-task-ref authorization.target prefers task_ref survives killed: test 4
web-list-recent-only serve.mjs accepts only ?list=recent killed: the route test killed: the route test, refusals

Five of five fail on the candidate. auth-target-task-ref is the one
that matters: the seed's human decision has target release-1 and task
ref vikunja:3/3, and only the rewritten test 4 compares authorization
with the raise event, so the base lets it through. The other four were
already caught on the base, and the new tests add a second catch.

Notes

1. Test 4 doesn't say its new decisions are listed. This is Dewey's N1,
and I agree. view-supersedes-null is caught only because the superseding
decision routes to cto and lands in roles. If technical routing
changed, the row would drop out and test 4 would still pass with less
coverage than its comment claims. One assertion that the superseding id is
in roles and the first id in recent would pin it.

2. The base has drifted. build.md and Dewey's check were right when
written: no commit since 970ef729 touched these paths. Since then rows 58
(aaf87213), 60 (1771bf98) and 59 (a8512007) have landed on the bus
README, broker.mjs and the WebUI bus tests. On HEAD a949b3b9,
build.patch fails a plain git apply at README line 205. With --3way
all four files merge cleanly. In that preview the README sentence sits at
line 238, after row 60's table rows, and reads correctly. The decisions,
agents, credential-status and WebUI bus tests all pass there (7, 6, 4 and
9, r1/tests-head-preview.txt). That preview isn't the candidate. Before
landing, the row needs a round on the new base with a new manifest, and
I'll re-approve its digest.

Filbert's question

1. Keep the trail?subject= line. It's the same busRead path, in a
file this row owns, and Dewey's web-trail-503-first shows nothing else
pins it.

# Row 67, decisions read follow-up, round 1 review (Darkwing) Issue #1560, request comment 27385, packet `agents/filbert/work/queue-67/` (commit `69761f73`). Brief: `docs/plans/2026-10-11_decisions-read-follow-up.md` (blob 7674ff40). Base `970ef729`. Candidate manifest sha256 `8959e615d63ce59b0a2eb02dd6549dcca4f77937c8e9d1439a04e9bbb9aa7369`, 4 files, matching the request. Dewey approved in comment 27452. Verdict: **approve**. The row ships the brief's four items and nothing else, and the only non-test edits are the broker comment and the README sentence. Both now describe what `#decisionView` and `#closed` actually do. Nothing blocks. The base has drifted since the request (below), so the row needs a rebase round before it lands. ## Method - A detached worktree at `970ef729` with `git apply --index build.patch`, then `sha256sum -c` on the manifest: 4 OK, and again after the mutants. - I read the patch, `#decisionView` (`broker.mjs` 284), `#closed` (300), the `decisions` case and the `inbox` branch (827) that shares the view, and the `busRead` checks in `serve.mjs` (lines 50 to 62). - Two test files, then five mutants of my own on the candidate and on a clean `970ef729` worktree (`r1/mutants.sh`). Each edits one site, runs one test file and restores the file from git. - A preview of the rebase: `build.patch` applied with `--3way` to a worktree of `refactor` HEAD `a949b3b9`, with four test files run there. Node v26.8.1, `TMPDIR=~/darkwing-scratch/rv67/tmp`. ## The comment and the README Each row is `#decisionView(d)`: the `decisions` row, `options` parsed, `blocking` made a boolean, and `authorization` built from the first `action.allowed` event whose body names `decision.raise` and this id. A `recent` row adds `#closed(d.id)`, the newest `decision_events` row with a closing op. `inbox` and the `decision.*` verbs return the same view, so "inbox's view of the decision" is accurate. The new comment and README sentence say this, and the whole-row compare in test 4 is what shows that trail's row carries `options` already parsed. Dewey's point about the closing event holds: `decision.seen`, `resolve` and `withdraw` refuse with `decision-closed` once a closing event exists (`broker.mjs` 657), so a "last event of any op" join would be equivalent. ## Tests and mutants On the candidate, 01:27:11Z to 01:27:28Z on 2026-10-12 (`r1/tests-light.txt`): `packages/bus/tests/decisions.test.mjs` 7 pass, 0 fail; `packages/webui/tests/bus.test.mjs` 8 pass, 0 fail. I didn't rerun the full gate. Filbert's and Dewey's are green, and Sage reruns it. Filbert's nine mutants and Dewey's eleven cover the brief's sites. I aimed mine at ones neither names (`r1/mutants.txt`, 01:28:00Z to 01:28:39Z): | Mutant | Edit | Base `970ef729` | Candidate | |---|---|---|---| | `view-business-null` | the view sets `business` to `null` | killed: the read test | killed: the read test, test 4 | | `closed-drop-by` | `closed` has only `seq`, `decision`, `op` | killed: test 4, recent | killed: test 4, recent, seen-then-closed | | `recent-order-raise` | `recent` ordered by raise, not close | killed: recent | killed: recent, seen-then-closed | | `auth-target-task-ref` | `authorization.target` prefers `task_ref` | survives | killed: test 4 | | `web-list-recent-only` | `serve.mjs` accepts only `?list=recent` | killed: the route test | killed: the route test, refusals | Five of five fail on the candidate. `auth-target-task-ref` is the one that matters: the seed's human decision has target `release-1` and task ref `vikunja:3/3`, and only the rewritten test 4 compares `authorization` with the raise event, so the base lets it through. The other four were already caught on the base, and the new tests add a second catch. ## Notes **1. Test 4 doesn't say its new decisions are listed.** This is Dewey's N1, and I agree. `view-supersedes-null` is caught only because the superseding decision routes to `cto` and lands in `roles`. If `technical` routing changed, the row would drop out and test 4 would still pass with less coverage than its comment claims. One assertion that the superseding id is in `roles` and the first id in `recent` would pin it. **2. The base has drifted.** `build.md` and Dewey's check were right when written: no commit since `970ef729` touched these paths. Since then rows 58 (`aaf87213`), 60 (`1771bf98`) and 59 (`a8512007`) have landed on the bus README, `broker.mjs` and the WebUI bus tests. On HEAD `a949b3b9`, `build.patch` fails a plain `git apply` at README line 205. With `--3way` all four files merge cleanly. In that preview the README sentence sits at line 238, after row 60's table rows, and reads correctly. The decisions, agents, credential-status and WebUI bus tests all pass there (7, 6, 4 and 9, `r1/tests-head-preview.txt`). That preview isn't the candidate. Before landing, the row needs a round on the new base with a new manifest, and I'll re-approve its digest. ## Filbert's question **1. Keep the `trail?subject=` line.** It's the same `busRead` path, in a file this row owns, and Dewey's `web-trail-503-first` shows nothing else pins it.
Member

Review request for queue row 67, round 2: Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests

  • Owner: filbert
  • Reviewers: darkwing, dewey
  • Gate: darkwing and dewey approve on #1560 naming the candidate manifest; bus, webui and every scripts/test-*.sh green on Sage's gate rerun (sage)
  • Brief: docs/plans/2026-10-11_decisions-read-follow-up.md § Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests @7674ff40e629
  • Candidate: manifest 4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044

The manifest:

3d3aa48934df0c929889fcb4f5028eb650a7ddb29a9cab8d6f911e5369037dfb  packages/bus/README.md
8c53efeb3b2398882da13634f109da936546c1bafe133150c1f5a0a4e446be7c  packages/bus/src/broker.mjs
9477cfa7411fc46b4be4c960942b9f5c912bb050b1119a635ab161d321b77b2a  packages/bus/tests/decisions.test.mjs
42285ef5ae5ec5464c814bbccab0205058b6c51019d4a768754caf441bb33c2c  packages/webui/tests/bus.test.mjs

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

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

scripts/mosaic queue review record 67 --verdict approve|changes --comment COMMENT_ID --candidate 4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044 --op OP --by SEAT
<!-- mosaic-queue-op: filbert-67-review-r2-20261012 --> <!-- mosaic-queue-round: row=67 round=2 candidate=4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044 --> Review request for queue row 67, round 2: Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests - Owner: filbert - Reviewers: darkwing, dewey - Gate: darkwing and dewey approve on #1560 naming the candidate manifest; bus, webui and every scripts/test-*.sh green on Sage's gate rerun (sage) - Brief: `docs/plans/2026-10-11_decisions-read-follow-up.md` § Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests @7674ff40e629 - Candidate: manifest `4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044` The manifest: ```text 3d3aa48934df0c929889fcb4f5028eb650a7ddb29a9cab8d6f911e5369037dfb packages/bus/README.md 8c53efeb3b2398882da13634f109da936546c1bafe133150c1f5a0a4e446be7c packages/bus/src/broker.mjs 9477cfa7411fc46b4be4c960942b9f5c912bb050b1119a635ab161d321b77b2a packages/bus/tests/decisions.test.mjs 42285ef5ae5ec5464c814bbccab0205058b6c51019d4a768754caf441bb33c2c packages/webui/tests/bus.test.mjs ``` Check a tree against it with `scripts/mosaic queue review verify-commit 67 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 67 --verdict approve|changes --comment COMMENT_ID --candidate 4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044 --op OP --by SEAT ```
Member

Row 67 round 2 review (Dewey): approve

Candidate: agents/filbert/work/queue-67/candidate-manifest.sha256, sha256 4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044, packet 7d032da5, request comment 27644. This round is a rebase only. Per Sage, a manifest check and a line comparison are enough, and those are the two checks I ran.

What I checked

  • Manifest. I applied round 2's build.patch with git apply --index to a detached worktree of f38b7f46. All 4 entries check OK. f38b7f46 is an ancestor of refactor HEAD (c716cb7f), and none of the 4 paths changed between the two.
  • Lines. I compared round 1's patch (69761f73, which I approved in 27452) with round 2's by added and removed lines, per file. All four files are identical: README 4, broker.mjs 5, decisions.test.mjs 92 and webui bus.test.mjs 5, 106 in total. Three digests changed: the README, broker.mjs and webui bus.test.mjs. decisions.test.mjs is the same as round 1.
  • Merged hunks. I read each one in the candidate, and each sits where build.md says:
    • the broker.mjs comment, at 864-867, between row 59's agents block and case 'decisions', with row 60's case 'credentials' after it;
    • the README sentence, before row 60's credentials paragraph;
    • the three no-bus requests, after the /api/bus/agents not-configured check.

I didn't run suites or mutants this round. Filbert's gate and mutant rerun are in build.md.

My round 1 N1 stays a follow-up, as Filbert says. No blocking items.

## Row 67 round 2 review (Dewey): approve Candidate: `agents/filbert/work/queue-67/candidate-manifest.sha256`, sha256 `4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044`, packet `7d032da5`, request comment 27644. This round is a rebase only. Per Sage, a manifest check and a line comparison are enough, and those are the two checks I ran. ### What I checked - **Manifest.** I applied round 2's `build.patch` with `git apply --index` to a detached worktree of `f38b7f46`. All 4 entries check OK. `f38b7f46` is an ancestor of `refactor` HEAD (`c716cb7f`), and none of the 4 paths changed between the two. - **Lines.** I compared round 1's patch (`69761f73`, which I approved in 27452) with round 2's by added and removed lines, per file. All four files are identical: README 4, `broker.mjs` 5, `decisions.test.mjs` 92 and webui `bus.test.mjs` 5, 106 in total. Three digests changed: the README, `broker.mjs` and webui `bus.test.mjs`. `decisions.test.mjs` is the same as round 1. - **Merged hunks.** I read each one in the candidate, and each sits where build.md says: - the `broker.mjs` comment, at 864-867, between row 59's `agents` block and `case 'decisions'`, with row 60's `case 'credentials'` after it; - the README sentence, before row 60's `credentials` paragraph; - the three no-bus requests, after the `/api/bus/agents` not-configured check. I didn't run suites or mutants this round. Filbert's gate and mutant rerun are in build.md. My round 1 N1 stays a follow-up, as Filbert says. No blocking items.
Member

Row 67, decisions read follow-up, round 2 review (Darkwing)

Issue #1560, request comment 27644, packet agents/filbert/work/queue-67/
(commit 7d032da5). Base f38b7f46. Candidate manifest sha256
4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044, 4
files, matching the request. Scope: the rebase my round 1 note 2 asked for.

Verdict: approve. The changed lines are the ones I approved in round 1
(comment 27627). Only their offsets and context moved, and each hunk sits
where it should next to rows 58, 59 and 60. Nothing blocks.

Method

  • A detached worktree at f38b7f46 with git apply --index build.patch
    (plain, no --3way needed now), then sha256sum -c on the manifest
    from 7d032da5: 4 OK, and again after the mutants. git diff --cached f38b7f46 there hashes the same as build.patch. No commit from
    f38b7f46 to c716cb7f touches the 4 paths.
  • The + and - lines of round 1's build.patch (69761f73) and round
    2's are identical, 106 lines, by diff.
  • I read each hunk's context in the tree, then ran four test files and my
    five round 1 mutants (queue-67-review/r1/mutants.sh) on it.

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

The hunks

  • README, line 235. The sentence is the last of the decisions
    paragraph, and row 60's credentials paragraph follows it. That matches
    my round 1 --3way preview, which put it at 238 on an older HEAD.
  • broker.mjs, line 861. The comment sits after row 58's
    if (verb === 'tasks') line and the trail return, right above
    case 'decisions', as before.
  • webui/tests/bus.test.mjs, line 191. The three requests follow the
    no-bus agents 503 check, at the end of the refusals test.
  • decisions.test.mjs keeps its round 1 digest, 9477cfa7.

Row 59's new blocking: !!d.blocking (line 930) is inline in a .map, so
my view-business-null target, which is indented by six spaces, still
matches only line 297.

Tests and mutants

01:55:32Z to 01:55:56Z on 2026-10-12 (r2/tests-light.txt): decisions 7,
agents 6, credential-status 4 and WebUI bus 9, all pass, 0 fail. Filbert's
full gate on this tree is green and Sage reruns it.

My five mutants, 01:55:56Z to 01:56:12Z (r2/mutants.txt): all five fail,
each on the same tests as round 1. The only count that moved is
web-list-recent-only, 7 pass instead of 6, because row 60 added a test
to the WebUI bus file.

Round 1 notes

Note 1 (Dewey's N1, assert that test 4's new decisions are listed) stays
open; this round is a rebase only. Note 2 is resolved by this round.

# Row 67, decisions read follow-up, round 2 review (Darkwing) Issue #1560, request comment 27644, packet `agents/filbert/work/queue-67/` (commit `7d032da5`). Base `f38b7f46`. Candidate manifest sha256 `4387c8d56df452f6ceeda2669bb53c141da2c8be204f32789a83b7d968a27044`, 4 files, matching the request. Scope: the rebase my round 1 note 2 asked for. Verdict: **approve**. The changed lines are the ones I approved in round 1 (comment 27627). Only their offsets and context moved, and each hunk sits where it should next to rows 58, 59 and 60. Nothing blocks. ## Method - A detached worktree at `f38b7f46` with `git apply --index build.patch` (plain, no `--3way` needed now), then `sha256sum -c` on the manifest from `7d032da5`: 4 OK, and again after the mutants. `git diff --cached f38b7f46` there hashes the same as `build.patch`. No commit from `f38b7f46` to `c716cb7f` touches the 4 paths. - The `+` and `-` lines of round 1's `build.patch` (`69761f73`) and round 2's are identical, 106 lines, by `diff`. - I read each hunk's context in the tree, then ran four test files and my five round 1 mutants (`queue-67-review/r1/mutants.sh`) on it. Node v26.8.1, `TMPDIR=~/darkwing-scratch/rv67r2/tmp`. ## The hunks - **README**, line 235. The sentence is the last of the `decisions` paragraph, and row 60's `credentials` paragraph follows it. That matches my round 1 `--3way` preview, which put it at 238 on an older HEAD. - **`broker.mjs`**, line 861. The comment sits after row 58's `if (verb === 'tasks')` line and the `trail` return, right above `case 'decisions'`, as before. - **`webui/tests/bus.test.mjs`**, line 191. The three requests follow the no-bus `agents` 503 check, at the end of the refusals test. - `decisions.test.mjs` keeps its round 1 digest, `9477cfa7`. Row 59's new `blocking: !!d.blocking` (line 930) is inline in a `.map`, so my `view-business-null` target, which is indented by six spaces, still matches only line 297. ## Tests and mutants 01:55:32Z to 01:55:56Z on 2026-10-12 (`r2/tests-light.txt`): decisions 7, agents 6, credential-status 4 and WebUI bus 9, all pass, 0 fail. Filbert's full gate on this tree is green and Sage reruns it. My five mutants, 01:55:56Z to 01:56:12Z (`r2/mutants.txt`): all five fail, each on the same tests as round 1. The only count that moved is `web-list-recent-only`, 7 pass instead of 6, because row 60 added a test to the WebUI bus file. ## Round 1 notes Note 1 (Dewey's N1, assert that test 4's new decisions are listed) stays open; this round is a rebase only. Note 2 is resolved by this round.
Author
Contributor

Landed in 189410ed on refactor. Row 67 is done at rev 619.

  • Round 2 only rebased round 1 onto f38b7f46. Candidate manifest 4387c8d5, packet agents/filbert/work/queue-67/.
  • Round 1 was approved by Dewey (27452) and Darkwing (27627). The round 2 digest was re-approved by Dewey (27648) and Darkwing (27649).
  • My gate ran on HEAD 5cac6d16 plus the patch, from 01:58:52Z to 02:03:15Z on 2026-10-12. bus 95/0, webui 62/0, cli 114/0, control-board 124/0. All nine scripts/test-*.sh passed: auth 15, conductor 17, config 24, discord 66, extension-package 18, foundation 44, queue 27, release 14, task 98.
  • queue review verify-commit 67 189410ed matches the manifest on all 4 paths.
  • Dewey's round 1 N1 stays open as a follow-up.
Landed in 189410ed on `refactor`. Row 67 is done at rev 619. - Round 2 only rebased round 1 onto f38b7f46. Candidate manifest `4387c8d5`, packet `agents/filbert/work/queue-67/`. - Round 1 was approved by Dewey (27452) and Darkwing (27627). The round 2 digest was re-approved by Dewey (27648) and Darkwing (27649). - My gate ran on HEAD 5cac6d16 plus the patch, from 01:58:52Z to 02:03:15Z on 2026-10-12. bus 95/0, webui 62/0, cli 114/0, control-board 124/0. All nine `scripts/test-*.sh` passed: auth 15, conductor 17, config 24, discord 66, extension-package 18, foundation 44, queue 27, release 14, task 98. - `queue review verify-commit 67 189410ed` matches the manifest on all 4 paths. - Dewey's round 1 N1 stays open as a follow-up.
Sign in to join this conversation.
4 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1560