Version 2.0.0 validation
Validation date: 2026-10-20. Build/runtime versions are pinned in
platformio.ini. This records measured results, separately from intended support.
Builds
| PlatformIO environment |
Result |
App bytes |
xiao_s3 |
PASS |
1,967,408 |
xiao_c3 |
PASS |
2,100,528 |
xiao_c6 |
PASS |
2,260,720 |
xiao_c5 |
PASS |
2,313,552 |
esp32 |
PASS |
2,053,424 |
esp32_s2 |
PASS |
1,735,264 |
All six applications fit the 3 MB factory partition. The S2 build excludes
NimBLE because that chip has no Bluetooth controller.
Physical hardware
Two XIAO ESP32-S3 boards with 8 MB flash and 8 MB PSRAM were programmed and
verified by esptool. One had the plugged-in Seeed matrix and the other a soldered
matrix. The owner confirmed that both matrices light up. Firmware does not
require PSRAM allocation.
Both devices passed the live HTTP integration test:
- Eight nightlight modes and six alert patterns accepted and read back.
- Alert tests start and expire at the configured duration.
- Invalid settings leave the current configuration unchanged.
- Missing/wrong write tokens are rejected.
- 120 successive status requests plus contact-list requests completed.
- The original settings were restored and the delayed save completed.
- A distinct mode/cycle setting survived a USB-initiated chip reset on each
board; defaults were restored afterward.
Both boards also remained responsive at white/255 brightness with the default
500 mA estimated LED budget, then returned to their original settings.
The offline UI was also loaded directly from an S3 in Edge. All four tabs
worked without JavaScript errors. The screenshot in screenshots/live-s3.png
is from the physical device.
One device dropped queued radio observations during HTTP stress and image
transfer; the other did not during its integration run. The drop counter is
visible in System. Bounded receive storage protects responsiveness but does
not promise lossless RF capture.
Runtime soak
Both boards completed a 20-minute serial capture, with 40 health records
each, no panic or brownout messages and no unexpected uptime reset. Free heap
remained approximately 138–139 KB after HTTP activity.
| Unit |
First / last uptime |
First / last free heap |
Final queue drops |
| S3 A |
30 / 1,200 s |
138,032 / 138,020 bytes |
443 (web-transfer stress) |
| S3 B |
60 / 1,230 s |
139,008 / 139,008 bytes |
0 |
See validation-results.json for the aggregate results. Raw radio observations
and original device backups remain private.
Automated checks
python tools/test_native.py checks isolated disconnects, retries, a single
burst, sustained bursts, BSSID isolation, protected/truncated frames, clock
wrap, selected BLE signatures and 100,000 fuzz inputs.
node tests/ui_test.cjs checks desktop and mobile layouts, settings submission,
alert configuration, untrusted RF-name escaping, and JavaScript errors.
python tests/release_test.py compares every packaged bootloader, partition
table and application byte against its build, validates chip-family manifests,
flash limits and SHA-256 checksums. C5 uses its 0x2000 bootloader location.
All six public downloads were fetched and matched against those checksums.
node tests/flasher_test.cjs URL checks the live installer module, all six
manifest/download selections, desktop/mobile layout and JavaScript errors.
The live Valleytech hub link, project page, embedded installer, four public
guides and source ZIP also passed browser checks. Browser serial installation
was not automated; physical programming used esptool with verified writes.
Limits
C3, C6, C5, wired ESP32 and S2 require physical validation on those boards.
S2 has no BLE. C5 monitoring currently uses 2.4 GHz only. No buzzer was attached
for acoustic testing. No live deauthentication attack was generated and no
known Axon camera, Flipper or Pineapple was available for controlled field
validation; parser fixtures and ambient reception are not substitutes for that.
A successful soak does not guarantee indefinite uptime in every RF environment.
Power quality, USB cables, wiring, LED current and board variants still matter.