Files
stack/agents/darkwing/work/queue-61-followup/items.md
T

3.8 KiB

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.