svrnty-hermes-webui-plugin/routes
Svrnty ab24ff9cdb fix(plugin): umbrella.py registration broke /api/umbrella — sprint 2026-05-25 Wave 7 D12
Root cause: routes/umbrella.py:31 registered /umbrella (non-/api/* path)
which the plugin loader rejects with ValueError per SVRNTY-PLUGIN-PROTOCOL
§5.1. The ValueError bubbled out of register() before the two valid
/api/umbrella* routes could be registered, so /api/umbrella returned 404.

Note: task description fingered vault_status.py:46 as a "recursion bug",
but L46 there is handler.wfile.write(body) — no recursion. The _plugin_h
calls in tracebacks come from hermes-webui/api/routes.py:3462 (the
dispatcher, correctly invoking plugin handlers). The vault_status
BrokenPipeErrors are unrelated client-disconnect noise from a slow
credctl subprocess, not what breaks /api/umbrella.

Fix:
- Drop api.register_route("/umbrella", ...) line that violated /api/* contract
- Remove now-orphaned _handle_panel_html (Karpathy rule 3 cleanup)
- Add docstring noting umbrella panel HTML is reached via
  /plugins/svrnty/umbrella.html (already served by register_static)

Verified: /api/umbrella returns 200 + umbrella.json after restart.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 16:50:19 -04:00
..
__init__.py feat(plugin): initial scaffold — plugin loader entry + AST + CI workflows (P1.B/C/D) 2026-05-23 09:59:45 -04:00
adwright.py feat(adwright route): wire real Adwright data via adwright_core import 2026-05-24 12:16:46 -04:00
bte_proxy.py feat(bte panel): wire grid to live /api/query/assetDtos (replaces 404'd assetGrid) 2026-05-24 14:15:22 -04:00
transcribe.py feat(plugin): STT migration via audio_attachment_processor hook (L1-L6) 2026-05-23 10:14:29 -04:00
umbrella.py fix(plugin): umbrella.py registration broke /api/umbrella — sprint 2026-05-25 Wave 7 D12 2026-05-24 16:50:19 -04:00
vault_status.py feat(plugin): Phase 2 partial — vault_status migrated + brand skin moved + eval suite (P2.B/C, P3.A/B) 2026-05-23 10:02:47 -04:00