fix: devloop continue misrouted as NL task; gate timeouts leave no recovery path#10
Conversation
…ia devloop resume - Remove rejected-at-* from terminal status in --list, auto-find, and already-complete check - Add rejected-at-diff to diff-gate override (re-presents gate without re-running worker) - Add informational hint when resuming a rejected-at-plan session - Update help text: rejected-at-plan and rejected-at-diff now listed as resumable statuses - Only approved and reviewer-rejected (rejected) are now truly terminal Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
694cf30 to
8459739
Compare
shaifulshabuj
left a comment
There was a problem hiding this comment.
Implementation is clean: rejected-at-plan and rejected-at-diff are now resumable. The diff-gate override for rejected-at-diff correctly re-presents only the gate without re-running the worker. Terminal states are now only approved and reviewer-rejected. Approving.
There was a problem hiding this comment.
Pull request overview
Allows devloop resume to recover sessions previously stuck in rejected-at-plan / rejected-at-diff states (which were treated as terminal). Previously these statuses fell through rejected-at-* glob filters and were skipped; now only reviewer-rejected (rejected) and approved are treated as truly terminal. The diff-gate override is extended so resuming a rejected-at-diff session re-presents only the diff gate without re-running the worker.
Changes:
- Narrow terminal-status filters in
--list, newest-session selection, and the early-exit guard fromapproved|rejected|rejected-at-*to justapproved|rejected. - Extend the existing
timed-out-at-diffoverride to also handlerejected-at-diff, settingnext_phase=diff-gate. - Print an informational hint when resuming a
rejected-at-plansession and update the--helptext to list the newly resumable statuses.
devloop continue TASK-IDwas treated as natural language, spawning a new architect phase on top of an already-completed worker and opening a duplicate Live View pane. Gate timeouts also dropped users to a bare prompt with no recovery guidance.Changes
Command dispatcher
continueas alias forresume—devloop continue TASK-IDnow routes tocmd_resumeNL router TASK-ID guard
TASK-[0-9]{8}-[0-9]{6}args before NL routing firesdevloop resume <id>/devloop status <id>hints and exits cleanly — no architect spawn, no duplicate paneGate rejection recovery hints
_approval_gate()timeout path now printsdevloop resume $DEVLOOP_CURRENT_SESSION_IDwhen a session ID is in scopecmd_runandcmd_resumeprint the same targeted hintcmd_resumenow handles gate-rejected sessionsrejected-at-planandrejected-at-diffremoved from the terminal-status early-exit; onlyapprovedandrejected(reviewer verdict) are treated as non-resumablerejected-at-plansession re-runs the plan gate → worker → diff gate (existing_compute_resume_fromlogic already returnsworkerfor this case)rejected-at-diffsession re-runs the diff gate via a new_resume_diff_gateflag set whencur_status == rejected-at-diff && next_phase == reviewer, triggering the full diff-gate loop before entering the reviewer