From 59c72500ac3ce8dfc041477fd9b72ba6fbbd6096 Mon Sep 17 00:00:00 2001 From: gilesb Date: Tue, 13 Jan 2026 02:13:03 +0000 Subject: [PATCH] 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 --- app/services/run_service.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/app/services/run_service.py b/app/services/run_service.py index 8a20c4c..d1aa838 100644 --- a/app/services/run_service.py +++ b/app/services/run_service.py @@ -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)