{"definition_raw":"---\nid: observability-sweep\ntitle: Observability sweep \u2014 stuck tickets + orphan tmux\nschedule: \"*/15 * * * *\"\ntimeout: 120\nretry: false\nenabled: true\nnotify_on: failure\nrun_as: shell\ncommand: \". ~/.claude/env/api_keys.env 2>/dev/null; python3 /home/lucienne/workspace/scripts/observability_sweep.py\"\ntags: [infra, observability, watchdog]\nruntime_profile: direct_mixed\n---\n\n**OVERRIDES runtime profile:** uses notify.py (urllib direct Telegram) +\ndirect sqlite read + `tmux ls`. No `claude` CLI invocation.\n\nEvery 15 min, two checks (MC-3370):\n\n1. **Stuck-ticket alerter** \u2014 diffs `/api/v1/tickets/stuck` against last-seen\n   set on disk, Telegram-alerts only NEW entries (1h dedup per ticket).\n   Closes the gap where `get_stuck_tickets()` was pull-only and waited for a\n   human to open the page.\n2. **Orphan tmux sweep** \u2014 diffs `tmux ls` (mc-MC-* sessions) against\n   `runtime_sessions WHERE status IN ('starting','running','idle','needs_input')`.\n   Flags tmux sessions with no active row (leaked browser/CLI processes) and\n   active rows with no tmux session (stale db). 6h dedup per orphan key.\n\nImplementation: `~/workspace/scripts/observability_sweep.py`. Always exits 0.\nParent ticket: MC-3365.\n","id":"observability-sweep","last_run":{"duration_s":0.155233,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413838.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T06:00:45.512247+02:00","status":"completed"},"next_run":"2026-06-13 06:15","next_run_iso":"2026-06-13T06:15:00+02:00","runs":[{"duration_s":0.155233,"finished_at":"2026-06-13T06:00:45.669640+02:00","id":413838,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413838.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T06:00:45.512247+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.142973,"finished_at":"2026-06-13T05:45:02.906480+02:00","id":413790,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413790.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T05:45:02.760997+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.149109,"finished_at":"2026-06-13T05:30:24.383779+02:00","id":413749,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413749.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T05:30:24.231865+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.154117,"finished_at":"2026-06-13T05:15:02.909148+02:00","id":413706,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413706.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T05:15:02.751757+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.155497,"finished_at":"2026-06-13T05:00:56.153630+02:00","id":413669,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413669.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T05:00:55.995847+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.147731,"finished_at":"2026-06-13T04:45:03.103182+02:00","id":413620,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413620.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T04:45:02.953020+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.145006,"finished_at":"2026-06-13T04:30:25.013484+02:00","id":413578,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413578.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T04:30:24.866273+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.157652,"finished_at":"2026-06-13T04:15:04.362530+02:00","id":413532,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413532.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T04:15:04.202978+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.118422,"finished_at":"2026-06-13T04:04:36.735602+02:00","id":413494,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413494.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T04:04:36.614071+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.139317,"finished_at":"2026-06-13T03:45:02.970850+02:00","id":413443,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413443.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T03:45:02.828595+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.148295,"finished_at":"2026-06-13T03:31:22.807659+02:00","id":413403,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413403.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T03:31:22.655792+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.165248,"finished_at":"2026-06-13T03:15:03.013617+02:00","id":413356,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413356.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T03:15:02.844807+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.135501,"finished_at":"2026-06-13T03:00:35.029948+02:00","id":413311,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413311.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T03:00:34.891635+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.153959,"finished_at":"2026-06-13T02:45:03.001310+02:00","id":413264,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413264.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T02:45:02.844953+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.154653,"finished_at":"2026-06-13T02:30:25.860980+02:00","id":413224,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413224.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T02:30:25.703783+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.145174,"finished_at":"2026-06-13T02:15:02.936984+02:00","id":413179,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413179.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T02:15:02.789535+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.145367,"finished_at":"2026-06-13T02:02:21.637701+02:00","id":413138,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413138.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T02:02:21.489641+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.162508,"finished_at":"2026-06-13T01:45:02.869400+02:00","id":413089,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413089.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T01:45:02.704059+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.132282,"finished_at":"2026-06-13T01:30:55.836044+02:00","id":413049,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413049.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T01:30:55.701009+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"},{"duration_s":0.15977,"finished_at":"2026-06-13T01:15:02.932615+02:00","id":413005,"log_path":"/home/lucienne/workspace/logs/task-runs/observability-sweep/413005.log","output":"[obs-sweep] stuck tickets reported: 0\n[obs-sweep] tmux=0 db_active=0 tmux_orphans=0 stale_rows=0\n","started_at":"2026-06-13T01:15:02.770769+02:00","status":"completed","task_id":"observability-sweep","task_name":"Observability sweep \u2014 stuck tickets + orphan tmux"}],"runs_limit":20,"schedule":"*/15 * * * *","schedule_label":{"description":"Every 15 minutes","is_custom":false,"label":"Every 15 min","sort":1,"sort_time":""},"stats":{"avg_duration":0.1915541023054755,"completed":694,"failed":0,"timeout":0,"total":694},"task":{"_description":"**OVERRIDES runtime profile:** uses notify.py (urllib direct Telegram) +\ndirect sqlite read + `tmux ls`. No `claude` CLI invocation.\n\nEvery 15 min, two checks (MC-3370):\n\n1. **Stuck-ticket alerter** \u2014 diffs `/api/v1/tickets/stuck` against last-seen\n   set on disk, Telegram-alerts only NEW entries (1h dedup per ticket).\n   Closes the gap where `get_stuck_tickets()` was pull-only and waited for a\n   human to open the page.\n2. **Orphan tmux sweep** \u2014 diffs `tmux ls` (mc-MC-* sessions) against\n   `runtime_sessions WHERE status IN ('starting','running','idle','needs_input')`.\n   Flags tmux sessions with no active row (leaked browser/CLI processes) and\n   active rows with no tmux session (stale db). 6h dedup per orphan key.\n\nImplementation: `~/workspace/scripts/observability_sweep.py`. Always exits 0.\nParent ticket: MC-3365.","_file":"observability-sweep.md","_path":"/home/lucienne/workspace/tasks/observability-sweep.md","command":". ~/.claude/env/api_keys.env 2>/dev/null; python3 /home/lucienne/workspace/scripts/observability_sweep.py","enabled":true,"id":"observability-sweep","notify_on":"failure","retry":false,"run_as":"shell","runtime_profile":"direct_mixed","schedule":"*/15 * * * *","tags":["infra","observability","watchdog"],"timeout":120,"title":"Observability sweep \u2014 stuck tickets + orphan tmux"}}
