Adds an OMNI_PCA_FIXTURE escape hatch so the mock can serve real
panel data instead of the synthetic five-zone state. With this in
place the dev stack is wire-indistinguishable from the source
panel for everything the HA integration touches: 330 programs,
16 zones, 44 units, 2 thermostats etc. from our test fixture.
- run_mock_panel.py: --pca / OMNI_PCA_FIXTURE accepts a path; the
decryption key is auto-derived from a sibling PCA01.CFG when one
exists (the common PC Access export layout), with --pca-key /
OMNI_PCA_FIXTURE_KEY as override. Falls back to KEY_EXPORT for
vanilla unsigned exports.
- docker-compose.yml: mount /home/kdm/home-auto/HAI as /fixtures
read-only and surface OMNI_PCA_FIXTURE so dev/.env can drive it.
- dev/README.md: new section documenting fixture loading.
- dev/screenshot_overview.py: quick playwright helper for capturing
the side-panel landing page with whatever fixture is loaded.
- dev/artifacts/screenshots/2026-05-17/real-pca-overview.png: snapshot
of the Omni Programs side panel against the real .pca fixture
(330 programs).
Lets structured-AND IF rows compare a typed field against another
typed field, not just a constant. Authoring "Thermostat 1.Temp >
Thermostat 2.Temp" now works in-place; previously Arg2 was locked
to Constant in the editor.
- types.ts: relax isEditableStructuredAnd to permit Zone/Unit/
Thermostat/Area/TimeDate as Arg2 types (the same editable set
already accepted for Arg1).
- omni-panel-programs.ts: replace the lone constant input with
Arg2 type/object/field controls that mirror the Arg1 layout;
switching Arg2 between Constant and a reference type swaps the
sub-controls and resets defaults sensibly.
- _renderStructuredArg1Picker generalised to _renderStructuredObjectPicker
driving both sides; _defaultIxForKind extracted as a shared helper.
- Bundle rebuilt.
- dev/screenshot_arg2_object.py: targeted playwright helper that
opens the chain at slot 200 and screenshots the editor for
visual verification.