{
"schemaVersion": 1,
"status": "public",
"scope": "Frame-styled React interfaces; validate against the selected released component and style set.",
"execution": "Descriptive rules, not executable configuration or an installed checker.",
"sourceMapping": "Constraint IDs map to the 11 implementation constraints in the public AI implementation guide; principle IDs map to the public Frame design principles.",
"severityMeaning": "Requirement severity is distinct from automation: advisory emits warnings, human-only has no machine enforcement, partial-error catches selected patterns only.",
"rules": [
{
"id": "FRAME-01",
"title": "Token colors",
"severity": "error",
"requirement": "Use semantic token classes for UI colors.",
"automation": "partial-error",
"checks": "Selected bracket-hex, palette and same-line inline style literals.",
"cannotCheck": "Computed values, alternate syntax, contrast and token existence.",
"examples": {
"conforming": "text-text-primary",
"nonconforming": "text-[#142740]"
},
"humanReview": "Verify theme and semantic meaning.",
"source": {
"implementationConstraint": 1,
"principles": [
2
]
}
},
{
"id": "FRAME-02",
"title": "Typography",
"severity": "error",
"requirement": "Use available Frame type-* styles.",
"automation": "partial-error",
"checks": "Selected px text/leading and native type/weight classes.",
"cannotCheck": "Other units, dynamic classes, CSS overrides and installed style availability.",
"examples": {
"conforming": "type-detail",
"nonconforming": "text-sm"
},
"humanReview": "Inspect readable hierarchy at each viewport.",
"source": {
"implementationConstraint": 2,
"principles": [
7
]
}
},
{
"id": "FRAME-03",
"title": "Token alpha",
"severity": "error",
"requirement": "Choose an explicit semantic token instead of numeric slash alpha.",
"automation": "partial-error",
"checks": "Numeric slash alpha on fixed Frame token-family prefixes.",
"cannotCheck": "Arbitrary alpha syntax, new prefixes and actual generated CSS.",
"examples": {
"conforming": "text-text-secondary",
"nonconforming": "text-text-primary/60"
},
"humanReview": "Inspect intended opacity and contrast in both themes.",
"source": {
"implementationConstraint": 3,
"principles": [
2,
9
]
}
},
{
"id": "FRAME-04",
"title": "Surface separation",
"severity": "error",
"requirement": "Use fill or border on a card/panel; dashed placeholders may use both.",
"automation": "human-only",
"checks": "No current automated check.",
"cannotCheck": "Surface semantics, nested layers and visual hierarchy.",
"examples": {
"conforming": "bg-bg-hover rounded-xl",
"nonconforming": "bg-bg-hover border border-stroke-outline"
},
"humanReview": "Decide whether a dashed border communicates a placeholder.",
"source": {
"implementationConstraint": 4,
"principles": [
12
]
}
},
{
"id": "FRAME-05",
"title": "Shared composition",
"severity": "error",
"requirement": "Reuse and compose released primitives before creating shared extensions.",
"automation": "human-only",
"checks": "No current automated check.",
"cannotCheck": "Component availability, duplicated behavior and dependency closure.",
"examples": {
"conforming": "Compose an available StatusTag",
"nonconforming": "Copy the StatusTag implementation into each page"
},
"humanReview": "Review the consumer shared module and extension contract.",
"source": {
"implementationConstraint": 5,
"principles": [
1,
11
]
}
},
{
"id": "FRAME-06",
"title": "UI icons",
"severity": "error",
"requirement": "Use lucide-react for chrome; do not use emoji, letters or inline SVG as icon substitutes.",
"automation": "partial-error",
"checks": "Selected emoji codepoints/escapes/entities with comment heuristics in current scoped files.",
"cannotCheck": "Other libraries, inline SVG, letter substitutes, generated-message semantics and all Unicode emoji sequences.",
"examples": {
"conforming": " from lucide-react",
"nonconforming": ""
},
"humanReview": "Separate UI chrome from generated message copy; review semantic exceptions.",
"source": {
"implementationConstraint": 6,
"principles": [
8
]
}
},
{
"id": "FRAME-07",
"title": "Media controls",
"severity": "error",
"requirement": "Use available overlay/inverted IconButton tones over media; light backplates need dark glyphs.",
"automation": "human-only",
"checks": "No current automated check.",
"cannotCheck": "Rendered contrast across variable media and themes.",
"examples": {
"conforming": "IconButton tone=\"inverted\" with its dark glyph",
"nonconforming": "White glyph on a white media backplate"
},
"humanReview": "Inspect real media, focus and both themes.",
"source": {
"implementationConstraint": 7,
"principles": [
9
]
}
},
{
"id": "FRAME-08",
"title": "Gradient roles",
"severity": "error",
"requirement": "Use available brand-gradient for backdrops and gradient-btn for buttons.",
"automation": "human-only",
"checks": "No current automated check.",
"cannotCheck": "Installed utility availability, CSS descendants and visual budget.",
"examples": {
"conforming": "brand-gradient backdrop",
"nonconforming": "gradient-btn passive panel"
},
"humanReview": "Review scarce gradient use and descendant glyph contrast.",
"source": {
"implementationConstraint": 8,
"principles": [
3,
4,
5
]
}
},
{
"id": "FRAME-09",
"title": "Mobile targets",
"severity": "error",
"requirement": "Provide effective mobile touch bounds of at least 44 by 44 CSS pixels.",
"automation": "advisory",
"checks": "Small same-line IconButton and added a/button inferred vertical-floor warnings.",
"cannotCheck": "Width, actual layout, CSS conflicts, multiline props and unchanged opening tags.",
"examples": {
"conforming": "Measured 44 by 44 effective hit area",
"nonconforming": "Bare IconButton size={24} on mobile"
},
"humanReview": "Measure actual bounds and spacing; warnings are not enforcement.",
"source": {
"implementationConstraint": 9,
"principles": []
}
},
{
"id": "FRAME-10",
"title": "Keyboard focus",
"severity": "error",
"requirement": "Preserve visible focus; provide a replacement when overriding global focus.",
"automation": "human-only",
"checks": "No current automated check.",
"cannotCheck": "Keyboard reachability, focus visibility, clipping and media contrast.",
"examples": {
"conforming": "Visible focus-visible ring",
"nonconforming": "focus-visible:outline-none with no replacement"
},
"humanReview": "Exercise keyboard navigation and dismissal in context.",
"source": {
"implementationConstraint": 10,
"principles": []
}
},
{
"id": "FRAME-11",
"title": "Accessible identity and state",
"severity": "error",
"requirement": "Name icon-only controls and expose matching selected/pressed states.",
"automation": "human-only",
"checks": "No current automated check.",
"cannotCheck": "Accessible tree, label-in-name, dynamic announcements and actual behavior.",
"examples": {
"conforming": "IconButton ariaLabel=\"Close\"",
"nonconforming": "Unnamed icon-only button"
},
"humanReview": "Check rendered names; preserve visible labels and control identity when adding reasons.",
"source": {
"implementationConstraint": 11,
"principles": []
}
}
]
}