fix: multistatic canonicalization + csi_fps burst inflation + control-packet starvation (#1170, #1180, #1183) - #1193
Merged
Merged
Conversation
…acket starvation (#1170, #1180, #1183) #1170 — live multistatic bridge fed raw, un-canonicalized per-node CSI (64/128/192 bins) to MultistaticFuser, tripping DimensionMismatch every cycle and silently disabling fusion on mixed HT20/HT40 meshes. Add HardwareNormalizer::resample_to_canonical (resample-only, no z-score) and canonicalize every node frame onto the 56-tone grid before fusion. #1180 — update_csi_fps_ema only rejected dt<=0 or >=1s, so sub-ms UDP-burst arrivals (36us -> ~27kHz) inflated csi_fps_ema 40-840x. Add a 5ms plausibility floor and stop re-anchoring observe_csi_frame_arrival on burst deltas. #1183 — global ENOMEM backoff (CSI flood) starved <=48B/<=1Hz control packets. Add stream_sender_send_priority() bypassing the backoff gate without touching the streak; route feature_state/HEALTH/sync through it. Fix the misleading "HEALTH sent" log that printed even on rv_mesh_send failure. Verified: signal 501, sensing-server 677 tests (0 failed); firmware builds clean. Co-Authored-By: claude-flow <ruv@ruv.net> Claude-Session: https://claude.ai/code/session_01AgpTcBLRJ32hUsKWxDXf36
This was referenced Jun 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes three issues anchored at
7831f294, all verified with tests.#1170 — Multistatic fusion
DimensionMismatchflood (High)The live bridge built a struct named
CanonicalCsiFramefrom raw per-node amplitudes (HT20≈64 / HT40≈128/192 bins) without resampling, soMultistaticFuser::fusetrippedDimensionMismatchevery cycle, silently fell back to per-node sum/dedup, and spuntotal_engine_errorsunbounded on any mixed mesh.hardware_norm.rs: addHardwareNormalizer::resample_to_canonical(resample-only, no z-score — preserves the amplitude scale the person-score relies on).multistatic_bridge.rs: canonicalize every node onto the 56-tone grid before fusion.#1180 —
csi_fps_emainflated 40–840× (Medium)update_csi_fps_emaonly rejecteddt ≤ 0/≥ 1 s, so 36 µs UDP-burst deltas (~27 kHz) polluted the EMA.main.rs: addMIN_PLAUSIBLE_CSI_DT_SEC = 0.005floor;observe_csi_frame_arrivalkeeps its anchor across sub-floor bursts so the next real gap measures true cadence.#1183 —
stream_senderENOMEM backoff starves control packets (High)The global backoff (CSI flood at weak RSSI) suppressed the ≤48 B/≤1 Hz
feature_state/HEALTH/sync packets too.stream_sender.{c,h}: addstream_sender_send_priority()(bypasses the gate, quiet on ENOMEM, never touches the streak); routefeature_state/HEALTH/anomaly/sync through it."HEALTH sent"log (nowsent/FAILEDfrom the real return).Verification
wifi-densepose-signal: 501 passed, 0 failedwifi-densepose-sensing-server: 677 passed, 0 failed (4 new tests + retargetedengine_bridge::observe_cycle_counts_engine_errors→TimestampMismatch, since canonicalization removed the old dimension error)🤖 Generated with claude-flow