From 140fe923b1af6ff94a89a182a471f9c2c6876708 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Mon, 12 Oct 2026 14:07:17 -0500 Subject: [PATCH] darkwing: row 61 follow-up item list (Dewey 1-2, Filbert N1-N5, fields.mjs header) Co-Authored-By: Claude Opus 5.5 --- .../darkwing/work/queue-61-followup/items.md | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 agents/darkwing/work/queue-61-followup/items.md diff --git a/agents/darkwing/work/queue-61-followup/items.md b/agents/darkwing/work/queue-61-followup/items.md new file mode 100644 index 000000000..2742d30aa --- /dev/null +++ b/agents/darkwing/work/queue-61-followup/items.md @@ -0,0 +1,68 @@ +# Row 61 follow-up, the item list (Darkwing) + +Row 61 (#1550) landed in `6c42344d`. Both reviewers approved with notes +that needed nothing that round: Dewey in comment 27776, Filbert in comment +27785. This list collects them with my own, so Sage can brief one row. +Line numbers are at `6c42344d`. None of it changes who may write a field, +`fields.json` or a role file. + +## Code and docs + +1. **The writers table's aria-label lacks the suffix** (Dewey 1). + `packages/webui/src/public/bus.js:364` has + `aria-label="Who may write each field"`. Every other scrolling table + on the page ends its label with ", scroll for all columns" (lines 333, + 399, 432, 476, 478). Add it. +2. **The webui README says the refusal names the file** (Filbert N1). + `packages/webui/README.md:447`: "the loader's message, which names the + file and never a path". A schema refusal names a key + (`fields[3].label: ...`, `verbs.task.close: ...`); only the read and + parse failures say `fields.json`. Say the message names the file or + the key at fault, never a path. +3. **The fields.mjs header says the test checks the prose** (mine). + `packages/tasks/src/fields.mjs:3-5`: "The prose in + docs/plans/2026-10-04_slice-1.md stays the reviewed source; + tests/fields.test.mjs checks both against what the verbs do." The test + checks the table, not the prose. If item 5 lands, the sentence becomes + true for the prose too and needs only to say how; if not, it says the + test checks the table. (`packages/tasks/README.md:129-130`, "checks + both", means the two layers and is right as it stands.) +4. **The test header overstates the role-file claim** (Filbert N2). + `packages/tasks/tests/fields.test.mjs:12-16` says a change to a role + file that leaves the table and the verbs disagreeing fails the file. + The walk reads `roles/*.json` both for what it expects and through the + broker for what happens, so a role-file change moves both sides + together. What the file catches is the table against `verbs.mjs`, with + the role files as given. Reword to say so. + +## Tests + +5. **No test checks the prose against `fields.json`** (Dewey 2). The + field table section of `docs/plans/2026-10-04_slice-1.md` (`### Field + table`, line 58) and the data agree today on all 11 rows (Dewey checked + by hand). A test that reads that section and checks each field's verbs + against the table would catch a later edit to either. Keep it to the + field and verb columns; the prose's wording around the calls isn't + meant to match the data character for character. +6. **The cto is never an actor in the verb walk** (Filbert N3). + `fields.test.mjs:139` drives pm, coder, reviewer and researcher; the + cto (line 141) only resolves decisions. Add cto to the walk, so a table + or role change that lets the cto write a field it shouldn't fails. +7. **`in` in place of `Object.hasOwn` survives** (Filbert N4). + `fields.mjs:48` checks a write's verb with `Object.hasOwn(table.verbs, + w.verb)`. With `in`, a verb named `constructor` passes through the + prototype. Add a schema case with `"verb": "constructor"` that must + refuse with `not a task verb`. +8. **Dropping `txt()` around the label survives** (Filbert N5). + `bus.js:363` escapes the label and note with `txt()`. The browser test + reads the committed table, whose labels are plain. Give the test's + `fieldsFile` copy a label and note carrying the browser test's + `HOSTILE` string (`packages/webui/tests/bus-browser.test.mjs:19`), then + run its inert check on the task page. + +## Owner and size + +Mine, as the row 61 author: two small code files, two READMEs, three test +files. The packet should show items 7 and 8 kill the two mutants Filbert +found surviving, item 5 fail on a one-verb edit to the prose, and item 6 +fail on a table or role edit that only a cto actor exposes.