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 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
# thelonglakelodge
|
# thelonglakelodge — dissolved
|
||||||
|
|
||||||
The Long Lake Lodge skill repo
|
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.
|
||||||
|
|||||||
@@ -1,59 +1,31 @@
|
|||||||
---
|
---
|
||||||
name: thelonglakelodge
|
name: thelonglakelodge
|
||||||
description: >
|
description: >
|
||||||
Activate this skill for any work related to The Long Lake Lodge short-term rental.
|
DISSOLVED. Do not use. The Long Lake Lodge knowledge lives in the
|
||||||
TRIGGER when: user mentions the lodge, Long Lake Lodge, Siren, Polk Burnett, Siren Telecom,
|
canonical docs site: https://docs.fritzlab.net/lodge/
|
||||||
utilities, rental, reservations, Airbnb, VRBO, garbage, electricity, thelonglakelodge.com.
|
user-invocable: false
|
||||||
user-invocable: true
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<quick-context>
|
# thelonglakelodge — dissolved
|
||||||
- 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
|
|
||||||
</quick-context>
|
|
||||||
|
|
||||||
<safety>
|
This skill was dissolved per the one-canon knowledge architecture decision
|
||||||
- Utility and access info is tenant-facing — verify accuracy before updating.
|
(decisions/2026-07-20-one-canon-knowledge-architecture on docs.fritzlab.net).
|
||||||
</safety>
|
All content migrated to the canon in docs#142 (a0e98f75):
|
||||||
|
|
||||||
<style>
|
- https://docs.fritzlab.net/lodge/ — landing page
|
||||||
- Keep references low token count, organized with XML tags.
|
- reference/home-assistant.md → lodge/home-assistant.md
|
||||||
- State what IS, not what happened.
|
- reference/locks.md → lodge/locks.md
|
||||||
- MUST keep this skill up to date. Knowledge lives HERE, not in memory.
|
- reference/utilities.md → lodge/utilities.md
|
||||||
</style>
|
- reference/website.md → lodge/website.md
|
||||||
|
- reference/boat.md → household/boat.md (shared boat page)
|
||||||
|
|
||||||
<references>
|
Do not add knowledge here. Update https://docs.fritzlab.net instead.
|
||||||
<reference file="reference/utilities.md"
|
|
||||||
summary="Lodge utilities: electricity and gas (Polk Burnett), garbage, internet (Siren Telecom)"
|
|
||||||
categories=["utilities"]
|
|
||||||
keywords=["garbage", "electricity", "gas", "water", "WiFi", "utilities", "Polk Burnett", "Siren Telecom", "internet"] />
|
|
||||||
</references>
|
|
||||||
|
|
||||||
<references>
|
## Why this repo still exists
|
||||||
<reference file="reference/boat.md"
|
|
||||||
categories=["water"]
|
|
||||||
keywords=["boat", "dock", "launch"] />
|
|
||||||
</references>
|
|
||||||
|
|
||||||
<references>
|
This repo is retained SOLELY to host `.gitea/workflows/backup-ha.yaml` — a
|
||||||
<reference file="reference/home-assistant.md"
|
live nightly Home Assistant config backup (lodge HA → dfritz/home-assistant)
|
||||||
summary="Home Assistant: public API access, dual Nest paths, Matter Server 9.1.0 fabric 2 with all 8 nodes local, Matter-first scripts and Overview, cloud fallback, backups"
|
that depends on this repo's Actions secrets (HA_TOKEN, GIT_TOKEN). Do not
|
||||||
categories=["home-automation"]
|
archive or delete this repo, and do not touch that workflow, until the
|
||||||
keywords=["home assistant", "HA", "home.thelonglakelodge.com", "matter", "nest", "thermostat", "climate", "dashboard", "lovelace", "HVAC", "in floor heating", "environmentals", "core_matter_server", "172.24.24.50"] />
|
operator relocates it (target: dfritz/home-assistant, once its owner adds
|
||||||
</references>
|
the HA_TOKEN secret there — see the note in the workflow header).
|
||||||
|
|
||||||
<references>
|
|
||||||
<reference file="reference/locks.md"
|
|
||||||
summary="Door locks: two 250-slot HC620 keypads, 8 managed shared codes with per-door toggles, clear-on-disable sync + self-heal, nightly git backup"
|
|
||||||
categories=["home-automation"]
|
|
||||||
keywords=["lock", "locks", "door code", "door codes", "usercode", "code slot", "keypad", "lock_sync_all_codes", "set_lock_usercode", "zwave", "front door", "bunkhouse"] />
|
|
||||||
</references>
|
|
||||||
|
|
||||||
<references>
|
|
||||||
<reference file="reference/website.md"
|
|
||||||
summary="Lodge website: Latchkey managed-website service (latchkey-sites bucket, sites anycast edge, auto-TLS), Manage-files editing, /welcome PDF stub"
|
|
||||||
categories=["website"]
|
|
||||||
keywords=["website", "thelonglakelodge.com", "welcome packet", "PDF", "welcome.pdf", "/welcome", "Latchkey", "managed-website", "Manage files", "custom_domains", "cd-tll0001"] />
|
|
||||||
</references>
|
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
name: boat
|
|
||||||
description: Boat and Dock Information
|
|
||||||
---
|
|
||||||
|
|
||||||
There is not a boat provided
|
|
||||||
|
|
||||||
<dock>
|
|
||||||
The dock has room to dock a boat
|
|
||||||
</dock>
|
|
||||||
|
|
||||||
<public-launch>
|
|
||||||
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.
|
|
||||||
</public-launch>
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
# Home Assistant
|
|
||||||
|
|
||||||
<overview>
|
|
||||||
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/<slug>/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"}`.
|
|
||||||
</overview>
|
|
||||||
|
|
||||||
<thermostats>
|
|
||||||
## 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.
|
|
||||||
</thermostats>
|
|
||||||
|
|
||||||
<matter-outage>
|
|
||||||
## 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-outage>
|
|
||||||
|
|
||||||
<matter-recommission>
|
|
||||||
## 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":"<code>","network_only":true}`
|
|
||||||
(or HA UI Add device).
|
|
||||||
3. Rename device to "<Zone> 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.<zone>_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.
|
|
||||||
</matter-recommission>
|
|
||||||
|
|
||||||
<dashboard>
|
|
||||||
## 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.
|
|
||||||
</dashboard>
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
# Door Locks & Codes
|
|
||||||
|
|
||||||
<overview>
|
|
||||||
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.
|
|
||||||
</overview>
|
|
||||||
|
|
||||||
<sync>
|
|
||||||
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.
|
|
||||||
</sync>
|
|
||||||
|
|
||||||
<troubleshooting>
|
|
||||||
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.
|
|
||||||
</troubleshooting>
|
|
||||||
|
|
||||||
<backup>
|
|
||||||
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.
|
|
||||||
</backup>
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
---
|
|
||||||
name: utilities
|
|
||||||
description: Lodge Utilities Information
|
|
||||||
---
|
|
||||||
|
|
||||||
<electricity
|
|
||||||
provider="Polk Burnett",
|
|
||||||
|
|
||||||
/>
|
|
||||||
|
|
||||||
<gas
|
|
||||||
provider="Polk Burnett",
|
|
||||||
|
|
||||||
/>
|
|
||||||
|
|
||||||
<garbage
|
|
||||||
|
|
||||||
/>
|
|
||||||
|
|
||||||
<Internet Service Provider
|
|
||||||
provider='Siren Telecom'
|
|
||||||
|
|
||||||
/>
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
# Lodge website
|
|
||||||
|
|
||||||
<overview>
|
|
||||||
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`).
|
|
||||||
</overview>
|
|
||||||
|
|
||||||
<editing>
|
|
||||||
## 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`.
|
|
||||||
</editing>
|
|
||||||
|
|
||||||
<welcome-packet>
|
|
||||||
## 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
|
|
||||||
```
|
|
||||||
</welcome-packet>
|
|
||||||
|
|
||||||
<policy-sync>
|
|
||||||
## 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.
|
|
||||||
</policy-sync>
|
|
||||||
Reference in New Issue
Block a user