Figma UI kit
SDK and pipeline

Compliance gates

Every frontend change is read by the compliance script before merge. A failure names the gate, the file and the line.

Running the gate

Pass the files you changed; with no arguments it checks the whole frontend.

python scripts/check_frontend_compliance.py path/to/Changed.module.css

The gates

Hard failures block the merge outright. The rest fail the check and are reviewed.

GateRuleSeverity
C1Pressable controls sit on a height tier (28, 32 or 36px)Hard failure
C2Sticky headers and footers inherit the container, never chromeCheck
C3No native select on a design-system surfaceCheck
C4Field containers and section lists use gap, not marginsCheck
C5Icon-bearing section headers are flex rowsHard failure
C6Action buttons size to their content, not 100%Check
C7Drawer root, body and footer keep the flex columnCheck
C8No dashed or dotted bordersHard failure
C9Textareas share the input contractCheck
C1010px text only on data-grid column headsCheck
C12Spotlight tour anchors still existCheck
C13v1-only tokens need the data-ds opt-inHard failure
C14Infinite loops never distort geometryHard failure
C15No status hue on a pressable controlCheck
C16No pill radius on a pressable controlHard failure
C17No all-caps headingsHard failure
C19Surfaces take the surface radius tierCheck
C20Dynamic pills in a header are boundedHard failure
C21No zero padding on a pressable controlCheck
C24Fixed side panels sit under the app headerCheck

Marking an exception

A deliberate exception carries a marker with a reason. The marker never passes on its own: the gate still checks the condition it trades for, such as the 44px boundary on a compact chip.

Do
.filterChip { /* ds-chip: tappable filter, 20px */
  height: 20px;
}
.filterChip::after { inset: -12px; }
Do: mark the rule with a reason and provide what the exemption trades for.
Avoid
.filterChip { /* ds-chip */
  height: 20px;
}
Avoid: a bare marker with no reason and no ::after. Gate C1 still fails it.
  • ds-chip and ds-glyph-badge: compact pressables, verified 44px boundary.
  • ds-reset: a control whose zero padding is the point.
  • ds-full-bleed: a control that genuinely is a full-width container.
  • ds-exempt: anything else, always with a reason a reviewer can check.

More in SDK and pipeline