Ops Dashboard

Published at https://sportstlm.com/ops/ — the single control panel for the box.

Access

Serving

Control table

Status vocabulary:
- online — running/verified
- offline — Windows-only, ignored by design
- degraded — stale/failing
- unknown — no probe

Endpoints

Endpoint Purpose
/ops/ the page (search + All / Attention / Online / Ignored filters)
/ops/api/state full state JSON
/ops/api/attention items needing attention
/ops/api/history 24 h status changes
/ops/api/export.csv CSV export
POST /ops/api/refresh force re-probe
/ops/api/entry/<id> single entry

Every status transition appends to /opt/ops/history.jsonl.

Key report scripts in /opt/ops/

Script Produces
llm_cost_report.py LLM cost table + llm-cost.json (Sportstlm/LLM Pipeline)
daily_report.py daily digest
collect.py registry → state.json / index.html
signal_outcomes.py / inrun_settle.py in-run signal settlement
tips_engine.py tips ledger
nba_odds_*.py, odds_fill.py, api_odds_fill.py odds pipelines
provider_balance.py / provider_guard.py LLM provider health
sportsmole handling Sportstlm/Sports Mole Pipeline

Parked gaps

/opt/ops/backlog.json lists known gaps deliberately left alone (each with impact +
mitigation + trigger): racing Windows-only routes, lottery log/image size, Sports Mole
date heuristic, paraphrase cap, LLM price coverage, no image HEALTHCHECK, single-user
dashboard auth, foreign-monitor ownership, no external dead-man's switch.