|
| 1 | +# ADR-030: RuvSense Persistent Field Model — Longitudinal Drift Detection and Exotic Sensing Tiers |
| 2 | + |
| 3 | +| Field | Value | |
| 4 | +|-------|-------| |
| 5 | +| **Status** | Proposed | |
| 6 | +| **Date** | 2026-03-02 | |
| 7 | +| **Deciders** | ruv | |
| 8 | +| **Codename** | **RuvSense Field** — Persistent Electromagnetic World Model | |
| 9 | +| **Relates to** | ADR-029 (RuvSense Multistatic), ADR-005 (SONA Self-Learning), ADR-024 (AETHER Embeddings), ADR-016 (RuVector Integration), ADR-026 (Survivor Track Lifecycle), ADR-027 (MERIDIAN Generalization) | |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +## 1. Context |
| 14 | + |
| 15 | +### 1.1 Beyond Pose Estimation |
| 16 | + |
| 17 | +ADR-029 establishes RuvSense as a sensing-first multistatic mesh achieving 20 Hz DensePose with <30mm jitter. That treats WiFi as a **momentary pose estimator**. The next leap: treat the electromagnetic field as a **persistent world model** that remembers, predicts, and explains. |
| 18 | + |
| 19 | +The most exotic capabilities come from this shift in abstraction level: |
| 20 | +- The room is the model, not the person |
| 21 | +- People are structured perturbations to a baseline |
| 22 | +- Changes are deltas from a known state, not raw measurements |
| 23 | +- Time is a first-class dimension — the system remembers days, not frames |
| 24 | + |
| 25 | +### 1.2 The Seven Capability Tiers |
| 26 | + |
| 27 | +| Tier | Capability | Foundation | |
| 28 | +|------|-----------|-----------| |
| 29 | +| 1 | **Field Normal Modes** — Room electromagnetic eigenstructure | Baseline calibration + SVD | |
| 30 | +| 2 | **Coarse RF Tomography** — 3D occupancy volume from link attenuations | Sparse tomographic inversion | |
| 31 | +| 3 | **Intention Lead Signals** — Pre-movement prediction (200-500ms lead) | Temporal embedding trajectory analysis | |
| 32 | +| 4 | **Longitudinal Biomechanics Drift** — Personal baseline deviation over days | Welford statistics + HNSW memory | |
| 33 | +| 5 | **Cross-Room Continuity** — Identity persistence across spaces without optics | Environment fingerprinting + transition graph | |
| 34 | +| 6 | **Invisible Interaction Layer** — Multi-user gesture control through walls/darkness | Per-person CSI perturbation classification | |
| 35 | +| 7 | **Adversarial Detection** — Physically impossible signal identification | Multi-link consistency + field model constraints | |
| 36 | + |
| 37 | +### 1.3 Signals, Not Diagnoses |
| 38 | + |
| 39 | +RF sensing detects **biophysical proxies**, not medical conditions: |
| 40 | + |
| 41 | +| Detectable Signal | Not Detectable | |
| 42 | +|-------------------|---------------| |
| 43 | +| Breathing rate variability | COPD diagnosis | |
| 44 | +| Gait asymmetry shift (18% over 14 days) | Parkinson's disease | |
| 45 | +| Posture instability increase | Neurological condition | |
| 46 | +| Micro-tremor onset | Specific tremor etiology | |
| 47 | +| Activity level decline | Depression or pain diagnosis | |
| 48 | + |
| 49 | +The output is: "Your movement symmetry has shifted 18 percent over 14 days." That is actionable without being diagnostic. The evidence chain (stored embeddings, drift statistics, coherence scores) is fully traceable. |
| 50 | + |
| 51 | +### 1.4 Acceptance Tests |
| 52 | + |
| 53 | +**Tier 0 (ADR-029):** Two people, 20 Hz, 10 min stable tracks, zero ID swaps, <30mm torso jitter. |
| 54 | + |
| 55 | +**Tier 1-4 (this ADR):** Seven-day run, no manual tuning. System flags one real environmental change and one real human drift event, produces traceable explanation using stored embeddings plus graph constraints. |
| 56 | + |
| 57 | +**Tier 5-7 (appliance):** Thirty-day local run, no camera. Detects meaningful drift with <5% false alarm rate. |
| 58 | + |
| 59 | +--- |
| 60 | + |
| 61 | +## 2. Decision |
| 62 | + |
| 63 | +### 2.1 Implement Field Normal Modes as the Foundation |
| 64 | + |
| 65 | +Add a `field_model` module to `wifi-densepose-signal/src/ruvsense/` that learns the room's electromagnetic baseline during unoccupied periods and decomposes all subsequent observations into environmental drift + body perturbation. |
| 66 | + |
| 67 | +``` |
| 68 | +wifi-densepose-signal/src/ruvsense/ |
| 69 | +├── mod.rs // (existing, extend) |
| 70 | +├── field_model.rs // NEW: Field normal mode computation + perturbation extraction |
| 71 | +├── tomography.rs // NEW: Coarse RF tomography from link attenuations |
| 72 | +├── longitudinal.rs // NEW: Personal baseline + drift detection |
| 73 | +├── intention.rs // NEW: Pre-movement lead signal detector |
| 74 | +├── cross_room.rs // NEW: Cross-room identity continuity |
| 75 | +├── gesture.rs // NEW: Gesture classification from CSI perturbations |
| 76 | +├── adversarial.rs // NEW: Physically impossible signal detection |
| 77 | +└── (existing files...) |
| 78 | +``` |
| 79 | + |
| 80 | +### 2.2 Core Architecture: The Persistent Field Model |
| 81 | + |
| 82 | +``` |
| 83 | + Time |
| 84 | + │ |
| 85 | + ▼ |
| 86 | + ┌────────────────────────────────┐ |
| 87 | + │ Field Normal Modes (Tier 1) │ |
| 88 | + │ Room baseline + SVD modes │ |
| 89 | + │ ruvector-solver │ |
| 90 | + └────────────┬───────────────────┘ |
| 91 | + │ Body perturbation (environmental drift removed) |
| 92 | + │ |
| 93 | + ┌───────┴───────┐ |
| 94 | + │ │ |
| 95 | + ▼ ▼ |
| 96 | + ┌──────────┐ ┌──────────────┐ |
| 97 | + │ Pose │ │ RF Tomography│ |
| 98 | + │ (ADR-029)│ │ (Tier 2) │ |
| 99 | + │ 20 Hz │ │ Occupancy vol│ |
| 100 | + └────┬─────┘ └──────────────┘ |
| 101 | + │ |
| 102 | + ▼ |
| 103 | + ┌──────────────────────────────┐ |
| 104 | + │ AETHER Embedding (ADR-024) │ |
| 105 | + │ 128-dim contrastive vector │ |
| 106 | + └────────────┬─────────────────┘ |
| 107 | + │ |
| 108 | + ┌───────┼───────┐ |
| 109 | + │ │ │ |
| 110 | + ▼ ▼ ▼ |
| 111 | + ┌────────┐ ┌─────┐ ┌──────────┐ |
| 112 | + │Intention│ │Track│ │Cross-Room│ |
| 113 | + │Lead │ │Re-ID│ │Continuity│ |
| 114 | + │(Tier 3)│ │ │ │(Tier 5) │ |
| 115 | + └────────┘ └──┬──┘ └──────────┘ |
| 116 | + │ |
| 117 | + ▼ |
| 118 | + ┌──────────────────────────────┐ |
| 119 | + │ RuVector Longitudinal Memory │ |
| 120 | + │ HNSW + graph + Welford stats│ |
| 121 | + │ (Tier 4) │ |
| 122 | + └──────────────┬───────────────┘ |
| 123 | + │ |
| 124 | + ┌───────┴───────┐ |
| 125 | + │ │ |
| 126 | + ▼ ▼ |
| 127 | + ┌──────────────┐ ┌──────────────┐ |
| 128 | + │ Drift Reports│ │ Adversarial │ |
| 129 | + │ (Level 1-3) │ │ Detection │ |
| 130 | + │ │ │ (Tier 7) │ |
| 131 | + └──────────────┘ └──────────────┘ |
| 132 | +``` |
| 133 | + |
| 134 | +### 2.3 Field Normal Modes (Tier 1) |
| 135 | + |
| 136 | +**What it is:** The room's electromagnetic eigenstructure — the stable propagation paths, reflection coefficients, and interference patterns when nobody is present. |
| 137 | + |
| 138 | +**How it works:** |
| 139 | +1. During quiet periods (empty room, overnight), collect 10 minutes of CSI across all links |
| 140 | +2. Compute per-link baseline (mean CSI vector) |
| 141 | +3. Compute environmental variation modes via SVD (temperature, humidity, time-of-day effects) |
| 142 | +4. Store top-K modes (K=3-5 typically captures >95% of environmental variance) |
| 143 | +5. At runtime: subtract baseline, project out environmental modes, keep body perturbation |
| 144 | + |
| 145 | +```rust |
| 146 | +pub struct FieldNormalMode { |
| 147 | + pub baseline: Vec<Vec<Complex<f32>>>, // [n_links × n_subcarriers] |
| 148 | + pub environmental_modes: Vec<Vec<f32>>, // [n_modes × n_subcarriers] |
| 149 | + pub mode_energies: Vec<f32>, // eigenvalues |
| 150 | + pub calibrated_at: u64, |
| 151 | + pub geometry_hash: u64, |
| 152 | +} |
| 153 | +``` |
| 154 | + |
| 155 | +**RuVector integration:** |
| 156 | +- `ruvector-solver` → Low-rank SVD for mode extraction |
| 157 | +- `ruvector-temporal-tensor` → Compressed baseline history storage |
| 158 | +- `ruvector-attn-mincut` → Identify which subcarriers belong to which mode |
| 159 | + |
| 160 | +### 2.4 Longitudinal Drift Detection (Tier 4) |
| 161 | + |
| 162 | +**The defensible pipeline:** |
| 163 | + |
| 164 | +``` |
| 165 | +RF → AETHER contrastive embedding |
| 166 | + → RuVector longitudinal memory (HNSW + graph) |
| 167 | + → Coherence-gated drift detection (Welford statistics) |
| 168 | + → Risk flag with traceable evidence |
| 169 | +``` |
| 170 | + |
| 171 | +**Three monitoring levels:** |
| 172 | + |
| 173 | +| Level | Signal Type | Example Output | |
| 174 | +|-------|------------|----------------| |
| 175 | +| **1: Physiological** | Raw biophysical metrics | "Breathing rate: 18.3 BPM today, 7-day avg: 16.1" | |
| 176 | +| **2: Drift** | Personal baseline deviation | "Gait symmetry shifted 18% over 14 days" | |
| 177 | +| **3: Risk correlation** | Pattern-matched concern | "Pattern consistent with increased fall risk" | |
| 178 | + |
| 179 | +**Storage model:** |
| 180 | + |
| 181 | +```rust |
| 182 | +pub struct PersonalBaseline { |
| 183 | + pub person_id: PersonId, |
| 184 | + pub gait_symmetry: WelfordStats, |
| 185 | + pub stability_index: WelfordStats, |
| 186 | + pub breathing_regularity: WelfordStats, |
| 187 | + pub micro_tremor: WelfordStats, |
| 188 | + pub activity_level: WelfordStats, |
| 189 | + pub embedding_centroid: Vec<f32>, // [128] |
| 190 | + pub observation_days: u32, |
| 191 | + pub updated_at: u64, |
| 192 | +} |
| 193 | +``` |
| 194 | + |
| 195 | +**RuVector integration:** |
| 196 | +- `ruvector-temporal-tensor` → Compressed daily summaries (50-75% memory savings) |
| 197 | +- HNSW → Embedding similarity search across longitudinal record |
| 198 | +- `ruvector-attention` → Per-metric drift significance weighting |
| 199 | +- `ruvector-mincut` → Temporal segmentation (detect changepoints in metric series) |
| 200 | + |
| 201 | +### 2.5 Regulatory Classification |
| 202 | + |
| 203 | +| Classification | What You Claim | Regulatory Path | |
| 204 | +|---------------|---------------|-----------------| |
| 205 | +| **Consumer wellness** (recommended first) | Activity metrics, breathing rate, stability score | Self-certification, FCC Part 15 | |
| 206 | +| **Clinical decision support** (future) | Fall risk alert, respiratory pattern concern | FDA Class II 510(k) or De Novo | |
| 207 | +| **Regulated medical device** (requires clinical partner) | Diagnostic claims for specific conditions | FDA Class II/III + clinical trials | |
| 208 | + |
| 209 | +**Decision: Start as consumer wellness.** Build 12+ months of real-world longitudinal data. The dataset itself becomes the asset for future regulatory submissions. |
| 210 | + |
| 211 | +--- |
| 212 | + |
| 213 | +## 3. Appliance Product Categories |
| 214 | + |
| 215 | +### 3.1 Invisible Guardian |
| 216 | + |
| 217 | +Wall-mounted wellness monitor for elderly care and independent living. No camera, no microphone, no reconstructable data. Stores embeddings and structural deltas only. |
| 218 | + |
| 219 | +| Spec | Value | |
| 220 | +|------|-------| |
| 221 | +| Nodes | 4 ESP32-S3 pucks per room | |
| 222 | +| Processing | Central hub (RPi 5 or x86) | |
| 223 | +| Power | PoE or USB-C | |
| 224 | +| Output | Risk flags, drift alerts, occupancy timeline | |
| 225 | +| BOM | $73-91 (ESP32 mesh) + $35-80 (hub) | |
| 226 | +| Validation | 30-day autonomous run, <5% false alarm rate | |
| 227 | + |
| 228 | +### 3.2 Spatial Digital Twin Node |
| 229 | + |
| 230 | +Live electromagnetic room model for smart buildings and workplace analytics. |
| 231 | + |
| 232 | +| Spec | Value | |
| 233 | +|------|-------| |
| 234 | +| Output | Occupancy heatmap, flow vectors, dwell time, anomaly events | |
| 235 | +| Integration | MQTT/REST API for BMS and CAFM | |
| 236 | +| Retention | 30-day rolling, GDPR-compliant | |
| 237 | +| Vertical | Smart buildings, retail, workspace optimization | |
| 238 | + |
| 239 | +### 3.3 RF Interaction Surface |
| 240 | + |
| 241 | +Multi-user gesture interface. No cameras. Works in darkness, smoke, through clothing. |
| 242 | + |
| 243 | +| Spec | Value | |
| 244 | +|------|-------| |
| 245 | +| Gestures | Wave, point, beckon, push, circle + custom | |
| 246 | +| Users | Up to 4 simultaneous | |
| 247 | +| Latency | <100ms gesture recognition | |
| 248 | +| Vertical | Smart home, hospitality, accessibility | |
| 249 | + |
| 250 | +### 3.4 Pre-Incident Drift Monitor |
| 251 | + |
| 252 | +Longitudinal biomechanics tracker for rehabilitation and occupational health. |
| 253 | + |
| 254 | +| Spec | Value | |
| 255 | +|------|-------| |
| 256 | +| Baseline | 7-day calibration per person | |
| 257 | +| Alert | Metric drift >2sigma for >3 days | |
| 258 | +| Evidence | Stored embedding trajectory + statistical report | |
| 259 | +| Vertical | Elderly care, rehab, occupational health | |
| 260 | + |
| 261 | +### 3.5 Vertical Recommendation for First Hardware SKU |
| 262 | + |
| 263 | +**Invisible Guardian** — the elderly care wellness monitor. Rationale: |
| 264 | +1. Largest addressable market with immediate revenue (aging population, care facility demand) |
| 265 | +2. Lowest regulatory bar (consumer wellness, no diagnostic claims) |
| 266 | +3. Privacy advantage over cameras is a selling point, not a limitation |
| 267 | +4. 30-day autonomous operation validates all tiers (field model, drift detection, coherence gating) |
| 268 | +5. $108-171 BOM allows $299-499 retail with healthy margins |
| 269 | + |
| 270 | +--- |
| 271 | + |
| 272 | +## 4. RuVector Integration Map (Extended) |
| 273 | + |
| 274 | +All five crates are exercised across the exotic tiers: |
| 275 | + |
| 276 | +| Tier | Crate | API | Role | |
| 277 | +|------|-------|-----|------| |
| 278 | +| 1 (Field) | `ruvector-solver` | `NeumannSolver` + SVD | Environmental mode decomposition | |
| 279 | +| 1 (Field) | `ruvector-temporal-tensor` | `TemporalTensorCompressor` | Baseline history storage | |
| 280 | +| 1 (Field) | `ruvector-attn-mincut` | `attn_mincut` | Mode-subcarrier assignment | |
| 281 | +| 2 (Tomo) | `ruvector-solver` | `NeumannSolver` (L1) | Sparse tomographic inversion | |
| 282 | +| 3 (Intent) | `ruvector-attention` | `ScaledDotProductAttention` | Temporal trajectory weighting | |
| 283 | +| 3 (Intent) | `ruvector-temporal-tensor` | `CompressedCsiBuffer` | 2-second embedding history | |
| 284 | +| 4 (Drift) | `ruvector-temporal-tensor` | `TemporalTensorCompressor` | Daily summary compression | |
| 285 | +| 4 (Drift) | `ruvector-attention` | `ScaledDotProductAttention` | Metric drift significance | |
| 286 | +| 4 (Drift) | `ruvector-mincut` | `DynamicMinCut` | Temporal changepoint detection | |
| 287 | +| 5 (Cross-Room) | `ruvector-attention` | HNSW | Room and person fingerprint matching | |
| 288 | +| 5 (Cross-Room) | `ruvector-mincut` | `MinCutBuilder` | Transition graph partitioning | |
| 289 | +| 6 (Gesture) | `ruvector-attention` | `ScaledDotProductAttention` | Gesture template matching | |
| 290 | +| 7 (Adversarial) | `ruvector-solver` | `NeumannSolver` | Physical plausibility verification | |
| 291 | +| 7 (Adversarial) | `ruvector-attn-mincut` | `attn_mincut` | Multi-link consistency check | |
| 292 | + |
| 293 | +--- |
| 294 | + |
| 295 | +## 5. Implementation Priority |
| 296 | + |
| 297 | +| Priority | Tier | Module | Weeks | Dependency | |
| 298 | +|----------|------|--------|-------|------------| |
| 299 | +| P0 | 1 | `field_model.rs` | 2 | ADR-029 multistatic mesh operational | |
| 300 | +| P0 | 4 | `longitudinal.rs` | 2 | Tier 1 baseline + AETHER embeddings | |
| 301 | +| P1 | 2 | `tomography.rs` | 1 | Tier 1 perturbation extraction | |
| 302 | +| P1 | 3 | `intention.rs` | 2 | Tier 1 + temporal embedding history | |
| 303 | +| P2 | 5 | `cross_room.rs` | 2 | Tier 4 person profiles + multi-room deployment | |
| 304 | +| P2 | 6 | `gesture.rs` | 1 | Tier 1 perturbation + per-person separation | |
| 305 | +| P3 | 7 | `adversarial.rs` | 1 | Tier 1 field model + multi-link consistency | |
| 306 | + |
| 307 | +**Total exotic tier: ~11 weeks after ADR-029 acceptance test passes.** |
| 308 | + |
| 309 | +--- |
| 310 | + |
| 311 | +## 6. Consequences |
| 312 | + |
| 313 | +### 6.1 Positive |
| 314 | + |
| 315 | +- **Room becomes self-sensing**: Field normal modes provide a persistent baseline that explains change as structured deltas |
| 316 | +- **7-day autonomous operation**: Coherence gating + SONA adaptation + longitudinal memory eliminate manual tuning |
| 317 | +- **Privacy by design**: No images, no audio, no reconstructable data — only embeddings and statistical summaries |
| 318 | +- **Traceable evidence**: Every drift alert links to stored embeddings, timestamps, and graph constraints |
| 319 | +- **Multiple product categories**: Same software stack, different packaging — Guardian, Twin, Interaction, Drift Monitor |
| 320 | +- **Regulatory clarity**: Consumer wellness first, clinical decision support later with accumulated dataset |
| 321 | +- **Security primitive**: Coherence gating detects adversarial injection, not just quality issues |
| 322 | + |
| 323 | +### 6.2 Negative |
| 324 | + |
| 325 | +- **7-day calibration** required for personal baselines (system is less useful during initial period) |
| 326 | +- **Empty-room calibration** needed for field normal modes (may not always be available) |
| 327 | +- **Storage growth**: Longitudinal memory grows ~1 KB/person/day (manageable but non-zero) |
| 328 | +- **Statistical power**: Drift detection requires 14+ days of data for meaningful z-scores |
| 329 | +- **Multi-room**: Cross-room continuity requires hardware in all rooms (cost scales linearly) |
| 330 | + |
| 331 | +### 6.3 Risks |
| 332 | + |
| 333 | +| Risk | Probability | Impact | Mitigation | |
| 334 | +|------|-------------|--------|------------| |
| 335 | +| Field modes drift faster than expected | Medium | False perturbation detections | Reduce mode update interval from 24h to 4h | |
| 336 | +| Personal baselines too variable | Medium | High false alarm rate for drift | Widen sigma threshold from 2σ to 3σ; require 5+ days | |
| 337 | +| Cross-room matching fails for similar body types | Low | Identity confusion | Require temporal proximity (<60s) plus spatial adjacency | |
| 338 | +| Gesture recognition insufficient SNR | Medium | <80% accuracy | Restrict to near-field (<2m) initially | |
| 339 | +| Adversarial injection via coordinated WiFi injection | Very Low | Spoofed occupancy | Multi-link consistency check makes single-link spoofing detectable | |
| 340 | + |
| 341 | +--- |
| 342 | + |
| 343 | +## 7. Related ADRs |
| 344 | + |
| 345 | +| ADR | Relationship | |
| 346 | +|-----|-------------| |
| 347 | +| ADR-029 | **Prerequisite**: Multistatic mesh is the sensing substrate for all exotic tiers | |
| 348 | +| ADR-005 (SONA) | **Extended**: SONA recalibration triggered by coherence gate → now also by drift events | |
| 349 | +| ADR-016 (RuVector) | **Extended**: All 5 crates exercised across 7 exotic tiers | |
| 350 | +| ADR-024 (AETHER) | **Critical dependency**: Embeddings are the representation for all longitudinal memory | |
| 351 | +| ADR-026 (Tracking) | **Extended**: Track lifecycle now spans days (not minutes) for drift detection | |
| 352 | +| ADR-027 (MERIDIAN) | **Used**: Room geometry encoding for field normal mode conditioning | |
| 353 | + |
| 354 | +--- |
| 355 | + |
| 356 | +## 8. References |
| 357 | + |
| 358 | +1. IEEE 802.11bf-2024. "WLAN Sensing." IEEE Standards Association. |
| 359 | +2. FDA. "General Wellness: Policy for Low Risk Devices." Guidance Document, 2019. |
| 360 | +3. EU MDR 2017/745. "Medical Device Regulation." Official Journal of the European Union. |
| 361 | +4. Welford, B.P. (1962). "Note on a Method for Calculating Corrected Sums of Squares." Technometrics. |
| 362 | +5. Chen, L. et al. (2026). "PerceptAlign: Geometry-Aware WiFi Sensing." arXiv:2601.12252. |
| 363 | +6. AM-FM (2026). "A Foundation Model for Ambient Intelligence Through WiFi." arXiv:2602.11200. |
| 364 | +7. Geng, J. et al. (2023). "DensePose From WiFi." arXiv:2301.00250. |
0 commit comments