Tracks Phase 5.27 follow-up. The Failed Jobs blueprint (web/teslausb_web/blueprints/jobs.py) currently ships an _indexer_adapter that returns an empty list because B-1's mapping service (services/mapping/) has no dedicated failed-scan / dead-letter table yet (see services/mapping/stale_scan.py).
When B-1 grows a mapping-side dead-letter store (analogue to v1's indexing_queue table), wire it through JobsService._indexer_adapter so failed video-index attempts surface in the unified Failed Jobs UI alongside cloud_sync failures.
Tracks Phase 5.27 follow-up. The Failed Jobs blueprint (web/teslausb_web/blueprints/jobs.py) currently ships an _indexer_adapter that returns an empty list because B-1's mapping service (services/mapping/) has no dedicated failed-scan / dead-letter table yet (see services/mapping/stale_scan.py).
When B-1 grows a mapping-side dead-letter store (analogue to v1's indexing_queue table), wire it through JobsService._indexer_adapter so failed video-index attempts surface in the unified Failed Jobs UI alongside cloud_sync failures.