diff --git a/.claude/rules/unprompted-work.md b/.claude/rules/unprompted-work.md index b2f1a11..9a82377 100644 --- a/.claude/rules/unprompted-work.md +++ b/.claude/rules/unprompted-work.md @@ -73,3 +73,19 @@ that no longer exists. Each edit is named in the report (file, line, before, aft 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. + +## 6. The system poster stays true + +**A session that changes a fact listed in `architecture/felhom-system-poster.facts.md` (a machine, a +role, a traffic path, a backup tier, a time, a retention, a key, a known gap) updates that file in +the same commit.** If the change is text only, it also edits the matching text in +`felhom-system-poster.html`. If it needs a new drawing, it adds the line +**"System poster needs a refresh: "** to `STATUS.md`'s "waiting on the operator" list. +**The session report names which of the three it did.** + +Why the three-way split: the poster is a drawing made in Claude Design, and **nothing in this +repository renders it** — unlike `where-felhom-stands.html`, which has `render_stands.py`. So the +facts file is the source of truth and the drawing trails it. `scripts/poster_facts_gate.py` warns +when the facts file has a newer commit than the poster; it **never fails a push**, because a refresh +needs the operator and another tool, and a gate nobody can clear is a gate people learn to route +around.