os-sdlc: resume --action retry crashes when exhausted_from is an automated state #364
Labels
No labels
P0
P1
P2
P3
bug
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#364
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Resumer#retry! calls dispatch_for, which does table.agent_for(state); for agent-less states like lint (agent: null) this inserts a NULL dispatches.agent and crashes (NOT NULL constraint). Found during #361 run. Retry for an automated state should re-run the gate, not dispatch.
Deviation incident 2026-08-15 — /os-sdlc:implement run for #402+#405, session https://claude.ai/code/session_01GSYJVRGmBiLGjPppHjY3bZ. Deviating skill: plugins/os-sdlc/skills/implement/SKILL.md.
Expected: resume --action retry re-runs the lint gate after out-of-band fixes. Actual (both tickets, twice each): lint gate escalated with exhausted_from=lint; per prior sessions retry crashes (NOT NULL dispatches.agent, see closed #404), so the orchestrator fixed offenses via lint-fixer subagents, verified rubocop-clean + suite green manually, then resume --action skip. skip worked and routed to reviewer both times. The gate result therefore rests on orchestrator-run checks, not the runner's own gate — see also #405's reviewer noting gate-log.txt held only the invocation error 'no target selected, exit=3'.
Resolution
Done: Already fixed on main: commit
76e3c8e(fix(os-sdlc): resume --retry on agentless states re-runs the gate) implements gate re-run via TicketFlow#emit_action; the NULL-agent dispatch path was deleted in the same commit.Evidence: Code-probe 2026-08-15: Resumer#retry! (resumer.rb:38-42) delegates to TicketFlow#emit_action; escalation_test.rb has two purpose-built tests (retry on agentless state re-runs gate / creates no dispatch); ruby -Ilib tests/runner/escalation_test.rb on HEAD
3b60fb8: 28 runs, 0 failures. Session https://claude.ai/code/session_01GSYJVRGmBiLGjPppHjY3bZFollow-ups: none — the 2026-08-15 #402/#405 runs avoided retry from a stale workaround note, not a live crash; orchestrator memory corrected