QA evidence captured while the QA uvicorn instance ran on 127.0.0.1:8091,
leaving the production :8080 systemd service untouched.
Committed evidence:
- code_plans/task-8-admin-visual-fixes.png
- code_plans/task-8-admin-visual-fixes-post-save.png
- code_plans/admin_dashboard.png
- code_plans/.playwright-mcp/ (console logs + v2/v3 screenshots)
- .omo/evidence/task-8-admin-visual-fixes-v2.png
- .omo/evidence/task-8-admin-visual-fixes-console-v2.txt
Panels asserted: quota bar, verdict doughnut, history line chart, runtime knobs,
warnings panel (no null reference), and save-all config flow.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Coalesced commit: todos 1-6 all live in the single untracked
admin/frontend/index.html file. Their changes cannot be cleanly separated
by hunk because the pre-fix file state was never committed and the
original canvas gauge code is unrecoverable. This commit also carries
the frontend half of todo 7 (sequential saveAllConfig), which is in the
same file.
Fixes covered:
- Todo 1: quota gauge replaced with horizontal bar + realigned layout
- Todo 2: verdict doughnut canvas id fixed to verdict-chart
- Todo 3: history line chart canvas id fixed to history-chart
- Todo 4: runtime knob objects no longer render as [object Object]
- Todo 5: warnings panel rebuilds placeholder, no null reference
- Todo 6: task_category and model/provider strings escaped before innerHTML
- Todo 7 frontend: saveAllConfig issues requests sequentially
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Restart=on-failure explicitly excludes clean termination by SIGTERM/SIGINT
from auto-restart, on the assumption that SIGTERM always means a deliberate
stop. That assumption doesn't hold here: something outside systemctl keeps
sending the dispatcher a bare SIGTERM, and once the graceful-shutdown-timeout
fix let it exit cleanly instead of hanging, it just stayed down afterward
until someone noticed. Switch to Restart=always so it self-heals in ~5s
regardless of who sent the signal; systemctl stop/restart are unaffected.
Also documents the live investigation into the signal's actual source
(code_plans/router-unreachable-signal-investigation.md): ruled out systemctl,
the admin portal's restart trigger, suspend/resume, and the OOM killer;
confirmed via auditd it isn't delivered through kill or tgkill either, so the
audit watch now also covers pidfd_send_signal and the rt_*sigqueueinfo
syscalls. Still open.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VRQXz5SYZYVWscxS1QqF6U
A bare SIGTERM delivered directly to the uvicorn PID (bypassing systemctl)
left the dispatcher permanently unreachable: its listening socket closed,
but graceful shutdown never completed because open SSE connections
(/events/decisions) never disconnect, and since systemd wasn't tracking a
stop job for that signal, TimeoutStopUSec never applied and
Restart=on-failure never fired.
Cap the graceful-shutdown wait with --timeout-graceful-shutdown 5 so any
SIGTERM converges to a clean exit regardless of who sends it, and record
the incident in CLAUDE.md for the next time this happens.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VRQXz5SYZYVWscxS1QqF6U
Documents why config.yaml points at Modelfile-tagged variants of mistral-nemo:12b and qwen3-vl:4b, gives the exact ollama create commands, and explains the per-request num_ctx limitation that forces the context size to live in the tag.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Adds a cute, wheeled '6' mascot to the project. The logo uses a transparent background and a high-contrast orange/slate palette for visibility across light and dark modes. Updated the README header to prominently feature the 6krrt name and the new logo.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
The README never mentioned the project name 6krrt; it only said Local LLM Model Router. Add a small cute SVG logo of a wheeled number 6 and a centered header block that shows both the name and the descriptor, keeping the existing intro paragraph and tui.py demo-gif TODO intact.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
documentation_reviews/readme-restructure-review.md found that the README restructure (14a7653) dropped the Where Ollama lives subsection, which included a security instruction about binding Ollama to a VPN address rather than 0.0.0.0. Restore it verbatim under ## Installation as a third subsection alongside Local (venv) and As a systemd service.
Also remove the dead Table of Contents links: Scheduled Jobs (systemd) (heading no longer exists), and Setup/Where Ollama lives (Setup section no longer exists). Re-add Where Ollama lives under Installation in the TOC so it has exactly one working entry.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>