⌂ Home ☷ Board

Operator Tuner Report — 2026-05-13

Window: last 24h (extended 72h for recurrence). Runs: 50. Total actions: 414. Avg actions/run: 7.26.

Action mix (recent window)

    50  run_start
    50  done_audit_summary
    50  run_complete
    49  disk_worktree_snapshot
    49  memory_snapshot
    42  blocked_lane_classification_summary
    11  operator_dev_loop_throttled
    10  repo_dirty_observed
    10  operator_dev_loop_finished
    10  operator_ticket_exists
     9  reopen_weak_done_ticket
     9  active_lane_snapshot
     9  recent_task_failure
     9  needs_input_runtime_failure_reset
     6  promote_dead_zone_ticket
     5  todo_backlog_observed
     5  blocked_lane_completed_marked_done
     5  repo_dirty_all_known_generated
     4  create_operator_ticket
     4  terminal_ticket_runtime_closed
     4  needs_input_reclassified_in_review
     3  worktree_reaper_ran
     2  stale_runtime_observed
     2  stale_runtime_marked
     2  stale_runtime_summary
     2  active_lane_backlog_observed
     2  breakglass_noop_healthy
     1  skipped_overlap

Signals worth tuning

Reopened-ticket outcomes (current MC state)

Proposed patches

Operator Tuner Review — 2026-05-13

1. todo_backlog_observed in critical check disables dev-loop throttle

Problem: audit_ticket_flow records todo_backlog_observed on every run that has any runnable todo tickets (even 1). The critical check in maybe_launch_operator_dev_loop treats any todo_backlog_observed action as critical, bypassing the 4-hour throttle entirely. This explains the ~0.52 throttle ratio — the throttle is only effective during the rare windows when the board has zero runnable todos.

Location: maybe_launch_operator_dev_loop, the critical = (...) assignment.

Change: Gate the todo-backlog critical clause on actual severity. Replace:

any(a.get("action") == "todo_backlog_observed" for a in self.actions)

with:

any(
    a.get("action") == "todo_backlog_observed"
    and (
        int(a.get("backlog_count") or 0) >= TODO_BACKLOG_COUNT_TRIGGER * 2
        or int(a.get("oldest_age_minutes") or 0) >= TODO_BACKLOG_MINUTES_TRIGGER * 4
    )
    for a in self.actions
)

Expected effect: Dev-loop throttle becomes effective during normal board operations. Throttle ratio should drop from ~0.5 toward ~0.1–0.2. Dev-loop launches drop from ~10/day to ~4–6/day, saving model cost.


2. Remove operator_ticket_exists from dev-loop trigger actions

Problem: operator_ticket_exists fires when the operator finds an already-open ticket for a known issue (e.g. persistent dirty-repo). This isn't a new signal — it confirms a tracked problem. Including it in trigger_actions causes dev-loop launch attempts on nearly every run for chronic issues.

Location: maybe_launch_operator_dev_loop, trigger_actions set literal.

Change: Remove "operator_ticket_exists" from the set. "create_operator_ticket" already covers genuinely new problems.

Expected effect: Fewer dev-loop trigger attempts, especially when [operator:dirty-repo:workspace] ticket persists across runs. Combined with fix #1, this substantially reduces the 11 throttled + marginal launches per 24h.


3. Add luci-home/memory-backup/ to _GIT_KNOWN_GENERATED_PREFIXES

Problem: [operator:dirty-repo:workspace] is the noisiest operator-ticket marker at 28 recurrences in 72h. The workspace git status shows persistent modifications/untracked files under luci-home/memory-backup/ (visible in the repo's current dirty state). These are agent state files written by scheduled tasks, not anomalies requiring operator intervention. They aren't covered by the current 4-prefix allowlist, so the operator creates/maintains the dirty-repo ticket every cycle.

Location: _GIT_KNOWN_GENERATED_PREFIXES tuple (top-of-file constant).

Change: Add "luci-home/memory-backup/" to the tuple.

Expected effect: repo_dirty_all_known_generated count should rise from 5 toward 8–10 per 24h. [operator:dirty-repo:workspace] recurrences should drop sharply (perhaps to near-zero if these files are the primary remaining non-filtered source). Also eliminates the open/close cycling of the dirty-repo workspace ticket.


4. Signals too thin to act on