Context
The repo currently has no test infrastructure at all. The dynamic-config work (hello → config → telemetry) has stabilized enough that its logic is worth pinning down — especially since the config parser is where the #6 validation fix and the #11 schema decisions will land, and a payload-format bug (invalid hello JSON) already slipped through once.
Plan
Three tiers, cheapest and highest-value first:
Deliberately out of scope: Ethernet/W5500 bring-up (manual hardware checklist in #3), PubSubClient internals (library code), RoleManager/RelayControl (unused until #12).
Order & rationale
Tier 1 first — it forces the #6 fix and the #11 role/MAC decisions while writing it. Tier 2 is a small testability refactor with a proven bug class behind it. Tier 3 doubles as the executable contract the future Radxa provisioning service must satisfy.
Relates to #3, #6, #11.
Context
The repo currently has no test infrastructure at all. The dynamic-config work (hello → config → telemetry) has stabilized enough that its logic is worth pinning down — especially since the config parser is where the #6 validation fix and the #11 schema decisions will land, and a payload-format bug (invalid hello JSON) already slipped through once.
Plan
Three tiers, cheapest and highest-value first:
RuntimeConfigparsing/validation (on-device,pio test)main.cpp/TelemetrySenderand add parse-it-back format testsDeliberately out of scope: Ethernet/W5500 bring-up (manual hardware checklist in #3), PubSubClient internals (library code), RoleManager/RelayControl (unused until #12).
Order & rationale
Tier 1 first — it forces the #6 fix and the #11 role/MAC decisions while writing it. Tier 2 is a small testability refactor with a proven bug class behind it. Tier 3 doubles as the executable contract the future Radxa provisioning service must satisfy.
Relates to #3, #6, #11.