neuralwatt-router-service #8

Merged
alee merged 15 commits from neuralwatt-router-service into main 2026-08-29 17:17:54 +00:00

15 Commits

Author SHA1 Message Date
adlee-was-taken
8afd311574 docs(admin): add admin portal design docs, reviews, readme restructure plans and reviews
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-29 12:47:44 -04:00
adlee-was-taken
57b717b64a test(admin): add admin portal alpha test suite covering health, history, models, runtime, triggers, snapshot and routing override
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-29 12:47:29 -04:00
adlee-was-taken
23b74a3254 feat(admin): add admin portal database schema for role-based access and audit
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-29 12:47:15 -04:00
adlee-was-taken
a6dd228d0a test(admin): live browser QA of dashboard rendering + controls (QA on :8091, production :8080 untouched)
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>
2026-08-29 11:24:47 -04:00
adlee-was-taken
c77d109f9c fix(admin): atomic config writes + sequential frontend saves to prevent truncation race
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-29 11:24:21 -04:00
adlee-was-taken
f75d56afca fix(admin-frontend): repair dashboard charts, runtime knobs, warnings and XSS
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>
2026-08-29 11:24:04 -04:00
adlee-was-taken
b63234a75c fix(deploy): self-heal on unexplained SIGTERM, start signal-source investigation
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
2026-08-29 02:22:29 -04:00
adlee-was-taken
b9220ede07 docs(deploy): fix and document the graceful-shutdown hang
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
2026-08-29 01:52:40 -04:00
adlee-was-taken
36b7178183 docs(readme): add 24GB VRAM Modelfile appendix
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>
2026-08-29 00:19:43 -04:00
adlee-was-taken
623676718d Logo bigger improvements 2026-08-29 00:11:21 -04:00
adlee-was-taken
19bfffda41 Logo improvements 2026-08-29 00:09:07 -04:00
adlee-was-taken
a34732cac3 Logo improvements 2026-08-29 00:07:44 -04:00
adlee-was-taken
03811cdf3a docs(readme): add 6krrt branding with a wheeled-6 logo
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>
2026-08-28 23:55:26 -04:00
adlee-was-taken
e9ce90edb6 docs(readme): add 6krrt branding with a wheeled-6 logo
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>
2026-08-28 23:42:43 -04:00
adlee-was-taken
5467a64b30 docs(readme): restore Where Ollama lives and remove dead TOC links
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>
2026-08-28 23:37:20 -04:00