Bootstrap DD3 Rust port workspace with host-first compatibility tests

This commit is contained in:
2026-02-21 00:59:03 +01:00
parent d3f9a2e62d
commit d0212f4e38
63 changed files with 3914 additions and 0 deletions

36
docs/INTEROP_CHECKLIST.md Normal file
View File

@@ -0,0 +1,36 @@
# Interop Checklist
## A) Rust Receiver <-> C++ Sender
1. Run C++ sender on `lora-refactor` baseline and Rust receiver host simulation harness.
2. Verify receiver accepts sender short-id and sender-id mapping.
3. Verify ACK payload bytes:
- `[flags:1][batch_id_be:2][epoch_utc_be:4]`
4. Verify duplicate batch handling:
- ACK still sent
- duplicate counters increment
- publish/log suppressed
5. Compare MQTT state and fault payload keys/semantics against baseline.
6. Compare CSV line/header output for shared sample windows.
## B) Rust Sender <-> C++ Receiver
1. Run Rust sender with sync-request startup behavior.
2. Confirm C++ receiver decodes payload schema v3 and sparse mask reconstruction.
3. Confirm ACK mismatch handling does not clear inflight batch.
4. Confirm retry and catch-up behavior under injected packet loss.
## C) Contract Comparison
1. Home Assistant discovery topics and payload fields:
- topic: `homeassistant/sensor/<device_id>/<key>/config`
- `unique_id`, `device.identifiers`, `device.name`, `device.model`, `device.manufacturer`
2. MQTT state payload:
- required keys present
- legacy keys absent
3. CSV output:
- exact header order
- stable numeric formatting
## D) Port Validation Items
- Sender unsynced boot sends only sync-requests.
- ACK bootstrap gate enforced (`time_valid=1` and epoch >= `MIN_ACCEPTED_EPOCH_UTC`).
- Frame/CRC/ACK/payload golden fixtures all pass.
- All protocol encode/decode paths covered by fixture-backed tests.