diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-03-14 00:33:46 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-03-14 00:33:46 +0000 |
| commit | 6ac15be438e3692cbc2ae2f36ab2d69468fc6372 (patch) | |
| tree | f0fded632c7ade09ed4232a4ac0dd90bce795a31 /internal/task | |
| parent | e2656fcaaed85028785822493a93c7be50dd44c2 (diff) | |
fix: cancel blocked tasks + auto-complete completion reports
Two fixes for BLOCKED task issues:
1. Allow BLOCKED → CANCELLED state transition so users can cancel tasks
stuck waiting for input. Adds Cancel button to BLOCKED task cards in
the UI alongside the question/answer controls.
2. Detect when agents write completion reports to $CLAUDOMATOR_QUESTION_FILE
instead of real questions. If the question JSON has no options and no "?"
in the text, treat it as a summary (stored on the execution) and fall
through to normal completion + sandbox teardown rather than blocking.
Also tightened the preamble to make the distinction explicit.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/task')
| -rw-r--r-- | internal/task/task.go | 2 | ||||
| -rw-r--r-- | internal/task/task_test.go | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/internal/task/task.go b/internal/task/task.go index 2c57922..69da5f3 100644 --- a/internal/task/task.go +++ b/internal/task/task.go @@ -118,7 +118,7 @@ var validTransitions = map[State]map[State]bool{ StateTimedOut: {StateQueued: true}, // retry or resume StateCancelled: {StateQueued: true}, // restart StateBudgetExceeded: {StateQueued: true}, // retry - StateBlocked: {StateQueued: true, StateReady: true}, + StateBlocked: {StateQueued: true, StateReady: true, StateCancelled: true}, } // ValidTransition returns true if moving from the current state to next is allowed. diff --git a/internal/task/task_test.go b/internal/task/task_test.go index 9873084..15ba019 100644 --- a/internal/task/task_test.go +++ b/internal/task/task_test.go @@ -25,6 +25,7 @@ func TestValidTransition_AllowedTransitions(t *testing.T) { {"running to blocked (question)", StateRunning, StateBlocked}, {"blocked to queued (answer resume)", StateBlocked, StateQueued}, {"blocked to ready (parent unblocked by subtasks)", StateBlocked, StateReady}, + {"blocked to cancelled (user cancels)", StateBlocked, StateCancelled}, {"budget exceeded to queued (retry)", StateBudgetExceeded, StateQueued}, {"cancelled to queued (restart)", StateCancelled, StateQueued}, } |
