From 0e49f91c62ff9977c6a917a6f197adbd7876bbb9 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Sun, 5 Jul 2026 23:51:58 +0000 Subject: fix: task submission context cancellation, executions success-rate calc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Claude-Session: https://claude.ai/code/session_01VTUSAEKfsPc6WGDq45yPHD --- web/app.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'web/app.js') diff --git a/web/app.js b/web/app.js index fc6864c..2f5aacf 100644 --- a/web/app.js +++ b/web/app.js @@ -665,7 +665,14 @@ export function computeExecutionStats(executions) { for (const e of executions) { const outcome = e.state || 'unknown'; byOutcome[outcome] = (byOutcome[outcome] || 0) + 1; - if (outcome === 'completed') completed++; + // Executions carry the task state machine's uppercase values (see + // internal/executor.handleRunResult): a top-level task (no parent) that + // succeeds lands its execution at READY, not COMPLETED — COMPLETED is + // only set for subtask executions. Both represent a successful run from + // the executor's perspective; only the human/chatbot accept step (a + // separate, later transition) turns READY into COMPLETED. + const normalized = outcome.toUpperCase(); + if (normalized === 'COMPLETED' || normalized === 'READY') completed++; totalCost += e.cost_usd || 0; if (e.duration_ms != null) { durationSum += e.duration_ms; -- cgit v1.2.3