Skip to content

fix: open issue sweep and ESP32 v0.8.4 release - #1355

Merged
ruvnet merged 8 commits into
mainfrom
agent/open-issues-release
Jul 18, 2026
Merged

fix: open issue sweep and ESP32 v0.8.4 release#1355
ruvnet merged 8 commits into
mainfrom
agent/open-issues-release

Conversation

@ruvnet

@ruvnet ruvnet commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • fixes ESP32 calibration deadlock and canonicalizes wide CSI frames
  • aligns dashboard calibration/activity routes with the Rust server
  • fixes HeartRateExtractor Python phases API and archived FastAPI metric blocking
  • accepts WPA/WPA2 mixed routers and documents compact-board thermal risk
  • restores firmware CI with a 1100 KiB soft budget and 1152 KiB hard limit
  • documents the WiFlow JSON versus RVF model-format boundary
  • bumps embedded ESP32 firmware version to 0.8.4

Validation

  • cargo test -p wifi-densepose-sensing-server --no-default-features field_bridge: pass
  • cargo test -p wifi-densepose-signal --no-default-features ruvsense::field_model: 22 passed
  • FastAPI concurrency regression: 1 passed
  • ESP-IDF v5.4 ESP32-S3 build: pass, 1,126,624 bytes
  • flashed ESP32-S3 QFN56 rev 0.2, 8 MB flash, 2 MB PSRAM on COM8
  • booted app version 0.8.4, joined Wi-Fi, streamed CSI at 15-29 fps, 600+ callbacks observed

Issues

Addresses #1346 #1336 #1333 #1322 #1289 #1225 #1177. Includes already-landed validation context for #1348 #1345 #1248.

mvanhorn and others added 8 commits July 18, 2026 17:26
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…d thermal risk

Lower the STA auth threshold from WPA2_PSK to WPA_PSK so routers running
WPA/WPA2-mixed compatibility mode aren't rejected with
WIFI_REASON_NO_AP_FOUND_IN_AUTHMODE_THRESHOLD (reason=211), and log the
disconnect reason/rssi instead of retrying blind. Also document the thermal
risk of running this firmware's continuous-radio, tier-2 DSP pipeline on
coin-sized clone boards (ESP32-S3-Zero, SuperMini) with minimal PCB copper
and budget regulators, after a field report of three such boards failing to
power on following a normal session.

Co-Authored-By: claude-flow <ruv@ruv.net>
POST /api/v1/calibration/start created the FieldModel in Uncalibrated, but
field_bridge::maybe_feed_calibration only fed frames while already Collecting
— and the only thing that sets Collecting is feed_calibration on its first
fed frame. The two gates deadlocked: no first frame was ever fed, so
calibration_frame_count stayed 0 and status never left Uncalibrated. Observed
live on a streaming ESP32 node as {"status":"Uncalibrated","frame_count":0}
that never advanced.

- field_bridge::maybe_feed_calibration: feed while Uncalibrated | Collecting
  so the first frame flips the model to Collecting and the count advances.
- calibration_stop: return structured {success:false, frame_count,
  frames_needed} instead of an opaque 500 when finalized with too few frames.
- FieldModel::min_calibration_frames() accessor for the guard above.
- Regression test: maybe_feed_calibration_advances_uncalibrated_to_collecting.

Presence/motion/vitals were unaffected (separate auto rolling baseline).

Co-Authored-By: claude-flow <ruv@ruv.net>
…(real HT40 fix)

Follow-up to the calibration deadlock fix. With the status gate unstuck,
maybe_feed_calibration reached feed_calibration, but a real ESP32 HT40 node
streams 128-wide amplitude frames while the single-link FieldModel is the
canonical 56-tone grid. LinkStats::update returned DimensionMismatch,
feed_calibration bubbled it, and maybe_feed_calibration swallowed it at debug
level — so frame_count stayed pinned at 0 on live hardware (presence/vitals,
which read the global history, were unaffected).

Resample each frame onto the model's canonical 56-tone grid via
HardwareNormalizer::resample_to_canonical before feeding — the same length-only
canonicalization the multistatic fusion path uses (#1170).

Pinned by maybe_feed_calibration_resamples_wide_frames_and_accumulates
(128-wide -> Collecting + count 1). sensing-server bin: 173 passed, 0 failed.

Co-Authored-By: claude-flow <ruv@ruv.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants