workflow-fix: provision-time warn on terminal-parent pods
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 the /daily Step-C parked-candidate sweep (2026-07-08) from a candidate parked on task #1080 (recursion-guarded workflow-fix session).
Goal
Give the pod-safety two-signal duty a mechanical belt at the provision choke point instead of relying on doc consultation.
Workflow gap
- Bug observed: pod.py provision --issue on a task in the pod-safety auto-stop set (DONE ∪ on_hold) with neither a fresh follow-up signal marker nor the keep-running tag prints no warning — a session that never consults the CLAUDE.md two-signal bullet provisions a pod the watcher will auto-stop mid-bootstrap (#573/#779 class).
- Why it is a workflow gap: the fix targets the workflow surface (scripts/pod.py, scripts/pod_lifecycle.py); the originating session was recursion-guarded and could not route it.
- Confidence (emitter): see parked note below.
Proposed change (candidate diff sketch — refine in planning)
# pod.py provision, after resolving --issue N:
status = task_status(N)
if status in POD_SAFETY_AUTO_STOP_SET and not (has_keep_running_tag(N) or fresh_followup_signal(N)):
print("WARNING: issue N is at a parked/terminal status; the watcher auto-stops "
"unsignalled pods. Run `task.py add-tag N keep-running` BEFORE provisioning "
"and post epm:run-launched once the pod exists (CLAUDE.md two-signal recipe).")
Scope / surfaces
- Primary target:
scripts/pod.py, scripts/pod_lifecycle.py - Grep the workflow surface for the pattern before editing and update every hit; list them in the plan.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff on touched files passes; ifworkflow.yamlorCLAUDE.mdchange, they stay consistent with the rule file.- The spawned session runs under
EPM_WORKFLOW_FIX_SESSION=1/ aworkflow_fix_target:Provenance line — it MUST NOT auto-route its own subagents' workflow-fix candidates (recursion guard).
Provenance
- workflow_fix_target: scripts/pod.py, scripts/pod_lifecycle.py
- origin: parked candidate on task #1080 at 2026-07-06T09:52:35Z
Verbatim parked note:
source: prose-followup (alternatives critic, Phase 2). routed: parked — running under workflow_fix_target Provenance (recursion guard, .claude/rules/workflow-fix-on-bug.md § Recursion guard); NOT auto-filed by this session. Candidate: target_file: scripts/pod.py, scripts/pod_lifecycle.py — add a provision-time check in 'pod.py provision --issue ': when the issue's status is in the pod-safety auto-stop set (DONE ∪ on_hold) and neither a fresh follow-up signal marker nor the keep-running tag is present, print a loud WARNING quoting the two-signal recipe (or require an explicit --ack-terminal-parent flag). Rationale: the mechanical belt the #1080 doc sentence cannot provide — a session that never consults the bullet still runs provision; unlike an auto-post it does not blanket-exempt escaped provisions. confidence: medium. related_task: #1080. For the next human/orchestrator pass to file.