fix: prevent disk-full from permanently stalling supervisor task queue
A disk-full condition at 02:00 caused the import task queue to get
permanently stuck because cleanup failures in _run_task's finally block
prevented _process_next() from ever running. Every subsequent hourly
plaud sync queued behind the phantom "running" import for 9+ hours.
- Isolate each cleanup step in _run_task's finally block so
_process_next() always executes regardless of cleanup failures
- Add stale-queue detection: _running now tracks the task thread,
and submit() checks thread liveness before queuing — if the thread
died without clearing state, it self-heals on next submission
- Harden RunnerManagedProcess.cleanup() so one failure doesn't
block subsequent cleanup steps
- Make DailyLogWriter.write() swallow OSError so output threads
survive disk-full instead of crashing silently
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>