RuView v0.9.5 Presence Evidence Beta 1
This beta adds the tools to test a presence model against independent labels, and reports what they found on real hardware: the existing per-node classifier is effectively always on for the link tested, and a small fitted head on windowed features is not.
Every figure below is MEASURED on one ESP32-C6 in one room over one afternoon. Treat them as a first result, not a specification.
What was measured (ADR-426)
Labels: "occupied" means keyboard or mouse input in the last three seconds; "empty" means a 31-minute stretch the operator declared by leaving the room.
| Model, scored on held-out sessions | False positives, empty room | Sensitivity, occupied |
|---|---|---|
| Existing per-node classifier | 99.6 % | 93.7 % |
ruv-FANN head on level features (/1)
| 2.6 % | 87.2 %, falling to 71.9 % an hour later |
ruv-FANN head on windowed features (/2)
| 0.0 % (0 of 3,069) | 91.2 %, and 100 % on two later sessions |
Linear control on windowed features (/2)
| 0.0 % | 91.3 %, and 100 % on the later session |
- The existing classifier's defect is filed as #2522. It reported present on 6,093 of 6,104 empty-room observations. This release does not change it.
- Windowed features are what fixed the drift.
ruview.node-features/2measures how much each reading varied over 30 seconds instead of its level. The variability of signal strength alone separated occupied from empty in every session. - ruv-FANN's extra capacity is not needed once the features are good. On windowed features the linear control matches the 73-parameter candidate.
- Fitting is platform-specific. The same fit is bit-identical on three Linux targets and different on Windows, because
f32::expdiffers (ruv-FANN #210). One exported head scores identically on all four, so heads are shipped as files and never refitted per machine.
What is new
- Server shadow, default off. Build with
--features fann-shadow.RUVIEW_FANN_SHADOW_LOGcaptures per-node features;RUVIEW_FANN_SHADOW_HEADscores an exported head beside the live decision;GET /api/v1/shadow/fannreports counters and disagreement. The head has no path to a published result. A default build contains no ruv-FANN. - Reference labels without extra hardware.
scripts/input_activity_logger.pyrecords keyboard and mouse idle time (nothing else) as an occupied-only reference.scripts/build_replay_rows.pyturns a capture into replay rows labelled by a radar, by input activity, by an operator's declaration, or by the server itself, and every report states which. - Crate tools in
ruview-fann-head:ruview-fann-fit(export a head from Train rows,--balanceto even out the classes),ruview-fann-window(re-encode a capture with windowed features),ruview-fann-replay --learning-curve, andruview-fann-repro(cross-machine reproducibility probe).
Boundary
- One node, one room, one afternoon. No second room, no other day, no ESP32-S3.
- "Occupied" was seated and typing. A motionless person may look like an empty room to a variability measure; that session has not been recorded. Neither has activity in an adjacent room.
- "Empty" is the operator's declaration. No radar confirmed it.
- The two empty halves used for Train and HeldOut are one continuous recording split in time.
- The replay gates return "not judged": two of their four conditions were never recorded.
- The shadow is a diagnostic. Nothing in this release changes what RuView publishes.
- ESP32 statements stay limited to presence, coarse motion and breathing-band vitals. Pose and multi-person identification are not claimed.
Validate
cd v2
cargo test -p ruview-fann-head
cargo test -p wifi-densepose-sensing-server --features fann-shadow --bin sensing-server -- adr426
cargo run --release -p ruview-fann-head --bin ruview-fann-repro
cd ../scripts && python -m unittest tests/test_build_replay_rows.py tests/test_input_activity_logger.py