You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Pilot: session stall taxonomy — observable signatures of stalled vs healthy long sessions #1192
The babysitter's core judgment is "progressing vs stalled." This pilot
defines that judgment from evidence instead of vibes.
Gather
From existing fleet session history (OpenCode/OpenChamber sessions,
Jules sessions, today's queue-worker runs): find sessions that
stalled, died silently, or spun without progress.
For each, record what the observable signals were BEFORE the stall
was obvious: session status field, last-activity gap growth, repeated
tool calls/errors, message cadence, CI state on the bound PR.
Contrast with healthy long-running sessions (a 30-min build/test loop
is not a stall): which signals separate the two?
Acceptance criteria
A stall-signature table: signal × (healthy range, stall range,
source field/endpoint).
A proposed detector rule the babysitter can encode (thresholds +
which signals must agree), with its expected false-positive cost
stated (a nudge is cheap; a wrong "stalled" in the report is
noise Drew reads).
At least 5 real stall cases and 3 healthy-long cases examined;
fewer only if the history genuinely lacks them (say so).
Part of the OpenChamber dispatch + babysitter design (2026-10-26).
Filed by Muse (operator) 2026-10-26.
Document:files/stall-taxonomy-pilot-2026-10-26.md in the keep-the-four-repos-healthy goal workspace (committed in hatch-personal), built from a census of all 187 claim episodes in agent.events (2026-10-25 → 27) plus the monitor's tracker/sweep record and GitHub state for the non-queue cases.
Headline finding: silence separates the populations almost cleanly. Healthy episodes end within minutes of their last checkpoint (completed p90 = 4.2 min; parked p90 = 2.6 min); evaporated episodes sit silent until the lease dies (p50 = 39.2 min). Healthy long tasks park (1058: 3 parks/0 expiries over 17.8h; 1109: 7/0); stalled tasks expire (1149: 0/5; 1157: 0/4).
Detector rule in brief (full spec + thresholds in the doc): a claimed task is STALLED-SUSPECT → nudge once when (a) ≥20 min since its last event, (b) its lease is within 15 min of expiry (no heartbeat extension — heartbeats write no event rows, so event-silence alone overstates inactivity), and (c) no live CI run on the bound PR. Suspect at two consecutive rounds, or reaching lease expiry, = STALLED-CONFIRMED for the report. Two side classes are detected from the artifact, not the session: DONE-UNREPORTED (bound PR merged / issue closed while the task is still open → harvest, never nudge) and BLOCKED-ON-HUMAN (provider status AWAITING_USER_FEEDBACK → nudge the human). Declared parks and named blocks are never stalls. Expected false-positive cost from the record: ~1% of episodes nudged (one 23-min completed outlier), near-zero report-level FPs under the two-signal + two-round rule.
Cases examined: 6 stall cases (1149 ×5 expiries, 1157 incl. a zero-checkpoint episode, 1160, 1216 ep.1 silent-but-working, OC #405 GitHub-side holder silence, OC #477 done-but-unharvested, plus Jules status-enum stalls) and 4 healthy-long cases (1058, 1121, 1109, 1216 eps.2–5) — acceptance counts met without needing the "history lacks them" escape.
One open dependency for #1185: pilot #1188 must confirm the OpenChamber equivalent of lease freshness (a pollable last-activity field); the doc's caveat section carries it.
The pilot deliverable exists and is complete:files/stall-taxonomy-pilot-2026-10-26.md in the keep-the-four-repos-healthy goal workspace (14,291 bytes, committed in hatch-personal) — census of all 187 queue claim episodes (2026-10-25 → 27), the silence-separates-populations table (completed p90 silence 4.2 min vs evaporated p50 39.2 min), the stall-signature table, and the encodable detector rule (≥20 min event silence + lease within 15 min of expiry + no live CI on the bound PR → STALLED-SUSPECT/nudge; two consecutive rounds or lease expiry → STALLED-CONFIRMED; DONE-UNREPORTED and BLOCKED-ON-HUMAN side classes; declared parks/blocks never stalls; ~1% expected episode-level FP cost).
Closing as completed — the work was done on 2026-10-26 and the issue simply never got its closing verb (a DONE-UNREPORTED case, fittingly, in the taxonomy's own terms).
Activity
developing-today commentedon Oct 27, 2026
CODE-328
dezren39 commentedon Oct 27, 2026
Pilot complete — stall taxonomy
Document:
files/stall-taxonomy-pilot-2026-10-26.mdin the keep-the-four-repos-healthy goal workspace (committed in hatch-personal), built from a census of all 187 claim episodes inagent.events(2026-10-25 → 27) plus the monitor's tracker/sweep record and GitHub state for the non-queue cases.Headline finding: silence separates the populations almost cleanly. Healthy episodes end within minutes of their last checkpoint (completed p90 = 4.2 min; parked p90 = 2.6 min); evaporated episodes sit silent until the lease dies (p50 = 39.2 min). Healthy long tasks park (1058: 3 parks/0 expiries over 17.8h; 1109: 7/0); stalled tasks expire (1149: 0/5; 1157: 0/4).
Detector rule in brief (full spec + thresholds in the doc): a claimed task is STALLED-SUSPECT → nudge once when (a) ≥20 min since its last event, (b) its lease is within 15 min of expiry (no heartbeat extension — heartbeats write no event rows, so event-silence alone overstates inactivity), and (c) no live CI run on the bound PR. Suspect at two consecutive rounds, or reaching lease expiry, = STALLED-CONFIRMED for the report. Two side classes are detected from the artifact, not the session: DONE-UNREPORTED (bound PR merged / issue closed while the task is still open → harvest, never nudge) and BLOCKED-ON-HUMAN (provider status
AWAITING_USER_FEEDBACK→ nudge the human). Declared parks and named blocks are never stalls. Expected false-positive cost from the record: ~1% of episodes nudged (one 23-min completed outlier), near-zero report-level FPs under the two-signal + two-round rule.Cases examined: 6 stall cases (1149 ×5 expiries, 1157 incl. a zero-checkpoint episode, 1160, 1216 ep.1 silent-but-working, OC #405 GitHub-side holder silence, OC #477 done-but-unharvested, plus Jules status-enum stalls) and 4 healthy-long cases (1058, 1121, 1109, 1216 eps.2–5) — acceptance counts met without needing the "history lacks them" escape.
One open dependency for #1185: pilot #1188 must confirm the OpenChamber equivalent of lease freshness (a pollable last-activity field); the doc's caveat section carries it.
dezren39 commentedon Oct 31, 2026
Triage verdict — ALREADY DONE, closing (queue task 1281, Lane D)
Verified fresh on 2026-10-31:
files/stall-taxonomy-pilot-2026-10-26.mdin the keep-the-four-repos-healthy goal workspace (14,291 bytes, committed in hatch-personal) — census of all 187 queue claim episodes (2026-10-25 → 27), the silence-separates-populations table (completed p90 silence 4.2 min vs evaporated p50 39.2 min), the stall-signature table, and the encodable detector rule (≥20 min event silence + lease within 15 min of expiry + no live CI on the bound PR → STALLED-SUSPECT/nudge; two consecutive rounds or lease expiry → STALLED-CONFIRMED; DONE-UNREPORTED and BLOCKED-ON-HUMAN side classes; declared parks/blocks never stalls; ~1% expected episode-level FP cost).Closing as completed — the work was done on 2026-10-26 and the issue simply never got its closing verb (a DONE-UNREPORTED case, fittingly, in the taxonomy's own terms).
🤖 Agent note · done