Idea: human-readable "why" tooltips on the plan table #4310
Replies: 1 comment 1 reply
|
This is a strong low-risk v1 because it explains the decision at the point where the HTML plan is already being rendered. I would avoid reconstructing the optimizer logic a second time, though. A better shape is for the publish step to produce a small structured reason object or reason code alongside Chrg, HoldChrg, FrzChrg, Exp, and the other states, then render both the human sentence and the raw values from that same object. A few details would make the feature robust:
For v1, the per-cell reason is a good scope. The cross-window explanation should remain separate because it needs provenance through the merge passes. A handful of fixed optimizer fixtures covering charge, hold, export, freeze, and fallback cases would give you a stable contract before touching the UI wording. |
Uh oh!
There was an error while loading. Please reload this page.
A lot of the issues raised here (and honestly, a lot of the time I've spent digging through
plan.pymyself recently, e.g. #4231/#4272) boil down to "why did the plan charge/hold/export at this slot?" Answering that today means reading the optimizer passes by hand — not something we should expect from non-technical end users.Idea for a v1: add a
title=/hover tooltip on each plan-table cell with a short plain-English sentence explaining that slot's state — e.g. "Charging to 80% because the import rate this slot (8p/kWh) is low enough to be worth it before a more expensive period" or "Holding — already predicted to be above the 60% target this window."Scoping it deliberately small to start:
publish_html_plan()(output.py) — reusing the exact decision tree that already picks the slot's Chrg/HoldChrg/FrzChrg/Exp/HoldExp/FrzExp state, just narrating it instead of discarding the reasoning once the HTML arrow is written. No changes to the optimizer itself for v1.A harder v2 (explaining cross-window tradeoffs — "why this window and not that one") would need to reach into
optimise_swap_charge/optimise_swap_exportand thread a reason through a couple of window-merge points — more invasive, and out of scope for a first pass.Wanted to float this before sinking time into it — does this seem like a worthwhile direction, and any strong opinions on the UX (tooltip vs. an expandable row vs. something else) or on what "confidently explainable" should cover for v1?
All reactions