github ruvnet/RuView v0.8.0
v0.8.0 — Real-time CSI introspection / low-latency tap (ADR-099)

4 hours ago

v0.8.0 — Real-time CSI introspection / low-latency tap (ADR-099)

Host-only release. Firmware is unchanged from v0.6.4-esp32 — the introspection tap consumes the existing CSI frame stream produced by current firmware, no flash needed.

What's new

Adds midstream as a parallel introspection tap on wifi-densepose-sensing-server. Two new endpoints, both off by default behind --introspection:

Endpoint Format Purpose
GET /ws/introspection newline-delimited JSON, streamed at CSI frame rate Live attractor + regime + signature-match stream
GET /api/v1/introspection/snapshot single-shot JSON, RUVIEW_API_TOKEN-gated when auth is on Pull-based snapshot for orchestrators

Each snapshot carries:

  • frame_count, timestamp_ns
  • regimeIdle / Periodic / Transient / Chaotic / Unknown
  • lyapunov_exponent, attractor_dim, attractor_confidence
  • regime_changed — boolean, flips on the first frame after a regime transition
  • top_k_similarity[] — highest-scoring matches against a per-deployment signature library, with above_threshold flag

Performance numbers (measured on this branch)

tests/introspection_latency.rs, host-side L1 stand-in scoring on a 1-D mean-amplitude feature, 200-frame noise warm-up → 5-frame motion-ramp signature:

Signal Frames to recognise Ratio vs event-path floor (16 frames) Status
top_k_similarity[0].above_threshold 5 3.20× Real, repeatable
regime_changed (10-frame motion window) did not fire Needs multi-dim features (ADR-208 P2)
Per-frame update() p99 0.041 ms ~24× under ADR-099 D4's 1 ms budget ✅ Meets budget

ADR-099 D8 is honestly amended in this release. The aspirational 10× ratio is architecturally unreachable on 1-D scalar features — the noise floor of a single mean-amplitude scalar is too wide to discriminate from a motion signature in 1–2 frames. Closing the gap requires ADR-208 Phase 2 (Hailo NPU vec128 embeddings) so multi-dim partial matches can score in 1–2 frames rather than 5. Until that lands, the tap ships off by default and D4 (per-frame budget) is met today, D8 (10× ratio) is contingent on ADR-208 P2.

Validation

  • cargo test --workspace --no-default-features1,656 passed, 0 failed, 8 ignored
  • python archive/v1/data/proof/verify.py — VERDICT PASS, hash 8c0680d7…51c6 matches expected
  • ✅ 13 / 13 introspection-specific tests pass (8 lib + 5 latency/regression)
  • ✅ PR #554 CI: 29 SUCCESS, 0 FAILURE (informational dep-scan / security-report still aggregating at merge time, both pass downstream of green code-correctness gates)

What's NOT in this release

  • No firmware change — uses existing v0.6.4-esp32 firmware.
  • No change to /ws/sensing or wifi-densepose-signal — ADR-098 already settled that those existing seams are correct; this is the parallel-addition counterpart, not a substitution.
  • No NPU dependency — runs entirely on the existing host CPU. D8's 10× target is documented as contingent on ADR-208 P2.

Files of interest

  • docs/adr/ADR-099-midstream-introspection-tap.md — full design record + amended D8.
  • v2/crates/wifi-densepose-sensing-server/src/introspection.rs — 578 lines.
  • v2/crates/wifi-densepose-sensing-server/tests/introspection_latency.rs — 288 lines.

Companion tracking

Issue #556 — capability surface, measured baseline, path to closing D8.

Upgrade

Pull, rebuild, restart with --introspection:

git pull && (cd v2 && cargo build --release -p wifi-densepose-sensing-server --bin sensing-server)
./v2/target/release/sensing-server --introspection

/ws/sensing clients are unaffected — no change to existing behaviour.

🤖 Generated with claude-flow

Don't miss a new RuView release

NewReleases is sending notifications on new releases.