Ruview/rust-port/wifi-densepose-rs/crates/wifi-densepose-signal/Cargo.toml
rUv a23bd2ec01 fix(server): resolve adversarial review findings C1-C5, H1-H3, H5, M1-M2
Critical fixes:
- C1: FieldModel created with n_links=1 (single_link_config) so
  feed_calibration/extract_perturbation no longer get DimensionMismatch
- C2: variance_explained now uses centered covariance trace (E[x²]-E[x]²)
  matching mode_energies normalization
- C3: MP ratio uses total_obs = frames * links for consistent threshold
  between calibration and runtime
- C4: Noise estimator filters to positive eigenvalues only, preventing
  collapse to ~0 on rank-deficient matrices (p > n)
- C5: ESP32 paths gate total_persons on presence — empty room reports 0

High fixes:
- H1: Bounding box computed from observed keypoints only (confidence > 0),
  preventing collapse from centroid-filled unobserved slots
- H2: fuse_or_fallback returns Option<usize> instead of sentinel 0,
  eliminating type ambiguity between "fusion succeeded" and "zero people"
- H3: Monotonic epoch-relative timestamps replace wall-clock/Instant mixing,
  preventing spurious TimestampMismatch on NTP steps
- H5: ndarray-linalg gated behind "eigenvalue" feature flag (default=on),
  diagonal fallback used with --no-default-features

Moderate fixes:
- M1: calibration_start guards against replacing Fresh calibration
- M2: parse_node_positions logs warning for malformed entries

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-31 18:50:00 +00:00

55 lines
1.6 KiB
TOML

[package]
name = "wifi-densepose-signal"
version.workspace = true
edition.workspace = true
description = "WiFi CSI signal processing for DensePose estimation"
license.workspace = true
authors = ["rUv <ruv@ruv.net>", "WiFi-DensePose Contributors"]
repository.workspace = true
documentation = "https://docs.rs/wifi-densepose-signal"
keywords = ["wifi", "csi", "signal-processing", "densepose", "rust"]
categories = ["science", "computer-vision"]
readme = "README.md"
[features]
default = ["eigenvalue"]
## Enable eigenvalue-based person counting (requires BLAS via ndarray-linalg).
## Disable with --no-default-features to use the diagonal fallback instead.
eigenvalue = ["ndarray-linalg"]
[dependencies]
# Core utilities
thiserror.workspace = true
serde = { workspace = true }
serde_json.workspace = true
chrono = { version = "0.4", features = ["serde"] }
# Signal processing
ndarray = { workspace = true }
ndarray-linalg = { workspace = true, optional = true }
rustfft.workspace = true
num-complex.workspace = true
num-traits.workspace = true
# Graph algorithms
ruvector-mincut = { workspace = true }
ruvector-attn-mincut = { workspace = true }
# Attention and solver integrations (ADR-017)
ruvector-attention = { workspace = true }
ruvector-solver = { workspace = true }
# Midstreamer integrations (ADR-032a)
midstreamer-temporal-compare = { workspace = true }
midstreamer-attractor = { workspace = true }
# Internal
wifi-densepose-core = { version = "0.3.0", path = "../wifi-densepose-core" }
[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
proptest.workspace = true
[[bench]]
name = "signal_bench"
harness = false