feat(admin): cockpit quick wins, six admin portal fixes (R5 G1 E3 R2 G3 C1) #101
Reference in New Issue
Block a user
Delete Branch "feat/cockpit-quick-wins"
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?
Six small admin-portal fixes from the cockpit review. Spec:
plans/cockpit-quick-wins.md; executed from.omo/plans/cockpit-quick-wins.md. One commit per item.loading...state until its config arrives, instead of claiminglocal_llmon first paintfix(admin): classifier card renders a loading state until config loadsnavbar.jsand rendered into#nav-linkson all eight pagesrefactor(admin): render nav links from navbar.js instead of eight copieskind,category,profile,tier,q,size) are read from and written to the URL withreplaceStatefeat(admin): decisions filters read and write the URLroute_decisionsandclient_outcomereports only, instead of summing every verification rowfix(admin): decisions tile reports route decisions and client outcomesfix(admin): warning dismissals key on digit-normalized text and severityreverts on restartdrift badgefeat(admin): one knob table merges runtime and persisted stateNotes for review
tests/test_admin_nav_is_complete.pyasserts the singleNAV_LINKSlist and the#nav-linksmount rather than per-page markup. Two tests that grepped for static nav text were updated the same way.decision_outcomesto/admin/api/snapshot.metrics.decision_outcome_summaryexists for this, andverdict_mixis unchanged: the TUI and the Signal quality card still use it.config_keyfield to eachGET /admin/api/runtimeitem. It is derived from the existing knob registries, not hand-copied. Drift is computed only from that payload'sruntimevspersisted, so runtime-only knobs get the badge too, and unsaved persisted edits never count as drift.id="config-list"stays on the table body, so the existing save and dirty-tracking selectors work unchanged. Unsaved edits survive the table's periodic re-render.node, in the newtests/test_admin_js_units.py, and skip ifnodeis not installed. The logic is extracted verbatim from the pages between marker comments, not reimplemented in Python.Verification
pytest: 2,283 passed, 1 failed. The failure istests/test_incumbent_routing.py::TestDebugLog::test_debug_log_emits_incumbent_identity, which fails identically on a cleanorigin/main(2,255 passed, 1 failed). The branch adds 28 tests and no new failures.ruff@0.16.9reports no new findings in any touched.pyfile compared withorigin/main.origin/main(f554fc1).git range-diffshows five commits unchanged; commit 4 differs only in context, from thetests/test_metrics.pyappend that sits next to #99's tests.Small nits, not fixed here
kWhunit label wraps onto its own line under its input.routing.default_flex_preferenceis truncated.routing.default_profileis a free-text input. It was one before this change too.navbar.jsmatches that file's existing style but is not ASCII.🤖 Generated with Claude Code
https://claude.ai/code/session_01N9biTbFC63yDfYfUsZmhgd