summaryrefslogtreecommitdiff
path: root/internal/api/taskops.go
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-07-05 23:51:58 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-07-05 23:51:58 +0000
commit0e49f91c62ff9977c6a917a6f197adbd7876bbb9 (patch)
treefe992fe8cf887708d084a91f3e79a3bdf1f763a4 /internal/api/taskops.go
parentcc6b3234c6ad7f0f6acef83f6ccb3556581e80cb (diff)
fix: task submission context cancellation, executions success-rate calc
submitTask was using the inbound HTTP/MCP request context to submit work to the executor pool, so every chatbot/REST-submitted task was cancelled the moment the request returned rather than actually running. Use the server's long-lived lifecycle context instead, matching the other Submit call sites. Separately, computeExecutionStats compared execution state against a lowercase 'completed' literal while the backend always emits uppercase state values, so success rate silently read 0% for every execution. Also treat READY as success alongside COMPLETED, since a top-level task's execution lands at READY on success — COMPLETED requires a later, separate accept step. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VTUSAEKfsPc6WGDq45yPHD
Diffstat (limited to 'internal/api/taskops.go')
-rw-r--r--internal/api/taskops.go7
1 files changed, 6 insertions, 1 deletions
diff --git a/internal/api/taskops.go b/internal/api/taskops.go
index 254d73c..e6b6239 100644
--- a/internal/api/taskops.go
+++ b/internal/api/taskops.go
@@ -110,7 +110,12 @@ func (s *Server) submitTask(ctx context.Context, spec submitTaskSpec) (*task.Tas
return nil, err
}
t.State = task.StateQueued
- if err := s.pool.Submit(ctx, t); err != nil {
+ // Use the server's long-lived lifecycle context, not the caller's request
+ // context — the request (REST or chatbot MCP tool call) returns long
+ // before the task finishes running, and its context is cancelled when it
+ // does. Submitting with it would cancel the task's execution moments
+ // after dispatch. Mirrors the pattern at server.go's other Submit call sites.
+ if err := s.pool.Submit(s.ctx, t); err != nil {
return nil, err
}
return t, nil