Skip to content

fix(app): stop status timeouts from disabling serve and killing waiting one-shots - #1644

Merged
iamtoruk merged 1 commit into
mainfrom
fix/status-timeout-restart-budget
Oct 5, 2026
Merged

iamtoruk merged 1 commit into
mainfrom
fix/status-timeout-restart-budget

Conversation

@iamtoruk

@iamtoruk iamtoruk commented Oct 5, 2026

Copy link
Copy Markdown
Member

Telemetry shows status, yield and act timeouts on 0.9.25 desktop installs (61, 48 and 39 installs in 7 days). Two causes:

Serve disabled for the whole app run. A serve request that times out kills the child and counts as a death. deaths never reset, so three timeouts spread over days of uptime disabled serve for the rest of the run and every panel read fell back to a one-shot. Any healthy answer now resets the count, so the budget is three consecutive deaths with no answer between them (what the existing test name already says). The mac menubar already resets its budget after 300s.

One-shots killed while waiting, not while working. The 45s limit is a no-output watchdog. runParse beats every 10s, but a one-shot waiting on another process's cold-hydration lock (up to 10 minutes) or aggregating after the parse writes nothing and dies at 45s. One-shots now start the progress keepalive at command entry. It only writes when CODEBURN_PROGRESS=1, which the desktop app, menubar and tray set; serve keeps its per-request beat. One-shots stay bounded by the 15-minute ceiling in every client.

Tests: a resident that answers between watchdog kills keeps restarting (fails on main: capped at 3 starts), and a one-shot blocked on a held hydration lock emits a keepalive (fails on main after 20s of silence). tsc clean at the root and in app/.

The desktop serve client counted every death, watchdog kills included,
against a 3-death budget that never reset, so three sporadic kills over an
app run disabled serve for good. The budget now resets on any healthy
answer: three generations in a row that never answer still disable it.

One-shot CLI runs only heartbeated inside a parse, so a run waiting on
another process's cold hydration lock (up to 10 min) went silent and was
killed at 45s on every poll. Start the keepalive at command entry.
@iamtoruk
iamtoruk merged commit bd88b89 into main Oct 5, 2026
27 of 28 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant