ruview @ c6-fleet-reliability-2026-09-04
integrity
- size
- 59.9 MiB
- downloaded
- last checked
- detected
- raw version: universal archives only
release notes
RuView fleet reliability & honesty update — 2026-09-04
Eight community-contributed fixes landed today, focused on three real problems reported from live multi-node ESP32-C6/S3 deployments: sensing accuracy silently degrading under real timing conditions, the UI fabricating data when it shouldn't, and firmware giving up on the network too early. Every fix below started from a reproduced, real bug — not a hypothetical.
What actually changes for a running fleet
Motion and presence detection get materially more accurate. The smoothing and debounce logic that decides "is someone here, are they moving" was tuned for an assumed 10 frames/sec — but C6 boards actually run ~48-50 FPS. That mismatch meant the system's memory of recent history was silently 5x shorter than intended, making it twitchier and less stable than designed. Detection windows now scale to each board's measured rate instead of a guessed constant. Room-level classification (the "consensus" reading, not just any one sensor's) also gets its own stability check for the first time — previously, three sensors sitting right at a decision boundary could flip the room's status every single cycle, even while every individual sensor's own reading looked stable.
A whole class of HE20 CSI data was being silently thrown away. ESP32-C6/C5 boards produce twice as much channel data (256 subcarriers) as the older buffer size (128) was built for — the extra half was quietly dropped with no warning, no error, no counter. It's fixed for the newer chips now, at the cost of a little extra RAM.
Node position labels can now be trusted. Every node's on-screen/API position had been hardcoded to the same placeholder regardless of actual configuration. Now wired through correctly — including a fix for fleets with non-sequential node IDs (11, 12, 13 instead of 0, 1, 2), which is how real multi-node setups are actually numbered.
The dashboard stops lying when it loses connection. If the sensing server's connection dropped, the UI used to quietly fall back to a built-in simulator and display synthetic data that looked exactly like the real thing — flickering between "someone's here" and "no one's here" in a way that looked like a sensing fault, not a network fault. It now shows an explicit "NO DATA — SERVER UNREACHABLE" banner and keeps trying to reconnect, instead of making something up. This closes a real violation of RuView's own rule that sensing output must never be presented as more certain than it actually is.
Firmware retries the network forever instead of giving up. A real fleet outage lasted 7.5 hours because the firmware capped WiFi reconnection at a fixed number of attempts, then stopped trying. It now retries indefinitely with exponential backoff, plus a new watchdog that reboots a node only if it can no longer even attempt to send data locally (not if the server itself is unreachable — a dead server shouldn't reboot a healthy fleet).
New thermal awareness. Nodes now monitor their own temperature and can throttle radio power before overheating causes silent, hard-to-diagnose signal degradation (a hot node's reduced transmit power looks identical to "something moved" or "obstruction appeared" without this).
One dead radio, disabled. The C6's secondary 802.15.4 radio was running — and consuming coexistence overhead — for a wireless stack the firmware never actually uses for anything. Turned off.
Calibration can no longer finish early by accident. Empty-room calibration was gated on a frame count meant to represent "10 minutes of baseline data" — but every node in a fleet contributes to the same counter, so a 3-node fleet was completing calibration in about 1/3 the intended time, with a shorter, less representative baseline than intended. Now gated on wall-clock duration as well.
What this doesn't include
Two known, still-open issues were surfaced during review and are not fixed by this batch:
- A bound calibration session can silently produce zero presence evidence on any API endpoint (root cause not yet found).
- Firmware fixes like these don't reach real users until a separate, pre-existing release-publishing gap is closed — CI has been building and testing C6 firmware every release without actually publishing it.
Every change here was independently reviewed against the underlying code (not just the PR description) before merging, including two real merge-order conflicts caught and safely sequenced rather than merged blind.
Merged pull requests
| PR | Title | Area |
|---|---|---|
| #1791 | fix(sensing-server): wire --node-positions into live NodeInfo output |
server |
| #1792 | fix(firmware): stop truncating HE20 CSI to half its subcarriers on C6/C5 | firmware |
| #1793 | fix(sensing-server): scale smoothing to the measured CSI rate, and debounce the room | server |
| #1794 | fix(ui): never present invented data as measured | ui |
| #1795 | fix(firmware): retry WiFi forever, and add an uplink watchdog | firmware |
| #1796 | perf(firmware): stop the C6 sharing its radio with a stack that cannot receive | firmware |
| #1797 | feat(firmware): thermal monitoring, radio throttling and node health | firmware |
| #1800 | fix(calibration): gate finalize on wall-clock duration, expose elapsed_s and frames/s | server |
All eight were independently reviewed against the underlying code before merge — not just the PR description. Two real merge-order conflicts were caught and sequenced correctly rather than merged blind:
- #1791 and #1793 both touched the same lines in
main.rs's live-data JSON builders; #1791 was fixed and merged first, then #1793 was verified against the updatedmainbefore merging. - #1795 is stacked on #1797 (shares
main.c/Kconfig.projbuild); #1797 merged first.
Known open issues (not fixed by this batch)
- #1759 — a finalized/bound calibration session can silently emit no
calibrated_presence_evidenceon any endpoint. - #1757 — C6 firmware is built and tested by CI every release, but never actually published — none of today's firmware fixes reach real devices until this is closed.
- #1764 / #1725 — two distinct, still-open UDP/CSI delivery failure modes on ESP32-S3 hardware.
download
curl -fL -o c6-fleet-reliability-2026-09-04.zip https://ratatoskr.space/pkg/ruview/c6-fleet-reliability-2026-09-04.zip
printf '%s %s\n' '7e565a0a8886ab89dc0b1ada5fb7347e7b7e9ef1a06216ac6e8e4b8342579da7' 'c6-fleet-reliability-2026-09-04.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/c6-fleet-reliability-2026-09-04.zip"
$out = "c6-fleet-reliability-2026-09-04.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "7e565a0a8886ab89dc0b1ada5fb7347e7b7e9ef1a06216ac6e8e4b8342579da7") { throw "sha256 mismatch" }
curl -fL -o c6-fleet-reliability-2026-09-04.tar.gz https://ratatoskr.space/pkg/ruview/c6-fleet-reliability-2026-09-04.tar.gz
printf '%s %s\n' '1c8fb75db799328309a46f7846d92f1aacc2b0415069326e94bc51d505b21027' 'c6-fleet-reliability-2026-09-04.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/c6-fleet-reliability-2026-09-04.tar.gz"
$out = "c6-fleet-reliability-2026-09-04.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1c8fb75db799328309a46f7846d92f1aacc2b0415069326e94bc51d505b21027") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o c6-fleet-reliability-2026-09-04.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/c6-fleet-reliability-2026-09-04.zip
printf '%s %s\n' '7e565a0a8886ab89dc0b1ada5fb7347e7b7e9ef1a06216ac6e8e4b8342579da7' 'c6-fleet-reliability-2026-09-04.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/c6-fleet-reliability-2026-09-04.zip"
$out = "c6-fleet-reliability-2026-09-04.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "7e565a0a8886ab89dc0b1ada5fb7347e7b7e9ef1a06216ac6e8e4b8342579da7") { throw "sha256 mismatch" }
curl -fL -o c6-fleet-reliability-2026-09-04.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/c6-fleet-reliability-2026-09-04.tar.gz
printf '%s %s\n' '1c8fb75db799328309a46f7846d92f1aacc2b0415069326e94bc51d505b21027' 'c6-fleet-reliability-2026-09-04.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/c6-fleet-reliability-2026-09-04.tar.gz"
$out = "c6-fleet-reliability-2026-09-04.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1c8fb75db799328309a46f7846d92f1aacc2b0415069326e94bc51d505b21027") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| c6-fleet-reliability-2026-09-04.zip | zip | 60.1 MiB |
blake3-24 695b08d7b684c627acefccc5bc50b776adc1c85d874bbd1a
sha256 7e565a0a8886ab89dc0b1ada5fb7347e7b7e9ef1a06216ac6e8e4b8342579da7
sha1 910de7286801ab45a06d9adc9e9387ac71cafb63
|
| c6-fleet-reliability-2026-09-04.tar.gz | tar.gz | 57.8 MiB |
blake3-24 0594ba2dd6fa10b84f094cf3faf750c6b11661e01c172a4c
sha256 1c8fb75db799328309a46f7846d92f1aacc2b0415069326e94bc51d505b21027
sha1 56dacecceb4e50374b4066e47359b0afdbf5a09c
|
install
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/c6-fleet-reliability-2026-09-04.tar.gz"],
integrity = "sha256-HI+3XbeZMoMJpG94RtkvGqzCsEFQaTJulLxR1QWyECc=",
strip_prefix = "ruview-c6-fleet-reliability-2026-09-04",
)
.url = "https://ratatoskr.space/pkg/ruview/c6-fleet-reliability-2026-09-04.tar.gz",
install via yggdrasil mesh
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/c6-fleet-reliability-2026-09-04.tar.gz"],
integrity = "sha256-HI+3XbeZMoMJpG94RtkvGqzCsEFQaTJulLxR1QWyECc=",
strip_prefix = "ruview-c6-fleet-reliability-2026-09-04",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/c6-fleet-reliability-2026-09-04.tar.gz",