Files

3.0 KiB

Row279: stopRun deadline final observation

Scope: sage-2512, mos-1269; brief docs/plans/2026-10-22_stoprun-deadline.md. Base f40f2e770. Reviewer Dewey; gate owner Sage. V502 stays separate.

Cause and smallest change

The loop's precondition now()<=deadline can skip the existing final status read when a sleep wakes beyond deadline. Use for(;;) so the existing now()>=deadline branch is the only time exit. Change that loop header only; all record/identity/ended exits and result mapping remain byte-identical. The old trailing fallback remains unreachable in the fixed loop. M1 restores only the old header and thereby restores the complete old fall-through path.

Regression and evidence plan

Add one test to stop-run.test.mjs, preserving existing tests. Its fake sleep advances requested duration plus1ms, so the last sleep crosses the deadline. Its signal stub records TERM/KILL and returns success without killing the always-live fixture process. Expect both signals, time>7000ms and alive. The old loop should fail only the alive assertion with unknown.

Ask Sage CLEAR before any run, including the expected regression red. Then apply the one-line fix, run the touched whole file and processing-control package as granted, and kill M1 with that same named regression. Busy check, short scratch TMPDIR,deadDocker,owned process groups,timeouts,restore,sweep. No live state,units,store,provider,browser,Docker or V502 changes.

Packet includes base,patch,candidate hashes,regression/gate/mutant logs and exact source-diff check. Commit candidate and packet on the new branch only after authorized checks. No token is available; Sage publishes as jarvis. The business/CLI suites remain Sage's landing gate unless separately granted.

Authorized run and result

Claim rev 3138, op rocko-279-start-r1. Sage granted this exact sequence in sage-2516 (2026-10-22T05:55:21Z). Runs: 05:56:03Z to 05:58:03Z.

Step Pass Fail Skip Result
Regression on unfixed base 0 1 0 Expected assertion: unknown versus alive
stop-run.test.mjs whole 13 0 0 Green
processing-control package whole 62 0 0 Green
M1 old loop 0 1 0 Killed by the named regression, unknown versus alive

M1's killer is a sleep past the stop deadline still observes an alive run after both signals. It exits 1 with that assertion, never a syntax error or timeout. Logs and results.json retain the intentional failures separately. Green runs total 75 passes (the whole-file tests are also part of the package). No skips. All commands used a short scratch TMPDIR, a dead Docker socket and fixture-only configuration. Each node command ran in its own process group with a 120-second timeout. No timeout occurred. Final cwd sweep: empty. The source restoration and exact one-line product scope are checked in source-scope-check.json. The trailing unknown return stays unchanged and is unreachable after the fix. Business and CLI suites remain Sage's owner gate. Slot returned to Sage at 05:58:03Z. No live action or V502 change.