Fix status: check task result success flag, not just Celery success

Celery task "succeeds" (no exception) but may return {"success": False}.
Now we check the task result's success field AND output_cid before
marking run as completed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gilesb
2026-01-13 02:13:03 +00:00
parent 84d465b264
commit 59c72500ac

View File

@@ -180,10 +180,19 @@ class RunService:
# If task completed, get result
if result.ready():
if result.successful():
run_data["status"] = "completed"
task_result = result.result
if isinstance(task_result, dict):
run_data["output_cid"] = task_result.get("output_cid")
# Check task's own success flag and output_cid
task_success = task_result.get("success", True)
output_cid = task_result.get("output_cid")
if task_success and output_cid:
run_data["status"] = "completed"
run_data["output_cid"] = output_cid
else:
run_data["status"] = "failed"
run_data["error"] = task_result.get("error", "No output produced")
else:
run_data["status"] = "completed"
else:
run_data["status"] = "failed"
run_data["error"] = str(result.result)
@@ -267,10 +276,19 @@ class RunService:
# If task completed, get result
if result.ready():
if result.successful():
run_data["status"] = "completed"
task_result = result.result
if isinstance(task_result, dict):
run_data["output_cid"] = task_result.get("output_cid")
# Check task's own success flag and output_cid
task_success = task_result.get("success", True)
output_cid = task_result.get("output_cid")
if task_success and output_cid:
run_data["status"] = "completed"
run_data["output_cid"] = output_cid
else:
run_data["status"] = "failed"
run_data["error"] = task_result.get("error", "No output produced")
else:
run_data["status"] = "completed"
else:
run_data["status"] = "failed"
run_data["error"] = str(result.result)