Talk to the Director →
designesy.

Sibling contract

Drift

Drift is the named 2026 design-system crisis: AI-generated UI drifts off-contract in four documented ways. This contract defines the checks that detect drift deterministically from compiled CSS, not from prose advice.

Version 0.1.0 · provisional · machine export

Source authority

Primary

Designesy design intelligence research 2026-08-01

Drift taxonomy

Superdesign / DLS Lead / Codexical — four-mode drift taxonomy

Scale signal

OverlayQA — ~160 visual issues per AI-generated app (Jason Arbon, 1000+ checks)

Drift rate

Figma 2025 — 23% design-system drift in 8 weeks without formal review vs 4% with it

The four drift modes

01token fabricationvar() references to custom properties not declared in :root — the model invents token names that look real but have no definition
02within session driftSame semantic value (spacing, color, radius) uses different raw values across pages within a single build session
03between session amnesiaValues established in a previous session are not reused — the model re-derives from scratch and produces a different result
04silent breaking changesToken values changed without version bump — downstream consumers inherit the change without signal

Conformance

Detection method

Fetch the URL HTML + all linked CSS. Extract :root custom property declarations and all var() references. Compare declared tokens against referenced tokens. Measure value variance across declarations for spacing, color, radius, shadow, and timing.

Verification

12 checks — 12 checks. PASS=1, WARN=0.5, FAIL=0. Score = (points/12) × 100. A≥90, B≥80, C≥70, D≥60, F<60.

01d01 · Token registry declared — :root has ≥5 custom propertiesPASS: Token registry found with N custom properties · FAIL: No :root custom property declarations detected — the site has no token system
02d02 · No fabricated tokens — all var() references resolve to :root declarationsPASS: All var() references resolve · FAIL: N var() references to undeclared custom properties — token fabrication detected · WARN: 1-2 undeclared references (may be third-party or fallback chains)
03d03 · Inline color values minimized — raw hex/rgb replaced by token referencesPASS: ≤5 inline color values found (N color tokens available) · FAIL: >20 inline color values — color system bypassed · WARN: 6-20 inline color values — partial token adoption
04d04 · Spacing values cluster on a scale — padding/margin values follow a systemPASS: Spacing values cluster on ≤6 distinct steps · FAIL: >15 distinct spacing values — no spacing scale · WARN: 7-15 distinct spacing values — loose scale
05d05 · Color values consistent — same semantic role uses the same valuePASS: Color values consistent across declarations · FAIL: Same semantic color used with N different raw values — color drift · WARN: 2-3 variants of a semantic color detected
06d06 · Font-family consistent — single font stack or documented systemPASS: ≤2 distinct font-family stacks · FAIL: >4 distinct font-family stacks — typography drift · WARN: 3-4 distinct font-family stacks
07d07 · Border-radius values cluster — consistent radii or documented scalePASS: Border-radius values cluster on ≤4 distinct radii · FAIL: >8 distinct border-radius values — radius drift · WARN: 5-8 distinct border-radius values
08d08 · Shadow values consistent — shadow tokens or inlinePASS: ≤3 distinct box-shadow values · FAIL: >6 distinct box-shadow values — shadow drift · WARN: 4-6 distinct box-shadow values
09d09 · Transition duration/easing consistent — motion tokens or scatteredPASS: Transition durations cluster on ≤4 distinct values · FAIL: >8 distinct transition durations — motion drift · WARN: 5-8 distinct transition durations
10d10 · Z-index values within a sane range — no chaosPASS: All z-index values within 0-100 · FAIL: Z-index values exceed 100 or scatter across >10 levels — stacking chaos · WARN: Z-index values reach 50-100
11d11 · Undeclared custom property ratio — % of var() calls with no :root definitionPASS: <5% undeclared var() references · FAIL: >20% undeclared — widespread token fabrication · WARN: 5-20% undeclared — moderate fabrication
12d12 · Token alias chains resolve — var(--x, var(--y)) chains don't danglePASS: All alias chains resolve to a declared value · FAIL: N alias chains reference undeclared tokens — dangling references · WARN: 1-2 dangling alias chains

Validation: Designesy drift engine — CSS extraction + var() reference analysis. Method: Fetch HTML + linked CSS, extract :root declarations and var() calls, compute variance. Browser-only checks: None — all 12 checks are static CSS/HTML analysis, no browser needed.

Open questions

Run it

Score any URL for drift:

The drift contract is the first scoring engine that detects AI-generated UI drift deterministically — not prose advice, but 12 checks against compiled CSS. Machine export.