Three findings from Macroscope review: - Settling `pending` rows to `interrupted` was the wrong verb. The server deletes them (`clearPendingProjectionTurnsByThread`) once the turn starts or the thread stops, and never settles one in place. They also cannot be settled coherently: `turn_id` is NULL, so an "interrupted" pending row is a terminal turn with no id, a shape no real turn has. Now deleted, matching the server's predicate exactly so a checkpoint row is never caught by it. - `COALESCE(completed_at, requested_at)` preserved a stale completion on a running turn. One can carry a completion from an earlier settle that a later checkpoint reverted to "running" — the `...existingTurn` spread in ProjectionPipeline keeps the old value — and dating the interruption to that checkpoint gives a wrong duration. Overwritten unconditionally. - The CLI hard-coded `<base>/userdata/state.sqlite` while a dev server under an implicit dev home stores state in `<base>/dev`. A main-checkout `bun run dev` was therefore unseedable, and said so by claiming no database existed and suggesting the user start the server that was already running. Source and target now follow whichever directory holds a database, `userdata` breaking the tie; attachments follow the same directory. Verified both a dev-only target and the precedence order. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Theo Browne committed on 7/27/2026, 3:38:49 AMparentd3ee18c
4 files changedLine totals unavailable