docs(da07): record the post-Refresh STATUS lag as accepted firmware behavior
The ~H operational-statistics frame is the only source of device status and is not solicitable; it arrives once per second only after the full refresh sequence drains into SVC_POLL. Reviewed and accepted as-is; candidate perception-only mitigations noted in the entry instead of BACKLOG.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -39,6 +39,38 @@ Tag-name write and two device toggles through the new write queue.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-12 — Devices-tab STATUS lags ~10 s after Refresh (known behavior, not a bug)
|
||||
|
||||
**Symptom:** after a Refresh on real hardware, the Devices tab renders its rows
|
||||
quickly but the STATUS column stays "—" for roughly ten seconds before filling in.
|
||||
|
||||
**Root cause — station firmware design, nothing tool-side:** STATUS has exactly one
|
||||
source, the `~H` operational-statistics frame (one status nibble per device slot,
|
||||
`controller._apply_status`). Per the ICD (§4.3/§5.H) the firmware only sends `~H`
|
||||
after the *entire* refresh sequence (config → settings → devices → averages →
|
||||
current → names → device details) has drained and it settles into steady-state
|
||||
`SVC_POLL`, where `~H` repeats once per second. **`~H` is not solicitable** — there
|
||||
is no command that requests one early. Device rows appear early (the `~D` frames),
|
||||
then the station spends the rest of the load streaming at 9600 baud, one frame per
|
||||
ACK; only then does the first `~H` arrive. Both real captures confirm the refresh
|
||||
stream itself contains no `~H`. Our ACKs are immediate (`_send_link`, bypassing the
|
||||
write queue), so the pace is entirely the station's. The legacy VB6 behaved
|
||||
identically but hid it behind its modal progress dialog, which only closed on the
|
||||
first `~H` (`Case "H" … CloseProgress`, `Main.frm`).
|
||||
|
||||
**Status: accepted as-is (2026-06-12).** Deliberately **not** in BACKLOG.md — Andy
|
||||
reviewed and chose to leave it alone for now. If it ever bothers users enough to
|
||||
revisit, the candidate mitigations (perception-only; the wire-level wait cannot be
|
||||
shortened) were:
|
||||
|
||||
1. Carry last-known per-slot statuses across `controller.refresh()` instead of
|
||||
blanking them, rendered dimmed ("off" status role) until the first `~H`
|
||||
reconfirms — instant repopulate, but shows stale data for the gap, which is why
|
||||
it should never render full-strength.
|
||||
2. Cosmetic only: a clearer "pending" placeholder than "—" while loading.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-12 — Burst writes silently dropped by the station ("only the second toggle stuck")
|
||||
|
||||
**Symptom:** toggle device A's Active off, wait ~2 s, toggle device B's off, then
|
||||
|
||||
Reference in New Issue
Block a user