Back to Ruview

ADR-110 review guide

docs/ADR-110-REVIEW-GUIDE.md

1.99.0-pip4.7 KB
Original Source

ADR-110 review guide

This is the one-pager for reviewers of the adr-110-esp32c6 branch / draft PR. The canonical record is docs/WITNESS-LOG-110.md; this guide is just a faster on-ramp.

What this branch ships

A dual-target build for firmware/esp32-csi-node: same source tree compiles for esp32s3 (existing production) and esp32c6 (new research target with Wi-Fi 6 / 802.15.4 / TWT / LP-core). Every C6-only module is #ifdef CONFIG_IDF_TARGET_ESP32C6 gated, so the S3 build path is byte-identical to before.

Five-minute reviewer tour

  1. Read the ADR: docs/adr/ADR-110-esp32-c6-firmware-extension.md — design, phases, trade-offs.
  2. Read the witness: docs/WITNESS-LOG-110.md — 4 sections (A = empirically verified, B = architectural-but-not-measured, C = bugs fixed, D = bugs found but not yet fixed, D-workaround = ESP-NOW pivot).
  3. Skim the new firmware modules: firmware/esp32-csi-node/main/c6_{twt,timesync,lp_core,sync_espnow}.{h,c}.
  4. Skim the new host decoders + tests:
    • Rust: v2/crates/wifi-densepose-hardware/src/{csi_frame,esp32_parser}.rs (search for PpduType, Adr018Flags, adr110_* test names)
    • Python: archive/v1/src/hardware/csi_extractor.py + archive/v1/tests/unit/test_esp32_binary_parser.py (search for TestAdr110ByteEncoding)
  5. Glance at CI: firmware-ci.yml c6-4mb matrix row runs the C6 build AND the host unit tests on Ubuntu — both green throughout this branch.

Empirical scorecard (what's actually measured)

DimensionStatus
C6 build + boot + dual-target✅ verified on 3 boards (COM6/COM9/COM12), CI matrix green, S3 regression green
HE-LTF wire format (ADR-018 byte 18-19)✅ verified end-to-end across firmware / Rust / Python (17 unit tests)
HE-LTF live capture⏸ blocked — need 11ax AP (only 11n AP on bench)
TWT graceful NACK✅ verified live — c6_twt: iTWT setup failed: ESP_ERR_INVALID_ARG captured + handled
TWT cadence determinism⏸ blocked — same 11ax AP gap
ESP-NOW transport TX + stability✅ verified — 120 s + 300 s soaks, 4102 cumulative transmits, 0 failures
ESP-NOW cross-board RX⏸ blocked — 3 of 4 boards dropped USB enumeration mid-experiment
Raw 802.15.4 cross-node sync❌ broken — IDF v5.4 driver bug, 5 hypotheses tested + rejected; ESP-NOW workaround in place
5 µA hibernation⏸ blocked — datasheet number, need INA / Joulescope to measure
Witness bundle regenerable + clean✅ 6/7 PASS (1 fail is pre-existing Python proof env issue unrelated to ADR-110), all hashes recorded, secret-redacted

Honest verdict

Protocol layer + transport substrate are bullet-proofed. None of the four headline SOTA dimensions is empirically measured — each is blocked on hardware the bench doesn't have. Each blocker is documented in WITNESS-LOG-110.md §B with the exact instrument needed to unblock it. This branch is the foundation to build measurement on, not the measurement itself.

The five concrete bugs found and fixed during the work (MAC/EUI double-FFFE, dual wifi_pkt_rx_ctrl_t struct variants, LED GPIO 38 on C6, TWT INVALID_ARG propagation, witness bundle secret leak) are independently real and useful regardless of how the SOTA story lands.

Security note for the operator (not the reviewer)

The witness bundle's Python proof step was leaking .env contents into the bundled log via Pydantic validation error dumps. Bundle was nuked before push, and scripts/redact-secrets.py filter was added (commit f8a2e3695). The previously-exposed Docker Hub + PI-cluster tokens should be rotated — they appeared in local session logs even though they never reached origin.

Commits on this branch (chronological)

#SHA prefixWhat
1f23e34eInitial ADR-110 firmware + ADR + tests + docs + witness scaffolding
26652384TWT INVALID_ARG graceful + diagnostic counters
34c39e28PAN-match + 4-experiment D1 record
4f8a2e36SECURITY: witness bundle secret redaction
588be283ESP-NOW transport (D1 workaround)
63959fabRust host decoder + 6 unit tests
78eaa92cPython host decoder + 5 unit tests
8b808a63120 s ESP-NOW soak witness
989972c0CHANGELOG expanded
10fc75a8aFuzz harness extended for byte 18-19
119de34baADR-110 indexed in docs/adr/README.md
12553b07dREADME C6 row tightened (claim → wire-format-ready)
13e255b7dfirmware/README acknowledges S3+C6
149a46fc8300 s ESP-NOW soak witness (2.5× sample)
15(this commit)This review guide