screentinker/docs
ScreenTinker fa3ab44c20 feat(#146): /api/status.debug throughput counters (gauges -> gauges + work done)
The debug block exposed only gauges (buckets, quarantined, inFlight) — state, not work.
A real flapping Firestick reads as flap.buckets:36, quarantined:0, indistinguishable
from healthy. Add lightweight in-memory throughput counters (total + last-completed
rolling window) so the server tells the flapper/flood story itself.

- lib/rolling-counter.js: shared bounded scalar counter (total, curWindow, lastWindow,
  windowStart); rolls lazily on bump AND read (no timer), idle decays to 0.
  DEBUG_STATS_WINDOW_MS default 60000.
- flap-limiter: refused{Total,LastWindow} (every allow:false), quarantineStarts{Total,
  LastWindow} (a quarantine event stays visible after the gauge decays).
- ota-breaker: stats() rateBackoff{Total,LastWindow}.
- ota-download-guard: servedTotal/shedTotal alongside the per-window values.
- database: maintenance sweepsTotal (confirm the prune is firing, not stalled).
- routes/status: debug block gains ota_breaker + the new fields (aggregate-only, cheap).

Tests: rolling-counter window-roll + idle decay; each counter increments on the right
event; booted /api/status asserts the new fields present + numeric. Suite 285/285.
Fallout doc: observability section lists the fields + what each tells a soak-watcher.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 23:24:32 -05:00
..
104-draft-preview-build-plan.md feat(preview): draft-aware device-free playlist preview via player reuse (#104) 2026-06-15 14:11:05 -05:00
109-android-pip-visibility.md fix(#109): render Android PiP overlay above the YouTube WebView video plane (#135) 2026-06-19 14:49:20 -05:00
134-device-reporting.md fix(#134): quiet false "reconnect" log + report HDMI output and UI render resolution (#136) 2026-06-19 15:32:11 -05:00
146-hardening-fallout.md feat(#146): /api/status.debug throughput counters (gauges -> gauges + work done) 2026-06-30 23:24:32 -05:00
146-hardening-plan.md docs(#146): event-loop hardening plan — blast-radius audit + failure model + sequenced plan 2026-06-30 20:44:46 -05:00
android-troubleshooting.md docs: add Android player troubleshooting & recovery guide 2026-06-03 19:58:09 -05:00
local-ai-setup.md docs: local AI setup guide for the Content Designer (#41) 2026-06-09 13:57:02 -05:00
maintenance-device-status-log.md docs(#142): 1.9.2-beta1 changelog + device_status_log VACUUM maintenance note 2026-06-27 19:59:17 -05:00
multi-tenancy-design.md Phase 1: multi-tenancy design doc + migration scripts 2026-05-11 19:37:15 -05:00
openapi.yaml docs(api): document /api/pip and the assignments muted field (#109/#129) 2026-06-18 17:36:12 -05:00