This was generated by AI during triage.
Parent
docs/issues/feature-runner/PRD.md
What to build
When /tdd fails on an issue, the Feature Runner appends a failure note and stops — but leaves the failing issue at ready-for-agent. Under /loop /implement-feature, auto-select then re-picks the same Feature on the next iteration (because it still has a ready-for-agent issue) and retries the same failing issue, burning loop iterations indefinitely.
The fix: on /tdd failure, flip the failing issue's **Status:** line from ready-for-agent to needs-info. needs-info is an existing triage label ("waiting on reporter for more information") and is already in the auto-select disqualification list at step 0 — no vocabulary expansion is required.
Changes
1. SKILL.md step 4 "On failure"
After appending the failure note, add a second edit:
Using the Edit tool, change the **Status:** ready-for-agent line to **Status:** needs-info. This prevents auto-select from picking up this Feature on subsequent loop iterations.
2. references/runner-output-formats.md — failure note
Update the failure note to mention the status flip and the recovery procedure:
## Comments
> _This was generated by AI during triage._
**Feature Runner failure** — `/tdd` could not complete this issue. Status has been set to `needs-info`.
The worktree at `.claude/worktrees/<slug>` has been left in place for inspection. Once the issue is resolved manually, restore `**Status:** ready-for-agent` and re-run `/implement-feature <slug>` to resume. Alternatively, close or reject the issue if it should not be retried.
3. docs/agents/feature-runner.md — "Failure behaviour" section
Update step 2 of the numbered list:
Replace:
The issue remains at Status: ready-for-agent.
With:
The issue status is changed to needs-info. This prevents the auto-selection path from picking up this Feature on subsequent /loop iterations until the developer investigates and restores ready-for-agent (or closes/rejects the issue).
4. SKILL.md Quick start — "Safe to interrupt" bullet
Distinguish Ctrl+C from /tdd failure explicitly. Update the bullet:
Safe to interrupt — Ctrl+C during any issue leaves that issue at ready-for-agent; re-running resumes from the first unresolved issue. Note: a /tdd failure (as opposed to a Ctrl+C interrupt) sets the failing issue to needs-info, preventing auto-select from retrying until the developer intervenes.
Rationale
The overnight-loop use case is the primary composition for the Feature Runner. An auto-select that retries the same broken Feature undermines the purpose of /loop. needs-info already signals "blocked on a human" in the triage vocabulary — exactly the right state for a Feature Runner failure.
Acceptance criteria
Blocked by
None — can start immediately.
PRD: docs/issues/feature-runner/PRD.md
Migrated from: docs/issues/feature-runner/18-failure-loop-protection.md (source removed after migration)
Touched by PRs: #25, #32
Parent
docs/issues/feature-runner/PRD.mdWhat to build
When
/tddfails on an issue, the Feature Runner appends a failure note and stops — but leaves the failing issue atready-for-agent. Under/loop /implement-feature, auto-select then re-picks the same Feature on the next iteration (because it still has aready-for-agentissue) and retries the same failing issue, burning loop iterations indefinitely.The fix: on
/tddfailure, flip the failing issue's**Status:**line fromready-for-agenttoneeds-info.needs-infois an existing triage label ("waiting on reporter for more information") and is already in the auto-select disqualification list at step 0 — no vocabulary expansion is required.Changes
1.
SKILL.mdstep 4 "On failure"After appending the failure note, add a second edit:
2.
references/runner-output-formats.md— failure noteUpdate the failure note to mention the status flip and the recovery procedure:
3.
docs/agents/feature-runner.md— "Failure behaviour" sectionUpdate step 2 of the numbered list:
Replace:
With:
4.
SKILL.mdQuick start — "Safe to interrupt" bulletDistinguish Ctrl+C from
/tddfailure explicitly. Update the bullet:Rationale
The overnight-loop use case is the primary composition for the Feature Runner. An auto-select that retries the same broken Feature undermines the purpose of
/loop.needs-infoalready signals "blocked on a human" in the triage vocabulary — exactly the right state for a Feature Runner failure.Acceptance criteria
/tddfailure, the failing issue's**Status:**is changed toneeds-info(not left atready-for-agent)needs-infoalready disqualifies a Feature in step 0)references/runner-output-formats.mddocuments theneeds-infoflip and the recovery procedure (restoreready-for-agentand re-run, or close/reject)docs/agents/feature-runner.md"Failure behaviour" section reflects the status flip toneeds-infoready-for-agent) from/tddfailure (setsneeds-info)Ctrl+C) behaviour is unchanged: issue staysready-for-agentBlocked by
None — can start immediately.
PRD:
docs/issues/feature-runner/PRD.mdMigrated from:
docs/issues/feature-runner/18-failure-loop-protection.md(source removed after migration)Touched by PRs: #25, #32