UX-11 review: restored stops log their figures to events, the quiet-meter WARNING is rate-limited
checks / unit (pull_request) Successful in 9m7s
infra-pin / fresh (pull_request) Successful in 1s

- After a restart, each restored stop (direction per inverter and site,
  delivery, circulation) also writes its saved reason to the action log.
  log_level defaults to info and events starts empty, so the DEBUG
  evidence alone left the figures only in state.json.
- A flapping meter (ha_signed under a flat load, 42-97 s between changes)
  logs at most one WARNING/INFO pair per 10 minutes, with the episodes in
  between at DEBUG.
- LONG_LINE_OK refuses any key whose text is a safety reason.
- test_watchdog keeps the byte pin beside the meaning pin, since the text
  did not change.
- DOCS says the DEBUG line needs log_level debug.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-27 14:21:05 +02:00
co-authored by Claude Opus 5.5
parent c628099e69
commit 3c298af3d8
5 changed files with 82 additions and 13 deletions
+6 -3
View File
@@ -3096,8 +3096,10 @@ stop control on the add-on page.
This part is for installers. The texts live in `app/messages.py` and follow
`STYLE.md`. Every notification keeps a fixed `notification_id`, so a repeat
replaces the card. The ERROR or WARNING line of the add-on log names the
reason code. The full figures are on the DEBUG line logged right after it
(log level `debug`) and in `events` in the `status` JSON.
reason code. The full figures are in `events` in the `status` JSON, also for a
stop restored after a restart, and on the DEBUG line logged right after it.
That DEBUG line only shows with “Log level” (log_level) set to `debug`; the
default `info` hides it.
| Title | Severity | id | Card |
|---|---|---|---|
@@ -3254,7 +3256,8 @@ reason code, and its full figures are on the DEBUG line right after it and in
with both possible causes, is on the DEBUG line after it.
- **Meter: no reading for …** (red): the add-on logs one WARNING when the
meter goes quiet, "No meter reading for …", and an INFO line when readings
return. Past `stale_input_s` the **Why** line names the missing reading.
return, at most once every 10 minutes. Past `stale_input_s` the **Why**
line names the missing reading.
- The table at the top: **Why** is `messages.why()`, the arbiter's answer in
words (`Resolution.explain()` stays on the log). **Tariff**, **Price
history**, **Arbitrage** and **Shadow mode** keep every figure they had