WAT-2054 — App battery rendering: live QA

Annotated screenshots from the running stack. Battery = split Sink/Source descriptor (WAT-2053 default), reporting Power Import 5,000 W (charging), SoC 50%.
✅ works❌ defect⚠ note

Battery device detail — desktop

SoC radial gauge — WORKS
The blue ring under “CHARGING” showing 50% is the new descriptor-driven SoC gauge (keyed on role=“soc”). This is deliverable #1 — confirmed live.
Hero shows battery state, no “Heating”
“STATE OF CHARGE 50%” + “Power Import: 5,000.0 W / Power Export: 0.0 W”. The row reads “Comfort · setting up…” — it never says “Heating” (the spike’s headline bug is fixed).
Net-power indicator is MISSING
The “POWER” group under Live readings shows only “Power Import 5,000.0 W” as a plain stat row. There is NO “Net Power: Charging 5,000 W” directional element. Root cause: the split battery descriptor puts power_import in the Sink function’s group and power_export in a separate Source “Export” group — my trigger only fires when ONE group carries both roles, so it never renders for the real device. Fix = render it once at device level, finding import/export across all functions.
Now-state copy
Reads “Comfort · setting up…” rather than affirmatively “Charging”. Correct that it never says “Heating”; the charge state is clear from Power Import + SoC. The literal “Charging” word would show in the up-next row once the goal/optimiser schedule settles.

Battery device detail — mobile

Same SoC gauge + hero on mobile
Responsive rendering of the battery detail.
Net-power indicator still absent
Same gap as desktop — Power group is import-only.

Hot-water device — heat regression

Heat device unchanged
Confirms the regression: a hot_water_store still reads its heat vocabulary, and its SoC now also renders as a gauge (intended — descriptor-driven, no per-category branch).