Long-running maintenance tasks now survive navigating away or reloading the page.
Problem
VideoDedupCard + GatedPurgeCard held the in-flight Celery task id only in component refs and polled task-result inline — leaving the page mid-run lost the id, so the result was never shown even though the task finished on the worker. Secondary bug: both watched QueueStatusBar queue="maintenance" but tasks.admin.* routes to maintenance_long, so the bar never reflected their own task.
Fix
New shared useMaintenanceTask composable: persists {taskId, mode, startedAt} to localStorage on dispatch, re-attaches on mount, and re-shows the result when the task finishes (celery result backend retains the summary). 3h stale-guard.
Long-running maintenance tasks now survive navigating away or reloading the page.
## Problem
`VideoDedupCard` + `GatedPurgeCard` held the in-flight Celery task id only in component refs and polled `task-result` inline — leaving the page mid-run lost the id, so the result was never shown even though the task finished on the worker. Secondary bug: both watched `QueueStatusBar queue="maintenance"` but `tasks.admin.*` routes to `maintenance_long`, so the bar never reflected their own task.
## Fix
- New shared `useMaintenanceTask` composable: persists `{taskId, mode, startedAt}` to localStorage on dispatch, re-attaches on mount, and re-shows the result when the task finishes (celery result backend retains the summary). 3h stale-guard.
- Both cards refactored onto it; card-specific computeds + confirm dialog retained.
- `QueueStatusBar` corrected to `queue="maintenance_long"`.
CI green on dev (run 1174, e287802). Frontend-only.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Long-running maintenance tasks must survive navigating away or reloading
the page. VideoDedupCard + GatedPurgeCard held the in-flight Celery task id
only in component refs and polled task-result inline, so leaving the page
mid-run lost the id and the result was never shown — even though the task
finished on the worker.
New shared composable useMaintenanceTask: persists {taskId, mode, startedAt}
to localStorage on dispatch, re-attaches on mount, and re-shows the result
when the task finishes (the celery result backend retains the summary well
under result_expires). Stale-guard skips resume past 3h. Both cards refactored
onto it; card-specific computeds + confirm dialog kept.
Also fixed the QueueStatusBar lane: both cards watched queue="maintenance"
but tasks.admin.* routes to maintenance_long, so the bar never reflected
their own task — now queue="maintenance_long".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Long-running maintenance tasks now survive navigating away or reloading the page.
Problem
VideoDedupCard+GatedPurgeCardheld the in-flight Celery task id only in component refs and polledtask-resultinline — leaving the page mid-run lost the id, so the result was never shown even though the task finished on the worker. Secondary bug: both watchedQueueStatusBar queue="maintenance"buttasks.admin.*routes tomaintenance_long, so the bar never reflected their own task.Fix
useMaintenanceTaskcomposable: persists{taskId, mode, startedAt}to localStorage on dispatch, re-attaches on mount, and re-shows the result when the task finishes (celery result backend retains the summary). 3h stale-guard.QueueStatusBarcorrected toqueue="maintenance_long".CI green on dev (run 1174,
e287802). Frontend-only.🤖 Generated with Claude Code
Long-running maintenance tasks must survive navigating away or reloading the page. VideoDedupCard + GatedPurgeCard held the in-flight Celery task id only in component refs and polled task-result inline, so leaving the page mid-run lost the id and the result was never shown — even though the task finished on the worker. New shared composable useMaintenanceTask: persists {taskId, mode, startedAt} to localStorage on dispatch, re-attaches on mount, and re-shows the result when the task finishes (the celery result backend retains the summary well under result_expires). Stale-guard skips resume past 3h. Both cards refactored onto it; card-specific computeds + confirm dialog kept. Also fixed the QueueStatusBar lane: both cards watched queue="maintenance" but tasks.admin.* routes to maintenance_long, so the bar never reflected their own task — now queue="maintenance_long". Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>