Unclaimed files left in the canonical checkout. Inventory: canonical-cleanup-inventory.md (commit-as-evidence groups). detect-secrets scan clean on 2026-11-02: hits are sha256 pins, git object ids, test sentinels already in tracked tests and unit-file lines.
4.4 KiB
Row 88 round 1 (#1582), Filbert: approve.
Candidate manifest SHA-256: 59a164c6099b490c3dfbcb7b11dbae63ed94a25c16bf131115914c829e17f5a6. Base: 8e0fbca4. Packet: agents/researcher/work/queue-88/r1/ (f0bab46e). This answers request 28213.
I rebuilt the candidate in my own worktree at 8e0fbca4 and applied build.patch. All five manifest hashes match. The patch touches only the five paths. Nothing under packages/tasks/ or packages/webui/, and nothing in the slice 1 plan, changed from 8e0fbca4 to the current origin/refactor.
Bidi and control characters: none are literal in this candidate. I scanned the five paths and build.patch for U+200B to U+200F, U+202A to U+202E, U+2060 to U+2069, U+FEFF, U+00AD, C0 controls other than tab, LF and CR, and U+0080 to U+009F. There are no hits in the four non-bus.js paths or in the patch. bus-browser.test.mjs:99 now uses the \u202e escape, not the literal character. The only hit is in bus.js, at line 13, which this row doesn't touch (see N3).
Static findings against the brief's eight items:
- The writers table's
aria-labelends ", scroll for all columns", which matches six of the other region labels in bus.js. The browser test reads it back at :236 (M1). - The README says the message "names the file or the key at fault, never a path". The new README pin test holds the wording (M6).
- The
fields.mjsheader names the Field table as the reviewed prose and says the test checks it. This is a comment-only change (ruling B), with no code change (the diff is lines 3 to 5). - The
fields.test.mjsheader says it checks againstsrc/verbs.mjs, with the role files as given. - The prose test reads the section from
### Field tableto### Rows and order, then checks two things. Every name in the prose must be a fields.json label (ruling E: it fails, not skips). Each field must have exactly one row, and the set of backtickedtask.*verbs in its Action column must equal the table's verbs. It compares only the Field and verb columns, as the brief says. A missing section can't pass vacuously, because the per-fieldhit.length === 1check fails (M4). - The cto is an actor, with its own tracker bot and token. The route expectation now sends the arbiter's own cross-role decision to the human, matching the broker rule that M9 pins, and the resolve goes to
caps[route]. M5 is killed by the walk. constructor(andtoString) refuse withnot a task verb, which kills M2 (hasOwntoin).- The comments row's label holds
HOSTILE.slice(34), which is 63 characters and under the 80 cap (ruling A). It keeps the img/onerror, ESC and U+202E classes and drops only<script>, and the note carries all of HOSTILE. The page shows both as text, andinertCheck('task')passes, which kills M3 and M3b. The table still has 11 rows, so the hostile copy passedcheckFieldsand was rendered.
Notes, not blocking:
- N1. Item 3 says the header should say "how the prose is checked". It says the test "checks that prose and this table against what the verbs do". The test actually checks the prose's verbs against fields.json, and fields.json against the verbs. The result is the same, but the header doesn't say the prose is matched on its Field and verb columns.
- N2. The rewrapped
fields.test.mjsheader has one 146-character line (line 13), while the others wrap near 100. The base file already has 19 lines over 110, so this is cosmetic. - N3, a follow-up and not this row. Base
bus.js:13, theUNSEENclass ininert(), holds literal U+00AD, U+200E, U+200F, U+202A to U+202E and U+2066 to U+2069, unlike the escapedCONTROLclass next to it. Under the Trojan Source ruling it would read better as\uescapes.git grepon8e0fbca4also finds literal bidi characters inpackages/webui/tests/bus.test.mjsandpackages/conversation/tests/flows.test.mjs. This row may change only bus.js's writers table, so it leaves them alone. - N4.
inertCheck's pattern omits U+200E and U+200F, whichinert()handles. This file's HOSTILE has neither, so nothing is missed here.
My review is static. I ran no suites, mutants or queue-commit.sh. The packet reports tasks 92/0, webui 108/0, and M1 to M6, M3b and M9 all killed. The docker cases in test-release and test-task, and queue verify/render, were skipped in the worktree, as BUILD.md records. Sage's gate on the canonical checkout is the check of record. The bus.js line is live at the next Console restart (decision 109). It has Mos's decision 123 go, per Sage.