From 5db01248b6fc41a1e64d544e34a6438869a1ed2f Mon Sep 17 00:00:00 2001
From: Vadym Samoilenko
Date: Thu, 30 Apr 2026 17:48:02 +0100
Subject: [PATCH] fix: pass USE_CELERY_FALLBACK to containers and show real
error in failure UI
- docker-compose.yml: add USE_CELERY_FALLBACK env var to api and worker
services so cloud_run_dispatch uses Celery on optical-dev
- JobDetail.tsx: show actual error message instead of generic
"Processing failed at ." when failure step is unknown; also show
job.error string when no structured failure object exists
Co-Authored-By: Claude Sonnet 4.6
---
docker-compose.yml | 4 ++++
frontend/src/routes/jobs/JobDetail.tsx | 13 +++++++++----
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index 2b845d3..bd0f3d6 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -139,6 +139,9 @@ services:
COST_TRACKER_API_KEY: ${COST_TRACKER_API_KEY:-}
COST_TRACKER_SOURCE_APP: ${COST_TRACKER_SOURCE_APP:-video-accessibility}
COST_TRACKER_ENABLED: ${COST_TRACKER_ENABLED:-true}
+
+ # Pipeline dispatch mode
+ USE_CELERY_FALLBACK: ${USE_CELERY_FALLBACK:-false}
volumes:
- ./secrets:/secrets:ro
- api-logs:/app/logs
@@ -179,6 +182,7 @@ services:
# When set, CPU-intensive operations are offloaded to Cloud Run
WHISPER_SERVICE_URL: ${WHISPER_SERVICE_URL:-}
FFMPEG_SERVICE_URL: ${FFMPEG_SERVICE_URL:-}
+ USE_CELERY_FALLBACK: ${USE_CELERY_FALLBACK:-false}
# Auth (required by Settings class even though worker doesn't use it)
JWT_SECRET: ${JWT_SECRET}
diff --git a/frontend/src/routes/jobs/JobDetail.tsx b/frontend/src/routes/jobs/JobDetail.tsx
index 2058bb5..ddfd20c 100644
--- a/frontend/src/routes/jobs/JobDetail.tsx
+++ b/frontend/src/routes/jobs/JobDetail.tsx
@@ -87,10 +87,13 @@ const ProgressIndicator = ({ status, failure }: { status: string; failure?: JobF
))}
-
-
- Processing failed at {failedStepLabel}. Check error details for more information.
+
+
+ {failedStepLabel ? `Failed at: ${failedStepLabel}` : 'Processing failed'}
+ {failure?.message && (
+
{failure.message}
+ )}
);
@@ -706,7 +709,9 @@ export function JobDetail() {
? 'TTS generation failed. Fix audio description text before retrying.'
: job.status === 'render_failed'
? 'Video rendering failed.'
- : 'Processing failed.'}
+ : job.error
+ ? job.error
+ : 'Processing failed. Retry or escalate to support.'}
)}