* fix(minions): supervisor progress watchdog + worker DB self-defense under supervision (#1801)
Alive-but-wedged worker (dead DB pool, process still up) now self-heals in
minutes instead of a silent 15h halt.
- supervisor: progress watchdog restarts a child that makes no forward progress
on claimable work (name+queue-scoped, active_healthy/due-delayed aware,
startup-grace + loop-budget bounded); runtime handler-name derivation.
- child-worker-supervisor: killChild gates on liveness not .killed (also fixes
the existing shutdown SIGKILL no-op); restartCurrentChild kills the captured
child ref; intentional restart doesn't count toward max_crashes.
- worker: DB-liveness probe runs under supervision (db_dead self-exit), stall
detection stays supervised-off.
- doctor: standalone per-queue wedged_queue check + state->status fix in the
remote queue_health check.
- jobs/queue: queue-scoped getStats wedge fields + jobs stats WEDGED line.
* fix(minions): wedge_restart_loop one-shot + supervised-probe comment + jobs-stats threshold (review)
Pre-landing adversarial review findings:
- wedge_restart_loop warn now fires once per exhausted window via a re-arming
flag, not every health tick (was flooding the audit log for the full window).
- Correct the stale GBRAIN_SUPERVISED comment: the DB probe runs under
supervision now; only stall detection is skipped.
- jobs stats WEDGED line reads GBRAIN_WEDGED_QUEUE_WARN_MINUTES so it agrees
with the doctor wedged_queue threshold.
* chore: bump version and changelog (v0.42.22.0)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: queue-ops runbook + KEY_FILES for the #1801 wedge watchdog (v0.42.22.0)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>