super-ux · git:20260909.1c2e4ab · 2026-09-09 · sha256 0e89477322f073ed

super-ux git:20260909.1c2e4abA

Immutable. This exact content is served forever at /api/v1/blob/0e89477322f073ed.

---
description: "super-ux hard rule: scenario-driven UI development"
alwaysApply: true
---

# UX scenarios — hard rule (super-ux)

- `docs/ux/scenarios.md` is the source of truth for all user-facing behavior;
  `docs/ux/foundation.md` (personas, JTBD, journeys, stories) and
  `docs/ux/flows.md` (user flows) are the WHY and HOW layers scenarios trace
  to. Above all three sits `docs/ux/vision.md` — what the product is and
  refuses to become — when the project has written one.
- Any change that touches user-facing behavior or interface MUST update, in
  the same change: `docs/ux/scenarios.md`; affected flows; the affected
  screens in `docs/ux/screens.md` (the UI map — states, elements, coverage);
  and, when Figma is enabled, the Figma frame(s) plus their links in
  `screens.md`. A screen whose code diverges from its record, or a stale
  Figma link, is drift — the exact thing this system prevents.
- A `Coverage:` citation is a claim about code and is resolved as one: the
  path must exist and the line range must be inside the file. Seven of this
  pack's own citations were pre-shift ranges nothing re-resolved.
- Any new feature or project STARTS with the chain: which job does it serve,
  which journey stage, which story — then flows and scenarios, validated
  against the existing base, approved. An idea serving no job is challenged,
  not silently accepted.
- **Do NOT write interface code until the UX workflow is done first:** the
  foundation → flows → screens → scenarios chain is designed and approved,
  and — when Figma is enabled (default) — the UI is mocked up in Figma with
  every screen linked to its frame. Building UI before this is the exact
  mistake super-ux exists to prevent.
- Visual identity is ONE locked style pack, recorded in `docs/ux/screens.md`
  → Design system and obeyed by every Figma frame and every built screen —
  picked with the **sheleg-design** companion skill when the project has no
  design system of its own (recommended, not required). Inventing a palette,
  type pairing, or motion per screen is visual drift.
- After any UX change and before calling the work done, run the linter
  `python3 docs/ux/lint.py` — it must pass (errors are drift/broken
  structure; wire it into CI/pre-commit). Run `python3 docs/ux/doctor.py`
  when picking this base up after a while: the linter checks the chain
  against itself and stays silent when the whole base is written to an old
  contract, and the doctor is what notices.
- Text a user reads is governed too. `docs/brand/` holds the voice, the
  terminology, the string registry and `facts.md` — the only source of any
  public figure — and `python3 docs/brand/lint.py` must pass beside the UX
  linter. Never quote a number that has no row in `facts.md`.

### Which rule owns which question

Eight rules ship in `.cursor/rules/`, and this one routes to the other seven.
A rule nobody names is a rule nobody loads.

| Rule | Owns |
|---|---|
| `vision` | what the product is and refuses to become — the layer above the chain |
| `ux-foundation` | the WHY layer: personas, jobs (`JTBD-NN`, each with a success metric), journeys, stories |
| `ux-flows` | flows, Figma mockups and the locked style pack |
| `ux-scenarios` | the scenario base and its maintenance |
| `ux-audit` | evidence-backed audits: `file:line` or it did not happen |
| `brand-voice` | how the product sounds — voice, terminology, facts, per-surface register |
| `copywriting` | the text itself: interface strings, landing, pricing, changelog, posts |

The chain runs `vision` → `ux-foundation` → `ux-flows` → `ux-scenarios`, with
`ux-audit` checking the result against the code. `brand-voice` and
`copywriting` read the same scenarios and do not wait on each other — but
where both land on one screen, compare them before shipping: a label the
layout has no room for is right in each and wrong on the screen.