← Q-Branch launcherJARVIS House — wiring packet
# WIRING PACKET — A-11 House Console (the full job, in order)
- **Item:** A-11, Stream A, Horizon Works Q-Branch — the house assistant line (queue: "Home Assistant + ESPHome; local voice satellites — larger wiring job")
- **Filed:** 2026-10-31 · **Companion to:** `index.html` (the console slice) and `BUILD-RECORD-A11.md`
- **What this packet is:** the real stack that turns the slice into a wired house, sequenced so no step pretends an earlier one is done. **What it is not:** a claim that any of it is installed. The slice is step 0 and it is the only step that exists today.
- **Status tags used on every step:** **EXISTS TODAY** · **NEEDS OWNER HARDWARE** · **NEEDS A SITTING**. Anything this packet cannot source is stamped **ESTIMATED** or **UNVERIFIED** on its face, per house grading.
## The stack at a glance
| # | Layer | Status | The short version |
|---|---|---|---|
| 0 | Console slice (this build) | **EXISTS TODAY** | One self-contained page; SAMPLE state; local rule engine; honest refusals. Proves the surface and the command grammar, nothing else. |
| 1 | Device & room inventory | **NEEDS A SITTING** | A walk-through census of what actually exists to control — lights, locks, thermostat, sensors — before anything is bought or wired. Nothing is assumed. |
| 2 | Home Assistant on the house server (the Pavilion) | **NEEDS A SITTING** | The integration layer. No install is on record today (**UNVERIFIED** — treated as not installed). LAN-only bind, like the gateway. |
| 3 | Local model through the house gateway | Engine **EXISTS TODAY** · link **NEEDS A SITTING** | Setup B is live per house record (LiteLLM + LibreChat on the Pavilion; Qwen on the house GPU machine; hosted lane dark). Wiring Home Assistant to that lane is new work. |
| 4 | Keyless data feeds (weather first) | **NEEDS A SITTING** | Weather in the house's two-source shape (NWS + Open-Meteo, both keyless, $0). Calendar source is an owner decision, not a default. |
| 5 | ESPHome / local devices | **NEEDS OWNER HARDWARE** | Nodes, relays, and sensors only as the step-1 inventory dictates. Local-first protocols; anything cloud-bound stays out or stays isolated. |
| 6 | Local voice satellites | **NEEDS A SITTING** + **NEEDS OWNER HARDWARE** | Whisper (ears) + Piper (voice), house-local, on the GPU machine / Pavilion. Room microphones/speakers are hardware that is not inventoried today (**UNVERIFIED**). |
| 7 | Rules, gates & the actuation ladder | **NEEDS A SITTING** | The owner's ruling that fixes what the assistant may do alone (nothing that touches people or locks), what it may only propose, and what stays LAN-only. Written before step 5/6 actuation is switched on. |
## Step detail
### Step 0 — Console slice — EXISTS TODAY
`index.html` in this folder. Six SAMPLE tiles (gateway · network · detector & locks · lights · climate · weather), a typed command line with a local rule engine, and push-to-talk only where the browser itself offers speech recognition. Its state is a simulation and says so on its face. The slice's job in the stack: fix the command grammar and the honesty discipline (SAMPLE stamps, "not wired yet," refusals with pointers) that every later step inherits.
### Step 1 — Device & room inventory — NEEDS A SITTING
Before any wiring: a room-by-room census, owner-walked, of the controllable estate — which lights are smart or dumb, what the locks and thermostat actually are, which sensors exist, what is already on the network. The house record today names the gateway, the GPU machine, and a detector line; it does **not** inventory lights, locks, or a thermostat (**UNVERIFIED** — the slice's rooms and devices are generic SAMPLE placeholders, not a census). Output of the sitting: a dated inventory the rest of the packet keys off. No purchases are implied by this packet; anything bought returns as its own priced proposal read live (Gear Register posture).
### Step 2 — Home Assistant on the Pavilion — NEEDS A SITTING
Home Assistant is the integration layer: one local hub that holds device state, automations, and the dashboard the console will eventually read. Install posture, mirroring Setup B: on the Pavilion, bound to the LAN only, no cloud account, no remote access until a later Defender-cleared ruling (step 7). Whether Home Assistant is already present on the Pavilion is **UNVERIFIED** — no house record of an install was found at filing, so this packet treats the install as owed. The sitting also owes: admin custody (owner's credential store), backup of the HA config into the house backup line, and the entity naming pass that replaces the slice's generic SAMPLE rooms with the step-1 inventory's real ones.
### Step 3 — Local model through the house gateway — engine EXISTS TODAY, link NEEDS A SITTING
Per house record (Setup B Sitting 1, completed 2026-10-30): LiteLLM + LibreChat run on the Pavilion, LAN-bound; the local model (Qwen on the house GPU machine's RTX-class card) answers through the gateway; hosted lanes are dark and refuse while dark. That engine is the assistant's brain lane — the console's rule engine is a stand-in for it, not a rival. The wiring owed: a Home Assistant conversation/agent integration pointed at the gateway's local lane only, with the hosted lane left dark, plus a failure posture (engine down ⇒ the assistant says so and falls back to direct device state, never to a hosted fallback). Latency and quality of the local model for home-control phrasing are **ESTIMATED** until a fixture conversation is run against it in the sitting.
### Step 4 — Keyless data feeds — NEEDS A SITTING
Weather first, in the house's two-source shape: NWS + Open-Meteo, both keyless and $0, disagreements printed rather than silently resolved (the two-source grading rule). Calendar is a source *decision* (local file/export vs an account read through the gateway), made by the owner in the sitting — the slice connects no account and this packet chooses none. Each feed that lands retires exactly one SAMPLE stamp, only after a cross-check (see the per-tile map below).
### Step 5 — ESPHome / local devices — NEEDS OWNER HARDWARE
As the inventory dictates: ESPHome-class nodes for sensors and relays, local protocols preferred, everything talking to Home Assistant on the LAN. Cloud-dependent devices are not integrated as cloud devices; if one must exist, it stays on its own segment and the console never claims its state as local truth (**ESTIMATED** as guidance — the actual device list does not exist until step 1). Locks deserve their own line: a smart lock is a hardware purchase **and** a step-7 ruling, never a wiring default — and until both exist, the Locks lines stay SAMPLE forever, not dressed up.
### Step 6 — Local voice satellites — NEEDS A SITTING + NEEDS OWNER HARDWARE
Voice stays in the house: **Whisper** for speech-to-text (ears) and **Piper** for text-to-speech (voice), running house-local — on the GPU machine / Pavilion class hardware — with small satellite endpoints (mic + speaker) in the rooms that earn them. No cloud voice service in any tier. The browser push-to-talk in the slice is a demo convenience only; it is **not** the voice wiring, and where the browser offers no recognition the slice already prints UNAVAILABLE instead of faking it. Satellite hardware (which rooms, which mic/speaker units) is **UNVERIFIED** today and returns as a priced proposal when step 1 names the rooms. Microphones ship off by default with a physical mute, per the house mirror discipline.
### Step 7 — Rules, gates & the actuation ladder — NEEDS A SITTING (owner ruling, before actuation)
The binding rules, stated here so the wiring is built inside them, not retrofitted:
1. **LAN-only until cleared wider.** The assistant, its hub, and its voice live on the house LAN. Any wider reach waits on the Defender clearing it — the same fence the gateway already lives under.
2. **Nothing about the owner's child ever reaches a hosted API.** Absolute, no exceptions lane; the hosted lane stays dark for this system regardless of step 3.
3. **The assistant proposes; the owner actuates anything that touches people or locks.** Unlocking, letting someone in, changing a lock state, or acting on a person is never an assistant action — it drafts the action and the owner performs/confirms it. (The slice already encodes this: its `unlock` command refuses by design, even in SAMPLE.)
4. **Read-only before read-write.** First wired posture is state reporting (tiles go live); actuation (lights, climate) is switched on per-device in the sitting, with the log kept.
5. **Every figure prints its basis.** A live tile names its source and as-of time, or shows the honest empty state — the Briefing/Mirror discipline, unchanged.
## Per-tile wiring map — when a SAMPLE stamp may come off
| Slice tile | Real source when wired | Stamp comes off when |
|---|---|---|
| House Gateway | Gateway health read on the Pavilion (Setup B services) | The read runs locally and is cross-checked against the gateway face |
| Network | Local network census (house network records) | Census source is named and dated on the tile |
| Detector & Locks | Detector session records · lock entities in Home Assistant | Detector: its own records feed the tile. Locks: step 5 hardware + step 7 ruling both exist |
| Lights | Home Assistant light entities (step-1 rooms) | Commands demonstrably switch the real entity and the tile reads it back |
| Climate | Thermostat entity in Home Assistant | Read-back verified against the device itself |
| Weather | NWS + Open-Meteo (step 4) | Both sources agree, or the disagreement is printed on the tile |
## Grading notes
- Setup B's existence and posture are stated from the house record of its Sitting 1 completion (2026-10-30); this packet's author did not re-verify the live services — treat the *link* steps as **NEEDS A SITTING** regardless.
- Home Assistant's presence, the controllable-device inventory, voice-satellite hardware, and local-model suitability for control phrasing are **UNVERIFIED / ESTIMATED** as marked above; no figure in this packet should be quoted without its stamp.
- $0 posture: every named component (Home Assistant, ESPHome firmware, Whisper, Piper, the gateway stack) is open-source/keyless class; the only spend this packet anticipates is step-5/6 hardware, which is unpriced here on purpose — prices are read live at purchase time, never recorded in advance.