From 107677eb586ef808f9557c8757ff9cac4fedae7d Mon Sep 17 00:00:00 2001 From: Evelyn Chen Date: Mon, 20 Jul 2026 12:49:10 +0000 Subject: [PATCH] chore: dissolve skill, content migrated to docs.fritzlab.net lodge/ Per decisions/2026-07-20-one-canon-knowledge-architecture; canon landed via docs#142 (a0e98f75). Reference files deleted per the sites-household deletions manifest; SKILL.md and README.md are now tombstones. Repo is retained SOLELY to host .gitea/workflows/backup-ha.yaml (live nightly Lodge HA backup using this repo's Actions secrets) until the operator relocates it; that workflow is untouched. Co-Authored-By: Claude Fable 5 --- README.md | 11 +++- SKILL.md | 70 +++++++-------------- reference/boat.md | 15 ----- reference/home-assistant.md | 119 ------------------------------------ reference/locks.md | 58 ------------------ reference/utilities.md | 23 ------- reference/website.md | 51 ---------------- 7 files changed, 30 insertions(+), 317 deletions(-) delete mode 100644 reference/boat.md delete mode 100644 reference/home-assistant.md delete mode 100644 reference/locks.md delete mode 100644 reference/utilities.md delete mode 100644 reference/website.md diff --git a/README.md b/README.md index 91fb2b6..3aca350 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ -# thelonglakelodge +# thelonglakelodge — dissolved -The Long Lake Lodge skill repo \ No newline at end of file +This skill repo was dissolved per the 2026-07-20 one-canon knowledge +architecture decision. The Long Lake Lodge knowledge lives at +https://docs.fritzlab.net/lodge/ — update the docs site, not this repo. + +**This repo is retained SOLELY to host `.gitea/workflows/backup-ha.yaml`**, a +live nightly Home Assistant config backup that uses this repo's Actions +secrets (HA_TOKEN, GIT_TOKEN). Do not archive or delete the repo, and do not +touch that workflow, until the operator relocates it. diff --git a/SKILL.md b/SKILL.md index e9e657e..8717a40 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,59 +1,31 @@ --- name: thelonglakelodge description: > - Activate this skill for any work related to The Long Lake Lodge short-term rental. - TRIGGER when: user mentions the lodge, Long Lake Lodge, Siren, Polk Burnett, Siren Telecom, - utilities, rental, reservations, Airbnb, VRBO, garbage, electricity, thelonglakelodge.com. -user-invocable: true + DISSOLVED. Do not use. The Long Lake Lodge knowledge lives in the + canonical docs site: https://docs.fritzlab.net/lodge/ +user-invocable: false --- - -- Address: 7251 County Road B, Siren, WI 54872 -- Names: The Lodge, Long Lake Lodge -- Public site: thelonglakelodge.com — hosted via fritzlab sjc001 (see fritzlab skill) -- Home Assistant: home.thelonglakelodge.com — proxied via sjc001 remote-proxy to 172.24.24.50 - +# thelonglakelodge — dissolved - -- Utility and access info is tenant-facing — verify accuracy before updating. - +This skill was dissolved per the one-canon knowledge architecture decision +(decisions/2026-07-20-one-canon-knowledge-architecture on docs.fritzlab.net). +All content migrated to the canon in docs#142 (a0e98f75): - +- https://docs.fritzlab.net/lodge/ — landing page +- reference/home-assistant.md → lodge/home-assistant.md +- reference/locks.md → lodge/locks.md +- reference/utilities.md → lodge/utilities.md +- reference/website.md → lodge/website.md +- reference/boat.md → household/boat.md (shared boat page) - - - +Do not add knowledge here. Update https://docs.fritzlab.net instead. - - - +## Why this repo still exists - - - - - - - - - - - +This repo is retained SOLELY to host `.gitea/workflows/backup-ha.yaml` — a +live nightly Home Assistant config backup (lodge HA → dfritz/home-assistant) +that depends on this repo's Actions secrets (HA_TOKEN, GIT_TOKEN). Do not +archive or delete this repo, and do not touch that workflow, until the +operator relocates it (target: dfritz/home-assistant, once its owner adds +the HA_TOKEN secret there — see the note in the workflow header). diff --git a/reference/boat.md b/reference/boat.md deleted file mode 100644 index 65e0b34..0000000 --- a/reference/boat.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -name: boat -description: Boat and Dock Information ---- - -There is not a boat provided - - -The dock has room to dock a boat - - - -Public DNR launch located at 23754 Long Lake Road (just around the corner from the lodge). -It is not a paved launch, it's gravel. - diff --git a/reference/home-assistant.md b/reference/home-assistant.md deleted file mode 100644 index 7e012e2..0000000 --- a/reference/home-assistant.md +++ /dev/null @@ -1,119 +0,0 @@ -# Home Assistant - - -HA OS at `home.thelonglakelodge.com`, proxied via fritzlab sjc001 remote-proxy -to the lodge LAN. Use the public HTTPS/WSS path; direct `172.24.24.50:8123` is -unapproved IPv4 inventory, not an operational path. API token in `~/.env` as -`LODGE_HA_TOKEN` (long-lived admin token — core API + service calls + Supervisor: -WS `{"type":"supervisor/api","endpoint":...}` for JSON endpoints, REST -`/api/hassio/addons//logs` for text logs; `/api/error_log` is 404 — -use WS `system_log/list`). No SSH (`:22` closed, no terminal addon). -No automatic Supervisor full-backup schedule. Local recovery backups include -`pre-matter-recommission 2026-07-05` and -`post-matter-recommission-2026-07-15`. - -Local control via WebSocket: `wss://home.thelonglakelodge.com/api/websocket`, -auth with `{"type":"auth","access_token":LODGE_HA_TOKEN}`. Useful WS cmds: -`config_entries/get`, `config/device_registry/list`, `config/entity_registry/list`, -`matter/node_diagnostics{device_id}`, `lovelace/config{url_path:null}` / -`lovelace/config/save`. Addon control via REST service: -`POST /api/services/hassio/addon_restart {"addon":"core_matter_server"}`. - - - -## Nest thermostats are integrated TWICE - -The 8 Nest thermostats appear via two independent paths: -- **Cloud (Google Nest)** — `nest` integration, entities `climate.*_google_nest` - (+ `climate.lodge_basement` = Basement Living Room) and per-zone - `sensor.*_temperature` / `sensor.*_humidity`. Retained as fallback. -- **Matter (local)** — `matter` integration via the `core_matter_server` addon, - entities `climate.*_nest`. Primary control path. - -8 zones: Office, Kitchen, Bunkhouse Kitchen (forced-air "HVAC"); Eat-in Kitchen, -Primary Bathroom, Basement Living Room, Basement Bedroom, Tub Room (in-floor heat). - -`script.set_away_temperatures` (HVAC `heat_cool` low/high 55–78 / in-floor 55) -and `script.set_occupied_temperatures` (HVAC `heat_cool` low/high 68–76 / -in-floor 67) set all zones, -targeting Matter device labels `matter_hvac` (3 forced-air) and -`matter_in_floor_heat` (5 in-floor). Both run with no delays and resolve device -labels to climate entities via -`label_devices(..) | map('device_entities') | ... | select('match','climate')` -because labels are on devices. Verified 8/8 for both profiles on 2026-07-15. -Cloud devices retain `google_nest` plus `hvac` / `in_floor_heat` labels; any -cloud fallback script must serialize commands with an 8 s delay to avoid the -Google SDM `ExecuteDeviceCommand` 429 limit. - - - -## Matter fabric loss (2026-06-15) - -At 2026-06-15 13:53 UTC an HA Core/Supervisor restart (Supervisor → 2026.06.1) -left the `core_matter_server` addon (v8.5.0) with an **empty fabric** — all 11 -Matter devices report `node_not_found`, all 59 `climate.*_nest` etc. entities -`unavailable`. Integration reconnects fine (config entry `loaded`); the server -simply has zero nodes. Addon restart + config-entry reload do NOT restore them -(storage lost, not transient), and there is no backup to restore from. - -The 9.0.0 Python→matter.js migration created fabric 2; the old compressed fabric -`1E5211CA4C7B5275` is gone. Recovery completed 2026-07-15 by recommissioning all -8 thermostats through Nest multi-admin. Cloud Nest remained available throughout. - - - -## Matter fabric 2 (complete) - -`core_matter_server` 9.1.0 runs matter.js. All nodes are available: - -| Node | Device | Climate entity | Category | Child sensor | -|---:|---|---|---|---| -| 16 | Lodge Kitchen Nest | `climate.lodge_kitchen_nest` | `matter_hvac` | Lodge Kitchen Sensor Nest | -| 17 | Lodge Office Nest | `climate.lodge_office_nest` | `matter_hvac` | Lodge Office Sensor Nest | -| 18 | Bunkhouse Kitchen Nest | `climate.bunkhouse_kitchen_nest` | `matter_hvac` | Bunkhouse Kitchen Sensor Nest | -| 19 | Lodge Primary Bathroom Nest | `climate.lodge_primary_bathroom_nest` | `matter_in_floor_heat` | — | -| 20 | Lodge Eat-in Kitchen Nest | `climate.lodge_eat_in_kitchen_nest` | `matter_in_floor_heat` | — | -| 21 | Lodge Basement Bedroom Nest | `climate.lodge_basement_bedroom_nest` | `matter_in_floor_heat` | — | -| 22 | Lodge Tub Room Nest | `climate.lodge_tub_room_nest` | `matter_in_floor_heat` | — | -| 23 | Lodge Basement Living Room Nest | `climate.lodge_basement_living_room_nest` | `matter_in_floor_heat` | — | - -Every thermostat also has `matter_nest`. Eight thermostat nodes plus the three -bridged sensors equal 11 HA Matter devices. All stale fabric-1 registry devices -are deleted. - -Recommissioning requires a phone on lodge WiFi; Google Home refuses to generate -a Matter code off-network: -1. Google Home app (lodge account) → thermostat → Settings → Linked Matter - apps & services → Link apps & services → 11-digit code (single-use, ~5 min). -2. WS `{"type":"matter/commission","code":"","network_only":true}` - (or HA UI Add device). -3. Rename device to " Nest", label `matter_nest` + `matter_hvac` - (Office, Kitchen, Bunkhouse Kitchen) or `matter_in_floor_heat` (the 5 - in-floor zones), rename climate entity to `climate._nest`. - -GOTCHA — `Address unreachable` / commission timeout after host boot can be a -wedged matter.js socket (`1 of 1 attempt(s) failed, 1 discovered`). Restart -`core_matter_server`, then retry. Do not treat add-on restart as lost-fabric -recovery. - -`post-matter-recommission-2026-07-15` (backup id `2e0efde0`) includes HA, -database, and `core_matter_server` data on `hassio.local`. The nightly Git export -does NOT contain Matter fabric storage. Automatic Supervisor backups remain off. - - - -## Main Lovelace (`lovelace` / "Overview", storage mode) - -Views: `main` (single grid card, columns:1, headed sections: locks/lights, -Helpful Scripts, Water Sensors, then climate as three 2-col thermostat-card -grids — **Lodge HVAC** (office, kitchen), **In-Floor Heat** (5 in-floor zones), -**Bunkhouse** (bunkhouse kitchen)), -`Environmentals` (history page), and `Lock Management`. Edit via -`lovelace/config` / `lovelace/config/save` (WS). - -Overview thermostat cards point at all 8 local Matter `climate.*_nest` entities. -The `Environmentals` page remains cloud-backed: three per-category -vertical-stacks (Lodge HVAC / In-Floor Heat / Bunkhouse), each with Temperature, -Humidity, and Heating/Cooling history graphs (72h). Five in-floor thermostats -have no Matter humidity entity, so cloud humidity remains required there. - diff --git a/reference/locks.md b/reference/locks.md deleted file mode 100644 index cfaeb7d..0000000 --- a/reference/locks.md +++ /dev/null @@ -1,58 +0,0 @@ -# Door Locks & Codes - - -Two Kwikset HC620 Z-Wave (zwave_js) keypad locks: -`lock.lodge_front_door_lock` (node 3) and `lock.bunkhouse_frontdoor_lock` -(node 8). Each supports user-code slots 1–250; the automation and "Lock -Management" Lovelace view manage shared logical slots 1–8 via helpers: -`input_text.lock_slotN_user`, `input_text.lock_slotN_code`, -`input_boolean.lock_slotN_lodge_enabled`, and -`input_boolean.lock_slotN_bunkhouse_enabled` (N = 1–8). -Slot 1 = Fritz family, 2 = cleaner, 4 = carpenter, 5 = backup. -Legacy `input_boolean.lock_slotN_enabled` helpers remain but are unwired and -hidden from the dashboard. - - - -All code changes go through `script.lock_sync_slot` (fields: `slot` 1–8), the -single source of truth. Per slot and door it refreshes the User Code CC cache, -then writes the validated slot code when enabled or calls -`zwave_js.clear_lock_usercode` when disabled. Every Z-Wave call uses -`continue_on_error`, so one door never blocks the other. - -- `script.lock_sync_all_codes` — warns (persistent + `notify.mobile_app_donavan_s_iphone_16_pro`) - if a lock's `*_node_status` sensor isn't alive/asleep, then runs - `lock_sync_slot` for slots 1–8. -- `automation.lock_slot_N_sync_both_locks` (×8, alias "Sync Door Codes") — - trigger on either door's enabled toggle OR the slot's `_code` helper → - `lock_sync_slot` for that slot. -- `automation.lock_codes_full_sync_self_heal` — full sync daily 04:00 and - 10 min after HA start, so transient failures heal within a day. - -An HC620 clear is confirmed by a refreshed `in_use: false` readback. Do not -overwrite disabled slots with the family PIN: the lock rejects a duplicate PIN -without changing the slot even when the service call returns successfully. - - - -Error `userCode for code slot N not found` from `zwave_js.set_lock_usercode` -= Z-Wave JS value cache has no userCode value for that slot, NOT a lock or code -problem. The sync script's pre-`get` prevents it; manual fix: -`zwave_js.invoke_cc_api {device_id, command_class: "99", method_name: "get", parameters: [N]}` -then re-run the sync. - -Bunkhouse lock (Z-Wave node 8) intermittently returns `ZW1405 - node failed to -decode the message` on commands (seen 2026-07-05 on unlock + usercode set). -Sync tolerates it (continue_on_error + daily self-heal retries); if it -persists, suspect S2/RF health on that lock. - - - -Scripts/automations/dashboards/helper-definitions are mirrored to -`dfritz/home-assistant` repo under `lodge/` (API export — the lodge HA has no -SSH). Nightly Gitea Actions workflow `.gitea/workflows/backup-ha.yaml` IN THIS -SKILL REPO (secrets `HA_TOKEN` + `GIT_TOKEN` on skills/thelonglakelodge; ops -lacks rights to put secrets on dfritz/home-assistant) exports and pushes only -on change; failure emails via action/notify-email. Manual run: the workflow's -`workflow_dispatch`, or `HA_TOKEN=... lodge/backup.sh` in the mirror repo. - diff --git a/reference/utilities.md b/reference/utilities.md deleted file mode 100644 index a63e0c7..0000000 --- a/reference/utilities.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: utilities -description: Lodge Utilities Information ---- - - - - - - - - \ No newline at end of file diff --git a/reference/website.md b/reference/website.md deleted file mode 100644 index 18f4df6..0000000 --- a/reference/website.md +++ /dev/null @@ -1,51 +0,0 @@ -# Lodge website - - -Static site at `thelonglakelodge.com` (+ `www`, a CNAME to the apex). Hosted -by Latchkey's managed-website service ("Websites" in the app): the files -live in the `latchkey-sites` Garage bucket under the `thelonglakelodge.com/` -key prefix, and the Latchkey `sites` edge serves them over its anycast IPs -with automatic Let's Encrypt TLS. No Traefik, no per-site bucket Ingress. -Registered in `custom_domains` (org "Fritz Family", id `cd-tll0001`). - - - -## Update the site - -In the Latchkey app: **Websites → thelonglakelodge.com → Manage files** — -upload (replaces by path), list, delete. Files publish immediately. The -old git repo `~/code/git/code.fritzlab.net/websites/thelonglakelodge.com` -+ `action/site-publish` flow is retired; edits go through the app now (or -the API: `POST /v1/custom-domains/cd-tll0001/files`). - -DNS: apex A/AAAA → the sites anycast set (142.202.202.22 / .203.22 / -23.145.176.22 + 2602:817:3000:ed6e::{202,203,176}:22); `www` CNAMEs the -apex. Managed in `dns/authoritative/zone-templates/thelonglakelodge.com.j2`. - - - -## Welcome packet PDF (`/welcome`) - -`/welcome` and `/welcome.pdf` both serve the guest packet. The `/welcome` -shortcut is the empty stub object carrying `x-amz-website-redirect-location: -/welcome.pdf`; the managed-sites server follows that metadata internally -(one hop) and streams the PDF — no browser-visible redirect. - -Update the PDF by re-uploading `welcome.pdf` via Websites → Manage files -(or `POST /v1/custom-domains/cd-tll0001/files`). To recreate the `/welcome` -stub if lost: - -```sh -aws --profile sjc001 s3api put-object --bucket latchkey-sites \ - --key thelonglakelodge.com/welcome --content-type text/html \ - --website-redirect-location /welcome.pdf --body /dev/null -``` - - - -## Guest-facing policy lives in two places - -Check-out time, quiet hours, occupancy, and local-contact details are stated -both in the welcome PDF and in the quick-ref cards on `house-rules.html`. -When updating any of these values, update BOTH or they will drift. -