227 -> 115 effective lines, split into .claude/rules/{hub,website,manifests,docs}.md, and
repo_gates.py gains gate 6. Trim first, register second: a registered-but-failing gate refuses
every push through the pre-push hook, which is why this repo -- the one that OWNS the gate --
was the only one not running it.
Register discipline and the R-110 installer fence deliberately stayed in the core; both have
triggers no fixed glob covers, and scoping them would have rebuilt the failure class they exist
to prevent.
Scoping proven from the InstructionsLoaded hook log in two fresh sessions, not from frontmatter.
1.4 KiB
paths
| paths | |
|---|---|
|
Website — build, deploy, and the encoding fences
Deploy
The website auto-deploys via git-sync from main — just push, live in 1–2 min. No ArgoCD sync,
no image build. Emergency edits: https://files.felhom.eu.
Do NOT pin the website to the installer tag. The sparse-checkout used to cover /website/ and
/scripts/ in one sync; pinning that would turn every copy edit into a release. The installer's
tag-based publishing is a separate mechanism — see the R-110 fence in the repo core CLAUDE.md.
Gates
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.
The encoding fences
- All
website/HTML is UTF-8 with BOM. Preserve it. An editor that strips the BOM is a silent, whole-file change. - Emoji count is zero. The design system forbids them; the gate enforces it.
- Cache-busting: bump the asset query string when CSS or JS changes, or browsers serve the old file and the change looks like it did not deploy.
Copy
Customer-facing copy is Hungarian, and its tone and terminology rules live in the
felhom-ui-design skill — use it rather than inventing phrasing. Operator-facing text is
English.