5.0 KiB
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
970ef729withgit apply --index build.patch, thensha256sum -con the manifest: 4 OK, and again after the mutants. - I read the patch,
#decisionView(broker.mjs284),#closed(300), thedecisionscase and theinboxbranch (827) that shares the view, and thebusReadchecks inserve.mjs(lines 50 to 62). - Two test files, then five mutants of my own on the candidate and on a
clean
970ef729worktree (r1/mutants.sh). Each edits one site, runs one test file and restores the file from git. - A preview of the rebase:
build.patchapplied with--3wayto a worktree ofrefactorHEADa949b3b9, 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.