UX-08 phase 2b: short, plain status rows and page banners
Every Commissioning row and every page banner is now worded in app/messages.py (row_*, banner_*): one sentence of at most 15 words, a red row up to three sentences so a latch still says how it clears, banners at most 12 words. No row names a Home Assistant entity: sensors by their setting, solar sources by their place in the list. Reason codes and limits stay on the log line and event list; rows keep the numbers a reader acts on. UX-07 item 1: ClampWatchdog counts over-rating and integrator-bound engagements separately, and after an episode each count shows under its own alarm's title instead of both under "output clamp". No row colour, visibility or banner order changed. Rows carry an "id" so the tests pin meaning rather than wording. The row and banner kinds leave the allowlist (200 -> 168, cap equal). DOCS.md gains "Status page"; choices are in DECISIONS/UX-08-short-notifications.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LyR88rXETvwhTgx6yHE39p
This commit is contained in:
@@ -930,14 +930,18 @@ check("...but the banner does NOT go on saying 'Running - holding grid at "
|
||||
"zero'. That sentence is a claim the site cannot make while a unit is "
|
||||
"absent, and 'the page reads healthy while the fault runs' is the shape "
|
||||
"this whole card exists to remove. It names the unit and stays a WARNING",
|
||||
_pay["level"] == "warn" and "NOT DELIVERING" in _pay["banner"]
|
||||
_pay["level"] == "warn" and "is not delivering" in _pay["banner"]
|
||||
and "inverter-b" in _pay["banner"]
|
||||
and "holding grid at zero" not in _pay["banner"])
|
||||
print(f" banner: {_pay['level']!r} / {_pay['banner']!r}")
|
||||
_row = [r for r in _cw.checks() if "NOT DELIVERING" in r["text"]]
|
||||
_row = [r for r in _cw.checks()
|
||||
if r.get("id") == "delivery" and "not delivering" in r["text"]]
|
||||
check("the status page carries it as a CAUTION, not a failure: the site is "
|
||||
"still running and short, which a red cross would misdescribe",
|
||||
len(_row) == 1 and _row[0]["ok"] is False and _row[0]["warn"] is True)
|
||||
len(_row) == 1 and _row[0]["ok"] is False and _row[0]["warn"] is True
|
||||
and "inverter-b" in _row[0]["text"])
|
||||
check("...and the row says how it clears: a stop and start of control",
|
||||
bool(_row) and "stopping and starting control" in _row[0]["text"])
|
||||
|
||||
|
||||
# ===========================================================================
|
||||
@@ -1173,10 +1177,11 @@ check("...and no store key was written, so a one-inverter install's state file "
|
||||
"is byte-identical to what it was before this card",
|
||||
unit_key(_only.name, "delivery_tripped") not in _st1.data
|
||||
and unit_key(_only.name, "delivery_reason") not in _st1.data)
|
||||
_n1row = [r for r in _c1.checks() if "delivery watchdog" in r["text"]]
|
||||
_n1row = [r for r in _c1.checks() if r.get("id") == "delivery"]
|
||||
check("...and the status page says n/a rather than 'armed', which would be a "
|
||||
"claim to be watching something that cannot happen",
|
||||
len(_n1row) == 1 and _n1row[0]["ok"] and "n/a at one inverter" in _n1row[0]["text"])
|
||||
len(_n1row) == 1 and _n1row[0]["ok"]
|
||||
and "not needed with one inverter" in _n1row[0]["text"])
|
||||
check("...no persistent notification of this kind was raised either",
|
||||
not [c for c in _h1.calls
|
||||
if "not_delivering" in str(c[2].get("notification_id", ""))])
|
||||
|
||||
Reference in New Issue
Block a user