UX-13 P4: the setup wizard for installers
The Setup tab draws the Installer view's page model one step at a time, from each field's `wizard` step in app/uilayout.py: meter (with the kettle test), inverters and batteries, solar (optional), prices, peak limit (battery modes: "comes in a later update", OPT-11), check and start. It reuses P2's controls and saves through /config/validate and /config/save. No route was added. - First run: /config/model says `setup_needed` when the stored options name no power request entity, or on a new install (no `setup_done` and no `auto` in the Store, control not started). The page opens #setup only when opened with no route. The wizard's save writes `setup_done`. - Kettle test: GET ha/entities?entity= reads one entity now, in W. The change decides: up keeps meter_invert off, down turns it on; a net or import/export meter that goes down blocks the step with what to check. - Last step: validate.setup_checks() beside the refusals: the meter reads, each power request entity exists in HA (bad if not, SAFETY-77), battery levels and power with direction, solar sign, prices. Saves with shadow_mode on by default, then a confirmed restart naming the 0 W. - P2 test finding (a): a stale save lists only the keys the other surface moved (the blob handed out on open, by fingerprint, against stored now). - test_setup.py; tools/ux13_wizard_blobs.py makes the 88 blobs the wizard can save; all accepted by Supervisor 2026.08.0 AppOptions (offline). - DECISIONS/UX-13-setup-wizard.md; DOCS "Setup, for a new install". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LyR88rXETvwhTgx6yHE39p
This commit is contained in:
@@ -429,9 +429,11 @@ async def _stale(s, root, sup):
|
||||
|
||||
|
||||
_r, _sup = asyncio.run(session(TWO, _stale))
|
||||
check("409 with the page fields to look at, and nothing written",
|
||||
check("409 with the page fields to look at, and nothing written. Only the "
|
||||
"field the other surface changed, not the page's own edit (P4, P2 "
|
||||
"test finding a)",
|
||||
_r[0] == 409 and _r[1]["kind"] == "stale"
|
||||
and "peak_cap_w" in _r[1]["changed_fields"] and _sup.writes == []
|
||||
and _r[1]["changed_fields"] == ["peak_cap_w"] and _sup.writes == []
|
||||
and _r[1]["fingerprint"] == selfconfig.fingerprint(_sup.options))
|
||||
|
||||
# --------------------------------------------------------------------------- #
|
||||
|
||||
Reference in New Issue
Block a user