Summary
On v5 the blocked-action thrash breaker is wired correctly: pollTmuxOutputForAgent calls m.checkBlockedThrash(agent.Name, l) per line (src/pkg/agent/manager_poll.go:244), and the breaker itself lives in manager_thrash.go (60s window, 5 threshold, 10m cooldown, pauses via m.Pause(agent, "thrash-breaker", ...)). Surfaced while confirming #6147 was already resolved on v5.
But nothing pins the WIRING. thrash_coverage_test.go and backend_coverage_test.go exercise checkBlockedThrash / recordBlockedAndCheck directly, so the breaker logic is covered - while the one-line call in the poller that makes it fire in production is not. That is exactly the shape #6147 described on v4: a correct breaker that nothing invoked. A future refactor of the poller could drop that line and every existing test would still pass.
Suggested test
One end-to-end case in src/pkg/agent: drive a burst of blocked-action lines (more than the threshold within the window) through pollTmuxOutputForAgent using the existing hermetic tmux harness, and assert the agent ends up paused with reason thrash-breaker. Assert the pause, not a log line. Keep it small; this is one assertion that the poller-to-breaker link exists.
Refs #6147.
Summary
On v5 the blocked-action thrash breaker is wired correctly:
pollTmuxOutputForAgentcallsm.checkBlockedThrash(agent.Name, l)per line (src/pkg/agent/manager_poll.go:244), and the breaker itself lives inmanager_thrash.go(60s window, 5 threshold, 10m cooldown, pauses viam.Pause(agent, "thrash-breaker", ...)). Surfaced while confirming #6147 was already resolved on v5.But nothing pins the WIRING.
thrash_coverage_test.goandbackend_coverage_test.goexercisecheckBlockedThrash/recordBlockedAndCheckdirectly, so the breaker logic is covered - while the one-line call in the poller that makes it fire in production is not. That is exactly the shape #6147 described on v4: a correct breaker that nothing invoked. A future refactor of the poller could drop that line and every existing test would still pass.Suggested test
One end-to-end case in
src/pkg/agent: drive a burst of blocked-action lines (more than the threshold within the window) throughpollTmuxOutputForAgentusing the existing hermetic tmux harness, and assert the agent ends up paused with reasonthrash-breaker. Assert the pause, not a log line. Keep it small; this is one assertion that the poller-to-breaker link exists.Refs #6147.