B-strict: one path through the map — remove resume, park, and automatic retry from the round pipeline #437

Closed
opened 2026-08-19 15:58:13 +00:00 by jared · 2 comments
Owner

Context

User decision extending ADR-0131: the round pipeline gets exactly one path — advance or terminal round_failed. Resume was redundant machinery (round-open already abandons an unfinished prior round, so recovery is fix-the-design then a fresh round) and its only unique capability was the human/AI gate point being eliminated. The automatic retry masks flake: a red gate that passes on an identical re-run consumed the exact signal we want surfaced. No revival path exists for a failed round.

Tasks

  • Implementation gains failed_at + failed_step columns and Implementation.fail!(db, id, step:); three mutually exclusive terminals (completed_at, abandoned_at, failed_at)
  • CompletionIntake: first red step calls Implementation.fail! and returns round_failed; delete MAX_ATTEMPTS, red/retry_dispatch branches, RoundRetryLedger calls
  • Delete round_retry_ledger.rb and the retry_counters table; delete escalation.rb and the escalations table; SCHEMA_VERSION 4→5 (disposable db, ADR-0129)
  • InstructionQuery: drop the escalation branch and parked/resume_command; add terminal round_failed reading failed_step off the implementation row (gate exit status available via step_results)
  • Delete round_resume.rb, RoundCommands.round_resume, CLI resume subcommand + round_resume_command + validated_action; update handle_no_command_error usage string
  • Tests: delete cli_round_resume_test.rb, round_retry_policy_test.rb, instruction_query_parked_test.rb (replace with instruction_query_round_failed_test.rb); rewrite cli_subagent_stop_test.rb:49-53 for first-red-fails; db_migration_test.rb CANONICAL_TABLES drops retry_counters + escalations
  • AiDD sweep: skills/implement/SKILL.md (instruction types, parked/retry_dispatch handling → round_failed: mark ticket blocked with details, stop), skills/pipeline-state-investigate/SKILL.md (points 4-8 rewritten for the two-outcome model), CONTEXT.md glossary (Escalation + Retry cap entries), reference/operators-manual.md:147, reference/pipeline-stages.md:35-36,47, reference/deterministic-gates.md:20,49
  • docs/os-sdlc-rebuild/round-pipeline-map.md + legacy-retirement-plan.md status notes updated; other rebuild docs left as frozen history
  • ADR amending 0131/0130 recorded; full suite + rubocop green

Acceptance criteria

  • CompletionIntake has exactly two outcomes: advance or round_failed
  • No resume/park/retry machinery or prose remains in lib, tests, skills, CONTEXT.md, or reference docs; grep for resume/parked/retry_counters/escalation in the plugin is clean of round-pipeline hits
  • round_failed is terminal and loud: payload names the failed step; the implement skill instructs marking the worked ticket blocked before stopping

Origin

  • Trigger: post-#435 design review, session 2026-08-19 — user: 'We move forward through the map, or break loudly and roll back with context'
  • Improvised this session: none
  • Chain: park-and-resume + auto-retry machinery ← Wave 1 ported the legacy Resumer concept round-scoped ← legacy design assumed a human decision point. End: DESIGN (docs/adr/0130, docs/adr/0131).
  • Root candidate: this ticket
## Context User decision extending ADR-0131: the round pipeline gets exactly one path — advance or terminal round_failed. Resume was redundant machinery (round-open already abandons an unfinished prior round, so recovery is fix-the-design then a fresh round) and its only unique capability was the human/AI gate point being eliminated. The automatic retry masks flake: a red gate that passes on an identical re-run consumed the exact signal we want surfaced. No revival path exists for a failed round. ## Tasks - [ ] Implementation gains failed_at + failed_step columns and Implementation.fail!(db, id, step:); three mutually exclusive terminals (completed_at, abandoned_at, failed_at) - [ ] CompletionIntake: first red step calls Implementation.fail! and returns round_failed; delete MAX_ATTEMPTS, red/retry_dispatch branches, RoundRetryLedger calls - [ ] Delete round_retry_ledger.rb and the retry_counters table; delete escalation.rb and the escalations table; SCHEMA_VERSION 4→5 (disposable db, ADR-0129) - [ ] InstructionQuery: drop the escalation branch and parked/resume_command; add terminal round_failed reading failed_step off the implementation row (gate exit status available via step_results) - [ ] Delete round_resume.rb, RoundCommands.round_resume, CLI resume subcommand + round_resume_command + validated_action; update handle_no_command_error usage string - [ ] Tests: delete cli_round_resume_test.rb, round_retry_policy_test.rb, instruction_query_parked_test.rb (replace with instruction_query_round_failed_test.rb); rewrite cli_subagent_stop_test.rb:49-53 for first-red-fails; db_migration_test.rb CANONICAL_TABLES drops retry_counters + escalations - [ ] AiDD sweep: skills/implement/SKILL.md (instruction types, parked/retry_dispatch handling → round_failed: mark ticket blocked with details, stop), skills/pipeline-state-investigate/SKILL.md (points 4-8 rewritten for the two-outcome model), CONTEXT.md glossary (Escalation + Retry cap entries), reference/operators-manual.md:147, reference/pipeline-stages.md:35-36,47, reference/deterministic-gates.md:20,49 - [ ] docs/os-sdlc-rebuild/round-pipeline-map.md + legacy-retirement-plan.md status notes updated; other rebuild docs left as frozen history - [ ] ADR amending 0131/0130 recorded; full suite + rubocop green ## Acceptance criteria - [ ] CompletionIntake has exactly two outcomes: advance or round_failed - [ ] No resume/park/retry machinery or prose remains in lib, tests, skills, CONTEXT.md, or reference docs; grep for resume/parked/retry_counters/escalation in the plugin is clean of round-pipeline hits - [ ] round_failed is terminal and loud: payload names the failed step; the implement skill instructs marking the worked ticket blocked before stopping ## Origin - Trigger: post-#435 design review, session 2026-08-19 — user: 'We move forward through the map, or break loudly and roll back with context' - Improvised this session: none - Chain: park-and-resume + auto-retry machinery ← Wave 1 ported the legacy Resumer concept round-scoped ← legacy design assumed a human decision point. End: DESIGN (docs/adr/0130, docs/adr/0131). - Root candidate: this ticket
Author
Owner

Work started: TDD removal dispatched in-session (2026-08-19), main branch.

Work started: TDD removal dispatched in-session (2026-08-19), main branch.
Author
Owner

Resolution

Done: B-strict implemented: round pipeline has exactly one path — advance or terminal round_failed on the first red gate. Deleted RoundResume, RoundRetryLedger, Escalation (whole classes), the resume CLI subcommand + helpers, the parked instruction/resume_command, MAX_ATTEMPTS, and the escalations + retry_counters tables; implementations gained failed_at/failed_step (SCHEMA_VERSION 5, Implementation is the single state owner). Full aidd sweep: implement + pipeline-state-investigate skills, CONTEXT.md glossary, plugin CLAUDE.md, operators-manual/pipeline-stages/deterministic-gates references, round-pipeline-map and retirement-plan docs. ADR-0132 records the decision.

Evidence: Commit 02147ce (net −486 lines). TDD red-then-green per pair (Implementation.fail!, terminal CompletionIntake red, InstructionQuery round_failed); suite 793 runs / 2034 assertions / 0 failures; rubocop clean on touched files; leftover-grep audit clean of round-pipeline resume/park/retry hits. Lib diff reviewed line-by-line in-session.

Follow-ups: #436 remains open: round_failed's mark-ticket-blocked follow-through (rollback semantics + exact os-backlog invocation for the blocked comment). Live-hook dogfood run (one real round in a fresh session) still pending from the retirement plan; also proves round_failed end-to-end. Both already tracked; no new tickets.

## Resolution **Done:** B-strict implemented: round pipeline has exactly one path — advance or terminal round_failed on the first red gate. Deleted RoundResume, RoundRetryLedger, Escalation (whole classes), the resume CLI subcommand + helpers, the parked instruction/resume_command, MAX_ATTEMPTS, and the escalations + retry_counters tables; implementations gained failed_at/failed_step (SCHEMA_VERSION 5, Implementation is the single state owner). Full aidd sweep: implement + pipeline-state-investigate skills, CONTEXT.md glossary, plugin CLAUDE.md, operators-manual/pipeline-stages/deterministic-gates references, round-pipeline-map and retirement-plan docs. ADR-0132 records the decision. **Evidence:** Commit 02147ce (net −486 lines). TDD red-then-green per pair (Implementation.fail!, terminal CompletionIntake red, InstructionQuery round_failed); suite 793 runs / 2034 assertions / 0 failures; rubocop clean on touched files; leftover-grep audit clean of round-pipeline resume/park/retry hits. Lib diff reviewed line-by-line in-session. **Follow-ups:** #436 remains open: round_failed's mark-ticket-blocked follow-through (rollback semantics + exact os-backlog invocation for the blocked comment). Live-hook dogfood run (one real round in a fresh session) still pending from the retirement plan; also proves round_failed end-to-end. Both already tracked; no new tickets.
jared closed this issue 2026-08-19 16:11:50 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#437
No description provided.