S28 · Environmental / IoT Orchestration

Declared state: **live 2026-10-16** - token installed, the VPS reaches Home Assistant Green over the tailnet (ACL grant tag:server -> <HA tailnet IP> tcp:80), `/api/` answers, 27 entities visible. Unproven: one real device actuated by voice and read back (28.F4), and a week of scenes (28.E1)..

This is the repository plan and evidence, not a live health reading. A task marked done may still depend on credentials, devices, deployment or a newer acceptance test.

Dependencies

S27

Tasks and gates

28.F1 · **Home Assistant token** installed and the connection verified live. This is the single

Tier F · done · Verification: hermetic-test

Gate: `test_new_integrations.py` — a real entity listed.

  • recorded-note · 2026-10-16 · VPS curl + bench/test_live_integrations.py

28.F2 · Read-back verification: Mushegh reports the state he *observed*, not the command he sent.

Tier F · done · Verification: planned-test

Gate: new `test_smarthome_verify.py`

  • recorded-note · 2026-09-12 · docs/SYSTEMS-DETAILS.md:2984

28.F3 · Anything that affects other people (lights in shared rooms, locks, heating) is in the

Tier F · done · Verification: hermetic-test

Gate: `test_confirm_tier_documented.py`, `test_smarthome_verify.py` [7]-[9]

  • recorded-note · 2026-09-12 · docs/SYSTEMS-DETAILS.md:2994

28.R1 · Scenes: named multi-device states ("bed", "leaving", "focus") with one command.

Tier R · done · Verification: hermetic-test

Gate: `test_physical_interlock.py` [scene]

  • hermetic-green · 2026-10-15 · bench/test_physical_interlock.py [scene]

28.R2 · Presence-driven automation tied to S27, with an explicit off switch.

Tier R · done · Verification: hermetic-test

Gate: `test_physical_interlock.py` [presence]

  • hermetic-green · 2026-10-15 · bench/test_physical_interlock.py [presence]

28.R3 · Device-offline handling: a dead bulb is reported, not ignored.

Tier R · done · Verification: hermetic-test

Gate: `test_physical_interlock.py` [offline]

  • hermetic-green · 2026-10-15 · bench/test_physical_interlock.py [offline]

28.E1 · A week of automated scenes with zero surprises and zero silent failures.

Tier E · open · Verification: manual

Gate: smarthome audit log.

    28.F4 · **Install the token, prove one real device, then scenes** — in that order. Jev p=0.81, conf 0.77. This is the highest-value hour in the project and it is the owner's, not an engineering task.

    Tier F · open · Verification: planned-test

    Gate: new `test_ha_live.py` — one real device changes state on a spoken command and the state change is read back.

    • recorded-note · 2026-10-16 · owner

    28.F5 · **Safety interlock and dry-run on every physical action** — Jev P=0.68: physical actions are the one category where an unrecoverable mistake is possible, so the interlock is a floor, not an improvement.

    Tier F · done · Verification: hermetic-test

    Gate: `test_physical_interlock.py` [interlock]

    • hermetic-green · 2026-10-15 · bench/test_physical_interlock.py [interlock]

    28.R4 · Physical door locks refuse outright: a lock or garage_door request is refused by policy with no confirmation path, because a typed confirm is not physical presence (D-13). Alarm panels, covers, climate and water heater stay confirm-gated — that middle tier is not named in D-13.

    Tier R · done · Verification: hermetic-test

    Gate: `test_physical_interlock.py` [lock]

    • hermetic-green · undated · bench/test_blast_radius_refusal.py
    • hermetic-green · 2026-10-15 · bench/test_physical_interlock.py [lock]

    28.R5 · The Aqara U200 front-door lock is read-only to Mushegh: lock state may be read and reported, and no code path actuates it over Matter, Thread, Zigbee or Home Assistant (D-13). The NFC tag by the door is the owner's physical act (D-14).

    Tier R · done · Verification: hermetic-test

    Gate: `test_physical_interlock.py` [lock]

    • hermetic-green · 2026-10-15 · bench/test_physical_interlock.py [lock]

    HUD screen contracts

    All subsystems · Source: docs/systems-plan.json.