48bcdf94e9
release_stale_claims() reclaimed expired claims without counting the failure, so a claim that was never spawned (worker_pid NULL) spun forever with consecutive_failures stuck at 0 and the failure_threshold breaker could never trip (#111306). The reclaim transaction now increments consecutive_failures atomically. Extend-live-worker and manual operator reclaim paths are untouched (extend is not a failure; reclaim_task deliberately resets the counter). Tests: 3 new regression tests in tests/hermes_cli/test_kanban_db.py — reclaim without spawn increments (red on base), reclaim with dead worker increments (red on base), live-worker extend does not. Related kanban suites: 79 passed, 1 skipped. authored with AI assistance (Muse, Meta's Muse Spark) under the contributor's direction