6.4 KiB
6.4 KiB
RuView · Implementation Checklist
Single source of truth for what's shipped and what's open. Updated
at the end of every session. Pair with
docs/references/espectre-gap-analysis.md
for the technical detail behind each line.
Last sweep: 2026-05-17, branch feat/ota-rssi-mobile, head eec3ca6c.
✅ Done
Server (v2/crates/wifi-densepose-sensing-server)
- ADR-100 PHY gain-lock (AGC + FFT freeze, ESPectre port) — FW
- ADR-101 Raw-amplitude classifier (CV + baseline drop, hysteresis)
- ADR-101 Per-node classification badges in WS payload
- ADR-102 NBVI subcarrier selection (formula α=0.5, top-12)
- ADR-102 NBVI Step 1 quiet-window finder
- ADR-103 Persistent baseline at
data/baseline.json(FULL broadband) - ADR-103 Universal threshold via baseline-CV normalization
- ADR-104 Per-subcarrier drift channel (off-axis presence)
- ADR-104 NBVI Step 3 FP-rate validation (K ∈ {6,8,10,12,16,20})
- ADR-104 Per-sub drift exposed in WS
node_features[].drift_score+ raw.html sparkline per node (commiteec3ca6c) - ADR-104 Baseline staleness watch — warn when on-disk baseline
> 4 h old AND drift consistently fires during
absentperiods (commiteec3ca6c) - ADR-105 Drop all synthetic data from runtime ([signal_field, pose_keypoints, persons, fake confidence — all gated)
- ADR-105
n_aps_used: u8uniform field onenhanced_motion+enhanced_breathing(commit598a4b2f) - ADR-106 Full complex CSI in WS (
amplitude+phases+ meta) - ADR-106 Built-in CSI keepalive (managed
pingper sensor) - ADR-106 Server-side µs
timestamp_us - ADR-107
POST /api/v1/baseline/calibrate+ UI button - ADR-107 Auto-recalibrate on long-quiet periods (30 min default)
- ADR-107
GET /api/v1/baseline(status + cooldown) - ADR-107 Progress bar in raw.html calibrate button
(commit
432753e1) - ADR-112 Multi-AP
signal_fieldviaMultistaticFuser— coverage × activity heatmap, non-zero only with ≥2 nodes + positions; preserves ADR-105 zero-grid otherwise (commitc8ac60f6) - ADR-105 Hide pose canvas in Docker SPA when
model_loaded == false+ "no trained model" overlay (commit2dcb30a6)
Firmware (firmware/esp32-csi-node)
- ADR-100 Gain-lock (300-packet median, MIN_SAFE_AGC=30 safety)
- ADR-106 Sensor µs timestamp in CSI trailer (
rx_ctrl.timestamp) - ADR-108 NVS persistence of gain-lock — reboot ready in ~0.5 s
- ADR-109
POST /ota/recalibrate— clear gain-lock NVS via REST, no USB needed (commitf92807cd) - ADR-109 Track AP MAC in
gl_ap_macNVS — auto-invalidate stale gain-lock on AP swap (commitf92807cd) - (parallel agent) RSSI carry-through via feature_state header fix
- (parallel agent) OTA:
OTA_SIZE_UNKNOWN, httpd stack_size=8192, reset-reason log — all three FW prerequisites for working OTA
Ops / tooling
scripts/ota-deploy.sh— WiFi OTA flash + auto-discovery + verifyscripts/record-baseline.py— headless baseline capture (CLI)data/baseline.jsonv2 schemadocs/references/ota-pipeline.md— verbatim OTA recipe (port 8032)
Documentation
- ADR-100..108 all written, each ≤ 200 lines
docs/references/espectre-techniques.md— Pace technique cataloguedocs/references/espectre-gap-analysis.md— section-by-section gap- Documentation actualization sweep — every Open Items section cross-checked against actual implementation state
⏳ Open, priority-sorted
High value, low effort
- Tailscale-target in NVS — sensor stream keeps working when Mac roams networks. ~30 min provision + reflash. (ADR-100 open) Deferred — Mac is stable on TP-Link, low ROI this session.
High value, medium effort
- 2 000-packet fixed-replay test suite — regression protection over classifier + NBVI. Pace's pattern (1 000 idle + 1 000 motion). ~1 day.
- Phase-domain drift — phase delta vs baseline phase, picks up
sub-mm chest-wall motion for vital signs. Requires phase baseline
in
baseline.json. ~1 h script + ~30 min server. (ADR-104 open)
Bigger, lower urgency (still active)
- Multiple baseline profiles (day/night/season). 2 h. — ADR-113 target this session.
One-time hygiene
- Re-record
data/baseline.jsonvia the new UI calibrate button soper_subcarrier_meanfield is populated and ADR-104 drift channel activates. ~2 min operator time.
Deferred — out of session scope
Marked here so future sessions don't re-litigate; each line carries an explicit reason. Bring them back only if scope changes.
- HA via MQTT — new integration. Excluded by current session brief (no new integrations on current hardware).
- ESPHome native component — same reason as HA/MQTT.
- Web Serial calibration game — explicitly excluded.
- Boot-time NBVI freeze in FW — explicitly excluded.
- Per-channel NVS cache for gain-lock — explicitly excluded; only matters if channel hopping is reactivated, which is also excluded.
- DensePose model train + load — explicitly excluded.
- AETHER contrastive pretrain on live data — explicitly excluded.
- MERIDIAN domain generalization — explicitly excluded.
- Channel hopping (ADR-029) — explicitly excluded.
- Multi-antenna support (
n_antennas> 1) — explicitly excluded. - README.md trim (542 lines) — explicitly excluded.
- CLAUDE.md trim (407 lines) — explicitly excluded.
- Tailscale-target in NVS — Mac stable on TP-Link this session, low ROI. Not blocking.
Reference
| Doc | Purpose |
|---|---|
docs/adr/ |
All ADRs 001-108; 100-108 are this session |
docs/references/espectre-techniques.md |
Pace technique catalogue + RuView adoption |
docs/references/espectre-gap-analysis.md |
Section-by-section gap with priority table |
docs/references/ota-pipeline.md |
OTA recipe — port 8032, three FW prereqs |
To mark an item done: tick the box, add (ADR-XXX, commit-sha) after
the line, move it from the priority section to the top "Done" section.