daily-fix: reconcile pass must not stop young respawns
Highlight text on any card (body, plan, or an event) to anchor a comment, or leave a whole-task comment here. Mention @claude to summon a reply.
No comments yet.
Overview / Motivation
Auto-filed by /daily 2026-07-24 problem sweep (session 76a8649e, task #1622). The two watcher passes fought each other: completed-unmerged respawned a recovery session at 15:43:11Z (#1653 arm, 1/3 today), and session-reconcile stopped it at 15:53:38Z.
Goal
The watcher must never stop its own just-spawned recovery session; reconcile idleness must key on session-level activity, not task-marker gaps alone.
Workflow gap
- Bug observed: #1622 events show
15:43:11Z completed-unmerged-respawn ... spawn-issue --issue 1622 --autothen15:53:38Z session-reconcile-stop auto-stopped 1 idle session(s) ... no activity ... for > 2.0h (gap=27.5h). The recovery session was 10 minutes old, mid-lint-gate (its bg gate task shows status killed at 15:53:38), and had not yet posted a marker — the idleness predicate read the TASK's non-watcher-marker gap, not the session's age/transcript mtime. PR #1399 remains OPEN draft; the once-per-episode respawn budget is consumed, so #1622 stays stranded without human action (held separately). - Why it is a workflow gap: the reconcile pass's idle predicate lacks a session-age floor and does not read the completed-unmerged-respawn marker as a live-follow-up exemption — the same marker-predicate pattern the pod-safety pass already uses.
- Confidence (emitter): high.
- verified-at-filing:
grep -n 'session-reconcile' scripts/autonomous_session_watch.py→ pass present (sentinels at :1335/:1340, contract at :244);grep -n 'completed_unmerged' scripts/autonomous_session_watch.py→completed_unmerged_passat :563;git log --oneline --since='7 days ago' -- scripts/autonomous_session_watch.py→ #1653 landed the respawn arm 2026-07-24 but no commit adds a reconcile-side exemption (2026-07-25).
Proposed change (candidate diff sketch — refine in planning)
In the session-reconcile pass: (a) treat session registration/spawn time and transcript mtime as activity — never stop a session younger than the idle threshold; (b) exempt an issue whose latest completed-unmerged-respawn watcher marker is newer than the latest done-transition. Pin test for the young-respawn case.
Scope / surfaces
- Primary target:
scripts/autonomous_session_watch.py(session-reconcile pass + completed_unmerged_pass coordination)
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.pyno-flags run passes; ruff on touched files passes.- This session runs under a
workflow_fix_target:Provenance line — recursion guard applies.
Provenance
-
fingerprint: 3190982482fb
-
workflow_fix_target: scripts/autonomous_session_watch.py