At edge tier>=2 on N16R8 PSRAM boards, `process_frame()` runs
`update_multi_person_vitals()` (4 persons × 256 history samples) plus
`wasm_runtime_on_frame()` back-to-back before returning to `edge_task()`.
The existing `vTaskDelay(1)` in `edge_task()` only fires *after*
`process_frame()` returns — under sustained 30 pps CSI load on PSRAM
boards this leaves IDLE1 on Core 1 starved long enough for the 5-second
Task Watchdog Timer to fire.
Fix: add two `vTaskDelay(1)` calls inside `process_frame()`, both gated
on `s_cfg.tier >= 2`:
1. After `update_multi_person_vitals()` (Step 11)
2. After `wasm_runtime_on_frame()` dispatch (Step 14)
Tier 0/1 paths are unaffected. Validated on COM7 (N16R8 board):
`Edge DSP task started on core 1 (tier=2)`, no WDT panics in 20 s.
Also bump firmware version 0.6.5 → 0.6.6 and refresh all 6 release_bins
with the new build (8MB + 4MB variants, built 2026-05-21).
Fix-marker RuView#683 added to scripts/fix-markers.json.
Co-Authored-By: claude-flow <ruv@ruv.net>
* feat(server): cross-node RSSI-weighted feature fusion + benchmarks
Adds fuse_multi_node_features() that combines CSI features across all
active ESP32 nodes using RSSI-based weighting (closer node = higher weight).
Benchmark results (2 ESP32 nodes, 30s, ~1500 frames):
Metric | Baseline | Fusion | Improvement
---------------------|----------|---------|------------
Variance mean | 109.4 | 77.6 | -29% noise
Variance std | 154.1 | 105.4 | -32% stability
Confidence | 0.643 | 0.686 | +7%
Keypoint spread std | 4.5 | 1.3 | -72% jitter
Presence ratio | 93.4% | 94.6% | +1.3pp
Person count still fluctuates near threshold — tracked as known issue.
Verified on real hardware: COM6 (node 1) + COM9 (node 2) on ruv.net.
Co-Authored-By: claude-flow <ruv@ruv.net>
* fix(ui): add client-side lerp smoothing to pose renderer
Keypoints now interpolate between frames (alpha=0.25) instead of
jumping directly to new positions. This eliminates visual jitter
that persists even with server-side EMA smoothing, because the
renderer was drawing every WebSocket frame at full rate.
Applied to skeleton, keypoints, and dense body rendering paths.
Co-Authored-By: claude-flow <ruv@ruv.net>
* feat: DynamicMinCut person separation + UI lerp smoothing
- Added ruvector-mincut dependency to sensing server
- Replaced variance-based person scoring with actual graph min-cut on
subcarrier temporal correlation matrix (Pearson correlation edges,
DynamicMinCut exact max-flow)
- Recalibrated feature scaling for real ESP32 data ranges
- UI: client-side lerp interpolation (alpha=0.25) on keypoint positions
- Dampened procedural animation (noise, stride, extremity jitter)
- Person count thresholds retuned for mincut ratio
Co-Authored-By: claude-flow <ruv@ruv.net>
* docs: update CHANGELOG with v0.5.1-v0.5.3 releases
Co-Authored-By: claude-flow <ruv@ruv.net>