feat(admin): Lift A.2, surface loops and stalling models with one-click block #104
Reference in New Issue
Block a user
Delete Branch "feat/no-progress-lift-a2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Lift A.2: surfaces watchdog loops and stalling models in the admin portal, with the lever beside the evidence (North Star #4). Detection is unchanged; this is the surfacing half Lift A left thin.
What ships
#loops): a table of open alerts with severity, session title, model, top repeated target, calls and $ since the last landed change, time open, and Block model. Alerts resolved in the last 24h are listed below, dimmed.GET /admin/api/watchdog/loopsnow joins each open alert to its root's latest flagged verdict and returns{alerts, resolved}.GET /admin/api/watchdog/rollup?hours=N.stalled N sessions in 24h,looping session <title>), no browser dialogs. The dropdown path now recordsset from Models dropdown.GET /admin/api/models/blocked.<title>: <calls> calls, $<cost> since last landed change on <model>. <url>#loops.Verification
test_incumbent_routing::test_debug_log_emits_incumbent_identity, also failing onmain).ruff@0.16.9: no new findings in touched Python files.julianday()on both sides; stored timestamps are ISO withT/+00:00.Known follow-ups (not in this PR)
browser_snapshotcount as exact repeats. That caused one real false alert (a QA worker), which triggered and resolved correctly.calls_since_landedresets on any landing in the whole session tree, not just the session's own descendants.After merge:
systemctl --user restart llm-router.serviceso 8080 serves the new endpoints and pages. The watchdog picks up the new alert text at its next tick.🤖 Generated with Claude Code
https://claude.ai/code/session_01N9biTbFC63yDfYfUsZmhgd