Window: last 24h (extended 72h for recurrence). Runs: 50. Total actions: 392. Avg actions/run: 6.8.
50 run_start
50 disk_worktree_snapshot
50 blocked_lane_classification_summary
50 done_audit_summary
50 run_complete
25 memory_snapshot
20 create_operator_ticket
19 repo_dirty_observed
11 operator_dev_loop_finished
9 reopen_weak_done_ticket
8 operator_dev_loop_throttled
8 recent_task_failure
7 needs_input_runtime_failure_reset
6 promote_dead_zone_ticket
5 repo_dirty_all_known_generated
3 active_lane_snapshot
3 todo_backlog_observed
3 stale_runtime_observed
3 stale_runtime_marked
3 terminal_ticket_runtime_closed
2 stale_runtime_summary
2 blocked_lane_completed_marked_done
1 pickup_direct_run
1 worktree_reaper_ran
1 in_review_stale_failure_state_cleared
1 chrome_memory_pressure_remediated
1 operator_ticket_exists
done) — All nine were cleanly recompleted; this looks like the system working as designed, not a false-positive pattern.[operator:dirty-repo:workspace] recurring 27× — Persistent genuine dirty state, not a tuning problem.[operator:active-lane-backlog] recurring 6× — Could be threshold flapping or a real backlog; can't distinguish from this data alone._should_retry_misrouted_needs_input unconditional fallthrough recycles every needs_input ticket
Location: Last line of _should_retry_misrouted_needs_input (~line 607): return True
needs_input ticket assigned to a runnable worker with no human comment is unconditionally reset to todo — even when there's zero crash/error signal. This produced the 7 needs_input_runtime_failure_reset actions.return True → return False. The regex above already catches specific failure modes (crashed, timeout, harvest_timeout, etc.); without those keywords the ticket should stay put.Expected effect: Reduces needs_input_runtime_failure_reset to only tickets with explicit error signatures; eliminates false resets.
repo_dirty_observed in the dev-loop trigger set fires on 38% of runs
Location: maybe_launch_operator_dev_loop, the trigger_actions set (~line 375)
repo_dirty_observed fires 19 times per 50 runs. The operator already creates/escalates a dirty-repo ticket for this; launching a full Claude dev loop on every dirty observation is disproportionate and is the primary driver of the 0.42 throttle ratio."repo_dirty_observed" from trigger_actions.Expected effect: Dev-loop attempts drop sharply; throttle ratio falls well below 0.42.
worktree_reaper_ran is informational but triggers a dev loop
Location: Same trigger_actions set in maybe_launch_operator_dev_loop
"worktree_reaper_ran" from trigger_actions.Expected effect: Further reduces unnecessary dev-loop launch attempts; marginal but clean.
Dev-loop throttle window (2 h) is too tight given the 30-min operator cadence
Location: _operator_dev_loop_throttled, timedelta(hours=2) (~line 401)
timedelta(hours=2) → timedelta(hours=3).