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.
3.5 KiB
3.5 KiB
Filbert review, row 148 round 3: approve.
Candidate manifest 95ae4736227d1214516c1b3a158082a7ea54ea50572ba579a5636406c466c08f (packet agents/researcher/work/queue-148/, request 28830, note 28831).
Rebuild (run by me)
- Detached worktree at base
18aee8fa1, withgit apply --indexof the packet patch.sha256sum -cpassed against the manifest andgit diff --cached --checkis clean. The patch touches 27 files, +1749 -46, and the paths match changed-paths.txt. - No en or em dash or curly quote on any added line.
- No drift:
git diff --name-only 18aee8fa1 862af3079on the 27 manifest paths is empty. - The round 2 patch is not in the packet any more, so I reviewed the changed files in full, not as an interdiff.
Round 2 finding: fixed
- FENCE, ATX and ITEM now carry the
sflag (markdown-preview.js:24, :25, :42). The closing(.*)$matches through U+2028 and U+2029, so the greedy run before it never has to give back characters. isRule(markdown-preview.js:30) replaces the thematic-break regex with one pass over the line. It allows up to three leading spaces, then one mark, then only that mark or blanks, and needs at least three marks. That is the old accept set. The test at markdown-preview.test.mjs:291 checks this exhaustively against the old regex.- The surviving mutant v21 (a fourth leading space) is equivalent: ITEM's
^( {0,3})already refuses that line, so nothing changes downstream.
Probe (run by me, on Sage's slot, 22:12:43Z to 22:12:44Z)
40 cells, one process each, timeout 20, all rc 0. Each cell rendered one line through render() of the rebuilt module.
- ITEM, ATX, FENCE: marker + 8, 16, 32 or 64 KiB run + U+2028, U+2029 or a letter control. The slowest cell was 2.2 ms (ITEM letter at 64 KiB). Round 2 took 2.25 s at 64 KiB with a separator.
- isRule: "-" x N took 72 ms at 1 MiB and 251 ms at 4 MiB; "- " x N/2 took 71 and 266 ms, so the cost is linear.
Tests (run by me, singly)
- markdown-preview.test.mjs: 19/19 pass.
- docs-browser.test.mjs: 1/1 pass.
The other new pieces
- The paintDoc guard (bus.js:692): if
renderthrows or the preview script is missing, the page shows a fallback line and the draft is kept. Thefinallyat bus.js:718 resetss.saving. docs-browser.test.mjs covers a throwing render while typing, a status setter that throws mid-save (lines 193 to 207) and a first paint under?throwrender(line 242).- Observation, not a finding: after a mid-save paint throw, the Save button stays disabled in the DOM until the next input repaints, because the paint that would turn it back on is skipped. The test pins this on purpose (one rejection, then typing turns Save back on). It needs a throwing DOM setter to happen, so I'm not asking for a change.
- serve.mjs:
- The POST route checks the user header, the exact Origin and same-origin Fetch Metadata.
- It takes a 1 MiB JSON body with exactly the four string keys.
- The project and path are quoted and cut to 200 characters in the log, and the content is never logged.
- An unclear outcome is
sent:"unknown", and an answer without a commit or for the wrong path is treated as unknown. /api/configedituses the same test as the route.
- README NUL change: correct. packages/project/src/read.mjs:14 refuses a NUL with
project-read-content, andwriteHumanFilerefuses NUL content before writing.
Not run by me
The full gate, Researcher's mutant set (43 of 44 killed), the criterion runs and the stack audit come from Researcher's receipts in build.md.
Verdict: approve, no findings.