Auditor & fixing ecosystem
Every rule in the registry has its own handbook page at
ux-audit-rules/<rule-id-kebab>.html
(example: DET.NAV.DEDUP).
For ruleset harnesses and fixers, see
Auditor & fixing ecosystem.
Optional Before/After gallery scrolls all rule fixtures on one page.
For WCAG/axe and DET.A11Y.* campaigns, see the sibling
Accessibility audit rules catalog and
a11y Before/After gallery.
Lifecycle
Canonical rule definitions live under docs/design/ux-audit/. The blender emits
registry.generated.json. Handbook detail pages are agent-written Markdown siblings in
docs/design/ux-audit/rule-pages/ and compile to HTML under
showcase/ux-audit-rules/ (one HTML file per rule).
- Blend — refresh registry from design docs and implementations.
- pagegen — one Cursor agent per stale/missing rule writes the
.mdsibling. - build-showcase — compiles overview + detail HTML (no agents at build time).
Refresh handbook
cd tools/website-ux-auditor
npm run blend-rules
npm run pagegen -- --lane both --max-rules 10
npm run pagegen:manifest
cd ../..
python3 generator/build-showcase.py
Use npm run pagegen -- --dry-run between batches until no targets remain.
Bump an implementation file to change contentVersion; stale pages appear in the table below.
Coverage summary
- Registry fingerprint
aef1de6082cf0f50d463783c843dee0ffb9132fbd5ed4ea6e5bb3f031f359c72- Total rules
- 138
- Deterministic
- 108
- AI
- 30
- Handbook current
- 116
- Stale
- 0
- Missing
- 22
Deterministic rules (DET)
Each rule has its own page under ux-audit-rules/ — click the rule id or Open page for purpose, how it is fixed, Before/After, and remediation.
| Rule | What it checks | Examples | Open page |
|---|---|---|---|
DET.AMBIENT.Z_INDEX (first-screen) current | Test stub for pagegen skip logic. | Before/After | Open page |
DET.APP.AI_PROVENANCE (trustAndEcosystemTruth) current | AI suggestion surfaces show label, provenance, confidence, and accept/reject/revert controls. | Before/After | Open page |
DET.APP.BULK_ACTION_SCOPE (trustAndEcosystemTruth) current | Bulk/destructive actions state selected count before execution. | Before/After | Open page |
DET.APP.CLIENT_ERROR_LOG_CLEAN (interaction) current | Scenario steps must not leave console/page errors after interactions. | Before/After | Open page |
DET.APP.CONTROL_A11Y (accessibility) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.APP.DATA_REFRESH_STALENESS (informationArchitecture) current | Data-heavy panels show freshness and refresh/retry actions. | Before/After | Open page |
DET.APP.DEMO_DISCLOSURE (trustAndEcosystemTruth) current | Demo and mock regions must be visibly labeled in the same section. | Before/After | Open page |
DET.APP.DISABLED_REASON (accessibility) current | Disabled primary controls expose why they are disabled. | Before/After | Open page |
DET.APP.EMPTY_LOADING_ERROR_SUCCESS (informationArchitecture) current | Workspaces show one primary state with heading and next action. | Before/After | Open page |
DET.APP.ERROR_BOUNDARY_RECOVERY (informationArchitecture) current | Failed routes show recovery UI instead of a blank shell. | Before/After | Open page |
DET.APP.FOCUS_TRAP (accessibility) current | Bootstrap modals/offcanvas and KS diagram/topic-preview overlays must keep keyboard focus inside the open shell until dismiss, with a reachable exit control. | Before/After | Open page |
DET.APP.MODAL_DISMISSAL_GUARD (accessibility) current | Modals include close affordance and unsaved/destructive guards. | Before/After | Open page |
DET.APP.PERSISTENT_CHROME (informationArchitecture) current | When a desktop-interface contract promises a persistent shell, header, nav, aside, and footer regions outside main must stay mounted with stable KS hashes and global link sets across crawled routes. | Before/After | Open page |
DET.APP.PRIMARY_CTA (conversion) current | At most one visible primary action per workspace. | Before/After | Open page |
DET.APP.PRIMARY_STATE (informationArchitecture) current | One visible primary workspace state region per active studio page. | Before/After | Open page |
DET.APP.PRIMITIVE_MARKERS (visual-catalog) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.APP.PRIMITIVE_SOURCE (visual-catalog) current | KS_REACT_PRIMITIVE components spread ksReactPrimitiveAttrs in source. | Before/After | Open page |
DET.APP.PRIMITIVE_STYLES (visual-catalog) current | React primitive mounts load forge-react-primitives / ks-fe styling. | Before/After | Open page |
DET.APP.ROUTE_DEEPLINK_STATE (informationArchitecture) current | Deep-linked routes render main content and active nav matches location. | Before/After | Open page |
DET.APP.SHELL_INTEGRATION (informationArchitecture) current | No Bootstrap alert/badge metaphors beside governed react-primitive roots. | Before/After | Open page |
DET.APP.TAB_PANEL (accessibility) current | Selected tabs expose aria-selected, aria-controls, and a visible panel. | Before/After | Open page |
DET.APP.TILE_AFFORDANCE (conversion) current | Link-styled dashboard tiles are operable links or keyboard buttons. | Before/After | Open page |
DET.APP.TOAST_LIFECYCLE (accessibility) current | Toasts use live regions, dismiss when persistent, and avoid covering CTAs. | Before/After | Open page |
DET.APP.WIZARD_PROGRESS_CONTROLS (informationArchitecture) current | Wizards expose step progress, Back/Next, and disabled-next reasons. | Before/After | Open page |
DET.APP.WORK_STATE_PERSISTENCE (informationArchitecture) current | Editable workspaces expose autosave, draft recovery, or saved-view persistence cues. | Before/After | Open page |
DET.BUTTON.GROUP.MAX (conversion) current | Horizontal CTA and toolbar clusters expose at most three visible actions before overflow or disclosure; extras belong in menus, secondary links, or follow-on sections. | Before/After | Open page |
DET.CARD.ACTION_LIMIT (conversion) current | Each standard Kitchen Sink card exposes at most one filled primary CTA; extra actions use outline/secondary buttons, text links, or an explicit toolbar-card contract. | Before/After | Open page |
DET.CARD.TITLE (accessibility) current | Every Kitchen Sink card root exposes a visible title (heading or .card-title) or an equivalent accessible name via aria-labelledby or aria-label. | Before/After | Open page |
DET.CATALOG.CONTRACT_SPECIFICITY (visual-catalog) current | Registry-linked design contracts must carry hash-specific Expected look, Anatomy, Forbidden patterns, and Deterministic checks—not thin generic boilerplate or duplicated slabs pasted across unrelated… | Before/After | Open page |
DET.CHART.ALT_SUMMARY (accessibility) current | Every visible Kitchen Sink chart or graph mount exposes a non-trivial text summary, aria-describedby target, or nearby caption for non-visual readers. | Before/After | Open page |
DET.CHROME.BOUNDARY (informationArchitecture) current | Visible header, footer, and sidebar chrome outside main must separate from the reading canvas via border, distinct background, or box-shadow per chrome-region contracts. | Before/After | Open page |
DET.CONTEXT.BURDEN (first-screen) current | Quantitative caps on header navigation, pre-main link clusters, nav chrome bands, and hero-fold interactive controls keep public homepages story-led instead of docs-shaped. | Before/After | Open page |
DET.CONTRACT.PATH (visual-catalog) current | Active visual-registry rows with contract_status own or family-covered must point at an on-disk design contract Markdown file under docs/design/catalog/. | Before/After | Open page |
DET.CONTRACT.PLACEHOLDERS (visual-catalog) current | Registry-linked design contracts must not ship template filler (lorem ipsum, XYZ headings, insert markers) or unresolved TBD/TODO/FIXME stub bullets when strict catalog lint is enabled. | Before/After | Open page |
DET.CTA.HIERARCHY (conversion) current | Each logical viewport region—hero, open modal or panel, sticky footer band—exposes at most one filled primary action; competing primaries demote to outline, text link, or disclosure. | Before/After | Open page |
DET.CTA.LABEL_NONEMPTY (accessibility) current | Every visible button, link, and role=button/link control exposes at least one trimmed character of accessible name via visible text, aria-label, aria-labelledby, value/alt, or sr-only helper text. | Before/After | Open page |
DET.DATA.COLOR_ONLY (accessibility) current | Chart legends, token swatches, and encoded table cells must pair color with visible text, patterns, or icons—not hue alone where the auditor can detect a swatch or fill. | Before/After | Open page |
DET.DATA.TABLE_HEADERS (accessibility) current | Visible Kitchen Sink data tables expose column or row headers with valid th scope or explicit headers associations on body cells. | Before/After | Open page |
DET.DIAGRAM.ALT (accessibility) current | aria-hidden, role, and alt/aria-label must agree for Kitchen Sink diagram tiles, ASCII figures, and catalog-linked SVG mounts. | Before/After | Open page |
DET.DIAGRAM.ASSET_REGISTRY (visual-catalog) current | Diagram catalog keys and shipped assets/svg paths must roll up under active diagram-family and diagram-asset-group rows in the Kitchen Sink visual registry before consumers render them. | Before/After | Open page |
DET.DIAGRAM.LABELS (visual-catalog) current | Catalog-linked diagram tiles must expose readable SVG or ASCII text that matches js/ks-diagram-catalog.js legend node keys (items[].node). | Before/After | Open page |
DET.EXTERNAL_LINK.SAFETY (trust) missing | trust · minor | Before/After | Open page |
DET.FORM.LABEL_ERROR_SUMMARY (accessibility) current | Multi-field forms expose visible labels, inline field errors, and a submit-time error summary. | Before/After | Open page |
DET.HASH.MARKERS (visual-catalog) current | Each governed visual root emits matching hash="XYZ" and data-ks-hash="XYZ" values (exactly three ASCII letters). | Before/After | Open page |
DET.HASH.REGISTRY_ROW (visual-catalog) current | Each emitted three-letter KS hash must exist in visual-registry.generated.json with registry type matching data-ks-type when that attribute is present. | Before/After | Open page |
DET.HTML.EMPTY_INLINE (accessibility) current | Main content must not contain empty strong or em tags—common when autodoc table focus rows or Markdown transforms emit emphasis wrappers without visible text. | Before/After | Open page |
DET.INVENTORY.CROSSWALK (visual-catalog) current | Showcase-emitted KS hashes must be a subset of visual-registry.generated.json; no invalid-format hash tokens in showcase HTML or JS. | Before/After | Open page |
DET.JS.NO_CONSOLE_ERROR (interaction) current | Playwright smoke must complete tab, collapse, theme, and nav toggles without console errors or uncaught page exceptions on Kitchen Sink scripted surfaces. | Before/After | Open page |
DET.JS.PROGRESSIVE (interaction) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.KS.CONSUMER_ASSET_BUNDLE (visual-catalog) current | KS consumer pages load required theme and react-primitive CSS; Vite asset links resolve in live crawl. | Before/After | Open page |
DET.KS.CONTRACT_EXAMPLE_SYNC (visual-catalog) current | Rule-page examples, defect fixtures, and contract verification snippets stay aligned per governed hash and rule id. | Before/After | Open page |
DET.KS.CSS_SCOPE_LEAK (visual-catalog) current | KS theme CSS does not apply destructive global styles to host-app controls outside governed roots. | Before/After | Open page |
DET.KS.HASH_SEMANTIC_UNIQUENESS (visual-catalog) current | A KS hash is not reused for unrelated data-ks-type and data-ks-name anatomy on the same page or build output. | Before/After | Open page |
DET.KS.PRIMITIVE_VERSION_MATCH (visual-catalog) current | Runtime data-ks-primitive-version matches registry/contract primitive_version when either is present. | Before/After | Open page |
DET.KS.VISUAL_FAMILY_COVERAGE (visual-catalog) current | Consumer-bound components, react primitives, and SVG assets have registry rows and contracts where policy requires. | Before/After | Open page |
DET.LANDMARKS.REQUIRED (accessibility) current | Each page exposes exactly one main landmark, a navigation landmark when global wayfinding exists outside main, and semantic header/footer landmarks when site chrome is present—each unique at document… | Before/After | Open page |
DET.LAYOUT.GRID_CONSISTENCY (readability) current | Long-form body copy aligns to KS layout containers (max width, gutters); no accidental full-bleed text rivers, section gutter drift, excessive measure, or handbook dead gutter beside the doc sidebar. | Before/After | Open page |
DET.LOADING.EMPTY_ERROR_STATES (informationArchitecture) missing | informationArchitecture · major | Before/After | Open page |
DET.MEDIA.ASPECT_RATIO (first-screen) missing | first-screen · warn | Before/After | Open page |
DET.METADATA.SOCIAL_PREVIEW (metadata) missing | metadata · minor | Before/After | Open page |
DET.MOBILE.NAV_DISCLOSURE (accessibility) missing | accessibility · major | Before/After | Open page |
DET.MOTION.NO_AUTO_PLAY_FLASH (accessibility) current | Visible CSS animations and autoplay video must stay below WCAG general flash frequency (more than three flashes per second) and avoid blink/strobe keyframe names. | Before/After | Open page |
DET.MOTION.PREFERS_REDUCED (accessibility) current | When the user enables reduced motion, non-essential CSS animation, transitions, autoplay video, and SVG SMIL must stop; essential loading and progress indicators may continue. | Before/After | Open page |
DET.NAV.BREADCRUMB (informationArchitecture) current | Handbook, product, and showcase hub pages expose visible Kbc breadcrumb chrome when doc-sidebar rails or showcase mastheads signal deep IA—home and marketing landing layouts are exempt. | Before/After | Open page |
DET.NAV.DEDUP (informationArchitecture) current | Same navigational destination must not repeat across conflicting chrome bands (primary, sidebar, offcanvas) without breadcrumb hierarchy or intentional IA split. | Before/After | Open page |
DET.NAV.DEPTH (informationArchitecture) current | Global primary nav outside main stays at top level plus one flyout tier (list depth ≤ 2); deeper trees belong in Ksr sidebar, offcanvas, or an explicit mega-menu pattern (≤ 4 tiers). | Before/After | Open page |
DET.NAV.FOCUS_ORDER (accessibility) current | Tab traversal follows top-to-bottom, left-to-right reading order on sampled paths through header, main, and footer chrome—no positive tabindex, large upward jumps, or row inversions. | Before/After | Open page |
DET.NAV.IN_PAGE_TOC (informationArchitecture) current | Handbook and doc-hub pages expose visible Ktx on-this-page navigation when outline or word count exceeds threshold; every TOC hash link resolves to a heading inside main. | Before/After | Open page |
DET.NAVLAYOUT.FOCUS_TRAP missing | minor | Before/After | Open page |
DET.NAVLAYOUT.HASH_ROOT missing | minor | Before/After | Open page |
DET.NAVLAYOUT.ORACLE_PRESENT missing | minor | Before/After | Open page |
DET.NAVLAYOUT.REDUCED_MOTION missing | minor | Before/After | Open page |
DET.PAGE.LANG (accessibility) current | The root html element declares a BCP 47 language tag so assistive tech, hyphenation, and translation tools can infer the page's primary language. | Before/After | Open page |
DET.PAGE.MODE (informationArchitecture) current | Each page declares one primary mode above the fold (marketing, handbook, listing, product, presentation, app) via KS layout metadata or compatible shell signals—no competing handbook chrome on landin… | Before/After | Open page |
DET.PAGE.TITLE (metadata) current | Every page exposes a non-empty, descriptive document title so browser tabs, bookmarks, search snippets, and assistive tech can identify the page without reading the body. | Before/After | Open page |
DET.PAGE.VIEWPORT (accessibility) current | Every web page declares a viewport meta tag so mobile browsers scale layout to device width instead of rendering a desktop-width column with pinch-zoom only. | Before/After | Open page |
DET.PROSE.LENGTH (readability) current | Visible paragraphs stay within the 85-word readability budget; card lists cap at three outcome bullets and main-column lists at twelve scannable items. | Before/After | Open page |
DET.PY.KS_HASH_ATTRS (visual-catalog) current | Python HTML renderers stamp governed visual roots through ks_hash_attrs or ks_catalog_hashes helpers—not inline hash or data-ks-* attribute strings. | Before/After | Open page |
DET.PY.OPTIONAL_REGIONS (informationArchitecture) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.RESPONSIVE.NO_HORIZONTAL_OVERFLOW (first-screen) missing | first-screen · major | Before/After | Open page |
DET.ROUTE.CONTENT_UNIQUENESS (informationArchitecture) missing | informationArchitecture · major | Before/After | Open page |
DET.ROUTE.HTTP_STATUS_CANONICAL (informationArchitecture) missing | informationArchitecture · major | Before/After | Open page |
DET.SCREENSHOT.STATUS (visual-catalog) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.SCROLL.PAGE_ONLY missing | minor | Before/After | Open page |
DET.SEARCH.FILTER_STATE (navigation) missing | navigation · warn | Before/After | Open page |
DET.SECTION.HEADING (semantics) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.SECTION.SINGLE_JOB (informationArchitecture) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.SPATIAL.HASH_ROOT (visual-catalog) current | Spatial showcase demos (Flp, Hol, Tlz, …) must emit paired hash and data-ks-hash markers on their root element. | Before/After | Open page |
DET.SPATIAL.ORACLE_PRESENT missing | minor | Before/After | Open page |
DET.SPATIAL.POINTER_COARSE_SKIP missing | minor | Before/After | Open page |
DET.SPATIAL.PRESERVE_3D_SUPPORT missing | minor | Before/After | Open page |
DET.SPATIAL.REDUCED_MOTION_STATIC missing | minor | Before/After | Open page |
DET.STATUS.FEEDBACK_REGION (accessibility) missing | accessibility · warn | Before/After | Open page |
DET.STUDIO.FULLPAGE_SHOT current | PDCA capture expands nested scroll roots so assessors see below-the-fold competing jobs. | Before/After | Open page |
DET.STUDIO.H1 current | Workspace exposes a non-empty h1 so page identity and rail match checks can run. | Before/After | Open page |
DET.STUDIO.HASH current | Governed Studio surfaces emit data-ks-hash on visual roots for catalog and regression traceability. | Before/After | Open page |
DET.STUDIO.JOB_BUDGET current | One primary workspace job per view; secondary jobs behind Svc tabs or disclosure—not competing H2 scroll sections. | Before/After | Open page |
DET.STUDIO.MECHANISM_LEAD current | Lead paragraph after H1 states human outcome before harvest/API/pipeline mechanism vocabulary. | Before/After | Open page |
DET.STUDIO.TESTID current | Pages expose data-testid hooks for Playwright PDCA gates and stable automation. | Before/After | Open page |
DET.STUDIO.TITLE_NAV_MATCH current | Page H1 matches the active app-rail label so operators always know where they are. | Before/After | Open page |
DET.SURFACE.ELEVATION_TOKEN (readability) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.TABLE.RESPONSIVE_CONTROLS (accessibility) missing | accessibility · major | Before/After | Open page |
DET.THEME.CONTRAST_MIN (accessibility) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.THEME.FONT_STACK (readability) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.THEME.RADIUS_SHADOW_TOKEN_DRIFT missing | minor | Before/After | Open page |
DET.THEME.SPACING_TOKEN_DRIFT missing | minor | Before/After | Open page |
DET.TOKEN.NO_DRIFT (readability) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
DET.VISUAL.RHYTHM (readability) current | Harness stub — open the handbook page for fixture context, Before/After, and remediation. | Before/After | Open page |
Maintainer metadata (versions, fingerprints)
| Rule | Registry | Page | page_version | generated_at |
|---|---|---|---|---|
DET.AMBIENT.Z_INDEX | implemented | current | 2b25223e2675734e… | 2026-05-19T12:00:00Z |
DET.APP.AI_PROVENANCE | implemented | current | 460a8845024f7b08… | 2026-08-13T02:54:59.996Z |
DET.APP.BULK_ACTION_SCOPE | implemented | current | 97e223cb22b18295… | 2026-08-13T02:31:56.997Z |
DET.APP.CLIENT_ERROR_LOG_CLEAN | implemented | current | 8c10a5efa9df3db8… | 2026-08-13T02:31:57.001Z |
DET.APP.CONTROL_A11Y | implemented | current | 0d83d076836cd9b2… | 2026-05-23T13:24:10Z |
DET.APP.DATA_REFRESH_STALENESS | implemented | current | 268202638f60f253… | 2026-08-13T02:31:57.010Z |
DET.APP.DEMO_DISCLOSURE | implemented | current | 21ddb6237563e9cc… | 2026-05-28T17:05:34.718Z |
DET.APP.DISABLED_REASON | implemented | current | 92ed77c94c7904dd… | 2026-08-13T02:31:57.015Z |
DET.APP.EMPTY_LOADING_ERROR_SUCCESS | implemented | current | 5be4ea9ab1153c5c… | 2026-08-13T02:31:57.017Z |
DET.APP.ERROR_BOUNDARY_RECOVERY | implemented | current | aeb27af67134ea35… | 2026-08-13T02:31:57.028Z |
DET.APP.FOCUS_TRAP | implemented | current | fa54f85a86239b0c… | 2026-05-19T20:15:00.000Z |
DET.APP.MODAL_DISMISSAL_GUARD | implemented | current | 7d5f3450a3d51854… | 2026-08-13T02:31:57.037Z |
DET.APP.PERSISTENT_CHROME | implemented | current | 2cce7e9b6941663d… | 2026-05-19T18:45:00.000Z |
DET.APP.PRIMARY_CTA | implemented | current | c77e5e20f41bdde9… | 2026-05-28T17:05:34.723Z |
DET.APP.PRIMARY_STATE | implemented | current | 2b2cf27faeb1cb5d… | 2026-05-28T17:05:34.727Z |
DET.APP.PRIMITIVE_MARKERS | implemented | current | c11418a99a10722e… | 2026-05-23T13:24:10Z |
DET.APP.PRIMITIVE_SOURCE | implemented | current | 4442b823bacd1c3e… | 2026-05-28T17:05:34.731Z |
DET.APP.PRIMITIVE_STYLES | implemented | current | 99ba11a044f8f491… | 2026-05-28T17:05:34.733Z |
DET.APP.ROUTE_DEEPLINK_STATE | implemented | current | bd901511c6c891a5… | 2026-08-13T02:31:57.045Z |
DET.APP.SHELL_INTEGRATION | implemented | current | d6679097aa455efb… | 2026-05-28T17:05:34.736Z |
DET.APP.TAB_PANEL | implemented | current | b2b1b6cdf3d830b2… | 2026-05-28T17:05:34.738Z |
DET.APP.TILE_AFFORDANCE | implemented | current | 434a258de5ac9ffe… | 2026-05-28T17:05:34.739Z |
DET.APP.TOAST_LIFECYCLE | implemented | current | d8a5e6b353e1e7c2… | 2026-08-13T02:31:57.049Z |
DET.APP.WIZARD_PROGRESS_CONTROLS | implemented | current | 441aea767ca5d203… | 2026-08-13T02:31:57.049Z |
DET.APP.WORK_STATE_PERSISTENCE | implemented | current | 4d908e875b164225… | 2026-08-13T02:55:00.035Z |
DET.BUTTON.GROUP.MAX | implemented | current | deeade550dd6b0bb… | 2026-05-19T20:15:00.000Z |
DET.CARD.ACTION_LIMIT | implemented | current | 027283a58b7fb397… | 2026-05-19T20:30:00.000Z |
DET.CARD.TITLE | implemented | current | 307a4c7b8e49c737… | 2026-05-19T19:12:00.000Z |
DET.CATALOG.CONTRACT_SPECIFICITY | implemented | current | ead5bfa4ac1bb0cf… | 2026-05-19T21:18:42.000Z |
DET.CHART.ALT_SUMMARY | implemented | current | 4cf13b868a97652c… | 2026-05-19T20:15:00.000Z |
DET.CHROME.BOUNDARY | implemented | current | 0a07923a0bc853e8… | 2026-05-19T20:15:00.000Z |
DET.CONTEXT.BURDEN | implemented | current | 8ed7dbbf91a9eefe… | 2026-05-19T21:30:00.000Z |
DET.CONTRACT.PATH | implemented | current | 848626e86a365232… | 2026-05-19T21:30:00.000Z |
DET.CONTRACT.PLACEHOLDERS | implemented | current | 532b64cc2b8c299e… | 2026-05-19T22:45:00.000Z |
DET.CTA.HIERARCHY | implemented | current | 7d0adc7985064ad5… | 2026-05-19T22:00:00.000Z |
DET.CTA.LABEL_NONEMPTY | implemented | current | 0cc9e7ee9238b539… | 2026-05-19T21:45:00.000Z |
DET.DATA.COLOR_ONLY | implemented | current | 0e2f78e4b63580f0… | 2026-05-19T21:45:00.000Z |
DET.DATA.TABLE_HEADERS | implemented | current | 3009d93382a3693a… | 2026-05-19T22:35:00.000Z |
DET.DIAGRAM.ALT | implemented | current | c2ab7e7153de1333… | 2026-05-19T21:45:00.000Z |
DET.DIAGRAM.ASSET_REGISTRY | implemented | current | cd428cae4e8e5dcd… | 2026-05-19T21:30:00.000Z |
DET.DIAGRAM.LABELS | implemented | current | a7d1ca51d575ec6d… | 2026-05-19T22:35:00.000Z |
DET.EXTERNAL_LINK.SAFETY | implemented | missing | 27c7f3b38eb92be8… | — |
DET.FORM.LABEL_ERROR_SUMMARY | implemented | current | ff733229fa88cc37… | 2026-08-13T02:31:57.071Z |
DET.HASH.MARKERS | implemented | current | f1ae381bf7bcb852… | 2026-05-19T22:20:00.000Z |
DET.HASH.REGISTRY_ROW | implemented | current | 949dc8ca3b8efaca… | 2026-05-19T22:45:00.000Z |
DET.HTML.EMPTY_INLINE | implemented | current | 0b7168d011bcb269… | 2026-05-25T11:30:00.000Z |
DET.INVENTORY.CROSSWALK | implemented | current | f3a0b4f85d20ea43… | 2026-05-25T14:32:00.000Z |
DET.JS.NO_CONSOLE_ERROR | implemented | current | 7e300ed7abefc067… | 2026-05-25T20:15:00.000Z |
DET.JS.PROGRESSIVE | implemented | current | c8300c84053af89a… | 2026-05-23T13:24:10Z |
DET.KS.CONSUMER_ASSET_BUNDLE | implemented | current | cc60b809f05a02ab… | 2026-05-28T20:30:00.000Z |
DET.KS.CONTRACT_EXAMPLE_SYNC | implemented | current | 373d976454d3f1c1… | 2026-05-28T20:30:00.000Z |
DET.KS.CSS_SCOPE_LEAK | implemented | current | 81a4a151ee134726… | 2026-05-28T20:30:00.000Z |
DET.KS.HASH_SEMANTIC_UNIQUENESS | implemented | current | 09a9534a9ea872d6… | 2026-05-28T20:30:00.000Z |
DET.KS.PRIMITIVE_VERSION_MATCH | implemented | current | d62aa3874ad23258… | 2026-05-28T20:30:00.000Z |
DET.KS.VISUAL_FAMILY_COVERAGE | implemented | current | 372fb6ccde94dcae… | 2026-05-28T20:30:00.000Z |
DET.LANDMARKS.REQUIRED | implemented | current | 881b1032b396bfc9… | 2026-05-25T12:00:00.000Z |
DET.LAYOUT.GRID_CONSISTENCY | implemented | current | c6b2a80fec72bb05… | 2026-05-25T14:00:00.000Z |
DET.LOADING.EMPTY_ERROR_STATES | implemented | missing | 67d20dcc3f53630d… | — |
DET.MEDIA.ASPECT_RATIO | implemented | missing | 68164ff05af411ac… | — |
DET.METADATA.SOCIAL_PREVIEW | implemented | missing | 5e5a0dc366d03d37… | — |
DET.MOBILE.NAV_DISCLOSURE | implemented | missing | 9cad94131447e5e9… | — |
DET.MOTION.NO_AUTO_PLAY_FLASH | implemented | current | 9b9cc8e4e70ccca5… | 2026-05-25T14:30:00.000Z |
DET.MOTION.PREFERS_REDUCED | implemented | current | ba704b046845ce6f… | 2026-05-25T16:30:00.000Z |
DET.NAV.BREADCRUMB | implemented | current | 610d62ebbaa882d5… | 2026-05-25T15:30:00.000Z |
DET.NAV.DEDUP | implemented | current | bcb3250c8589083c… | 2026-05-25T17:00:00.000Z |
DET.NAV.DEPTH | implemented | current | bac5e0016081460b… | 2026-05-25T18:00:00.000Z |
DET.NAV.FOCUS_ORDER | implemented | current | 555bab17dd9bce4f… | 2026-05-25T21:15:00.000Z |
DET.NAV.IN_PAGE_TOC | implemented | current | ff3a63a2098f666b… | 2026-05-25T20:30:00.000Z |
DET.NAVLAYOUT.FOCUS_TRAP | stub | missing | bfaf1a73288800e3… | — |
DET.NAVLAYOUT.HASH_ROOT | stub | missing | 1ff3337de820e481… | — |
DET.NAVLAYOUT.ORACLE_PRESENT | stub | missing | 9cbb27ac2b169629… | — |
DET.NAVLAYOUT.REDUCED_MOTION | stub | missing | b7ec6de38be4f011… | — |
DET.PAGE.LANG | implemented | current | 661657afbda75b63… | 2026-05-25T14:32:00.000Z |
DET.PAGE.MODE | implemented | current | dcd1e91b8f8ccccc… | 2026-05-25T19:00:00.000Z |
DET.PAGE.TITLE | implemented | current | 417f3664f6b9f482… | 2026-05-25T16:45:00.000Z |
DET.PAGE.VIEWPORT | implemented | current | 0c328d35ecd81437… | 2026-05-25T17:30:00.000Z |
DET.PROSE.LENGTH | implemented | current | 54c427c7bc70b67c… | 2026-05-25T18:30:00.000Z |
DET.PY.KS_HASH_ATTRS | implemented | current | de5768f49c9d7e5f… | 2026-05-25T16:20:00.000Z |
DET.PY.OPTIONAL_REGIONS | implemented | current | e40887ce72864aca… | 2026-05-23T13:24:10Z |
DET.RESPONSIVE.NO_HORIZONTAL_OVERFLOW | implemented | missing | fb60febc0efd83fe… | — |
DET.ROUTE.CONTENT_UNIQUENESS | implemented | missing | de8d89d55c74da96… | — |
DET.ROUTE.HTTP_STATUS_CANONICAL | implemented | missing | b1c6e09bc2b7ee23… | — |
DET.SCREENSHOT.STATUS | implemented | current | d10b8604068a062f… | 2026-05-23T13:24:10Z |
DET.SCROLL.PAGE_ONLY | stub | missing | d77a6d4c668c7180… | — |
DET.SEARCH.FILTER_STATE | implemented | missing | 3447d994d35ca27b… | — |
DET.SECTION.HEADING | implemented | current | 78c1baf2f436e662… | 2026-05-23T13:24:10Z |
DET.SECTION.SINGLE_JOB | implemented | current | 8127174a3da197c9… | 2026-05-23T13:24:10Z |
DET.SPATIAL.HASH_ROOT | implemented | current | 1b3aaed0d0d901d9… | 2026-07-22T00:00:00.000Z |
DET.SPATIAL.ORACLE_PRESENT | stub | missing | cc4afee4c20fb599… | — |
DET.SPATIAL.POINTER_COARSE_SKIP | stub | missing | 594e6a62800a888c… | — |
DET.SPATIAL.PRESERVE_3D_SUPPORT | stub | missing | b7df1c6e5c29dffb… | — |
DET.SPATIAL.REDUCED_MOTION_STATIC | stub | missing | 2571bb1350665ec9… | — |
DET.STATUS.FEEDBACK_REGION | implemented | missing | d48e0ff7273696ab… | — |
DET.STUDIO.FULLPAGE_SHOT | stub | current | 7a4fa8e1a9f25f9c… | 2026-08-13T00:00:00.000Z |
DET.STUDIO.H1 | stub | current | 0280725bc69635b7… | 2026-08-13T00:00:00.000Z |
DET.STUDIO.HASH | stub | current | e6c019f41fd50037… | 2026-08-13T00:00:00.000Z |
DET.STUDIO.JOB_BUDGET | stub | current | 3a4db172c90476c5… | 2026-08-13T00:00:00.000Z |
DET.STUDIO.MECHANISM_LEAD | stub | current | 21e66554b835c733… | 2026-08-13T00:00:00.000Z |
DET.STUDIO.TESTID | stub | current | f0ba01f2d6bd68ae… | 2026-08-13T00:00:00.000Z |
DET.STUDIO.TITLE_NAV_MATCH | stub | current | 0ec643185b306af7… | 2026-08-13T00:00:00.000Z |
DET.SURFACE.ELEVATION_TOKEN | implemented | current | 25b893d53a1f9087… | 2026-05-23T13:24:10Z |
DET.TABLE.RESPONSIVE_CONTROLS | implemented | missing | 248056d8dd8c7637… | — |
DET.THEME.CONTRAST_MIN | implemented | current | 7895270df87732cb… | 2026-05-23T13:24:10Z |
DET.THEME.FONT_STACK | implemented | current | 98a09642577c12bd… | 2026-05-25T13:41:26Z |
DET.THEME.RADIUS_SHADOW_TOKEN_DRIFT | stub | missing | 49044827145cf2c4… | — |
DET.THEME.SPACING_TOKEN_DRIFT | stub | missing | d73521d72f07633d… | — |
DET.TOKEN.NO_DRIFT | implemented | current | e0f97003e0294ff2… | 2026-05-23T13:24:10Z |
DET.VISUAL.RHYTHM | implemented | current | 6ac555668c53ab0e… | 2026-05-23T13:24:10Z |
AI rules
Each rule has its own page under ux-audit-rules/ — click the rule id or Open page for purpose, how it is fixed, Before/After, and remediation.
| Rule | What it checks | Examples | Open page |
|---|---|---|---|
AI.AMBIENT.READABILITY_CONFLICT current | Ambient SVG, canvas, and parallax layers must not compete with foreground copy, controls, or affordance clarity. | Before/After | Open page |
AI.APP.DENSITY_BALANCE current | Operator and console surfaces may be information-dense, but grouping, labels, and affordances must keep scans calm—not chaotic. | Before/After | Open page |
AI.APP.PRIMITIVE_CONSISTENCY current | KS React primitives on a run console must share one token-driven system for states, focus rings, density, and severity—not mixed Bootstrap one-offs. | Before/After | Open page |
AI.APP.WORKFLOW_CONTINUITY current | Panels, tabs, and routes must preserve sense of place—stable chrome, orientation cues, and predictable back/forward context. | Before/After | Open page |
AI.APP.WORKFLOW_RISK_GUARDRAILS current | Destructive or irreversible actions have proportionate guardrails. | Before/After | Open page |
AI.BRAND.GENERICITY_AND_DIFFERENTIATION current | The product feels intentionally branded—not generic template soup. | Before/After | Open page |
AI.CONTEXT.BURDEN_SUBJECTIVE current | Even when numeric first-screen caps pass, the page must not feel visually noisy, cognitively dense, or split by competing focal points. | Before/After | Open page |
AI.CONTEXT.COGNITIVE_CLARITY current | A first-time reader can form a correct mental model in one pass—jargon is explained before reuse, headings match substance, and depth is staged. | Before/After | Open page |
AI.CONTRACT.IMPLEMENTATION_USEFULNESS current | Design contracts must give engineers element-specific anatomy, states, and verification so hashed KS surfaces ship without guessing UX intent. | Before/After | Open page |
AI.CREDIBILITY.NO_OVERCLAIM current | Capabilities, metrics, certifications, and social proof are stated in bounded, verifiable ways—no invented logos, compliance badges, or performance numbers. | Before/After | Open page |
AI.DASHBOARD.ACTIONABILITY_PRIORITY current | Operator surfaces prioritize actionable next steps over vanity metrics. | Before/After | Open page |
AI.DATA.INSIGHT_LEGIBILITY current | Charts and data blocks must state the intended takeaway—not only render accurate geometry. | Before/After | Open page |
AI.DIAGRAM.SEMANTIC_ACCURACY current | Diagram topology, arrow direction, and node labels must match the mechanism described in captions, body copy, and catalog legend keys—not merely look polished. | Before/After | Open page |
AI.EMPTY_STATE.USEFULNESS current | Empty views explain why data is missing and offer a concrete next step. | Before/After | Open page |
AI.ERROR_COPY.REASSURANCE current | Errors reassure without blame and state a recovery path. | Before/After | Open page |
AI.FORM.FRICTION_AND_RECOVERY current | Users can recover from validation mistakes with inline guidance and preserved input. | Before/After | Open page |
AI.INFORMATION_SCENT.NEXT_STEP current | Labels, hierarchy, and CTAs make the next action obvious. | Before/After | Open page |
AI.JS.BEHAVIOR_DISCOVERABILITY current | Non-obvious scripted interactions must be hinted or documented—visible affordances, helper copy, and keyboard/touch parity—not hover-only secrets. | Before/After | Open page |
AI.MOTION.INTENTIONALITY current | Motion and transitions should guide attention toward the next read or action—not compete with copy, controls, or reading rhythm. | Before/After | Open page |
AI.NARRATIVE.COHERENCE current | The page tells one ordered story—problem, outcome, mechanism, next step—with section sequencing that does not contradict earlier claims. | Before/After | Open page |
AI.ONBOARDING.PROGRESSIVE_DISCLOSURE current | Complexity is revealed in stages matched to user readiness. | Before/After | Open page |
AI.PREMIUM.ENTERPRISE_FEEL current | Pages feel deliberate, calm, and confident—generous spacing, refined typography, consistent surfaces, and purposeful visuals—not hectic template soup. | Before/After | Open page |
AI.PY.HTML_AUTHORING_QUALITY current | Python renderers should emit intentional Kitchen Sink markup with clear section shells and stable heading ladders, not redundant wrapper soup. | Before/After | Open page |
AI.RESPONSIVE.CROSS_DEVICE_COMPREHENSION current | Meaning and hierarchy survive across breakpoints—not only reflow. | Before/After | Open page |
AI.THEME.PERSONALITY_COHERENCE current | Forge theme accents, dark foundation, and typography reinforce calm enterprise temperament—amber and cyan play predictable roles without fighting copy or mixing unrelated palettes. | Before/After | Open page |
AI.TRUST.BOUNDARY_CLARITY current | Data, execution, and human-control boundaries are stated in plain language a first-time reader can map—without insider jargon or hand-wavy AI magic. | Before/After | Open page |
AI.TRUST.DATA_FRESHNESS_PROVENANCE current | Users can judge whether numbers are current, scoped, and trustworthy. | Before/After | Open page |
AI.VISUAL.HIERARCHY current | Scale, contrast, and grouping establish an obvious focal path—hero → proof → depth—with one primary next read and no equal-weight shouting. | Before/After | Open page |
AI.VISUAL.PRODUCT_EXPLANATORY_VALUE current | Product visuals, diagrams, and hero imagery must explain structure or user benefit—not generic decoration that could ship on any SaaS landing page. | Before/After | Open page |
AI.VISUAL.RHYTHM_SUBJECTIVE current | Spacing and grouping feel intentional and repeatable—aligned grids, consistent section motifs, and predictable vertical cadence—not accidental pile-ups that pass numeric gap checks. | Before/After | Open page |
Maintainer metadata (versions, fingerprints)
| Rule | Registry | Page | page_version | generated_at |
|---|---|---|---|---|
AI.AMBIENT.READABILITY_CONFLICT | generated | current | 6de36bdf97bd2a4e… | 2026-05-19T16:45:00.000Z |
AI.APP.DENSITY_BALANCE | generated | current | 73e712370e4c9c6a… | 2026-05-19T18:22:00.000Z |
AI.APP.PRIMITIVE_CONSISTENCY | generated | current | 234258d3237a75d1… | 2026-05-19T19:45:00.000Z |
AI.APP.WORKFLOW_CONTINUITY | generated | current | 37680431d16e42e1… | 2026-05-19T20:15:00.000Z |
AI.APP.WORKFLOW_RISK_GUARDRAILS | implemented | current | 6cc82c17284e7c71… | 2026-08-13T02:31:57.132Z |
AI.BRAND.GENERICITY_AND_DIFFERENTIATION | implemented | current | ecdd256502983e48… | 2026-08-13T02:31:57.132Z |
AI.CONTEXT.BURDEN_SUBJECTIVE | generated | current | 5c7a1c97a37ff3c5… | 2026-05-19T19:30:00.000Z |
AI.CONTEXT.COGNITIVE_CLARITY | implemented | current | c98f19a56c2b082c… | 2026-05-19T20:15:00.000Z |
AI.CONTRACT.IMPLEMENTATION_USEFULNESS | generated | current | 0cdce8d76f13f9d2… | 2026-05-19T17:30:00.000Z |
AI.CREDIBILITY.NO_OVERCLAIM | generated | current | ad7570fedde364ac… | 2026-05-19T21:45:00.000Z |
AI.DASHBOARD.ACTIONABILITY_PRIORITY | implemented | current | de65d766ba28f234… | 2026-08-13T02:31:57.137Z |
AI.DATA.INSIGHT_LEGIBILITY | generated | current | b8857a2a24cd4eba… | 2026-05-19T19:45:00.000Z |
AI.DIAGRAM.SEMANTIC_ACCURACY | generated | current | c252a8777c94594a… | 2026-05-19T18:15:00.000Z |
AI.EMPTY_STATE.USEFULNESS | implemented | current | 9dfe36943d68303c… | 2026-08-13T02:31:57.139Z |
AI.ERROR_COPY.REASSURANCE | implemented | current | e17ad2cb30864d1f… | 2026-08-13T02:31:57.140Z |
AI.FORM.FRICTION_AND_RECOVERY | implemented | current | 61acc2df0ad87d2f… | 2026-08-13T02:31:57.144Z |
AI.INFORMATION_SCENT.NEXT_STEP | implemented | current | 392ea68b88d5e605… | 2026-08-13T02:31:57.146Z |
AI.JS.BEHAVIOR_DISCOVERABILITY | generated | current | e638667f9d533645… | 2026-05-19T21:45:00.000Z |
AI.MOTION.INTENTIONALITY | generated | current | a261f721a1ba9ed6… | 2026-05-19T22:30:00.000Z |
AI.NARRATIVE.COHERENCE | generated | current | e29e7cdc3e952b27… | 2026-05-19T23:12:00.000Z |
AI.ONBOARDING.PROGRESSIVE_DISCLOSURE | implemented | current | f11e754d87ae56d3… | 2026-08-13T02:31:57.149Z |
AI.PREMIUM.ENTERPRISE_FEEL | implemented | current | 654052a99fedd59f… | 2026-05-19T22:10:00.000Z |
AI.PY.HTML_AUTHORING_QUALITY | generated | current | 7f8a8515da18a9c3… | 2026-05-19T19:15:00.000Z |
AI.RESPONSIVE.CROSS_DEVICE_COMPREHENSION | implemented | current | b7ea0962cceff748… | 2026-08-13T02:31:57.152Z |
AI.THEME.PERSONALITY_COHERENCE | generated | current | 140ee40932ae73d0… | 2026-05-19T22:35:00.000Z |
AI.TRUST.BOUNDARY_CLARITY | generated | current | 4f2bac3c4e7a8cad… | 2026-05-19T22:45:00.000Z |
AI.TRUST.DATA_FRESHNESS_PROVENANCE | implemented | current | 0fa9c050f73cc64a… | 2026-08-13T02:31:57.154Z |
AI.VISUAL.HIERARCHY | implemented | current | 9f51b35ba3d4a195… | 2026-05-19T23:48:00.000Z |
AI.VISUAL.PRODUCT_EXPLANATORY_VALUE | implemented | current | e7ab9b3f6c3c1aeb… | 2026-05-19T22:45:00.000Z |
AI.VISUAL.RHYTHM_SUBJECTIVE | generated | current | 48c30ce14e1399e2… | 2026-05-19T23:15:00.000Z |