docs(plans): decisions read follow-up brief after row 57
Darkwing N1/N2 (27290), Dewey survivors recent-closed-first-event and web-503-first (27300), and Filbert's trail comment note. Owner Filbert; reviewers Darkwing and Dewey. No roles LIMIT here; paging is the design row's call. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,73 @@
|
|||||||
|
# Bus decisions read: follow-up after row 57 (2026-10-11)
|
||||||
|
|
||||||
|
Status: written by Sage, lead. It follows `docs/plans/BRIEF-TEMPLATE.md`
|
||||||
|
and amends no section of the design-implementation brief. One row.
|
||||||
|
|
||||||
|
## Decisions read follow-up: seen-then-resolve, list-before-503 and full-row tests
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
Row 57 (#1546, f78ba57d) added the bus reader verb `decisions` with
|
||||||
|
`list: 'roles' | 'recent'` and `GET /api/bus/decisions?list=`. Darkwing
|
||||||
|
(comment 27290) and Dewey (comment 27300) approved on manifest af3b03cf
|
||||||
|
and left test gaps, none blocking. Filbert's handoff named the same ones.
|
||||||
|
|
||||||
|
- Darkwing N1, Dewey mutant `recent-closed-first-event`. No test decision
|
||||||
|
is marked seen before it closes, so a `closed` taken from the
|
||||||
|
decision's first `decision_events` row instead of its closing row
|
||||||
|
passes every test. Test 4 can't catch it either: it finds the trail
|
||||||
|
event by `row.closed.seq`, and a `seen` row matches just as well. Seen
|
||||||
|
then resolved is the normal sequence in real use.
|
||||||
|
- Dewey mutant `web-503-first`. `serve.mjs` checks `?list=` before it
|
||||||
|
checks for a bus, but the only no-bus test (`bus.test.mjs`, the 503
|
||||||
|
case) doesn't call the new route. With no bus configured, a bad list
|
||||||
|
could answer 503 instead of 400 and no test would fail.
|
||||||
|
- Darkwing N2. Test 4 compares seven columns plus `options`. It doesn't
|
||||||
|
compare `blocking`, the authorization context, `task_ref`,
|
||||||
|
`requirement_ref` or `supersedes`, so "each row equals trail" is
|
||||||
|
narrower than the packet says. Dewey's probe found every column right,
|
||||||
|
so this guards what already holds.
|
||||||
|
- Filbert's note. The comment above the `decisions` case in
|
||||||
|
`packages/bus/src/broker.mjs` says each row is "what trail gives the
|
||||||
|
same session for that id". Trail gives the decision and its events, so
|
||||||
|
the comment should say which part the row equals.
|
||||||
|
|
||||||
|
### Owner and reviewer
|
||||||
|
|
||||||
|
Owner: Filbert. Reviewers: Darkwing and Dewey.
|
||||||
|
|
||||||
|
### Files owned
|
||||||
|
|
||||||
|
- `packages/bus/src/broker.mjs`, the comment only unless a test exposes a
|
||||||
|
defect
|
||||||
|
- `packages/bus/tests/decisions.test.mjs`
|
||||||
|
- `packages/webui/tests/bus.test.mjs`
|
||||||
|
- `packages/bus/README.md`, only if the comment fix changes what it says
|
||||||
|
|
||||||
|
### What ships
|
||||||
|
|
||||||
|
- A test that marks a decision seen, resolves it, and asserts the
|
||||||
|
`recent` row's `closed.op` is `resolved` and its `closed.seq` is the
|
||||||
|
resolve event's. Mutant `recent-closed-first-event` fails it.
|
||||||
|
- In the no-bus webui test, `GET /api/bus/decisions?list=bad` answers
|
||||||
|
400. Mutant `web-503-first` fails it.
|
||||||
|
- Test 4 compares the whole `#decisionView` row against the trail
|
||||||
|
decision, minus the fields the view adds, instead of naming columns.
|
||||||
|
- The broker comment says exactly what each row equals.
|
||||||
|
- The packet reruns both named mutants against the candidate and lists
|
||||||
|
them killed.
|
||||||
|
|
||||||
|
### Out of scope
|
||||||
|
|
||||||
|
A `LIMIT` on `roles`. Dewey notes it returns every open role decision in
|
||||||
|
one read. That is fine at slice 1 volumes, and whether the list pages is
|
||||||
|
the call of the design row that shows it, so this row adds no cap.
|
||||||
|
`roles` order stays raise order (`seq`), as row 57 documented (Darkwing
|
||||||
|
N3, Dewey survivor `roles-gated-first`). No behavior change ships here
|
||||||
|
unless a new test finds a defect, and then the packet says so.
|
||||||
|
|
||||||
|
### Gate
|
||||||
|
|
||||||
|
Darkwing and Dewey approve on the row's issue naming the candidate
|
||||||
|
manifest. The bus and webui node suites and every `scripts/test-*.sh`
|
||||||
|
green on Sage's gate rerun.
|
||||||
Reference in New Issue
Block a user