2.1.0 development validation
Historical candidate: 2.1.0-test3, tested October 23–24, 2026 on one verified
XIAO ESP32-S3 with the XIAO 60-pixel matrix. The results and remaining work below
describe that candidate at the time of testing. See release validation
for the subsequent 2.1.0 builds and checks.
Observed failures and fixes
The first USB recording contained 13,937 received disconnect frames, no
disconnect queue drops, and zero confirmed floods. Strong short bursts were
visible, but requiring three uninterrupted seconds for one AP and clearing
state at every hop prevented confirmation. The new implementation retains
completed strong evidence for the same AP across channel changes for 30 seconds.
Isolated bursts and evidence from different APs cannot complete that history.
New live deauth validation is still pending; host regression tests pass.
The user then confirmed that their BLE "spam all" traffic was running. All four
pairing formats were received, but the existing address-churn requirement did
not confirm them. A new, separate identity-change rule detected a source cycling
through at least eight advertised identities. Qualifying six-second windows in
the live log included 56–65 advertisements and 16–19 identity changes.
After the test3 update, the device activated the BLE alert and the user confirmed
seeing blue flashes. USB telemetry recorded repeated alert sequences separated
by the cooldown. BLE queue drops remained zero. The sequence duration is four
seconds, followed by at least 30 seconds of cooldown; a new qualifying window
must arrive before another sequence can start. These were live RF detections,
not manual output tests. Confirmation counters count qualifying windows, not
distinct transmitters or attacks.
After the traffic stopped, the recording showed over 60 seconds without new
pairing observations or confirmations. The light returned to the nightlight,
the cooldown reached zero without retriggering, and heap remained stable at
118,592 bytes during this interval.
Firmware and tests
- S3 build: PASS; 77,108 bytes static RAM, 1,198,854 bytes reported program usage.
- Flashed application: 1,218,368 bytes; SHA-256
3f3eb2758826f8070b58be2e24af35808b0ff87f9f228268610271eb2b686d44.
- Full original flash backup retained privately. Only the application at
0x10000 was replaced; the partition table matched the backup. esptool verified
the written hash. Existing nightlight preferences were retained.
- First-upgrade policy enables survey, deauth/BLE alerts and persistent Axon
lights. Deauth defaults to ten red flashes; BLE to ten blue; both use 30-second
cooldowns after the sequence. Other opt-in device families stay unchanged.
- Native parser/detector tests pass, including ordinary departures, retries,
isolated bursts, per-AP separation, sampled bursts, stable BLE crowds, changing
pairing identities, ordinary battery updates, clock wrap and 100,000 fuzz inputs.
- The actual
lights.cpp renderer is compiled against host hardware stubs. Tests
verify ten red/blue pulses, independent cooldowns, Axon presence renewal and
expiry, attack priority, resuming Axon lights, silence and bounded manual tests.
- Chromium and WebKit pass at desktop and phone widths, including the new alert
controls, evidence/cooldown display, settings import/export and escaped RF text.
- USB output checks on test2 verified both four-second output routes and return
to the nightlight. These checks alone were not counted as RF validation.
Remaining validation
Live deauth confirmation with the new history remains unverified. Continuous
Axon behavior is host-tested; no physical Axon device was present for this run.
Other hardware variants were not flashed in this session. The early C6 build
attempt failed while resolving framework headers; it is not a verified candidate
build. Do not package mixed candidate and old build outputs or publish the
candidate before validating the intended release profiles.
One radio cannot monitor all Wi-Fi channels at once. Connecting to the device's
AP pauses surveying on the current channel; USB diagnostics avoid that constraint.
The identity-change detector still cannot prove intent or cover every spam mode.
See detection policy for thresholds and limitations.
Reproducing passive diagnostics
python tools/capture_detection.py PORT --seconds 600 --output private/session.jsonl
The script only reads detector status. --survey enables survey temporarily on
older settings; it does not write saved preferences. USB commands are status,
monitor on, monitor off, survey on, survey off, test deauth, and test ble.
The two test commands exercise lights only and bypass the RF classifier.
Recordings, flash backups and build logs remain outside Git in ignored folders.