From f427a474a6813124568fc8f09e3d9368853a4129 Mon Sep 17 00:00:00 2001 From: fallen-pc <206734417+fallen-pc@users.noreply.github.com> Date: Fri, 28 Aug 2026 15:32:58 +1000 Subject: [PATCH] feat(ui): pipeline dashboard - one view across sense/verify/fuse RuView, RuField, and RuCelium each have real, tested pieces that got wired to each other tonight (rufield simulated-source fix, the ADR-302 OOD gate, RuCelium's RF ingest + RuFieldFusion wiring) - but no single place to actually watch the whole chain. You'd need three separate tools (or three separate curl calls) to see RuView sensing, the OOD gate's domain_state, and RuCelium's fused room-state inferences at once. ui/pipeline.html is a static, no-build, no-dependency page (same convention as ui/observatory.html, ui/viz.html, and rufield-viewer) served by RuView's own static file serving. It polls: - RuView's own /api/v1/sensing/latest - classification, features, and the domain_state field (renders KNOWN/DEGRADED/UNKNOWN color-coded; when the field is absent it says "OOD gate: disabled", never fabricates a state) - A configurable RuCelium gateway's /api/rf-context - ingest stats, fused room_state_inferences, upstream identity - and /api/stats for biome counters (best-effort; that panel's absence doesn't break the page) Defaults the RuView URL field to window.location.origin rather than a hardcoded host - found empirically while testing: browsers treat `localhost` and `127.0.0.1` as different origins even though they resolve to the same machine, so a hardcoded default silently forced a needless cross-origin fetch whenever the page was opened via the other name. Every panel shows DISCONNECTED with the real fetch error rather than stale or fabricated data when a source is unreachable. Needs a small CORS addition on the RuCelium side (cross-origin, since that's a different port) - see the paired PR on ruvnet/RuCelium. Live-verified against both real running servers, RuView side running --source simulated throughout. What's actually being verified is the dashboard's rendering and data plumbing end to end, not any accuracy claim: RuView panel rendered live presence/motion/confidence/RSSI/ variance correctly, and RuCelium panel showed events ingested and fused inferences rendering with confidence bars. All figures involved are SYNTHETIC (simulated source, not hardware) - see the full numbers in the PR description rather than repeated here. --- ui/pipeline.html | 335 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 335 insertions(+) create mode 100644 ui/pipeline.html diff --git a/ui/pipeline.html b/ui/pipeline.html new file mode 100644 index 0000000000..5682f009a0 --- /dev/null +++ b/ui/pipeline.html @@ -0,0 +1,335 @@ + + + + + +RuView Pipeline — perceive → verify → fuse + + + + +

RuView Pipeline

+

One view across everything built tonight — no single source is fabricated when unreachable; a disconnected panel says so.

+ +
+ RuView senses + ADR-302 OOD gate verifies domain + RuField signs the event + RuCelium ingests + verifies + RuFieldFusion infers room state +
+ +
+ + + + +
+ +
+ + +
+
+ RuView — live sensing + +
+
+
+
Presence
+
Motion level
+
Confidence
+
Mean RSSI
+
Variance
+
Est. persons
+
+ +
+
OOD gate: not queried
+
Waiting for first poll…
+ +
+
+
+ + +
+
+ RuCelium — RF ingest + fusion + +
+
+
+
Upstream
+
Events verified
+
Events unverified
+
Poll failures
+
+ +
+
Fused room-state inferences (RuFieldFusion)
+
No inferences yet
+
+ +
+
+
+ +
+ + + + +