Commit Graph

5 Commits

Author SHA1 Message Date
ruv 0dfa3d46aa feat(adr-115): P1 — Cargo features + CLI flags for MQTT/Matter/Semantic
Adds `mqtt` and `matter` Cargo features (default off) plus 20+ new CLI
flags wired through cli.rs per ADR-115 §3.8 / §3.10 / §3.11 / §3.12:

- MQTT (HA-DISCO): --mqtt, --mqtt-host/--mqtt-port/--mqtt-username/
  --mqtt-password-env/--mqtt-client-id/--mqtt-prefix, TLS controls
  (--mqtt-tls/--mqtt-ca-file/--mqtt-client-cert/--mqtt-client-key),
  rate controls (--mqtt-refresh-secs, --mqtt-rate-{vitals,motion,count,
  rssi,pose}, --mqtt-publish-pose).
- Privacy (ADR-106): --privacy-mode strips HR/BR/pose pre-publish.
- Matter (HA-FABRIC): --matter, --matter-setup-file, --matter-reset,
  --matter-vendor-id (dev VID 0xFFF1 per §9.9), --matter-product-id.
- Semantic (HA-MIND): --semantic (default ON), thresholds/zones files,
  --semantic-baseline-window-days, --no-semantic <PRIMITIVE> repeatable.

rumqttc 0.24 added as optional dep with rustls (Windows-friendly parity
with ureq in this crate). matter-rs deferred to P7 spike per §9.10.

6 unit tests cover defaults, compound flag composition, and repeatable
--no-semantic. Tests pass:

  cargo test -p wifi-densepose-sensing-server --no-default-features cli::tests
  6 passed; 0 failed.

Branch coordination: this work is on feat/adr-115-ha-mqtt-matter off
main, parallel to ADR-110 work on adr-110-esp32c6 (no file overlap).

Refs #776 (ADR-115 implementation tracking issue).

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-23 13:41:38 -04:00
ruv ca2059b07f fix(branch-coord): revert ADR-115 Cargo.toml/cli.rs that slipped into iter 18
Iter 18's commit 2997165bc accidentally absorbed the ADR-115 agent's
uncommitted MQTT/Matter additions (Cargo.toml `rumqttc` dep + [features]
block, cli.rs --mqtt CLI flags) into the adr-110-esp32c6 branch during
the cross-branch checkout described in that commit's message.

The actual iter 18 EMA work in main.rs is correct and stays; this commit
restores Cargo.toml + cli.rs to their HEAD~1 (iter 17) state so the
ADR-115 agent's stashed `stash@adr115-pending-work` can be popped cleanly
back onto their feat/adr-115-ha-mqtt-matter branch without colliding.

Net effect on adr-110-esp32c6:
  - main.rs iter 18 EMA: kept ✓
  - 4 fps_ema_tests: still green
  - Cargo.toml: back to iter-17 state (wifi-densepose-hardware dep only)
  - cli.rs: back to iter-17 state (no MQTT flags)
  - Cargo.lock: synced to match

The ADR-115 agent can pop their stash on feat/adr-115-ha-mqtt-matter
and resume without merging an unrelated branch's ADR-110 work.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-23 13:31:58 -04:00
ruv 2997165bc1 feat(adr-110): per-node measured CSI fps + EMA for mesh-time interpolation
Iter 18 (after recovery from a cross-branch slip — see commit-history
context below). Replaces the hardcoded 20 Hz CSI_FPS_HZ constant in
mesh_aligned_us_for_csi_frame with a per-node EMA of observed
inter-frame intervals, falling back to 20 Hz until ≥5 samples land.

Real bench data (§A0.12 captures) showed the actual CSI rate at ~10 fps
because the firmware's CSI_MIN_SEND_INTERVAL_US gate combined with
ruv.net's traffic level paces it to that. Using 20 Hz against actual
10 fps inflates Δus 2× and shifts the recovered mesh timestamp by up
to the inter-sync interval / 2 = ~1 s. Measured fps fixes that.

State on NodeState:
  csi_fps_ema:     f64    — EMA (seeded at 20.0)
  csi_fps_samples: u32    — counts inter-frame deltas observed

API:
  NodeState::observe_csi_frame_arrival(now)  — call once per CSI frame
                                               from udp_receiver_task
  update_csi_fps_ema(prev_fps, dt_sec) -> Option<f64>  — free fn,
                                                          testable

mesh_aligned_us_for_csi_frame now uses the measured fps when samples ≥ 5,
falls back to 20 Hz otherwise.

4 unit tests (fps_ema_tests module, all passing on the binary):
  * steady_10hz_converges_toward_10  — 40 samples at 100 ms converge to ±0.1 Hz
  * steady_20hz_stays_near_20        — 20 samples at 50 ms stay within 0.05 Hz
  * nonpositive_dt_rejected          — dt ≤ 0 returns None
  * long_gap_rejected_as_implausible — dt > 1 s rejected (likely a dropout)

Branch-coordination note: this iter's working tree was briefly applied
to feat/adr-115-ha-mqtt-matter by a `git checkout` between iter 17 and
iter 18. Stashed the ADR-115 agent's MQTT/Matter Cargo.toml work
(`stash@adr115-pending-work`) before switching back here. No code lost.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-23 13:30:02 -04:00
Chaitanya Tata f853c74563
v2: pin Rust 1.89 and fix sensing-server UI path when run from v2 (#523)
* v2: pin Rust 1.89 for sensing-server dependency chain

ruvector-core 2.0.5, hnsw_rs 0.3.4, and mmap-rs 0.7 require newer Cargo/rustc
than 1.82 (edition2024 manifest, is_multiple_of, stable avx512f target_feature
on x86_64). Add v2/rust-toolchain.toml so cargo build -p
wifi-densepose-sensing-server picks a compatible toolchain.

Signed-off-by: Chaitanya Tata <chaitanya@dotstarconsulting.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* sensing-server: default UI path for cwd v2/ and coalesce fallbacks

The previous default ../../ui resolves to a non-existent directory when
the binary is run from v2/ (common), so /ui/* returned 404 and the
dashboard appeared broken. Default to ../ui and try ../ui, ./ui,
../../ui when the configured path is missing.

Signed-off-by: Chaitanya Tata <chaitanya@dotstarconsulting.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Signed-off-by: Chaitanya Tata <chaitanya@dotstarconsulting.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-17 18:00:36 -04:00
rUv f49c722764
chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427)
The Rust port lived two directories deep (rust-port/wifi-densepose-rs/)
without any sibling under rust-port/ that warranted the extra level.
Move the whole workspace up to v2/ to match v1/ (Python) at the same
depth and shorten every cd / build command across the repo.

git mv preserves history for all tracked files. 60 files updated for
path references (CI workflows, ADRs, docs, scripts, READMEs, internal
.claude-flow state). Two manual fixes for relative-cd paths in
CLAUDE.md and ADR-043 that became wrong after the depth change
(cd ../.. → cd ..).

Validated:
- cargo check --workspace --no-default-features → clean (after target/
  nuke; the gitignored target/ was carried by the OS rename and had
  hard-coded old paths in build scripts)
- cargo test --workspace --no-default-features → 1,539 passed, 0 failed,
  8 ignored (same totals as pre-rename)
- ESP32-S3 on COM7 → still streaming live CSI (cb #40300, RSSI -64 dBm)

After-merge follow-up: contributors should `rm -rf v2/target` once and
let cargo regenerate from the new path.
2026-04-25 21:28:13 -04:00