Claude
8dfb031cb3
ADR-081: Layer 3 mesh plane + Rust mirror trait — all 5 layers landed
...
Fully implements the remaining deferred pieces of the adaptive CSI mesh
firmware kernel. All 5 layers (Radio Abstraction, Adaptive Controller,
Mesh Sensing Plane, On-device Feature Extraction, Rust handoff) are
now implemented and host-tested end-to-end.
Layer 3 — Mesh Sensing Plane (firmware/esp32-csi-node/main/rv_mesh.{h,c}):
* 4 node roles: Unassigned / Anchor / Observer / FusionRelay / Coordinator
* 7 message types: TIME_SYNC, ROLE_ASSIGN, CHANNEL_PLAN,
CALIBRATION_START, FEATURE_DELTA, HEALTH, ANOMALY_ALERT
* 3 auth classes: None / HMAC-SHA256-session / Ed25519-batch
* Payload types: rv_node_status_t (28 B), rv_anomaly_alert_t (28 B),
rv_time_sync_t (16 B), rv_role_assign_t (16 B),
rv_channel_plan_t (24 B), rv_calibration_start_t (20 B)
* 16-byte envelope + payload + IEEE CRC32 trailer
* Pure rv_mesh_encode()/rv_mesh_decode() plus typed convenience encoders
* rv_mesh_send_health() + rv_mesh_send_anomaly() helpers
Controller wiring (adaptive_controller.c):
* Slow loop (30 s default) now emits HEALTH
* apply_decision() emits ANOMALY_ALERT on transitions to ALERT /
DEGRADED
* Role + mesh epoch tracked in module state; epoch bumps on role
change
Layer 5 — Rust mirror (crates/wifi-densepose-hardware/src/radio_ops.rs):
* RadioOps trait mirrors rv_radio_ops_t vtable
* MockRadio backend for offline tests
* MeshHeader / NodeStatus / AnomalyAlert types mirror rv_mesh.h
* Byte-identical IEEE CRC32 (poly 0xEDB88320) verified against
firmware test vectors (0xCBF43926 for "123456789")
* decode_mesh / decode_node_status / decode_anomaly_alert / encode_health
* 8 unit tests, including mesh_constants_match_firmware which asserts
MESH_MAGIC/VERSION/HEADER_SIZE/MAX_PAYLOAD match rv_mesh.h
byte-for-byte
* Exported from lib.rs
* signal/ruvector/train/mat crates untouched — satisfies ADR-081
portability acceptance test
Tests (all passing):
test_adaptive_controller: 18/18 (C, decide() 3.2 ns/call)
test_rv_feature_state: 15/15 (C, CRC32 87 MB/s)
test_rv_mesh: 27/27 (C, roundtrip 1.0 µs)
radio_ops::tests (Rust): 8/8
--- total: 68/68 assertions green ---
Docs:
* ADR-081 status flipped to Accepted
* Implementation-status matrix updated; L3 + Rust mirror both
marked Implemented
* Benchmarks table extended with rv_mesh encode+decode roundtrip
* Verification section updated with cargo test invocation
* CHANGELOG: two new entries for L3 mesh plane + Rust mirror
Remaining follow-ups (Phase 3.5 polish, not blocking):
* Mesh RX path (UDP listener + dispatch) on the firmware
* Ed25519 signing for CHANNEL_PLAN / CALIBRATION_START
* Hardware validation on COM7
2026-04-19 03:57:18 +00:00
Claude
d53e29506e
ADR-081: implement Layers 1/2/4 end-to-end + host tests + QEMU hooks
...
Turns the ADR-081 scaffolding into a working adaptive CSI mesh kernel:
Layer 1 radio abstraction has an ESP32 binding and a mock binding; Layer 2
adaptive controller runs on FreeRTOS timers; Layer 4 feature-state packet
is emitted at 5 Hz by default, replacing raw ADR-018 CSI as the default
upstream.
New files:
firmware/esp32-csi-node/main/adaptive_controller_decide.c (pure policy)
firmware/esp32-csi-node/main/rv_radio_ops_mock.c (QEMU binding)
firmware/esp32-csi-node/tests/host/Makefile (host tests)
firmware/esp32-csi-node/tests/host/test_adaptive_controller.c
firmware/esp32-csi-node/tests/host/test_rv_feature_state.c
firmware/esp32-csi-node/tests/host/esp_err.h (shim)
firmware/esp32-csi-node/tests/host/.gitignore
Modified:
adaptive_controller.c — includes pure decide.c; emit_feature_state()
wired into fast loop (200 ms = 5 Hz)
rv_radio_ops_esp32.c — get_health() fills pkt_yield + send_fail
csi_collector.{c,h} — pkt_yield/send_fail accessors (ADR-081 L1)
rv_feature_state.h — packed size corrected to 60 bytes
(was incorrectly 80 in initial commit)
main.c — mock binding registered under mock CSI
CMakeLists.txt — rv_radio_ops_mock.c under CSI_MOCK_ENABLED
scripts/validate_qemu_output.py — 3 new ADR-081 checks (17/18/19)
docs/adr/ADR-081-*.md — status → Accepted (partial);
implementation-status matrix; measured
benchmarks (decide 3.2 ns, CRC32 614 ns);
bandwidth 300 B/s @ 5 Hz (99.7% vs raw);
verification section
CHANGELOG.md — artifact-level entries
Tests (host, gcc -O2 -std=c11):
test_adaptive_controller: 18/18 pass, decide() = 3.2 ns/call
test_rv_feature_state: 15/15 pass, CRC32(56 B) = 614 ns/pkt, 87 MB/s
sizeof(rv_feature_state_t) == 60 asserted
IEEE CRC32 known vectors verified
Deferred (tracked in ADR-081 roadmap Phase 3/4):
Layer 3 mesh-plane message types, role-assignment FSM, Rust-side mirror
trait in crates/wifi-densepose-hardware/src/radio_ops.rs.
2026-04-19 03:43:08 +00:00
Claude
9648a47fdc
ADR-081: adaptive CSI mesh firmware kernel + scaffolding
...
Introduces a 5-layer firmware kernel that reframes the existing ESP32
modules as components of a chipset-agnostic architecture and authorizes
adaptive control + a compact feature-state stream as the default upstream.
Layers:
L1 Radio Abstraction Layer — rv_radio_ops_t vtable + ESP32 binding
L2 Adaptive Controller — fast/medium/slow loops (200ms/1s/30s)
L3 Mesh Sensing Plane — anchor/observer/relay/coordinator (spec)
L4 On-device Feature Extr. — rv_feature_state_t (magic 0xC5110006)
L5 Rust handoff — feature_state default; debug raw gated
Files:
docs/adr/ADR-081-adaptive-csi-mesh-firmware-kernel.md (new)
firmware/esp32-csi-node/main/rv_radio_ops.h (new)
firmware/esp32-csi-node/main/rv_radio_ops_esp32.c (new)
firmware/esp32-csi-node/main/rv_feature_state.{h,c} (new)
firmware/esp32-csi-node/main/adaptive_controller.{h,c} (new)
firmware/esp32-csi-node/main/main.c (wire L1+L2)
firmware/esp32-csi-node/main/CMakeLists.txt (add 4 sources)
firmware/esp32-csi-node/main/Kconfig.projbuild (controller knobs)
CHANGELOG.md (Unreleased)
Default policy is conservative: enable_channel_switch and
enable_role_change are off, so behavior matches today's firmware
unless an operator opts in via menuconfig. The pure
adaptive_controller_decide() is exposed for offline unit tests.
Reuses (does not rewrite): csi_collector, edge_processing (ADR-039),
swarm_bridge (ADR-066), secure_tdm (ADR-032), wasm_runtime (ADR-040).
2026-04-19 03:14:04 +00:00
ruv
8914538bfe
chore: bump firmware version to 0.6.1
...
Continuous Integration / Tests-2 (push) Has been cancelled
Firmware CI / Build ESP32-S3 Firmware (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / Build Espressif QEMU (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / Fuzz Testing (ADR-061 Layer 6) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / NVS Matrix Generation (push) Has been cancelled
Security Scanning / Static Application Security Testing (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Container Security Scan (push) Has been cancelled
Security Scanning / Infrastructure Security Scan (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / License Compliance Scan (push) Has been cancelled
Security Scanning / Security Policy Compliance (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (default) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier0) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier1) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (full-adr060) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (tdm-3node) (push) Has been cancelled
Continuous Deployment / Deploy to Staging (push) Has been cancelled
Continuous Deployment / Deploy to Production (push) Has been cancelled
Continuous Deployment / Rollback Deployment (push) Has been cancelled
Continuous Deployment / Post-deployment Monitoring (push) Has been cancelled
Continuous Deployment / Notify Deployment Status (push) Has been cancelled
Continuous Integration / Performance Tests (push) Has been cancelled
Continuous Integration / Docker Build & Test (push) Has been cancelled
Continuous Integration / API Documentation (push) Has been cancelled
Continuous Integration / Notify (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-max) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-min) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / Swarm Test (ADR-062) (push) Has been cancelled
Security Scanning / Security Report (push) Has been cancelled
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-16 10:38:02 -04:00
rUv
8a9e890956
Merge pull request #393 from ruvnet/fix/esp32-node-id-clobber
...
fix(firmware): defensive node_id capture prevents runtime clobber (#390 )
2026-04-16 10:22:59 -04:00
ruv
425f0e6aac
fix(firmware): defensive node_id capture prevents runtime clobber ( #390 )
...
Users on multi-node ESP32 deployments have been reporting for months
that their provisioned `node_id` reverts to the Kconfig default of `1`
in UDP frames and the `csi_collector` init log, despite boot showing:
nvs_config: NVS override: node_id=4
main: ESP32-S3 CSI Node (ADR-018) - Node ID: 4
csi_collector: CSI collection initialized (node_id=1, channel=11)
See #232 , #375 , #385 , #386 , #390 . The root memory-corruption path for
the `g_nvs_config.node_id` byte has not been definitively isolated
(does not reproduce on my attached ESP32-S3 running current source
and the v0.6.0 release binary), but the UDP frame header can be made
tamper-proof regardless:
1. `csi_collector_init()` now captures `g_nvs_config.node_id` into a
module-local `static uint8_t s_node_id` at init time.
2. `csi_serialize_frame()` reads `buf[4]` from `s_node_id`, not from
the global - so any later corruption of `g_nvs_config` cannot
affect outgoing CSI frames.
3. All other consumers (`edge_processing.c` x3, `wasm_runtime.c`,
`display_ui.c`, `main.c swarm_bridge_init`) now go through a new
`csi_collector_get_node_id()` accessor instead of reading the
global directly.
4. A canary at end-of-init logs `WARN` if `g_nvs_config.node_id`
already diverges from the captured value - this will pinpoint
the corruption path if it happens on a user's device.
Hardware validation on attached ESP32-S3 (COM8):
- NVS loads node_id=2
- Boot log: `main: ... Node ID: 2`
- NEW log: `csi_collector: Captured node_id=2 at init (defensive
copy for #232/#375/#385/#390)`
- Init log: `csi_collector: CSI collection initialized (node_id=2)`
- UDP frame byte[4] = 2 (verified via socket sniffer, 15/15 packets)
This is defense in depth - it shields the UDP frame from whatever
upstream bug is clobbering the struct. When a user hits the original
bug, the canary WARN will help isolate the root cause.
Refs #232 #375 #385 #386 #390
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-15 13:47:34 -04:00
rUv
6e015c4626
fix: provision.py esptool v5 + refuse partial NVS flashes ( #391 ) ( #392 )
...
Continuous Deployment / Notify Deployment Status (push) Blocked by required conditions
Continuous Integration / Rust Workspace Tests (push) Waiting to run
Continuous Integration / Code Quality & Security (push) Waiting to run
Continuous Integration / Tests (push) Waiting to run
Continuous Integration / Tests-1 (push) Waiting to run
Continuous Integration / Tests-2 (push) Waiting to run
Continuous Integration / Performance Tests (push) Blocked by required conditions
Continuous Integration / Docker Build & Test (push) Blocked by required conditions
Continuous Integration / API Documentation (push) Blocked by required conditions
Continuous Integration / Notify (push) Blocked by required conditions
Firmware CI / Build ESP32-S3 Firmware (push) Waiting to run
Firmware QEMU Tests (ADR-061) / Build Espressif QEMU (push) Waiting to run
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-max) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-min) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (default) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier0) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier1) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (full-adr060) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (tdm-3node) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / Fuzz Testing (ADR-061 Layer 6) (push) Waiting to run
Firmware QEMU Tests (ADR-061) / NVS Matrix Generation (push) Waiting to run
Firmware QEMU Tests (ADR-061) / Swarm Test (ADR-062) (push) Blocked by required conditions
Security Scanning / Infrastructure Security Scan (push) Waiting to run
Security Scanning / Static Application Security Testing (push) Waiting to run
Security Scanning / Dependency Vulnerability Scan (push) Waiting to run
Security Scanning / Container Security Scan (push) Waiting to run
Security Scanning / Secret Scanning (push) Waiting to run
Security Scanning / License Compliance Scan (push) Waiting to run
Security Scanning / Security Policy Compliance (push) Waiting to run
Security Scanning / Security Report (push) Blocked by required conditions
* fix: provision.py esptool v5 syntax + refuse partial NVS flashes (#391 )
Bug 1: `write_flash` -> `write-flash` for esptool v5.x compat
- Actual flash command (flash_nvs, line 153) was already fixed
- Dry-run manual-flash hint (line 301) still printed old syntax
Bug 2: Refuse partial invocations that would silently wipe NVS
- provision.py flashes a fresh NVS binary at offset 0x9000, which
REPLACES the entire csi_cfg namespace. Any key not passed on the
CLI is erased.
- Previously: `provision.py --port COM8 --target-port 5005` would
silently wipe ssid, password, target_ip, node_id, etc., causing
"Retrying WiFi connection (10/10)" in the field.
- Now: refuse unless all of --ssid/--password/--target-ip provided,
or --force-partial is set (prints warning listing wiped keys).
Validation:
- Dry-run: binary generates to 24576 bytes, hint uses write-flash
- Safety check: partial invocation rejected with clear message
- Force-partial: warning lists keys that will be wiped
- Hardware: esptool v5.1.0 `read-flash 0x9000 0x100` works on
attached ESP32-S3 (COM8); NVS preserved, device reconnected at
192.168.1.104 with node_id=2 intact after reset.
Co-Authored-By: claude-flow <ruv@ruv.net>
* docs: CHANGELOG catch-up for v0.5.5, v0.6.0, v0.7.0 (#367 )
The changelog was stale at v0.5.4 — three releases were cut without
updating it. Added full entries for each, plus an [Unreleased] block
for the #391 provision.py fixes.
version.txt correctly stays at 0.6.0 — v0.7.0 was a model/pipeline
release, not a new firmware binary. Latest firmware is v0.6.0-esp32.
Closes #367
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-15 13:12:46 -04:00
rUv
2a05378bd2
Merge pull request #365 from ruvnet/feat/adr-080-qe-remediation
...
Continuous Integration / Code Quality & Security (push) Has been cancelled
Security Scanning / Static Application Security Testing (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Container Security Scan (push) Has been cancelled
Security Scanning / Infrastructure Security Scan (push) Has been cancelled
Continuous Deployment / Pre-deployment Checks (push) Has been cancelled
Continuous Integration / Rust Workspace Tests (push) Has been cancelled
Continuous Integration / Tests (push) Has been cancelled
Continuous Integration / Tests-1 (push) Has been cancelled
Continuous Integration / Tests-2 (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / License Compliance Scan (push) Has been cancelled
Security Scanning / Security Policy Compliance (push) Has been cancelled
Verify Pipeline Determinism / Verify Pipeline Determinism (push) Has been cancelled
Continuous Deployment / Deploy to Staging (push) Has been cancelled
Continuous Deployment / Deploy to Production (push) Has been cancelled
Continuous Deployment / Rollback Deployment (push) Has been cancelled
Continuous Deployment / Post-deployment Monitoring (push) Has been cancelled
Continuous Deployment / Notify Deployment Status (push) Has been cancelled
Continuous Integration / Performance Tests (push) Has been cancelled
Continuous Integration / Docker Build & Test (push) Has been cancelled
Continuous Integration / API Documentation (push) Has been cancelled
Continuous Integration / Notify (push) Has been cancelled
Security Scanning / Security Report (push) Has been cancelled
fix: ADR-080 QE remediation — 13 of 15 issues fixed
2026-04-06 18:40:21 -04:00
ruv
ccb27b280c
merge: bring feat/adr-080-qe-remediation up to date with main
...
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 18:36:20 -04:00
ruv
55c5ddfc40
docs: collapse all details sections in README for cleaner view
...
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 18:20:30 -04:00
ruv
c5fef33c6a
docs: reorder README sections — v0.7.0 first, then descending
...
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 18:18:40 -04:00
ruv
599ea61a17
docs: update README and user guide for v0.7.0 camera-supervised training
...
- Add v0.7.0 section with 92.9% PCK@20 result and new scripts
- Add camera-supervised training section to user guide with step-by-step
- Update release table (v0.7.0 as latest)
- Update ADR count (62 → 79)
- Update beta notice with camera ground-truth link
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 17:52:44 -04:00
rUv
8dddbf941a
Merge pull request #363 from ruvnet/feat/adr-079-camera-ground-truth
...
feat: camera ground-truth training pipeline with ruvector optimizations (ADR-079)
2026-04-06 17:29:13 -04:00
ruv
35903a313d
feat: NaN-safe TCN + CSI UDP recorder for real ESP32 training ( #362 )
...
- Add activation clamping [-10, 10] in TCN forward pass to prevent NaN
from real CSI amplitude ranges after normalization
- Add safe sigmoid with input clamping [-20, 20]
- Add scripts/record-csi-udp.py: lightweight ESP32 CSI UDP recorder
Validated on real paired data (345 samples):
ESP32 CSI: 7,000 frames at 23fps from COM8
Mac camera: 6,470 frames at 22fps via MediaPipe
PCK@20: 92.8% | Eval loss: 0.083 | Bone loss: 0.008
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 17:18:41 -04:00
ruv
4bb0b87465
feat: ADR-080 P1+P2 remediation — refactor, perf, tests, safety
...
P1 fixes (this sprint):
- P1-6: Extract sensing-server modules (cli, types, csi, pose) from main.rs
- P1-7: DDA ray march for tomography — O(max(n)) replaces O(n^3) voxel scan
- P1-8: Batch neural inference — Tensor::stack/split for single GPU call
- P1-10: Eliminate 112KB/frame alloc — islice replaces deque→list copy
P2 fixes (this quarter):
- P2-11: Python unit tests for 8 modules (rate_limit, auth, error_handler,
pose_service, stream_service, hardware_service, health_check, metrics)
- P2-13: MAT simulated data safety guard — blocking overlay + pulsing banner
- P2-14: Wire token blacklist into auth verification + logout endpoint
- P2-15: Frame budget benchmark — confirms pipeline well under 50ms budget
Addresses 8 of 10 remaining issues from QE analysis (ADR-080).
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 17:01:07 -04:00
ruv
5bd0d59aa6
feat: ADR-080 P1+P2 remediation — refactor, perf, tests, safety
...
P1 fixes (this sprint):
- P1-6: Extract sensing-server modules (cli, types, csi, pose) from main.rs
- P1-7: DDA ray march for tomography — O(max(n)) replaces O(n^3) voxel scan
- P1-8: Batch neural inference — Tensor::stack/split for single GPU call
- P1-10: Eliminate 112KB/frame alloc — islice replaces deque→list copy
P2 fixes (this quarter):
- P2-11: Python unit tests for 8 modules (rate_limit, auth, error_handler,
pose_service, stream_service, hardware_service, health_check, metrics)
- P2-13: MAT simulated data safety guard — blocking overlay + pulsing banner
- P2-14: Wire token blacklist into auth verification + logout endpoint
- P2-15: Frame budget benchmark — confirms pipeline well under 50ms budget
Addresses 8 of 10 remaining issues from QE analysis (ADR-080).
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 17:00:27 -04:00
ruv
924c32547e
fix: ADR-080 P0 security + CI remediation from QE analysis
...
Address all 5 P0 issues from QE analysis (55/100 score):
- P0-1: Rate limiter bypass — validate X-Forwarded-For against trusted proxy list
- P0-2: Exception detail leak — generic 500 messages, exception_type gated by dev mode
- P0-3: WebSocket JWT in URL (CWE-598) — first-message auth pattern replaces query param
- P0-4: Rust tests not in CI — add rust-tests job gating docker-build and notify
- P0-5: WebSocket path mismatch — use WS_PATH constant instead of hardcoded /ws/sensing
Includes ADR-080 remediation plan and 9 QE reports (4,914 lines).
Firmware validated on ESP32-S3 (COM8): CSI collecting, calibration OK.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 16:12:13 -04:00
ruv
327d0d13f6
feat: scalable WiFlow model with 4 size presets ( #362 )
...
Add --scale flag with 4 presets for dataset-appropriate sizing:
lite: ~190K params, 2 TCN blocks k=3 (trains in seconds)
small: ~200K params, 4 TCN blocks k=5 (trains in minutes)
medium: ~800K params, 4 TCN blocks k=7 (trains in ~15 min)
full: ~7.7M params, 4 TCN blocks k=7 (trains in hours)
Refactored model to use dynamic TCN block count, kernel size,
channel widths, hidden dim, and SPSA perturbation count — all
driven by the scale preset. Default is 'lite' for fast iteration.
Validated: lite model completes 30 epochs on 265 samples in ~2 min
on Windows CPU (vs stuck at epoch 1 with full model).
Scale up with: --scale small|medium|full as dataset grows.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 14:55:35 -04:00
ruv
d09baa6a09
fix: remove hardcoded Tailscale IPs and usernames from public files
...
- ADR-079: strip SSH user/IP from optimization description
- mac-mini-train.sh: replace hardcoded IP with env var WINDOWS_HOST
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 14:39:21 -04:00
ruv
486392bb68
docs: update ADR-079 with validated hardware, ruvector optimizations, baseline
...
- Status: Proposed → Accepted
- Add O6-O10 optimizations (subcarrier selection, attention, Stoer-Wagner
min-cut, multi-SPSA, Mac M4 Pro training via Tailscale)
- Add validated hardware table (Mac camera, MediaPipe, M4 Pro GPU, Tailscale)
- Add baseline benchmark results (PCK@20: 35.3%)
- Update implementation plan with completion status
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 14:38:40 -04:00
ruv
33f5abd0e0
feat: ruvector + DynamicMinCut optimizations for WiFlow training ( #362 )
...
Add 4 ruvector-inspired optimizations to the training pipeline:
- O6: Subcarrier selection (ruvector-solver) — variance-based top-K
selection reduces 128→56 subcarriers (56% input reduction)
- O7: Attention-weighted subcarriers (ruvector-attention) — motion-
correlated weighting amplifies informative channels
- O8: Stoer-Wagner min-cut person separation (ruvector-mincut) —
identifies person-specific subcarrier clusters via correlation
graph partitioning for multi-person training
- O9: Multi-SPSA gradient estimation — K=3 perturbations per step
reduces gradient variance by sqrt(3) vs single SPSA
Also fixes data loader to accept both `kp`/`keypoints` field names
and flat CSI arrays with `csi_shape`, and scalar `conf` values.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 14:22:08 -04:00
ruv
e3522ddcda
feat: camera ground-truth training pipeline (ADR-079, #362 )
...
Add 4 scripts for camera-supervised WiFlow pose training:
- collect-ground-truth.py: synchronized webcam + CSI capture via
MediaPipe PoseLandmarker (17 COCO keypoints at 30fps)
- align-ground-truth.js: time-align camera keypoints with CSI windows
using binary search, confidence-weighted averaging
- train-wiflow-supervised.js: 3-phase supervised training (contrastive
pretrain → supervised keypoint regression → bone-constrained
refinement) with curriculum learning and CSI augmentation
- eval-wiflow.js: PCK@10/20/50, MPJPE, per-joint breakdown, baseline
proxy mode for benchmarking
Baseline benchmark (proxy poses, no camera supervision):
PCK@10: 11.8% | PCK@20: 35.3% | PCK@50: 94.1% | MPJPE: 0.067
Camera pipeline validated over Tailscale to Mac Mini M4 Pro
(1920x1080, 14/17 keypoints visible, MediaPipe confidence 0.94-1.0).
Target after camera-supervised training: PCK@20 > 50%
Closes #362
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 14:07:25 -04:00
ruv
b5e924cd72
fix: embed firmware version from version.txt, log at boot ( #354 )
...
Continuous Deployment / Post-deployment Monitoring (push) Blocked by required conditions
Continuous Deployment / Notify Deployment Status (push) Blocked by required conditions
Continuous Integration / Code Quality & Security (push) Waiting to run
Continuous Integration / Tests (push) Waiting to run
Continuous Integration / Tests-1 (push) Waiting to run
Continuous Integration / Tests-2 (push) Waiting to run
Continuous Integration / Performance Tests (push) Blocked by required conditions
Continuous Integration / Docker Build & Test (push) Blocked by required conditions
Continuous Integration / API Documentation (push) Blocked by required conditions
Continuous Integration / Notify (push) Blocked by required conditions
Security Scanning / Static Application Security Testing (push) Waiting to run
Security Scanning / Dependency Vulnerability Scan (push) Waiting to run
Security Scanning / Container Security Scan (push) Waiting to run
Security Scanning / Infrastructure Security Scan (push) Waiting to run
Security Scanning / Secret Scanning (push) Waiting to run
Security Scanning / License Compliance Scan (push) Waiting to run
Security Scanning / Security Policy Compliance (push) Waiting to run
Security Scanning / Security Report (push) Blocked by required conditions
Firmware CI / Build ESP32-S3 Firmware (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / Build Espressif QEMU (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / Fuzz Testing (ADR-061 Layer 6) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / NVS Matrix Generation (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-max) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-min) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (default) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier0) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier1) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (full-adr060) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (tdm-3node) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / Swarm Test (ADR-062) (push) Has been cancelled
- Add version.txt (0.6.0) read by CMakeLists.txt so
esp_app_get_description()->version matches the release tag
- Log firmware version on boot: "v0.6.0 — Node ID: X"
- Remove stale Kconfig help text (said default 2.0, actual is 15.0)
Fixes the version mismatch reported in #354 where flashing v0.5.3
binaries showed v0.4.3 because PROJECT_VER was never set.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-06 11:26:58 -04:00
rUv
854342297a
Merge pull request #359 from ruvnet/docs/hf-links-update
...
Continuous Integration / Tests (push) Has been cancelled
Continuous Integration / Tests-1 (push) Has been cancelled
Continuous Integration / Tests-2 (push) Has been cancelled
Continuous Integration / Code Quality & Security (push) Has been cancelled
Security Scanning / Static Application Security Testing (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Container Security Scan (push) Has been cancelled
Security Scanning / Infrastructure Security Scan (push) Has been cancelled
Continuous Deployment / Pre-deployment Checks (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / License Compliance Scan (push) Has been cancelled
Security Scanning / Security Policy Compliance (push) Has been cancelled
Continuous Deployment / Deploy to Staging (push) Has been cancelled
Continuous Deployment / Deploy to Production (push) Has been cancelled
Continuous Deployment / Rollback Deployment (push) Has been cancelled
Continuous Deployment / Post-deployment Monitoring (push) Has been cancelled
Continuous Deployment / Notify Deployment Status (push) Has been cancelled
Continuous Integration / Performance Tests (push) Has been cancelled
Continuous Integration / Docker Build & Test (push) Has been cancelled
Continuous Integration / API Documentation (push) Has been cancelled
Continuous Integration / Notify (push) Has been cancelled
Security Scanning / Security Report (push) Has been cancelled
docs: update HuggingFace links to ruv/ruview
2026-04-03 14:23:17 -04:00
ruv
23b4491e7b
docs: update HuggingFace links to ruv/ruview (primary repo)
...
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 14:23:07 -04:00
rUv
2b24250a69
Merge pull request #358 from ruvnet/feat/deep-scan
...
Continuous Deployment / Deploy to Production (push) Blocked by required conditions
Continuous Deployment / Notify Deployment Status (push) Blocked by required conditions
Continuous Integration / Tests (push) Waiting to run
Continuous Integration / Tests-1 (push) Waiting to run
Continuous Integration / Tests-2 (push) Waiting to run
Continuous Integration / Code Quality & Security (push) Waiting to run
Continuous Integration / Performance Tests (push) Blocked by required conditions
Continuous Integration / Docker Build & Test (push) Blocked by required conditions
Continuous Integration / API Documentation (push) Blocked by required conditions
Continuous Integration / Notify (push) Blocked by required conditions
Security Scanning / Container Security Scan (push) Waiting to run
Security Scanning / Infrastructure Security Scan (push) Waiting to run
Security Scanning / Static Application Security Testing (push) Waiting to run
Security Scanning / Dependency Vulnerability Scan (push) Waiting to run
Security Scanning / Secret Scanning (push) Waiting to run
Security Scanning / License Compliance Scan (push) Waiting to run
Security Scanning / Security Policy Compliance (push) Waiting to run
Security Scanning / Security Report (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / Fuzz Testing (ADR-061 Layer 6) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / NVS Matrix Generation (push) Has been cancelled
Firmware CI / Build ESP32-S3 Firmware (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / Build Espressif QEMU (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-max) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-min) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (default) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier0) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier1) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (full-adr060) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / QEMU Test (tdm-3node) (push) Has been cancelled
Firmware QEMU Tests (ADR-061) / Swarm Test (ADR-062) (push) Has been cancelled
feat: deep-scan.js — comprehensive RF intelligence report
2026-04-03 13:03:28 -04:00
ruv
6d446e5459
feat: deep-scan.js — comprehensive RF intelligence report
...
Shows: who, what they're doing, vitals, position, objects, electronics,
physics, and RF fingerprint. The 'wow factor' demo script.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 13:03:18 -04:00
rUv
62fd1d96af
Merge pull request #357 from ruvnet/docs/v0.6.0-models-guide
...
docs: HuggingFace models + 17 sensing apps + v0.6.0 guide
2026-04-03 10:28:40 -04:00
ruv
b3fd0e2951
docs: add HuggingFace models, 17 sensing apps, v0.6.0 to README + user guide
...
README:
- New "Pre-Trained Models" section with HuggingFace download link
- Model table (safetensors, q4, q2, presence head, LoRA adapters)
- Updated benchmarks (0.008ms, 164K emb/s, 51.6% contrastive)
- "17 Sensing Applications" section (health, environment, multi-freq)
- v0.6.0 in release table as Latest
User guide:
- "Pre-Trained Models" section with quick start + huggingface-cli
- What the models do (presence, fingerprinting, anomaly, activity)
- Retraining instructions
- "Health & Wellness Applications" section with all 4 health scripts
- Medical disclaimer
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 10:28:29 -04:00
rUv
aae01a2be8
Merge pull request #356 from ruvnet/fix/large-dataset-training
...
fix: skip triplet JSON export for large datasets (>100K)
2026-04-03 09:37:30 -04:00
ruv
828d0599d7
fix: skip triplet JSON export for large datasets (>100K)
...
JSON.stringify fails on 1M+ triplets. Training succeeded (33.3%
improvement) but export crashed. Now skips export when >100K triplets.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 09:37:08 -04:00
rUv
21fd7c84e2
Merge pull request #355 from ruvnet/fix/windows-bind-addr
...
fix: --bind flag for Windows firewall compatibility
2026-04-03 09:11:01 -04:00
ruv
85417b84a6
fix: add --bind flag for Windows firewall compatibility
...
Windows firewall blocks UDP on 0.0.0.0 — must bind to specific WiFi IP.
- seed_csi_bridge.py: --bind-addr auto (auto-detects WiFi IP)
- rf-scan.js: --bind <ip> option (default 0.0.0.0, use 192.168.1.x on Windows)
Confirmed: 195 frames received from both ESP32 nodes with --bind 192.168.1.20
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 09:09:53 -04:00
rUv
430243c32c
Merge pull request #310 from orbisai0security/fix-v002-display-buffer-uaf
...
fix: remove unsafe exec() in display_task.c
2026-04-03 09:01:41 -04:00
ruv
b7650b5243
feat(server): accuracy sprint 001 — Kalman tracker, multi-node fusion, eigenvalue counting
...
Original work by @taylorjdawson (PR #341 ). Merged with v0.5.5 firmware
preserved (ADR-069 feature vectors, ADR-073 channel hopping, batch-limited
watchdog from #266 fix).
New server features:
- Kalman tracker bridge for temporal smoothing
- Multi-node CSI fusion with field model
- Eigenvalue-based person counting
- Calibration endpoints (start/stop/status)
- Node positions parsing
- Adaptive classifier enhancements
Co-Authored-By: taylorjdawson <taylor@users.noreply.github.com>
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:59:17 -04:00
ruv
4fc491dea5
feat: ADR-078 — 5 multi-frequency mesh applications
...
RF tomography (2D backprojection imaging), passive bistatic radar
(neighbor APs as illuminators), frequency-selective material
classification (metal/water/wood/glass), through-wall motion
detection (per-channel penetration weighting), device fingerprinting
(RF emission signatures per SSID)
All impossible with single-channel WiFi — require 6-channel hopping.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:52:50 -04:00
ruv
4f6780f884
feat: ADR-077 — 6 novel RF sensing applications
...
Sleep monitor (hypnogram + efficiency), apnea detector (AHI scoring),
stress monitor (HRV + LF/HF via FFT), gait analyzer (cadence + tremor),
material detector (null pattern classification), room fingerprint
(k-means clustering + anomaly scoring)
All validated on overnight data (113K frames). Pure Node.js, zero deps.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:50:48 -04:00
ruv
085af0c2be
docs: update quick start with 3 deployment options
...
Option 1: Docker (simulated, no hardware)
Option 2: ESP32 live sensing ($9)
Option 3: Full system with Cognitum Seed ($140)
Also shows RF scan, SNN, and MinCut commands for v0.5.5 capabilities.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:47:31 -04:00
ruv
f4e636aaa2
docs: refocus README introduction on WiFi sensing
...
WiFi sensing (presence, vitals, activity, sleep, environment) is now
the primary narrative. Pose estimation repositioned as an advanced
capability. Highlights: multi-frequency mesh, SNN adaptation, witness
chain, Cognitum Seed integration.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:45:30 -04:00
ruv
582d51aed6
docs: fix Cognitum Seed pricing — $131 (not $15)
...
Updated all BOM references: ESP32 $9 + Cognitum Seed $131 = $140 total
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:44:22 -04:00
ruv
b31efe5e92
docs: improve README benchmarks — results-focused with context
...
Replace dry metric table with human-readable results that explain
why each number matters. 14 benchmarks with real-world significance.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:42:52 -04:00
ruv
f03b484dd1
docs: update README limitations — remove 2 resolved items
...
Removed:
- "No pre-trained model weights" — weights now published (v0.5.4+)
- "Multi-person counting overcounts #348 " — fixed by MinCut (ADR-075)
Added:
- Camera-free pose accuracy limitation (2.5% PCK@20, honest about it)
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:32:04 -04:00
ruv
7a75277d58
chore: add data/ and models/ to .gitignore
...
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:22:29 -04:00
ruv
73ce72d39c
docs: update README with v0.5.5 capabilities and benchmarks
...
- New "What's New in v0.5.5" section: SNN, MinCut (#348 fix), CNN
spectrogram, WiFlow, multi-frequency mesh, graph transformer
- Before/after comparison table (person counting, channels, model)
- 15 new script commands with usage examples
- Release table updated with v0.5.5 as Latest
- v0.5.4 section collapsed (not open by default)
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 08:16:23 -04:00
rUv
4e9e92d713
feat: ADR-074/075/076 — SNN + MinCut + CNN Spectrogram (ruvector advanced sensing)
...
feat: ADR-074/075/076 — SNN + MinCut + CNN Spectrogram (ruvector advanced sensing)
2026-04-03 08:00:07 -04:00
ruv
28368b2c70
feat: ADR-076 CNN spectrogram embeddings + graph transformer fusion
...
CSI-as-image: 64x20 subcarrier×time matrix → 224x224 → CNN → 128-dim
embedding. Same-node similarity 0.95+, cross-node 0.6-0.8.
- csi-spectrogram.js: WASM CNN embedding, ASCII visualization, Seed ingest
- mesh-graph-transformer.js: GATv2 multi-head attention over ESP32 mesh,
fuses multi-node features, generalizes to 3+ nodes
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 00:36:38 -04:00
ruv
4bb8c3303f
feat: ADR-075 min-cut person separation — fixes #348
...
Stoer-Wagner min-cut on subcarrier correlation graph replaces broken
threshold-based person counting (was always 4, now correct).
Validated: 24/24 windows correctly report 1 person on test data
where old firmware reported 4. Pure JS, <5ms per window.
- mincut-person-counter.js: live UDP + JSONL replay, overrides vitals
- csi-graph-visualizer.js: ASCII spectrum + correlation heatmap
- ADR-075: algorithm, comparison, migration path
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 00:34:57 -04:00
ruv
b9778c5ad2
feat: ADR-074 spiking neural network for real-time CSI sensing
...
128→64→8 SNN with STDP online learning — adapts to room in <30s
without labels. Event-driven: 16-160x less compute than FC encoder.
- snn-csi-processor.js: live UDP with ASCII visualization, EWMA
- ADR-073 updated with SNN integration for multi-channel fusion
- Fixed magic number parsing to use ADR-018 format (0xC5110001)
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 00:34:31 -04:00
ruv
b6c032d665
docs: add multi-frequency mesh + RF scanner to README
...
Continuous Deployment / Post-deployment Monitoring (push) Blocked by required conditions
Continuous Deployment / Notify Deployment Status (push) Blocked by required conditions
Continuous Integration / Code Quality & Security (push) Waiting to run
Continuous Integration / Tests (push) Waiting to run
Continuous Integration / Tests-1 (push) Waiting to run
Continuous Integration / Tests-2 (push) Waiting to run
Continuous Integration / Performance Tests (push) Blocked by required conditions
Continuous Integration / Docker Build & Test (push) Blocked by required conditions
Continuous Integration / API Documentation (push) Blocked by required conditions
Continuous Integration / Notify (push) Blocked by required conditions
Firmware CI / Build ESP32-S3 Firmware (push) Waiting to run
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-min) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (default) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier0) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier1) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (full-adr060) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (tdm-3node) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / Fuzz Testing (ADR-061 Layer 6) (push) Waiting to run
Firmware QEMU Tests (ADR-061) / NVS Matrix Generation (push) Waiting to run
Firmware QEMU Tests (ADR-061) / Build Espressif QEMU (push) Waiting to run
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-max) (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / Swarm Test (ADR-062) (push) Blocked by required conditions
Security Scanning / License Compliance Scan (push) Waiting to run
Security Scanning / Security Policy Compliance (push) Waiting to run
Security Scanning / Static Application Security Testing (push) Waiting to run
Security Scanning / Dependency Vulnerability Scan (push) Waiting to run
Security Scanning / Container Security Scan (push) Waiting to run
Security Scanning / Infrastructure Security Scan (push) Waiting to run
Security Scanning / Secret Scanning (push) Waiting to run
Security Scanning / Security Report (push) Blocked by required conditions
New capabilities: 6-channel hopping, neighbor APs as passive radar,
real-time RF spectrum visualization with null/reflector/movement detection
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 00:26:48 -04:00
ruv
9d70d621da
feat: ADR-073 enable multi-frequency channel hopping from NVS
...
- main.c: call csi_collector_set_hop_table() at boot when hop_count > 1
- provision.py: add --hop-channels and --hop-dwell flags, write chan_list
blob and dwell_ms to NVS matching firmware's expected format
- Validated: Node 1 hopping ch 1/6/11, Node 2 hopping ch 3/5/9,
200ms dwell, null subcarriers reduced from 19% to 16%
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-03 00:26:22 -04:00