duckworth: row 307 build round 1 approve (static) on 1f00d4f91, mos-1459 edits in bounds, move faithful, C1 gate, C2 manifest blobs, N1-N2 (duckworth-0284)

This commit is contained in:
jason.woltje committed 2026-10-23 08:30:40 -05:00
1 parent b02cc1adcc
commit d43690d0b3
2 files changed
+110

No files matched your search

@@ -0,0 +1,109 @@
# Row 307 (#1814, Vikunja 598) build round 1 (duckworth-0284)
Reviewer: Duckworth. Builder: Gizmoduck. Request: gizmoduck-0408. Old-test ruling: mos-1459.
Candidate: gizmoduck/row307 at 1f00d4f91. The red-first commit is 1f6db1589 and the build is 44104adb1.
1f6db1589's parent is cb048b93c, the folded design, and that commit sits on base 1e629c892.
Method: git reads of local objects only. No node, no tests, no fetch. No manifest digest has been
posted yet. The sha256 prefixes below are the blobs at 1f00d4f91, and the manifest round checks the
posted digest against them.
## Verdict: APPROVE (static), with C1 and C2
- **Scope.** `git diff --stat 1e629c892 1f00d4f91` lists 16 paths. harness.test.mjs,
cli helpers.mjs, launch-routes.test.mjs and launcher.test.mjs are not among them. 1f6db1589 adds
only the packet, capture.mjs and the two new tests. 44104adb1 adds no test file beyond the four
ruled ones.
- **The four old-test edits are inside mos-1459.** Each adds import lines in the import block and
changes nothing else outside the ruled spans:
- kinds.test.mjs:20: `"compactions"` appended to the pinned list.
- compactions.test.mjs:14-15 imports, :23 `collect` helper only.
- compactions-budget.test.mjs:15 import, :26 `collect` helper only.
- compactions-launch.test.mjs:31 import, :345 (base :344) call only. `.count, 1` is kept.
No expected value, assertion or test name changes. The only non-pi `collect` argument in either
seat file is `"claude"` at compactions.test.mjs:201 (base :197), and `{ pi, claude }` maps it. The
ledger's `harness` field stays `"claude"`, as base wrote it.
- **The move is faithful.** pi/compactions.mjs:33-140 is base seat/src/compactions.mjs:90-197 line
for line, except scanPi's signature: it is no longer exported and has no defaults. Its one caller
passes all four arguments. claudeHistory (:142-153) matches base :238-249. The reason order (:29)
and the Claude-history branch (:158-162) match base :278-305. Core passes `first: prior === null`,
which is base's `!prior`. No source, script or test imports scanPi, PI_VERSION or claudeHistory
from the seat module any more. The PI_VERSION hits that remain are conversation/pi-pin.mjs's own
constant and scripts/agent-host-dev.sh.
- **Core names no harness.** harness.test.mjs:171's NAMED regex matches no line of the new
seat/src/compactions.mjs (`grep -E` rc=1). readLedger:113 reads `r.reason` only.
- **Core checks the answer before it writes.** collectCompactions (:174-205) calls the export, runs
checkAnswer (:147-164), throws with the harness name before the open, and then writes the same
lines in the same order as base. The launcher closure (:309-321) calls it outside `call()`, and
the N1 comment says why. Its catch still records store-unreadable. Both call sites (:512, :653)
pass the `harness` that startLocked takes from `check()` at :506.
- **Fixtures need no edit.** cli fakeHarnesses (helpers.mjs:137-146) and launcher.test.mjs:696-697
build modules with `export * from` the real index, so `compactions` passes through. launch-routes'
`broken` still refuses at `levels`. The plugins and cli scratch trees copy only `src/` and import
the real index by absolute URL, so pi/index.mjs's `./compactions.mjs` re-export resolves.
runtime.mjs:74 lists harness directory names only. scripts/stack-copy.sh copies packages/plugins
whole.
- **The brief's three tests are there.**
- One ledger per reason row 270 writes: compactions-ledger.test.mjs FIXTURES, seven ledgers. Test
A reads `compactionCount`. capture.mjs checks each ledger byte for byte, and each `count`,
against base's code, which gives the "before" half.
- pi's module counts a stream as scanPi does, with the budget and the cap:
harness-compactions.test.mjs CASES `budget` and `cap`, plus `plain`, `shrank` and `header`, which
capture.mjs checks against base scanPi.
- Missing export refuses at load: harness-compactions.test.mjs:65-75.
- **Test B's change from DESIGN.md:189.** I agree with it. Over an empty session, every fixture with
a cursor goes store-incomplete because its stream went away. I worked the seven `next` values by
hand against the new core and the moved scan, and all seven hold. DESIGN.md can stay as it is,
since BUILD.md records the change.
- **Mutants.** M1 is killed by harness.test.mjs:192 (source text). M2 is killed by
compactions-budget.test.mjs:87 and the `first` test at harness-compactions.test.mjs:47. M3 is killed
by test B for `claude-code` and `claude-history`, which would go known, and by
compactions.test.mjs:203. M4 is killed by compactions-ledger.test.mjs:151-167.
- **Expected red on 1f6db1589.** BUILD.md's list matches what base does with an object as the
harness: it takes it as non-pi and writes harness-unsupported. That gives three test B reds, plus
the malformed-answer and argument tests, plus the TypeErrors and the loader pass in the plugins
file.
## Conditions
- **C1** Sage's gate on the BUILD.md run plan:
- capture.mjs prints `all match`.
- The red-first runs show the reds BUILD.md lists and no others.
- The bus, cli, plugins, webui, business and seat suites each run whole. Plugins has zero
failures.
- Every scripts/test-*.sh runs.
- The cli TAP shows compactions-launch's T3 tests at :207, :306 and :345 run, and the cli run ends
with `ℹ skipped 0`.
- M1-M4 are killed.
Any red in an old test goes to Sage unfixed, and from there to Mos.
- **C2** The manifest posted for the round has these 16 paths and these blobs. If any blob
changes, the round reopens on the delta.
```
e3f7a6838ef0d869 agents/gizmoduck/work/queue-307/BUILD.md
a5a4adb9207f5d53 agents/gizmoduck/work/queue-307/DESIGN.md
3b05066c471757aa agents/gizmoduck/work/queue-307/capture.mjs
6455b8042317e6dd packages/cli/src/launcher.mjs
ddada50d681093ef packages/cli/tests/compactions-launch.test.mjs
cbfd206f9ab94098 packages/plugins/README.md
a317ac544359d321 packages/plugins/harness/claude-code/index.mjs
aabaf5c4602e28f0 packages/plugins/harness/pi/compactions.mjs
39c225f157b8f66b packages/plugins/harness/pi/index.mjs
f0acac67a6a4ef83 packages/plugins/src/kinds.mjs
b4e7e8e0cd98ed1e packages/plugins/tests/harness-compactions.test.mjs
75a61934626cb471 packages/plugins/tests/kinds.test.mjs
c5de99284b8fa617 packages/seat/src/compactions.mjs
e486fc33578e0157 packages/seat/tests/compactions-budget.test.mjs
3d70516cee9f71b4 packages/seat/tests/compactions-ledger.test.mjs
957f4a75ea765a4e packages/seat/tests/compactions.test.mjs
```
## Notes (non-blocking)
- **N1 (row 270 behaviour, outside 307).** The `store-unreadable` fixture's `next` is known with
count 0. The first collection moves the stream's cursor past the line that wasn't a session
header. The next collection starts at the cursor with `header = from > 0` (pi/compactions.mjs:87)
and doesn't check the header again. readLedger doesn't keep store-unreadable, so the count goes
known. Base does the same, and 307 is a move, so it is right to keep it. The new test now pins
it. If Sage wants unreadable to stick, that's a follow-up row, and it changes this expected
value.
- **N2** The README contract bullet and kinds.mjs:52-53 agree with checkAnswer. Doc only.
+1
View File
@@ -1559,3 +1559,4 @@ are never rewritten or removed; corrections are new entries.
2026-10-23T12:08Z | Duckworth (Opus 5.5) | row 300 round 2 delta review (db5122920, digest db8be52c, sage-3412) | approve: call() resolves headers again, no assertion change; round 1 miss of the missing headers field recorded; C1 carried (duckworth-0268) |
2026-10-23T12:18Z | Duckworth (Opus 5.5) | row 301 round 2 fixture delta review (acc97fb9c, digest 6e1e4fcd, launchpad-0115, mos-1451) | approve: one appended throwing-stub line in each of library-cli and thread-claims, stub sweep clean, round 1 miss recorded; C1 gate (duckworth-0274) |
2026-10-23T13:17Z | Duckworth (Opus 5.5) | row 307 design round 1 (67daf6403 DESIGN.md on base 1e629c892, gizmoduck-0403) | approve: ledger compat holds on all three row 270 collected lines, interfaceVersion 1 accepted, fixture list complete; C1 seat suite whole in the gate, C2 no compactions-launch skips; N1 launcher comment, N2 line refs (duckworth-0279) |
2026-10-23T13:30Z | Duckworth (Opus 5.5) | row 307 build round 1 static review on 1f00d4f91 (gizmoduck-0408) | APPROVE (static), C1 gate per BUILD.md run plan, C2 manifest blobs; mos-1459 edits in bounds; N1 row 270 store-unreadable not sticky (follow-up), N2 doc |