TEL-14 B1: pin stray caution on the reported case and whitespace normalisation end to end

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BwRLw7eKYj2byVdwB6kbjU
This commit is contained in:
2026-09-25 01:10:13 +02:00
co-authored by Claude Opus 5.5
parent 7559d21eda
commit 93f349a6af
+18 -2
View File
@@ -1127,15 +1127,31 @@ _c_own0, _, _ = run(cycles=1, by_entity={_OWN: [state("13", "W")]},
pv_entity=_OWN)
check("⭐ THE REPORTED CASE: 13 W of night-time standby on a reversed meter is "
"-13 W once flipped, the row says so and marks it - and it raises NO "
"negative caution, because -13 W is standby and not a reversed sign",
"negative caution, because -13 W is standby and not a reversed sign - "
"and NO stray caution, because a lone `pv_entity` is in the roster",
_c_own.pv_w == -13.0
and [r["text"] for r in _row(_c_own, "PV production: -13 W")]
== [f"PV production: -13 W from {_OWN} (reported in W) [sign inverted]"]
and _row(_c_own, "probably reversed") == [])
and _row(_c_own, "probably reversed") == []
and _row(_c_own, "flips nothing") == [])
check("...and WITHOUT the option it is 0.12.0's row, byte for byte",
[r["text"] for r in _row(_c_own0, "PV production:")]
== [f"PV production: 13 W from {_OWN} (reported in W)"])
# Whitespace: the roster entry and the invert entry differ only by padding. Both
# sides must normalise the same way, or the read path leaves the sign unflipped
# while the page marks it, or the page calls a flipped entity a stray.
_c_pad, _, _ = run(cycles=1, by_entity=MIX,
pv_entities=[E1, f" {E2}", E3],
pv_invert_entities=[f"{E2} "])
check("⭐ PADDING: ` sensor.x` in the roster and `sensor.x ` in "
"`pv_invert_entities` are the same entity - flipped on the read path, "
"marked on the page, and no stray caution",
_c_pad.pv_w == MIX_TOTAL
and f"{E2} 2100 W in kW [sign inverted]"
in (_at(_row(_c_pad, "W from 3 entities"), 0) or {}).get("text", "")
and _row(_c_pad, "flips nothing") == [])
# --- the negative caution -------------------------------------------------------
def _neg(watts_by_entity, flip=()):
opts = dict(PV_MANY, pv_invert_entities=list(flip))