738d63a34d
A claim that expired without a worker ever spawning (worker_pid NULL) was reclaimed and immediately re-claimed on every dispatcher tick, with consecutive_failures stuck at 0 — nothing could trip the breaker. Route the reclaim through _record_task_failure (own txn after the reclaim commit, same shape as enforce_max_runtime) instead of the salvaged raw counter increment, so per-task max_retries / kanban.failure_limit and the gave_up event apply and last_failure_error carries the stale lock. reclaim_task (operator path) still resets the counter; the live-worker extend path never reaches it. Trims the salvaged tests to one invariant that walks the breaker to its trip.