diff --git a/.claude/rules/docs.md b/.claude/rules/docs.md index a3bdb7cc..a555ec08 100644 --- a/.claude/rules/docs.md +++ b/.claude/rules/docs.md @@ -11,7 +11,7 @@ repo. Sibling repos point here; this is where the pointed-at thing must actually | Fact | Home | |---|---| -| the locked design | `architecture/01..05-*.md` | +| the locked design | `architecture/01..11-*.md` | | capability status + its evidence | `architecture/00-capability-map.md` | | host addresses, routes, node names, break-glass, what is provisioned | `operations/nodes.md` | | Tailscale topology, accept-dns/accept-routes | `operations/tailscale.md` | diff --git a/.claude/rules/unprompted-work.md b/.claude/rules/unprompted-work.md index d7a83c5b..49df8ff8 100644 --- a/.claude/rules/unprompted-work.md +++ b/.claude/rules/unprompted-work.md @@ -6,7 +6,8 @@ unconditional: true > Goal sessions, nightly sessions, "work the register" sessions. **A session that starts from > `/goal` or a standing brief inherits these rules exactly as it inherits the gates.** They are the > part of `PROMPT-TEMPLATE.md` that a task file used to carry and a goal does not. Same wording lives -> in all three repos' `.claude/rules/`; change it in all three or in none. +> in `felhom.eu`, `felhom-controller` and `app-catalog-felhom.eu` `.claude/rules/`, and in the workspace root's +> unversioned `.claude/rules/`; change all four or none. ## 1. What you may pick up on your own @@ -56,3 +57,13 @@ One screen, plain language, in this order: **decisions you took** (§2) first; w what broke and whether you fixed it; rows opened and closed with the register size before and after; what needs the operator, each with what happens if they do nothing. No file paths, no function names, no row numbers as the subject of a sentence. + +## 5. Instruction files + +**Instruction files (`CLAUDE.md`, `.claude/rules/*`) are kept true by the session that finds them wrong** +(operator ruling 2026-10-06, `09` §3 decision 150). A session MAY, without asking: correct a stale fact (a command, a +count, a version, a path, a description of what a gate does), add a fact it proved, and remove a reference to something +that no longer exists. Each edit is named in the report (file, line, before, after, why). A session MAY NOT, without the +operator's word: loosen a safety rule, a fence, a „never", a protected machine, a secret rule, or a review step; or +remove a rule. When in doubt, it is a rule change, and it goes to the operator. If Claude Code's own permission check +asks before such an edit, wait for the operator's click; if it refuses, record that and file the exact line. diff --git a/.claude/rules/website.md b/.claude/rules/website.md index 789fa39c..9664e233 100644 --- a/.claude/rules/website.md +++ b/.claude/rules/website.md @@ -18,8 +18,8 @@ tag-based publishing is a separate mechanism — see the R-110 fence in the repo Website changes go through `python3 scripts/repo_gates.py`, which runs `site_gates.py`. **A new page must be added to that gate's `PAGES` list** or it is unchecked. -`site_gates.py` asserts: BOM, emoji, nav/footer consistency, analytics, CDN, design tokens, and -cache-busting. +`site_gates.py` asserts: BOM, emoji, nav/footer consistency, analytics, CDN, design tokens, no +embedded `