brand-voice · git:20260909.1c2e4ab · 2026-09-09 · sha256 5a88b9fac5477793
brand-voice git:20260909.1c2e4abA
Immutable. This exact content is served forever at /api/v1/blob/5a88b9fac5477793.
--- description: Brand voice and copy — docs/brand/ is the source of truth for how the product speaks; any public-facing text change updates it in the same change and passes docs/brand/lint.py alwaysApply: false --- # Brand voice (super-ux) `docs/ux/` decides what the product does. `docs/brand/` decides how it speaks, under `brand-contract v1`. ## Before writing any user-visible text Read `docs/brand/voice.md`, `terminology.md`, and the `channels.md` record for the surface. No pack yet → run `/brand-init` rather than improvising a voice; a product whose copy was invented surface by surface is the drift this layer removes. ## Rules - Any change to public text updates `docs/brand/` in the same change. - Never quote a figure with no row in `facts.md`. Never invent a fact, statistic, quote or expert — report the gap. - One action, one name, everywhere it appears. Check `strings.md` first. - A register moves the voice axes; it never crosses the invariants listed in `voice.md`. - No humor, exclamation marks or emoji on error, destructive confirm, billing or paywall surfaces, in any voice. - New interface strings get a `strings.md` row: key, `file:line`, scenario. ## Check ```bash python3 docs/brand/lint.py ``` Exit 0 clean **or warnings only**, 1 warnings under `--strict`, 2 any error. That is the policy `docs/ux/lint.py` has always had, and one pack cannot hold two opposite meanings for a warning: this linter returned 1 on warnings alone until 2026-08-20, so 13 of its 39 codes turned a build red while printing `0 error(s), 1 warning(s)`. Clean means checkable, not good — the judgement half is `/ux-audit copy`.