# 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///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.