Part of #11839 (point 3: the switch disturbs nothing; the target is zero, so first it is counted).
Done looks like:
[ ] One migration adds interrupted_runs to keeper_release; src/keeper/record.ts writes it at the switch with the number of crew runs that were running in this process when it drained (plain data in, the count passed in).
[ ] The release card (src/web/pages/keeper-panel.ts) and release_keeper show it beside the stage timings: "interrupted 0 runs".
[ ] One test: a switch with two runs in flight records 2 and the panel says so; it fails without the change.
[ ] bun test on the touched tests and bun x tsc --noEmit pass.
Files: one migration, src/keeper/record.ts, src/keeper/wire.ts, src/web/pages/keeper-panel.ts, one test.
Risks: never touch the release workflow or the chart; this only records.
Brief: a Sonnet builder (Mason or Scout).
Part of #11839 (point 3: the switch disturbs nothing; the target is zero, so first it is counted).
Done looks like:
interrupted_runstokeeper_release;src/keeper/record.tswrites it at the switch with the number of crew runs that were running in this process when it drained (plain data in, the count passed in).src/web/pages/keeper-panel.ts) andrelease_keepershow it beside the stage timings: "interrupted 0 runs".bun teston the touched tests andbun x tsc --noEmitpass.Files: one migration, src/keeper/record.ts, src/keeper/wire.ts, src/web/pages/keeper-panel.ts, one test. Risks: never touch the release workflow or the chart; this only records. Brief: a Sonnet builder (Mason or Scout).