Skip to content

Pilot: session stall taxonomy — observable signatures of stalled vs healthy long sessions #1192

Closed

Description

@dezren39

Pilot — what does a stalled session look like?

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.

Activity

  1. added
    kind/choreRoutine maintenance, housekeeping, dependency hygiene
    priority/normalOrdinary priority (the default)
    queue/queuedHas a queued task in the Supabase agent queue
    area/infraInfrastructure, deployment, and operations
    effort/sSmall: expected under 2 hours of work
    on Oct 27, 2026
  2. developing-today commented on Oct 27, 2026

    @developing-today
    Contributor
  3. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    Pilot complete — stall taxonomy

    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.

  4. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 31, 2026
  5. dezren39 commented on Oct 31, 2026

    @dezren39
    MemberAuthor

    Triage verdict — ALREADY DONE, closing (queue task 1281, Lane D)

    Verified fresh on 2026-10-31:

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area/infraInfrastructure, deployment, and operationseffort/sSmall: expected under 2 hours of workkind/choreRoutine maintenance, housekeeping, dependency hygienepriority/normalOrdinary priority (the default)

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions