Window: last 24h (extended 72h for recurrence). Runs: 49. Total actions: 358. Avg actions/run: 6.31.
49 run_start
49 disk_worktree_snapshot
49 memory_snapshot
49 done_audit_summary
49 run_complete
22 blocked_lane_classification_summary
12 active_lane_snapshot
10 repo_dirty_observed
9 operator_ticket_exists
9 operator_dev_loop_throttled
9 repo_dirty_all_known_generated
7 todo_backlog_observed
6 promote_dead_zone_ticket
5 operator_dev_loop_finished
5 create_operator_ticket
3 blocked_lane_completed_marked_done
2 stale_runtime_observed
2 stale_runtime_marked
2 stale_runtime_summary
2 needs_input_reclassified_in_review
2 worktree_reaper_ran
2 terminal_ticket_runtime_closed
1 operator_ticket_resolved
1 active_lane_backlog_observed
1 breakglass_recovery_recorded
1 breakglass_dev_loop_finished
repo_dirty_observed from dev-loop trigger_actionsmaybe_launch_operator_dev_loop → trigger_actions set (the literal "repo_dirty_observed" member)."repo_dirty_observed" from the set. The dev-loop prompt already instructs the agent to inspect git state; an explicit trigger is redundant and circular.worktree_reaper_ran from dev-loop trigger_actionsworktree_reaper_ran, 2 events) is not an anomaly — the reaper already handled it. Triggering a full dev loop is wasted effort; only the failure path (worktree_reaper_failed) is actionable.trigger_actions set."worktree_reaper_ran" from the set. Keep "worktree_reaper_failed"._operator_dev_loop_throttled writes the last_started_at timestamp before the subprocess is launched. If subprocess.run raises (timeout, binary missing, OOM kill), the 4-hour throttle is already persisted, blocking retries until it expires._operator_dev_loop_throttled (state file write at bottom of method) and _launch_operator_dev_loop (except block).except block of _launch_operator_dev_loop, delete or overwrite state/luci_operator_dev_loop.json with a timestamp 4 hours ago (or remove it). This lets the very next operator run retry the launch. (The single-flight lock already prevents concurrent runs, so there is no race.)operator_dev_loop_failed severity=critical) become self-healing within 30 minutes instead of being silenced for 4 hours._GIT_KNOWN_GENERATED_PREFIXES may be incompleterepo_dirty_observed + 9 repo_dirty_all_known_generated = 19 dirty checks that found changes. The 10 non-generated observations drive the noisy [operator:dirty-repo:workspace] recurrence. However, the actual filtered dirty paths are not visible in the report, so I cannot propose specific prefix additions.filtered sample (already collected in audit_git_state) into a dedicated lightweight sidecar or include it in the repo_dirty_observed action payload at higher verbosity. Re-evaluate once the actual paths are known.Summary of expected signal impact:
| Signal | Before | After changes 1–3 |
|---|---|---|
| Dev-loop throttle ratio | 0.64 | ~0.15–0.25 |
[operator:dirty-repo:workspace] recurrences |
14 / 72 h | unchanged (persistent issue, but less dev-loop churn) |
| Dev-loop launches on failure | blocked 4 h | retries next run |
| Total actions/run | 6.31 | ~5.8 (fewer throttle/trigger records) |