diff --git a/ROADMAP.md b/ROADMAP.md index 5e0b06d..5abbfb3 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -101,6 +101,18 @@ external interfaces. See `docs/architecture/structure.canvas` → *Backend – M that gets updated costs one retry rather than a reconfiguration. The payload is identical across both, so only the transport moved. Verified against one unit of each generation, read and command +- [x] The aircon rig covers both units and both firmware generations: one + `wfrac` node each in `aircon_control`, polling as well as commanding, so + the panel shows what a unit answers next to what was asked of it. Three + things had to be fixed before a panel could actually drive one. The + seeded `commands` catch is off, which is the usual reason a fresh panel + looks dead — `AIRCON_COMMANDS=1` arms it at seed time. A unit that is off + names no mode and reports `unknown`, and a flow redelivers every bound + port on each run, so rejecting it made an idle unit impossible to start; + it now travels through untouched. And the old firmware serves one + connection at a time, answering an overlapping request with 501 — the + connector serialises per adapter and retries a busy one, which it must, + because other clients on the network are outside that lock - [x] Node lifecycle as a protocol (`start`/`stop`/`report_health` on `Node`), replacing the controller's per-type isinstance chains — the same hooks a connector implements, validated on the built-in nodes first