Synchronize project instructions to reflect the full RuvSense (ADR-029/030),
RuView (ADR-031), and security hardening (ADR-032) work now present on this
branch. Adds comprehensive crate and module reference tables, updated
workspace test commands, and witness verification instructions.
Co-Authored-By: claude-flow <ruv@ruv.net>
Fix 4 test failures in the ADR-030 exotic sensing tier modules:
- field_model::test_perturbation_extraction: Use 8 subcarriers with 2
modes and varied calibration data so perturbation on subcarrier 5
(not captured by any environmental mode) remains visible in residual.
- longitudinal::test_drift_detected_after_sustained_deviation: Use 30
baseline days with tiny noise to anchor Welford stats, then inject
deviation of 5.0 (vs 0.1 baseline) so z-score exceeds 2.0 even as
drifted values are accumulated into the running statistics.
- longitudinal::test_monitoring_level_escalation: Same strategy with 30
baseline days and deviation of 10.0 to sustain z > 2.0 for 7+ days,
reaching RiskCorrelation monitoring level.
- tomography::test_nonzero_attenuation_produces_density: Fix ISTA solver
oscillation by replacing max-column-norm Lipschitz estimate with
Frobenius norm squared upper bound, ensuring convergent step size.
Also use stronger attenuations (5.0-16.0) and lower lambda (0.001).
All 209 ruvsense tests now pass. Workspace compiles cleanly.
Co-Authored-By: claude-flow <ruv@ruv.net>
The make_noisy_kpts test helper used noise=0.1 with GT coordinates
spread across [0, 0.85], producing a large bbox diagonal that made
even noisy predictions fall within PCK@0.2 threshold. Reduce GT
coordinate range and increase noise to 0.5 so the test correctly
verifies that noisy predictions produce PCK < 1.0.
Co-Authored-By: claude-flow <ruv@ruv.net>
- tomography.rs: use checked_mul for nx*ny*nz to prevent integer overflow
on adversarial grid configurations
- phase_align.rs: add defensive bounds check in mean_phase_on_indices to
prevent panic on out-of-range subcarrier indices
- multistatic.rs: stabilize softmax in attention_weighted_fusion with
max-subtraction to prevent exp() overflow on extreme similarity values
Co-Authored-By: claude-flow <ruv@ruv.net>
- New collapsed section before Installation linking to witness log,
ADR-028, and bundle generator
- Shows test counts, proof hash, and 3-command verification steps
Co-Authored-By: claude-flow <ruv@ruv.net>
- CHANGELOG: add MERIDIAN (ADR-027) to Unreleased section
- README: add "Works Everywhere" to Intelligence features, update How It Works
- ADR-002: status → Superseded by ADR-016/017
- ADR-004: status → Partially realized by ADR-024, extended by ADR-027
- ADR-005: status → Partially realized by ADR-023, extended by ADR-027
- ADR-006: status → Partially realized by ADR-023, extended by ADR-027
Co-Authored-By: claude-flow <ruv@ruv.net>
Deep SOTA research into WiFi sensing domain gap problem (2024-2026).
Proposes 7-phase implementation: hardware normalization, domain-adversarial
training with gradient reversal, geometry-conditioned FiLM inference,
virtual environment augmentation, few-shot rapid adaptation, and
cross-domain evaluation protocol.
Cites 10 papers: PerceptAlign, AdaPose, Person-in-WiFi 3D (CVPR 2024),
DGSense, CAPC, X-Fi (ICLR 2025), AM-FM, LatentCSI, Ganin GRL, FiLM.
Addresses the single biggest deployment blocker: models trained in one
room lose 40-70% accuracy in another room. MERIDIAN adds ~12K params
(67K total, still fits ESP32) for cross-layout + cross-hardware
generalization with zero-shot and few-shot adaptation paths.
Co-Authored-By: claude-flow <ruv@ruv.net>
- Add "How It Works" explainer between Key Features and Use Cases
- Add Self-Learning WiFi AI and AI Backbone to Table of Contents
- Update Key Features entry in ToC to match new sub-sections
- Fix changelog: v2.3.0/v2.2.0/v2.1.0 → v3.0.0/v2.0.0 (matches CHANGELOG.md)
- Add crates.io badge for wifi-densepose-ruvector
Co-Authored-By: claude-flow <ruv@ruv.net>
- Remove RuVector AI section from Rust Crates details block
- Add as own collapsed <details> in Models & Training with anchor link
- Add cross-reference from crates table to new section
- Link to issue #67 for deep dive with code examples
Co-Authored-By: claude-flow <ruv@ruv.net>
Replace dry API reference table with AI pipeline diagram, plain-language
capability descriptions, and "what it replaces" comparisons. Reframes
graph algorithms and sparse solvers as learned, self-optimizing AI
components that feed the DensePose neural network.
Co-Authored-By: claude-flow <ruv@ruv.net>
- Add MacosCoreWlanScanner (macOS): CoreWLAN Swift helper adapter with
synthetic BSSID generation via FNV-1a hash for redacted MACs (ADR-025)
- Add LinuxIwScanner (Linux): parses `iw dev <iface> scan` output with
freq-to-channel conversion and BSS stanza parsing
- Both adapters produce Vec<BssidObservation> compatible with the
existing WindowsWifiPipeline 8-stage processing
- Platform-gate modules with #[cfg(target_os)] so each adapter only
compiles on its target OS
- Fix Python MacosWifiCollector: remove synthetic byte counters that
produced misleading tx_bytes/rx_bytes data (set to 0)
- Add compiled Swift binary (mac_wifi) to .gitignore
Co-Authored-By: claude-flow <ruv@ruv.net>
Add native macOS LiDAR / WiFi sensing support via CoreWLAN:
- mac_wifi.swift: Swift helper to poll RSSI/Noise at 10Hz
- MacosWifiCollector: Python adapter for the sensing pipeline
- Auto-detect Darwin platform in ws_server.py
ADR-026 documents the design decision to add a tracking bounded context
to wifi-densepose-mat to address three gaps: no Kalman filter, no CSI
fingerprint re-ID across temporal gaps, and no explicit track lifecycle
state machine.
Changes:
- docs/adr/ADR-026-survivor-track-lifecycle.md — full design record
- domain/events.rs — TrackingEvent enum (Born/Lost/Reidentified/Terminated/Rescued)
with DomainEvent::Tracking variant and timestamp/event_type impls
- tracking/mod.rs — module root with re-exports
- tracking/kalman.rs — constant-velocity 3-D Kalman filter (predict/update/gate)
- tracking/lifecycle.rs — TrackState, TrackLifecycle, TrackerConfig
Remaining (in progress): fingerprint.rs, tracker.rs, lib.rs integration
https://claude.ai/code/session_0164UZu6rG6gA15HmVyLZAmU
Rewrites CHANGELOG.md with detailed entries for every significant
feature, fix, and security patch across all three major versions:
- v3.0.0: AETHER contrastive embedding model (ADR-024), Docker Hub
images, UI port auto-detection fix, Mermaid architecture diagrams,
33 use cases across 4 verticals
- v2.0.0: Rust sensing server, DensePose training pipeline (ADR-023),
RuVector v2.0.4 integration (ADR-016/017), ESP32-S3 firmware
(ADR-018), SOTA signal processing (ADR-014), vital sign detection
(ADR-021), WiFi-Mat disaster module, 7 security patches, Python
sensing pipeline, Three.js visualization
- v1.1.0: Python CSI system, API services, UI dark mode
- v1.0.0: Initial release with core pose estimation
All entries reference specific commit hashes for traceability.
Co-Authored-By: claude-flow <ruv@ruv.net>
- Introduced ADR-025 documenting the implementation of a macOS CoreWLAN sensing adapter using a Swift helper binary and Rust integration.
- Added a new user guide detailing installation, usage, and hardware setup for WiFi DensePose, including Docker and source build instructions.
- Included sections on data sources, REST API reference, WebSocket streaming, and vital sign detection.
- Documented hardware requirements and troubleshooting steps for various setups.
The UI had hardcoded localhost:8080 for HTTP and localhost:8765 for
WebSocket, causing "Backend unavailable" when served from Docker
(port 3000) or any non-default port.
Changes:
- api.config.js: BASE_URL now uses window.location.origin instead
of hardcoded localhost:8080
- api.config.js: buildWsUrl() uses window.location.host instead of
hardcoded localhost:8080
- sensing.service.js: WebSocket URL derived from page origin instead
of hardcoded localhost:8765
- main.rs: Added /ws/sensing route to the HTTP server so WebSocket
and REST are reachable on a single port
Fixes#55
Co-Authored-By: claude-flow <ruv@ruv.net>