* docs(research): add RuView beyond-SOTA system review (00) First document of the beyond-SOTA research series: capability audit of the current RuView engine with role-to-crate maturity matrix, ruvsense module inventory, gap analysis, and risk register. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * docs(research): add beyond-SOTA architecture design (02, in progress) https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * docs(research): finalize beyond-SOTA architecture (02) https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * docs(research): add benchmark/validation methodology snapshot (03) https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * docs(research): add beyond-SOTA series index with validation results; changelog README index ties the 5 research docs together with the session's measured validation evidence: 2,797 workspace tests / 0 failed, Python proof PASS (bit-exact), and paired pre/post criterion CIR benchmarks. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * perf(signal): precompute CIR warm-start system; hoist tomography solver allocs Exact, determinism-safe optimizations (bit-identical float results): - cir.rs: diag(PhiH Phi)+lambda*I and its CSR matrix depend only on Phi and lambda (fixed at CirEstimator::new) but were rebuilt every frame (O(K*G) pass + CSR allocation). Now built once in new() via build_warm_start_system; summation order unchanged. - tomography.rs: ISTA gradient buffer hoisted out of the 100-iteration loop (fill(0.0) reset) and the Frobenius Lipschitz bound moved from per-reconstruct to construction. Verified: signal 456 tests green; engine 11/11 green including cycle_is_deterministic and witness-stability tests. Criterion paired pre/post: cir_estimate/he40 -3.9% (p<0.01), multiband -1.2/-1.4%. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * fix(worldgraph): bound SemanticState growth with deterministic retention StreamingEngine::process_cycle appended one SemanticState belief per cycle with no eviction — ~1.7M nodes/day at 20 Hz (beyond-SOTA roadmap finding #6). Add WorldGraph::prune_semantic_states(max): deterministic eviction of the oldest beliefs by (valid_from_unix_ms, id); structural nodes (rooms, zones, sensors, anchors, tracks, events) are never eligible. Wire it into the engine after each belief append (DEFAULT_SEMANTIC_RETENTION = 7,200, ~6 min at 20 Hz; set_semantic_retention to tune). The WorldGraph holds current beliefs; durable history is the recorder's job, so no audit data is lost. 3 new tests: end-to-end bounded growth, oldest-only eviction, deterministic equal-timestamp tie-break. Workspace gate: 2,865 passed, 0 failed. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * feat(sensing-server): route live frames through the governed StreamingEngine Closes the live-trust-path gap (ADR-136 section 8, beyond-SOTA system review): the running server fused live CSI with the bare MultistaticFuser, while the privacy/provenance/witness control plane (ADR-135..146) only ever ran on synthetic in-test frames. The privacy control plane was therefore bypassable on the real path. New engine_bridge module drives StreamingEngine::process_cycle from the server's live NodeState map, reusing the existing NodeState -> MultiBandCsiFrame conversion. It lazily wires each contributing node as a WorldGraph sensor (idempotent), bounds belief growth via the retention cap, and forwards explicit timestamps/calibration ids so the path stays deterministic and replayable. Wired additively into both live ESP32/WiFi fusion sites in main.rs via a split-borrow off the write guard, so person-count behavior is unchanged; the latest BLAKE3 witness is stored on AppState. Every published belief now carries evidence + model + calibration + privacy decision and a deterministic witness. Adds wifi-densepose-engine/-worldgraph/-bfld/-geo deps. 6 new bridge tests (witnessed belief with full provenance, cross-run determinism, idempotent node registration, retention bound, privacy-mode propagation). sensing-server suite 430+128 green; workspace gate 2,904 passed / 0 failed. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * feat(train): falsifiable occupancy benchmark with anti-overfitting gate Makes the presence/person-count "beyond SOTA" claim falsifiable in code instead of aspirational (the unfalsifiability gap from the beyond-SOTA system review). occupancy_bench grades predictions vs ground truth and gates a SOTA claim behind one claim_allowed invariant requiring ALL of: - DataProvenance::Measured — synthetic/mock data is scorable for regression but never claimable (anti-mock-contamination; the CLAUDE.md Kconfig-bug lesson made structural). - A leak-free EvalSplit — validate() refuses any split where a subject OR environment id appears in both train and test (subject leakage / per-environment overfitting). - n_test >= min_test_samples (small-N guard). - Presence F1 whose bootstrap-CI lower bound (deterministic seeded splitmix64) clears the threshold — not the point estimate. - Count MAE within threshold. The claim string is unreadable except through the gate (NO_CLAIM otherwise), same discipline as the ruview-gamma acceptance gate. What remains is data, not method: a frozen, SHA-pinned, subject/environment-disjoint measured replay set turns the claim into a passing/failing test. Lives in wifi-densepose-train (the eval bounded context, alongside ablation/ eval/metrics). 10 tests cover each refusal path; warning-clean under the crate's missing_docs lint. Workspace gate 2,914 passed / 0 failed. Doc 03 updated. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * feat(engine): per-room adapter provenance + drift-to-recalibration advisor Closes the trust-chain gap where an ~11 KB per-room LoRA adapter (ADR-150 section 3.4) could silently change inference without the witness noticing: provenance carried only "rfenc-v<N>" with no notion of adapter identity. - StreamingEngine::set_room_adapter(AdapterInfo): pins the adapter's content-derived id into provenance model_version ("rfenc-v1+adapter:<id>") — and therefore into the BLAKE3 witness — so swapping or clearing adapter weights always shifts the witness. Engine test proves base -> adapter -> other-adapter -> cleared all witness differently and cleared == base. - RecalibrationAdvisor: recommends re-running the ADR-135 empty-room baseline / refitting the room adapter on sustained low fusion coherence (streak threshold, default 60 cycles ~ 3 s at 20 Hz) or an ADR-142 change-point. Surfaced as TrustedOutput::recalibration_recommended, stored on the sensing-server AppState alongside the witness at both live fusion sites. - Bridge plumbing: EngineBridge::{set_room_adapter, clear_room_adapter} + live-path test that the adapter id flows into the live witness. Scope note (honest): this is the deployable provenance/trigger half of the "retrained model" roadmap item. Fitting the adapter itself runs in the existing external calibration service (aether-arena/calibration/); a trained RF-encoder checkpoint still does not exist in-tree. Engine 15 tests, bridge 7 tests. Workspace gate: 2,918 passed / 0 failed. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * fix(mat): gate api module behind its feature — standalone no-default-features builds pub mod api was unconditional while its only dependency, serde, is optional behind the 'api' feature, so any build without default features failed with 101 unresolved-serde errors (masked in --workspace runs by feature unification). The api module and its create_router/AppState re-export are now cfg(feature = "api")-gated with docsrs annotations. All combos compile: bare --no-default-features (was 101 errors, now 0), --no-default-features --features api, and full default (177 tests pass). Workspace gate: 2,918 passed / 0 failed. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * perf(signal): opt-in FFT operator for the CIR ISTA solver (8-14x measured) Phi is a sub-DFT, so each ISTA mat-vec can run as one length-G FFT (O(G log G)) instead of a dense O(K*G) product — the dominant-latency-hazard finding from the beyond-SOTA optimization roadmap. New CirConfig::fft_operator, default FALSE: the dense path stays the bit-exact witness default. The FFT evaluates the same sums in a different order, so enabling it shifts float results in the last bits and requires regenerating any pinned witness — strictly opt-in per deployment. FftOperator (rustfft, planned once at CirEstimator::new, scratch buffers reused across the ISTA loop) dispatches inside ista_solve: Phi x = scale * forward-FFT(x) sampled at bins (k_idx mod G) Phi^H v = scale * unnormalised inverse-FFT of v scattered into those bins Warm-start and Lipschitz estimation stay dense at construction. Measured (criterion, same run, same machine): ht20: 2.22 ms -> 265 us (8.4x) ht40: 10.26 ms -> 717 us (14.3x) The real HE40 grid (K=484, G=1452) scales further per the O(K*G)/O(G log G) ratio. 3 new tests: FFT<->dense matvec equivalence to float tolerance on ht20 and he40 grids; end-to-end dominant-tap agreement on a single-path frame; all default configs keep FFT off. New cir_estimate_fft bench group. Workspace gate: 2,921 passed / 0 failed (default path bit-exact, witnesses unchanged). https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * feat(core): canonical frame decoder — capture-to-claim replay (ADR-136) The encode half of the ADR-136 frame contract existed (ComplexSample, to_canonical_bytes, witness_hash) but there was no decoder: a captured canonical frame could be witnessed but never reconstructed, blocking replay-from-capture. CsiFrame::from_canonical_bytes is the exact inverse: same id, metadata, complex payload, and witness hash (tested as the round-trip law AC7 — the replayed frame re-encodes byte-identically). Amplitude/phase are recomputed from the payload (projections, not independent state). Every malformed-input class fails closed (AC8): header truncation -> Truncated, payload truncation -> PayloadMismatch, unknown discriminants, non-UTF-8 device id, trailing bytes. Nil calibration uuid decodes as None per the documented encoding. Core: 36 tests pass. Workspace gate: 2,937 passed / 0 failed. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * feat(engine): dynamic min-cut mesh partition guard (ruvector-mincut) Maintains an exact min-cut over the live mesh coupling graph — nodes are sensing nodes, coupling is the product of fusion attention weights — and surfaces per cycle, as TrustedOutput::mesh: - cut value: the global "how close is the array to partitioning" number, a structural measure per-node heuristics miss; - weak side: which specific nodes would split off (failure/jamming triage, feeds ADR-032 posture); - at-risk flag: counts as a structural event for the drift->recalibration advisor (alongside ADR-142 change-points). Degenerate cases fail toward risk: a node with zero coupling is reported as already partitioned (cut 0, that node as the weak side). Measured cost policy (criterion, 12-node mesh — the honest part): - weights quantized (1/64) + change-gated: steady-state cycles do ZERO graph work and reuse the cached cut (~7.3 us, ~23x cheaper than building); - on any real change a full exact rebuild (~171 us) is used, because ONE DynamicMinCut delete+insert measured ~240 us — the subpolynomial machinery amortizes on much larger graphs, so rebuild-on-change is the measured optimum at mesh scale (one-edge case -28% after switching policy); - full process_cycle with the guard: ~33 us for 4 nodes vs the 50 ms budget. 9 mesh_guard tests (weak-node detection, steady-state zero updates, sub-quantum gating, join/drop rebuild, determinism, disconnection) + an engine-level wiring test (down-weighted node -> weak side -> recalibration). Engine 24 tests; workspace gate 2,946 passed / 0 failed. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * feat(engine): mesh partition risk demotes privacy + enters the witness (ADR-032) Completes the mesh-guard integration: its at_risk signal was advisory-only (fed the recalibration advisor). It now also contributes to the ADR-141 privacy demotion alongside fusion- and array-level contradictions — a mesh close to partitioning makes the fused belief less trustworthy, so the cycle emits at a more restricted class (monotonic; information only removed). Because effective_class feeds the BLAKE3 witness, a fragmenting array now shifts the witness: partition risk is auditable, not just logged. The mesh computation moved ahead of the demotion step in process_cycle; mesh_guard_mut exposes risk-threshold tuning. Test: a forced-risk 3-node cycle demotes PrivateHome Anonymous->Restricted and shifts the witness vs a clean baseline. Engine 25 tests; workspace gate 2,947 passed / 0 failed. https://claude.ai/code/session_01MjBucx95K4BuUxZi8NWwRH * fix: public-PR review findings — privacy-path honesty, gate holes, mesh-guard cliff - sensing-server: engine errors logged+counted (no silent swallow), trust state exposed via status surface, privacy-demotion claims aligned with the actual parallel-audit-path behavior - occupancy_bench: vacuous-F1 hole closed (degenerate test sets fail with their own criterion); CI-lower-bound test made probative - mesh_guard: quantization scaled to observed coupling range — >=65-node balanced meshes no longer permanently at_risk (regression test) - engine: both wiring tests made probative (same-topology witness compare, deterministic risk-crossing fixture) - mat: axum/tokio optional behind api; real serde feature (api enables it) - core: canonical decoder strict (non-zero reserved bytes and nil UUID rejected — injective on accepted domain, forged-bytes tests) - CHANGELOG: un-spliced the FFT/adapter bullet mangle Co-Authored-By: claude-flow <ruv@ruv.net> * chore: strip private-track references for public PR Reword the occupancy-benchmark changelog bullet to drop a cross-reference to the private research track, and restore the WorldGraph retention bullet header that was glued onto the preceding MAT bullet. Co-Authored-By: claude-flow <ruv@ruv.net> * chore: lockfile refresh for cherry-picked feature set Co-Authored-By: claude-flow <ruv@ruv.net> --------- Co-authored-by: Claude <noreply@anthropic.com>
30 KiB
RuView Beyond-SOTA Target Architecture
Series: ruview-beyond-sota (02)
Date: 2026-06-09
Status: Research design — components marked PROPOSED do not exist yet; everything else cites real code.
Governing constraint: ADR-136 §2.1 explicitly rejects renaming/rewriting the workspace. This document designs an evolution of the existing 38-crate v2/ workspace (v2/Cargo.toml), not a new system. Every beyond-SOTA layer attaches to the ADR-136 Stage<I,O> / FrameMeta / CanonicalFrame contracts (docs/adr/ADR-136-ruview-streaming-engine-frame-contracts.md §2.2–2.5) and preserves the ADR-028 witness chain.
1. Where the system is today (grounding)
The ADR-136 ten-role pipeline (ingest → signal → fusion → world → models → privacy → store → api → eval → observe) is already mapped 1:1 onto existing crates (ADR-136 §2.1, normative table). The composition root exists: v2/crates/wifi-densepose-engine/src/lib.rs wires ADR-135..146 blocks into one StreamingEngine::process_cycle that emits a TrustedOutput carrying fusion QualityScore, privacy class, SemanticProvenance, RF-SLAM (RfSlam field), and a BLAKE3 witness: [u8; 32].
Key existing substrate this design builds on:
| Substrate | Path | What it gives us |
|---|---|---|
| Frame contracts + witness | v2/crates/wifi-densepose-core/src/types.rs (CsiFrame, CsiMetadata + calibration_id/model_id/model_version), ADR-136 ComplexSample/CanonicalFrame |
Deterministic LE bytes, BLAKE3 witness, provenance-append-only boundary rule |
| Six-stage signal pipeline | v2/crates/wifi-densepose-signal/src/ruvsense/mod.rs (+22 modules incl. cir.rs, calibration.rs, tomography.rs, rf_slam.rs, fusion_quality.rs, array_coordinator.rs) |
CSI→CIR, baseline calibration, multistatic fusion, coherence gating |
| Fusion quality + evidence | ADR-137; ruvsense/multistatic.rs, ruvsense/fusion_quality.rs, wifi-densepose-ruvector/src/viewpoint/fusion.rs |
QualityScore with EvidenceRef/ContradictionFlag, privacy demotion on contradiction |
| Digital twin | v2/crates/wifi-densepose-worldgraph/src/lib.rs (typed StableDiGraph, mandatory SemanticProvenance) |
Persistent room/sensor/track/belief graph |
| World model bridge | v2/crates/wifi-densepose-worldmodel/src/lib.rs (OccWorldBridge, TrajectoryPrior, ADR-147) |
Occupancy prediction priors into the Kalman tracker |
| NN + training | v2/crates/wifi-densepose-train/src/{model.rs,rapid_adapt.rs,ablation.rs,proof.rs,eval.rs,ruview_metrics.rs}, wifi-densepose-nn |
Shared backbone + 2 heads, AdaptationLoss::ContrastiveTTT, ADR-145 ablation matrix, seeded proof harness |
| Swarm | v2/crates/ruview-swarm/src/ (sensing/{multiview.rs,payload.rs,occworld_bridge.rs}, marl/, topology.rs) |
Raft/hierarchical-mesh drone coordination with CSI payload (ADR-148) |
| Edge WASM | v2/crates/wifi-densepose-wasm-edge/src/lib.rs (WASM3 on ESP32-S3, on_frame host ABI), wifi-densepose-wasm |
Hot-loadable on-device sensing modules |
| Quantum-adjacent sim | v2/crates/nvsim/src/lib.rs (deterministic NV-magnetometry forward pipeline, SHA-256 witness, WASM-ready) |
Honest classical-quantum hybrid substrate (ADR-089) |
| Semantic record + agents | ADR-140 (wifi-densepose-sensing-server/src/semantic/), homecore-assist |
Provenance-bearing semantic states, Ruflo agent bridge |
2. Target architecture diagram
The beyond-SOTA layers (★ = new/PROPOSED, ☆ = exists-but-not-wired) wrap the ADR-136 pipeline; nothing replaces it.
╔═══════════════════ BEYOND-SOTA CONTROL PLANE ═══════════════════╗
║ P6 Continual adaptation loop (TTT + EWC★) P5 Swarm aperture ║
║ rapid_adapt.rs → encoder LoRA deltas planner★ (Raft) ║
╚════════════▲══════════════════════▲══════════════▲══════════════╝
│ adaptation deltas │ quality │ tasking
[ingest] [signal] │ [fusion] │ [world] │ [models]
ESP32/Pi mesh ─► RuvSensePipeline ──────┴──► fuse_scored ──────┴─► WorldGraph ┴──► RF Foundation
+ drone payload multiband→phase_align (ADR-137 (ADR-139 │ Encoder (P1)
(ruview-swarm →calibration(135) QualityScore, twin) ◄───────┘ 7 heads + UQ
sensing/payload) →cir(134)→multistatic EvidenceRef, ▲ │ (ADR-146/150)
│ →coherence→gate Contradiction) │ ▼ │
│ │ │ RF-SLAM(143)──OccWorld │
▼ ▼ │ rf_slam.rs worldmodel ▼
P7 WASM edge P2 Differentiable RF │ (P3 closed loop ☆) P4 cross-modal
inference★ forward model★ │ distilled student★
(wasm-edge, (tomography.rs + │ (camera-free deploy)
deterministic cir.rs ISTA as seed) │
replay) │ residuals feed fusion as EvidenceRef★
│ ▼
│ P8 NV-magnetometry fusion★ (nvsim forward model as a sensing node class)
▼
─────────────────────── ADR-136 CONTRACT SPINE (unchanged) ───────────────────────────────────
CsiFrame{ComplexSample, FrameMeta{calibration_id, model_id, model_version}} → Stage<I,O>
→ CanonicalFrame::witness_hash() at EVERY stage boundary (BLAKE3, LE-deterministic)
───────────────────────────────────────────────────────────────────────────────────────────────
│ │ │ │
[privacy] [store] [api] [eval] [observe]
wifi-densepose-bfld homecore-recorder homecore-api ADR-145 ablation homecore-
gate + demotion + replay corpus★ /HA/Matter/HAP (train/ablation.rs automation,
(ADR-141) + P1-P8 variants) Ruflo (ADR-140)
3. The eight pillars
Each pillar: what / why beyond-SOTA / builds-on / contract sketch / feasibility. All trait sketches are PROPOSED unless a path is cited.
P1 — RF Foundation Encoder with multitask uncertainty heads (ADR-146 + ADR-150)
What. One shared, self-supervised RF encoder (wifi-densepose-nn) with seven typed heads (pose, presence, count, activity, vitals, gait, identity-embedding), each emitting calibrated uncertainty via the ADR-136 QualityScored trait, trained with the ADR-150 pose-contrastive objective (same-pose-across-subjects = positive) plus a coherence head that exposes channel instability.
Why beyond SOTA. Published WiFi-pose systems (MultiFormer, GraphPose-Fi lineage) report in-domain accuracy and hallucinate under domain shift. ADR-150 documents the real measured frontier: 81.63% torso-PCK@20 in-domain on MM-Fi vs ~11.6% leakage-free cross-subject, and that DANN and bigger capacity both failed (ADR-150 §1). A foundation encoder whose loss stack explicitly separates pose / identity / room / device factors and emits an RF-integrity signal per prediction is not in the published literature as a deployed, auditable artifact. Target (not a claim): close the cross-subject gap materially while every head output carries confidence_bounds().
Builds on. v2/crates/wifi-densepose-train/src/model.rs (WiFiDensePoseModel, kp_head/dp_head); v2/crates/wifi-densepose-sensing-server/src/embedding.rs (ProjectionHead + LoRA + info_nce_loss — the existing seventh head, ADR-146 §1.1); v2/crates/wifi-densepose-train/src/rapid_adapt.rs (ContrastiveTTT precedent); ADR-146 §1.4 head fan-out; ADR-150 §2 loss stack.
Contract sketch (lands in wifi-densepose-nn, per ADR-146 §1.3):
pub trait RfEncoder: Send + Sync {
fn encode(&self, window: &CsiWindowTensor) -> Embedding; // z ∈ R^d_model
fn model_id(&self) -> u16; // FrameMeta binding (ADR-136 §2.2)
}
pub trait TaskHead<O: QualityScored>: Send + Sync {
fn name(&self) -> &'static str;
fn forward(&self, z: &Embedding) -> O; // value + uncertainty bounds
}
pub struct MultiTaskOutput { /* per-head QualityScored outputs + coherence: f32 */ }
Feasibility: HIGH for the architecture, MEDIUM for the headline result. The pure-Rust f32 ABI is proven (embedding.rs), the head taxonomy is specified (ADR-146), and the ablation harness to measure it exists (wifi-densepose-train/src/ablation.rs). The risk is scientific, not engineering: ADR-150's own data shows naive approaches fail; the pose-contrastive objective is plausible but unproven at scale. Mitigation: ADR-150 §3's frozen-decoder three-variant experiment gates promotion.
P2 — Physics-informed differentiable RF forward model (PROPOSED)
What. A differentiable forward model render(scene, link_geometry) -> predicted CSI/CIR used three ways: (1) as a regularizer in encoder training (predictions must be consistent with a Born-approximation scattering model), (2) as an analysis-by-synthesis residual at inference (|observed − rendered| becomes an ADR-137 EvidenceRef), (3) as a synthetic-data generator complementing MM-Fi (ADR-015).
Why beyond SOTA. Published WiFi sensing is almost entirely discriminative; physics-informed neural fields exist for vision (NeRF) and acoustics but no deployed RF-human-sensing stack closes the loop forward model → residual → fusion evidence → privacy decision. Making physics disagreement a first-class, witnessed contradiction flag is novel system design, not just a model.
Builds on. The codebase already contains the seed of the forward model: v2/crates/wifi-densepose-signal/src/ruvsense/tomography.rs (RfTomographer, LinkGeometry, OccupancyVolume — a linear shadowing forward model inverted by ISTA), ruvsense/cir.rs (sub-DFT sensing matrix Φ, ISTA L1 — ADR-134), ADR-143 §1.3 (bistatic excess-delay geometry, the exact ray equations), and nvsim as the in-repo precedent for a deterministic, witness-hashed forward physics pipeline (v2/crates/nvsim/src/{propagation.rs,pipeline.rs,proof.rs}).
Contract sketch (new module wifi-densepose-signal/src/ruvsense/forward_model.rs, PROPOSED):
pub trait RfForwardModel: Versioned {
/// Predict per-link CSI given a voxel scene + body primitive set.
fn render(&self, scene: &OccupancyVolume, links: &[LinkGeometry]) -> Vec<PredictedCsi>;
/// Physics residual in [0,1]; 0 = perfectly Maxwell/Born-consistent.
fn residual(&self, observed: &CsiFrame, rendered: &PredictedCsi) -> PhysicsResidual; // → EvidenceRef
}
Feasibility: MEDIUM, with one honest line drawn. A full Maxwell FDTD-in-the-loop solver is infeasible at 20 Hz on this hardware and is a non-goal (§6). What is feasible: a first-order Born / ray-tracing bistatic model (the ADR-143 spheroid geometry generalized), differentiable through finite differences or a small Candle graph, validated against recorded calibration captures (ADR-135 baselines give per-link empty-room ground truth for free). "Maxwell-consistent" should be read as "consistent with a stated first-order approximation, with the approximation order recorded in the witness metadata."
P3 — RF-SLAM × WorldGraph × OccWorld closed loop (exists in parts, wiring is the work)
What. Close the loop: RF-SLAM discovers reflectors/anchors → WorldGraph persists them as object_anchor nodes → OccWorld consumes graph occupancy → TrajectoryPriors feed the Kalman tracker → improved tracks refine SLAM association. The environment model becomes self-acquiring and self-correcting (furniture moved ⇒ BaselineTopologyChange ⇒ recalibration trigger, ADR-143 §1.4).
Why beyond SOTA. Published RF-SLAM work maps or tracks; no published consumer system maintains a persistent, provenance-bearing, privacy-rolled-up environmental digital twin (PrivacyRollup in wifi-densepose-worldgraph/src/graph.rs) that is simultaneously the SLAM map, the automation substrate, and the audit record. The differentiator is the closed loop with evidence edges (supports/contradicts).
Builds on. All three vertices exist: v2/crates/wifi-densepose-signal/src/ruvsense/rf_slam.rs (RfSlam::observe, line 176, already a field of StreamingEngine — wifi-densepose-engine/src/lib.rs:116); v2/crates/wifi-densepose-worldgraph/src/lib.rs; v2/crates/wifi-densepose-worldmodel/src/{bridge.rs,occupancy.rs} (worldgraph_to_occupancy, OccWorldBridge::predict). The engine already upserts SLAM output and person tracks into the graph. Missing: prior-injection back into ruvsense/pose_tracker.rs, and the topology-change → ADR-135 recalibration edge.
Contract sketch (extends existing types):
impl StreamingEngine {
/// PROPOSED: inject OccWorld priors into the next tracker cycle.
pub fn apply_trajectory_priors(&mut self, priors: &[TrajectoryPrior]) -> Vec<WorldId>;
}
// WorldEdge gains (PROPOSED): PredictedBy { model_id: u16 } — prior provenance edge
Feasibility: HIGH. This is mostly integration glue between tested crates. The two real risks are already named by ADR-143: no ground-truth oracle in a live home (mitigated by the v1-fixed / v2-flagged rollout, #[cfg(feature = "rf-slam-v2")]), and OccWorld's Python subprocess (ADR-147: 375 ms/inference) being off the deterministic path — priors must be treated as advisory, never witness-bearing (§5).
P4 — Cross-modal distillation: camera-teacher → RF-student, privacy-preserving deployment (PROPOSED)
What. Train-time-only camera supervision: a vision pose teacher labels synchronized CSI (MM-Fi already provides paired modalities, ADR-015), distilling dense pose + uncertainty into the P1 encoder. Deployed systems ship no camera and no camera-derived identity features; the ADR-145 privacy-leakage metric (membership-inference score in wifi-densepose-train/src/ablation.rs) gates that the student does not retain identity.
Why beyond SOTA. Camera-supervised WiFi pose is the original DensePose-WiFi recipe; what is not published is distillation with a measured, CI-enforced privacy-leakage budget and a witnessed claim that the deployed artifact is camera-free. The beyond-SOTA move is making "privacy-preserving" a measured property of the release pipeline, not a marketing adjective.
Builds on. v2/crates/wifi-densepose-train/src/{trainer.rs,losses.rs,dataset.rs} (training substrate); ADR-015 paired datasets; ADR-145 FeatureSet matrix + privacy-leakage scalar; v2/crates/wifi-densepose-bfld (privacy_gate.rs, signature_hasher.rs — runtime identity controls, ADR-120 invariants I1–I3).
Contract sketch (in wifi-densepose-train, PROPOSED):
pub struct DistillationLoss { pub teacher: TeacherSource, pub temperature: f32, pub uq_transfer: bool }
pub enum TeacherSource { CachedPoseLabels(PathBuf), /* never a live camera in the serving graph */ }
/// Release gate: leakage(student) ≤ budget, asserted by the ADR-145 harness per variant.
pub struct PrivacyBudget { pub max_mia_score: f32 }
Feasibility: HIGH. All ingredients exist; the work is a loss term, a label cache format, and a CI gate. The honest caveat: MIA-based leakage scores are a lower bound on real leakage; the budget is a regression tripwire, not a formal guarantee.
P5 — Swarm-distributed multistatic sensing with Raft-coordinated apertures (ADR-148, partially built)
What. Treat the drone swarm + fixed ESP32 mesh as one reconfigurable multistatic aperture: a Raft-elected cluster head plans node positions/channel assignments to maximize geometric diversity (GDI) for the current sensing task; per-node frames flow into the same MultistaticFuser path as fixed nodes.
Why beyond SOTA. Published multistatic WiFi sensing assumes fixed geometry. Closed-loop aperture optimization — moving the sensors to where the Fisher information is — driven by the GDI/Cramér–Rao machinery that already exists in v2/crates/wifi-densepose-ruvector/src/viewpoint/geometry.rs (per CLAUDE.md module table: GeometricDiversityIndex, Cramér-Rao bounds) is a genuinely new system class for SAR/MAT scenarios.
Builds on. v2/crates/ruview-swarm/src/sensing/{multiview.rs,payload.rs,occworld_bridge.rs}, topology.rs, planning.rs, marl/ (MAPPO, candle_ppo.rs); ruvsense/multistatic.rs + array_coordinator.rs (ADR-138 clock-quality gating — moving nodes will stress exactly this); wifi-densepose-mat (the MAT use case).
Contract sketch (in ruview-swarm, PROPOSED):
pub trait AperturePlanner: Send + Sync {
/// Given current twin + task, propose node placements maximizing expected GDI.
fn plan(&self, twin: &WorldGraphSnapshot, task: &SwarmTask) -> Vec<(NodeId, Position3D)>;
}
// Output flows through Raft (topology.rs) as a normal SwarmTask; frames return as ArrayNodeInput.
Feasibility: MEDIUM. Coordination, MARL, and fusion code exist and are tested; the hard physical problems are honest unknowns: airborne CSI phase stability (rotor vibration), clock sync across mobile nodes (ADR-138 gate will reject a lot initially), and ADR-148 §1.3's own regulatory scoping. Simulation-first via ruview-swarm/src/evals.rs + bench_support.rs; hardware validation is Phase 3.
P6 — Continual / test-time adaptation with EWC-style forgetting control (PROPOSED on existing TTT)
What. Promote rapid_adapt.rs from a per-deployment trick to a managed continual-learning loop: TTT/entropy adaptation produces LoRA deltas on the P1 encoder; an EWC (elastic weight consolidation) penalty — which does not exist in the workspace today (no EWC match in wifi-densepose-train/src/rapid_adapt.rs) — anchors weights important to previously-validated environments; every adaptation step is versioned as a new model_version (u16, ADR-136 §2.2) and must re-pass the ADR-145 acceptance matrix before activation.
Why beyond SOTA. TTT papers adapt and hope; nothing published couples adaptation to a deterministic regression gate with witness hashes, where an adapted model that regresses tier or leaks identity is automatically rejected and the model_version provenance lets any semantic state be traced to the exact adaptation step.
Builds on. v2/crates/wifi-densepose-train/src/rapid_adapt.rs (AdaptationLoss::ContrastiveTTT, entropy-minimization variant — lines 8–16); LoRA adapters in sensing-server/src/embedding.rs (rank-4 lora_1/lora_2); ADR-027 MERIDIAN evaluator (train/src/eval.rs); ADR-146 §2 calibration-robustness loss.
Contract sketch (in wifi-densepose-train, PROPOSED):
pub struct EwcPenalty { pub fisher_diag: Vec<f32>, pub anchor: Vec<f32>, pub lambda: f32 }
pub struct AdaptationStep {
pub parent_model_version: u16, pub new_model_version: u16,
pub loss: AdaptationLoss, pub ewc: Option<EwcPenalty>,
pub acceptance: RuViewAcceptanceResult, // must be ≥ parent tier
pub witness: [u8; 32], // hash of delta + acceptance
}
Feasibility: HIGH. EWC over a small LoRA delta is cheap (Fisher diagonal over the replay corpus); the acceptance gate and proof seeds exist (proof.rs, PROOF_SEED = 42). Risk: online Fisher estimation from unlabeled home data is noisy — start with adaptation restricted to LoRA parameters only, backbone frozen.
P7 — On-device WASM edge inference with deterministic replay (extends existing Tier-3)
What. Push P1 head subsets (presence, vitals, coarse activity) into hot-loadable WASM modules on ESP32-S3, and onto browsers/workers via wifi-densepose-wasm. Every edge module's output is replayable: the same CanonicalFrame input bytes through the same module hash produce the same output bytes, verified in CI on x86_64/aarch64/wasm32.
Why beyond SOTA. Edge WiFi-sensing exists; bit-deterministic, witness-hashed edge inference with hot-swap and replay parity against the server pipeline does not appear in published systems. It turns the edge from a trust hole into a witness-chain extension.
Builds on. v2/crates/wifi-densepose-wasm-edge/src/lib.rs (WASM3 host ABI: csi_get_*, on_frame at ~20 Hz, ADR-040 Tier 3); nvsim as the proof that a no-std-time, no-OS-entropy, seeded-PRNG crate runs identically on wasm32 (nvsim/src/lib.rs doc); ADR-136 AC7 cross-architecture byte-stability test.
Contract sketch (PROPOSED additions to the wasm-edge host ABI):
// exports added to module lifecycle:
// on_replay_begin(seed: u64) — pins any module-internal PRNG
// witness_digest(buf_ptr: i32) -> i32 — module returns BLAKE3 of its output stream
pub trait EdgeStage: Stage<CsiFrameView, EdgeEvent> { fn module_hash(&self) -> [u8; 32]; }
Feasibility: HIGH for presence/vitals heads, LOW for full pose on-ESP32. WASM3 interpretation on Xtensa caps throughput; full 7-head inference stays on Pi/Hailo/browser. Float determinism across native vs WASM needs care (no fast-math, fixed reduction order — same obligation ADR-136 §3.2 already accepts).
P8 — NV-magnetometry fusion: an honest classical-quantum hybrid (PROPOSED, simulation-first)
What. Add nvsim-modeled NV-magnetometer nodes as a fourth sensing modality class (after CSI, mmWave/ADR-021, BFLD) in the multistatic fusion: near-range (≤ tens of cm, per the physics review) cardiac/respiratory magnetic signatures fused with CSI/mmWave vitals under the ADR-137 evidence contract. Simulation-first: the modality lands end-to-end against nvsim before any hardware exists.
Why beyond SOTA. Not range — the Ghost Murmur review (docs/research/quantum-sensing/16-ghost-murmur-ruview-spec.md) documents why multi-mile cardiac magnetometry contradicts published physics, and this design adopts that conclusion. The beyond-SOTA element is architectural honesty: a fusion engine that can ingest a quantum-sensor modality with explicit, witnessed physics bounds (nvsim's forward model states its approximations and hashes its output, nvsim/src/proof.rs), so that when real NV hardware matures, the integration path and the anti-hype guardrails already exist. No published consumer sensing stack has this.
Builds on. v2/crates/nvsim/src/ (scene→source→attenuation→NV ensemble→digitiser, SHA-256 witness, ADR-089); nvsim-server; wifi-densepose-vitals (mmWave HR/BR — the modality NV would cross-validate); ruvsense/multistatic.rs fusion + ADR-137 EvidenceRef.
Contract sketch (PROPOSED): a SensorModality::NvMagnetometer variant on the existing wifi-densepose-worldgraph SensorModality enum, plus an ArrayNodeInput adapter from nvsim frames; vitals agreement/disagreement between NV and mmWave becomes an EvidenceRef/ContradictionFlag pair.
Feasibility: HIGH in simulation, SPECULATIVE on hardware. The sim path is days of glue; COTS NV magnetometers with the required sensitivity at consumer cost do not exist in 2026. This pillar's deliverable is the contract and the simulated validation, explicitly labeled as such.
4. Phased implementation plan
Phases are gated by the Pre-Merge Checklist (CLAUDE.md) and the witness chain (§5). Crate names per the ADR-136 §2.1 normative map — no new ruview_* crates except where a crate already exists (ruview-swarm).
Phase 0 — Hardening (close the ADR-136 "integration glue" debt).
wifi-densepose-signal: wire the full 600-frameStage-chain replay (ADR-136 AC6) and registerstreaming_engine_replay_v1inarchive/v1/data/proof/expected_features.sha256.- CI: cross-architecture witness matrix x86_64/aarch64 (AC7); add wasm32 lane for
nvsim+wifi-densepose-wasm. wifi-densepose-engine: populateFrameMeta.calibration_id/model_idfrom the live calibration and model-binding stages (currently defaulted — ADR-136 §8).homecore-recorder: define the replay corpus format (canonical-bytes frame streams + witness manifest) that P4/P6 training and all ablations consume.
Phase 1 — Encoder + measurement (P1, P4 groundwork, P6 skeleton).
wifi-densepose-nn:RfEncoder/TaskHeadtraits, seven-head fan-out, UQ layer (ADR-146); relocateProjectionHeadfromsensing-server/src/embedding.rs.wifi-densepose-train:ContrastiveBatcher, ADR-150 loss stack, distillation loss + cached-teacher format (P4),EwcPenalty+AdaptationStep(P6); extendablation.rsFeatureSetwith per-head and per-pillar variants; pinexpected_ablation_*.sha256.- Run the ADR-150 three-variant frozen-decoder experiment; promotion gate on cross-subject delta.
Phase 2 — Closed loop + edge (P3, P7).
wifi-densepose-engine:apply_trajectory_priors(OccWorld →pose_tracker.rs);PredictedByprovenance edge inwifi-densepose-worldgraph; topology-change → ADR-135 recalibration trigger.wifi-densepose-wasm-edge: replay ABI (on_replay_begin,witness_digest), presence/vitals head modules; parity test vs server pipeline on identical canonical bytes.- Enable
rf-slam-v2feature on the 7-day validation dataset (ADR-143 gate).
Phase 3 — Frontier (P2, P5, P8).
wifi-densepose-signal/src/ruvsense/forward_model.rs: Born/ray forward model seeded fromtomography.rs;PhysicsResidual→EvidenceRef; synthetic-data generator intotrain/src/dataset.rs.ruview-swarm:AperturePlannerover GDI (ruvector/src/viewpoint/geometry.rs); simulation evals inevals.rs; airborne CSI stability study before any hardware claim.nvsim↔wifi-densepose-engine:SensorModality::NvMagnetometeradapter, simulated NV+mmWave vitals cross-validation in the ablation matrix.
5. Determinism & witness-chain preservation
The non-negotiable invariant (ADR-136 §2.5–2.6, ADR-028): replaying recorded canonical bytes through the pipeline twice yields byte-identical outputs and equal BLAKE3 witness hashes. Strategy per component class:
- Everything on the trust path implements
CanonicalFrame. New frame types (MultiTaskOutput,PhysicsResidual,AdaptationStep, edge events, NV frames) get fixed-field-order LE encodings andwitness_hash(); encoders are the only serializers (no ad-hoc serde on the witness path). - Inference is witnessed by (input hash, model hash, output hash).
model_id/model_versiononFrameMetaalready bind frames to models; P1 adds a weights digest so the triple is closed. Pure-Rust f32 inference (ADR-146 ABI) with fixed reduction order; no GPU nondeterminism on the witness path — GPU/libtorch is training-only, and training determinism is pinned by the existing seeds (proof.rs:PROOF_SEED = 42,MODEL_SEED = 0). - Advisory vs witnessed split. Components that cannot be made deterministic — the OccWorld Python subprocess (ADR-147), live MARL exploration, any future LLM/agent output (ADR-140 Ruflo) — are advisory: their outputs may bias estimates but never enter
to_canonical_bytes()directly; instead the decision to use them is recorded (prior id + content hash) so replay reproduces the decision even if the producer cannot be re-run. The Kalman tracker consumes priors as explicit inputs recorded in the replay corpus. - Adaptation is a chain of witnessed steps. P6's
AdaptationStep.witnesshashes (parent version ‖ delta ‖ acceptance result); the active model at any timestamp is reconstructible from the step chain — the model-weights analogue of the frame witness chain. - Edge parity. P7 modules must produce the same
witness_digestas the server-side reference implementation on the AC6 fixture; the module hash joins the firmwaresource-hashes.txtin the ADR-028 witness bundle. - Witness bundle growth is mechanical. Each pillar adds expected-hash keys (
forward_model_residual_v1,edge_presence_replay_v1,nvsimalready shipsproof.rs) to the existingverify.pychain rather than inventing new verification mechanisms.
6. Explicit non-goals
- No workspace rename or rewrite. Reaffirms ADR-136 §2.1/§4.1: no
ruview_*crate prefix migration, no umbrella crate; pillars land inside the existing crates listed above. - No full-wave Maxwell solver in the runtime loop. P2 is first-order Born/ray, with the approximation order declared. "Physics-informed" never means FDTD at 20 Hz.
- No long-range cardiac magnetometry claims. P8 is bounded by the physics review in
docs/research/quantum-sensing/16-ghost-murmur-ruview-spec.md; ranges beyond published MCG physics are out of scope permanently, not just deferred. - No camera in any deployed serving graph (P4 teachers are train-time, cached-label only) and no identity recognition as a product feature — identity embeddings remain in-RAM, hash-rotated (ADR-120 invariants).
- No weaponization or LAWS capability in P5, per ADR-148 §1.3; swarm work targets SAR/MAT and stays behind the ADR-148 regulatory gates.
- No fabricated benchmarks. All pillar performance statements in this document are targets; promotion of any pillar requires the ADR-145 ablation matrix delta plus pinned determinism hashes, in CI, before any external claim.
- No new verification mechanisms. The witness chain extends
verify.py/ BLAKE3 /expected_*.sha256; we do not introduce a second, parallel proof system.
7. Open questions for the next document in this series
- Airborne CSI phase stability (P5): what does the ADR-138 clock-quality gate measure on a real quadrotor payload?
- Forward-model fidelity floor (P2): what Born-residual magnitude on the ADR-135 empty-room captures is "good enough" to be a useful contradiction signal?
- Replay-corpus governance (Phase 0): retention, privacy class of recorded canonical bytes, and consent — the recorder stores signal evidence, which is itself sensitive.