From cb048b93ce42690af7177dbe97becc704dcc52fc Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Fri, 23 Oct 2026 08:17:41 -0500 Subject: [PATCH] gizmoduck: row 307 design r1 notes: seat suite whole and compactions-launch T3 run-not-skip in the gate (Duckworth C1, C2), launcher closure comment on bypassing call() (N1), line refs :301 and :302 (N2) (duckworth-0280) --- agents/gizmoduck/work/queue-307/DESIGN.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/agents/gizmoduck/work/queue-307/DESIGN.md b/agents/gizmoduck/work/queue-307/DESIGN.md index 451b06556..2433cf319 100644 --- a/agents/gizmoduck/work/queue-307/DESIGN.md +++ b/agents/gizmoduck/work/queue-307/DESIGN.md @@ -73,7 +73,7 @@ outside its directory (`claude-code/index.mjs:11-12`). It takes, unchanged in be - `scanPi`, with `readRange`, `digest`, `STREAM`, `TAIL` and the chunk size it reads by; - `PI_VERSION` ("0.85.1"); - `claudeHistory(store)`; -- the reason order `["store-incomplete", "store-unreadable", "not-collected"]` from `:296`; +- the reason order `["store-incomplete", "store-unreadable", "not-collected"]` from `:301`; - the header comment's Pi paragraphs (`compactions.mjs:12-19`, `:21-24`). pi's `compactions`: @@ -82,7 +82,7 @@ pi's `compactions`: "harness-unsupported", version: "0.85.1" }`. That is today's `:283-286`. - otherwise: `scanPi(store.session, cursors, budget, streams)`, and answers its `found` and `cursors` with the first reason in the order above, `known` when that's null, and version - "0.85.1". That is today's `:287-297` before the dedupe. + "0.85.1". That is today's `:287-302` before the dedupe. claude-code's `compactions` reads nothing and answers `{ found: [], cursors: {}, known: false, reason: "harness-unsupported", version: null }`. That is today's `:303-304`. Vikunja 466 still has @@ -101,7 +101,7 @@ compactions }`, the name the route used and the loaded module's export. It: cursors: { ...ledger.cursors }, budget, streams, first: prior === null })` and checks the answer; 3. appends, in today's order: one `compaction` line per key the ledger doesn't hold yet, one `cursor` line per stream whose cursor moved, then `{ v: 1, kind: "collected", at, known, reason, - harness: name, version }`. These are the same lines and field order as today's `:290-297` and + harness: name, version }`. These are the same lines and field order as today's `:288-302` and `:304`. `name` is a variable, never a literal; 4. returns `compactionCount(store.dir)`. @@ -113,6 +113,8 @@ grep reads comments. calls `collectCompactions(store, { name: model.harness, compactions: harness.compactions }, { budget, streams })`. Both call sites, `:509` and `:650`, have `harness` in scope (it's `startLocked`'s `let harness` from `:503`; the `exited.then` callback at `:632` closes over it). +The closure calls the export directly, not through `call()` (`launcher.mjs:196`), because `call()` +turns a throw into a run refusal. The closure gets a comment saying so (Duckworth N1). `bus/src/runtime.mjs:282` and `broker.mjs:885-889` keep calling `compactionCount` and don't change. `packages/plugins/README.md`, Harness section, and the comment at `kinds.mjs:35-51` each gain the @@ -125,7 +127,7 @@ Row 270's code writes a `collected` line in exactly three places: | Line | harness | reason | version | old rule (`:232`) | new rule | | --- | --- | --- | --- | --- | --- | | `:286`, Claude history on the first pi collection | `"pi"` | `harness-unsupported` | "0.85.1" | unsupported | unsupported | -| `:297`, a pi scan | `"pi"` | null, `store-incomplete`, `store-unreadable` or `not-collected` | "0.85.1" | supported | supported | +| `:302`, a pi scan | `"pi"` | null, `store-incomplete`, `store-unreadable` or `not-collected` | "0.85.1" | supported | supported | | `:304`, any other harness name (`claude-code`, or `claude` in the tests) | that name | `harness-unsupported` | null | unsupported | unsupported | The two rules agree on every line row 270 can write. The rest of `readLedger` (the `bad`, `torn`, @@ -223,8 +225,17 @@ Duckworth approves this design, then the manifest. On Sage's CLEAR: - the capture script on base 1e629c892 first, then the new tests red on the base; - the bus, cli, plugins (zero failures), webui and business suites, and every `scripts/test-*.sh`; +- the seat suite whole (`packages/seat`, `node --test tests/`), where two old-test edits, new + tests 1 and 3, and the M2 and M3 kills live (Duckworth C1); +- in the cli run, `compactions-launch`'s T3 tests (`:206`, and `:305` with the `:344` edit) must + run, not skip on `sandboxProblem()` (`:36`). BUILD.md names every skip (Duckworth C2); - the mutants, each on an isolated copy with its restore checked by sha256. Each suite runs under `timeout -k 10` at 3x or more of its longest recorded wall (mos-1275). I'll put the numbers in BUILD.md before the first run. TMPDIR comes from `mktemp -d /mnt/storage/scratch/tmp/gXXX`. + +## Round 1 + +Duckworth approved round 1 on 67daf6403 (duckworth-0280). This revision takes C1 and C2 into +the gate, adds the N1 comment to the launcher plan, and corrects the N2 line refs (`:302`, `:301`).