mirror of
https://github.com/ruvnet/RuView
synced 2026-07-29 18:31:44 +00:00
8ce3bd090b
Deep review of PR #1437 (ADR-273..282 unified RF spatial world model) plus hardware-in-the-loop testing against a live ESP32-C6 CSI node turned up several real defects, fixed here: - pretrain.rs: sample_mask panicked (usize::clamp(1, 0)) on any single-token window, reachable from a valid RfTensor via a perfectly normal tokenizer output. eval() now skips empty masks instead of averaging in NaN. - math.rs: resample_complex(x, 1) with x.len() > 1 divided by zero (m - 1 == 0), silently poisoning the output with NaN. Now returns the mean. - gaussian/map.rs: merge_overlapping had no entity-kind guard (unlike insert()), so an unlabeled Room-linked Gaussian and an unlabeled PersonClass-linked Gaussian within each other's merge gate would be silently conflated. Added the same same_kind check insert() uses. Also hardened decay()'s tau_eff against a post-construction decay_tau_s of 0 (NaN instead of merely-fast decay). - adapters.rs: WifiCsiAdapter used the frequency band's fixed per-band constant (e.g. 2437 MHz) instead of the frame's real channel, misreporting center_freq_hz for every channel except the one that happens to match the constant. Confirmed against a live ESP32-C6 node on channel 4: pre-fix would report 2437000000 Hz, post-fix correctly reports 2427000000 Hz, matching the hardware parser's independently-computed frequency exactly. Added examples/esp32_live_hardware_test.rs, a hardware-in-the-loop test that bridges real ADR-018 UDP captures through the adapter (also confirms no panic on real 256-subcarrier HE-SU frames, well beyond CANONICAL_BINS=56). - control.rs: admit_task didn't validate requested_resolution_m, maximum_latency_ms, or modalities, so a task with 0/NaN resolution, 0ms latency, or zero modalities passed admission. Added boundary checks. - control.rs + security_boundaries.rs: validate_representation's only test coverage (unit test and proptest) hardcoded SensingPurpose::Presence, leaving the other three purpose-ceiling branches (Activity/Localization at P3, Vitals/PoseTracking at P4, IdentityRecognition at P5 — the higher-risk representations) completely unverified. Added coverage for all branches in both. Also fixed pre-existing issues surfaced while validating the above: - wifi-densepose-core: 7 clippy warnings (cast_possible_truncation/ wrap, single_match_else, suboptimal_flops) in the canonical encode/decode path, now using try_from/from_le_bytes/mul_add. - wifi-densepose-hardware: a test missing #[cfg(unix)] that used std::os::unix::fs::PermissionsExt unconditionally, breaking Windows builds of ruview-auth's test suite; a manual Default impl clippy flagged as derivable; two tests using field-reassignment instead of struct-update syntax after ::default(). - wifi-densepose-sensing-server: auth_wiring.rs's free_port() / child-process bind race (documented as "mildly racy" by design) now retries up to 3x specifically on an AddrInUse-shaped failure, preserving the original fail-loud behavior for genuine wiring regressions. All touched crates re-verified: ruview-unified 99 tests (was 98), wifi-densepose-core 37+40, wifi-densepose-hardware 483+1(ignored), ruview-auth builds and tests on Windows, sensing-server auth_wiring 7/7. ruview-unified remains clippy-clean under -D warnings; the pre-existing dependency warnings that -D warnings surfaced are fixed too. Co-Authored-By: claude-flow <ruv@ruv.net>
wifi-densepose-core
Core types, traits, and utilities for the WiFi-DensePose pose estimation system.
Overview
wifi-densepose-core is the foundation crate for the WiFi-DensePose workspace. It defines the
shared data structures, error types, and trait contracts used by every other crate in the
ecosystem. The crate is no_std-compatible (with the std feature disabled) and forbids all
unsafe code.
Features
- Core data types --
CsiFrame,ProcessedSignal,PoseEstimate,PersonPose,Keypoint,KeypointType,BoundingBox,Confidence,Timestamp, and more. - Trait abstractions --
SignalProcessor,NeuralInference, andDataStoredefine the contracts for signal processing, neural network inference, and data persistence respectively. - Error hierarchy --
CoreError,SignalError,InferenceError, andStorageErrorprovide typed error handling across subsystem boundaries. no_stdsupport -- Disable the defaultstdfeature for embedded or WASM targets.- Constants --
MAX_KEYPOINTS(17, COCO format),MAX_SUBCARRIERS(256),DEFAULT_CONFIDENCE_THRESHOLD(0.5).
Feature flags
| Flag | Default | Description |
|---|---|---|
std |
yes | Enable standard library support |
serde |
no | Serialization via serde (+ ndarray serde) |
async |
no | Async trait definitions via async-trait |
Quick Start
use wifi_densepose_core::{CsiFrame, Keypoint, KeypointType, Confidence};
// Create a keypoint with high confidence
let keypoint = Keypoint::new(
KeypointType::Nose,
0.5,
0.3,
Confidence::new(0.95).unwrap(),
);
assert!(keypoint.is_visible());
Or use the prelude for convenient bulk imports:
use wifi_densepose_core::prelude::*;
Architecture
wifi-densepose-core/src/
lib.rs -- Re-exports, constants, prelude
types.rs -- CsiFrame, PoseEstimate, Keypoint, etc.
traits.rs -- SignalProcessor, NeuralInference, DataStore
error.rs -- CoreError, SignalError, InferenceError, StorageError
utils.rs -- Shared helper functions
Related Crates
| Crate | Role |
|---|---|
wifi-densepose-signal |
CSI signal processing algorithms |
wifi-densepose-nn |
Neural network inference backends |
wifi-densepose-train |
Training pipeline with ruvector |
wifi-densepose-mat |
Disaster detection (MAT) |
wifi-densepose-hardware |
Hardware sensor interfaces |
wifi-densepose-vitals |
Vital sign extraction |
wifi-densepose-wifiscan |
Multi-BSSID WiFi scanning |
License
MIT OR Apache-2.0