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:
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.
|
||||
@@ -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 |
|
||||
Reference in new issue
Block a user