fix camo self-proxying own images; reaper requeues abandoned jobsVerified

camo: skip cave's own-origin (:base-url) <img> URLs. Camo is for hiding the
viewer's IP from third-party hosts; proxying cave's own raw images made the
server fetch its own public URL from inside its container (can't hairpin →
502 "fetch failed" → broken image). Browser now loads own images directly.

reaper: reap-stale-workflow-jobs now REQUEUES jobs orphaned by a dead/
restarted/offline runner (or stuck 'assigned' past a grace period) instead
of failing them — a runner restart (e.g. a cave deploy) shouldn't kill an
in-flight build. Bounded by a new attempts counter (migration 63); only a
hard MAX-MINUTES timeout or exhausted attempts fail the run. Reap cadence
120s (was 300s).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Anthony Green2026-06-28 23:17:49 -0400 f529a3774e9cdbc101ab580bbe17eaa688ae2894
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>