# Style Guide Schema — Layer 3 Specialized Document Type
# KNO Schema Version: 0.2.0
#
# Layer 3 schema that extends document-schema.kno for design systems.
# Defines the structure for visual design specifications.
#
# PURPOSE: Define the schema for design system documents.
# Every file with `type: style-guide` conforms to this schema.
#
# EXTENDS: document-schema.kno (which composes identity, history, quality)
# ENABLES: Design token extraction, CSS generation, component libraries
# =============================================================================
# SCHEMA DECLARATION (RFC-007)
# =============================================================================
$schema: kno@0.0.9
# =============================================================================
# BASIC TIER
# =============================================================================
id: 01KGK3V73J1EA5TG5A6EZ78CV7
slug: style-guide-schema
type: spec
version: 0.2.0
# =============================================================================
# STANDARD TIER
# =============================================================================
title: "Style Guide Schema"
purpose: |
Define the schema for design system documents.
**What is a style guide?** A style guide is a .kno document that defines
the visual design system for a product, brand, or organization. It serves
as the single source of truth for:
- Typography (fonts, scales, line heights)
- Colors (palettes, semantic tokens, themes)
- Spacing (scales, rhythm, density)
- Components (buttons, cards, forms)
- Patterns (interactions, animations, states)
**Why .kno?** A style guide as .kno enables:
- **Design token extraction** — Generate CSS custom properties at build time
- **Type-safe tokens** — TypeScript definitions for design tokens
- **Cross-platform** — Same tokens for web, mobile, docs
- **Validation** — Ensure design consistency through schema validation
- **Versioning** — Track design system evolution with P9 history
# =============================================================================
# RICH TIER — Relationships
# =============================================================================
provenance:
origin:
id: 01KGK3V73J1EA5TG5A6EZ78CV7
timestamp: "2026-02-04T01:47:56Z"
tool: manual-migration
taxonomy:
topics:
- design-systems
- visual-design
- typography
- color-theory
- ui-components
keywords:
- style-guide
- design-tokens
- css-variables
- typography
- color-palette
- spacing
- components
relationships:
extends:
- xri: "kno://specs/document-schema"
reason: "Layer 2 base type"
depends_on:
- xri: "kno://specs/kno-spec"
reason: "kno@0.0.9 defines the format"
composes:
# Inherited through document-schema.kno:
- xri: "kno://specs/identity-schema"
reason: "Layer 1: id, canonical_id"
- xri: "kno://specs/history-schema"
reason: "Layer 1: _history, changelog"
- xri: "kno://specs/quality-schema"
reason: "Layer 1: quality, validation"
produces:
# Output formats via conversion:
- xri: "kno://specs/css-format"
reason: "Via style-guide-to-css conversion"
enables:
# What style guides power:
- xri: "kno://capabilities/css-generation"
reason: "Build-time token extraction"
- xri: "kno://capabilities/component-library"
reason: "Consistent component styling"
- xri: "kno://capabilities/documentation"
reason: "Design system docs"
- xri: "kno://capabilities/theme-switching"
reason: "Light/dark/custom themes"
related_to:
- xri: "kno://specs/brand-schema"
reason: "Brand identity uses style guide"
- xri: "kno://specs/component-schema"
reason: "Components reference style guide"
- xri: "kno://specs/css-format"
reason: "Output format (conversion inferred from produces relationship)"
- xri: "kno://specs/design-system-review-schema"
reason: "Sibling schema for design-system review entities (page-scale + ds-scale
lens framework)"
projects_to:
# NEW relationship type (Pass 11 §3.12) — records the auto-generation coupling
# between style-guide instances and the CSS custom-properties they project.
# Generators MUST regenerate the projection target on any value change.
- xri: "kno://services/pspace-site/src/styles/tokens.css"
reason: "CSS custom-properties projection via
scripts/generate-css-from-style-guide.ts"
generator: "scripts/generate-css-from-style-guide.ts"
regeneration_required_on_change: true
quality:
completeness: 0.9
last_reviewed: "2026-01-07"
review_status: draft
reviewed_by: "claude"
# =============================================================================
# HISTORY (P9 Temporal)
# =============================================================================
_history:
retention: full
format: snapshot
versions:
- version: "0.2.0"
date: "2026-05-05"
author: "claude"
summary: "Added information_architecture optional_section codifying R-167
grouped-overflow nav pattern (#2320.c / M58 Phase C)"
changes:
- "Added information_architecture optional_section: primary_nav
(max_visible_tabs=6, grouped-dropdown overflow), sub_route_absorption
(absorbs[] mechanism), light_dismiss (outside-click + Escape with
idempotent binding), accessibility (summary/menu/menuitem roles +
aria-current), nav_surfaces (Header.primaryNav + DocsLayout secondary
nav), icon_library (lucide via astro-icon)."
- "No required-field shape change; existing consumers unaffected."
- version: "0.1.0"
date: "2026-04-30"
author: "claude"
summary: "Pass 11 schema extension — adds 13 new section/policy blocks codifying
Pass 1-10 canonical rules (R-100…R-941)"
changes:
- "Added brand_identity recommended_section (R-100, R-102, R-103, R-105,
R-106)"
- "Added typography_invariants recommended_section with hard_tuning_gate
flag (R-110-R-117)"
- "Added color_token_policy recommended_section including hex_ban policy
(R-130-R-135)"
- "Added container_widths optional_section (R-140-R-143)"
- "Added footer_contract + hero_aesthetic optional_sections
(R-144-R-148)"
- "Added accessibility_floors recommended_section with tiered
touch-target rule (R-200-R-214)"
- "Added component_canonicalisation recommended_section registry shape
(R-300-R-309)"
- "Added diagram_policy optional_section (R-220-R-228)"
- "Added motion_policy optional_section (R-380-R-385)"
- "Added content_voice_policy recommended_section (R-360-R-364,
R-400-R-404)"
- "Added tooling_policy optional_section (R-500-R-509)"
- "Added review_capability optional_section as forward-pointer to new
design-system-review-schema sibling"
- "Added projects_to relationship type to track tokens.css generator
coupling"
- "Added 15 new validation rules (no_inline_hex_in_components,
wordmark_text_invariant, deprecated_brand_names_banned,
kno_vs_dotkno_vernacular, provider_name_banlist,
spec_version_status_header_required, d2_header_required,
d2_no_banned_features, d2_comment_prefix_house_style,
view_transitions_data_astro_rerun, ssr_no_outerhtml_for_state,
component_jsdoc_spec_source_citation, route_rename_uses_301,
script_idempotent_init_marker, no_emoji_in_diagrams)"
- "All additions are additive — no required-field shape change; existing
consumers continue reading what they read today"
- "Catalog source: tmp/design-rules-catalog/10-canonical-catalog.md (130
R-NNN rules)"
- version: "0.0.3"
date: "2026-06-02"
author: "claude"
summary: "Added guidelines section for prescriptive UX/design patterns"
changes:
- "Added guidelines as recommended_section with id, title, applies_to,
rationale, do, avoid, reference fields"
- "Distinguishes guidelines (implementation opinions) from principles
(design philosophy)"
- version: "0.0.2"
date: "2026-02-22"
author: "claude"
summary: "Extended schema for full .kno-driven CSS pipeline"
changes:
- "Added heading_styles and google_fonts_url to typography"
- "Added navigation, terminal_dots, alternatives to colors"
- "Added layout section (footer_spacing, max_width)"
- "Extended shadows and borders descriptions"
- version: "0.0.1"
date: "2026-01-07"
author: "claude"
summary: "Initial style guide schema"
changes:
- "Created Layer 3 schema for design systems"
- "Defined spec structure with required/optional sections"
- "Added design token field definitions"
# =============================================================================
# SPECIFICATION CONTENT
# =============================================================================
spec:
status: Draft
description: |
## What is a Style Guide?
A **style guide** is a .kno document that defines the complete visual
design system. Unlike a brand guide (which covers identity, voice, and
positioning), a style guide focuses on **implementation-ready tokens**
that can be extracted into CSS, TypeScript, or other formats.
## Schema Philosophy
**Right-sized structure.** The schema defines sections for common design
concerns (typography, colors, spacing) but doesn't mandate exhaustive
detail. A minimal style guide might only define colors and fonts.
A comprehensive one might include animations, accessibility, and
responsive breakpoints.
**Token-first.** Every value should be extractable as a design token.
Instead of prose descriptions, values are structured for machine parsing.
**Semantic naming.** Tokens use semantic names (`text-muted`, `accent`)
rather than literal values (`#666`, `#d69e5a`). This enables theming.
# ===========================================================================
# REQUIRED SECTIONS
# ===========================================================================
required_sections:
- name: "identity"
description: "BASIC tier fields (id, type, version)"
- name: "metadata"
description: "Name, description, version of the design system"
# ===========================================================================
# RECOMMENDED SECTIONS
# ===========================================================================
recommended_sections:
- name: "principles"
description: "Design philosophy and guiding principles"
structure:
type: array
items:
name: string
description: string
- name: "typography"
description: "Font families, type scale, line heights"
structure:
font_families:
type: object
description: "Named font stacks (display, body, mono)"
fields:
name: string # e.g., "Source Serif 4"
fallback: string # e.g., "Georgia, serif"
css_variable: string # e.g., "--font-serif"
usage: array # Where this font is used
type_scale:
type: object
description: "Named sizes (xs, sm, md, lg, xl, 2xl, etc.)"
fields:
size: string # e.g., "1rem"
line_height: string # e.g., "1.5"
usage: string # Description of where used
heading_styles:
type: object
description: "Per-level heading overrides (h1–h6)"
fields:
base:
font_family: string # e.g., "serif"
font_weight: number # e.g., 600
line_height: string # e.g., "1.2"
letter_spacing: string # e.g., "-0.02em"
h1:
font_size: string # e.g., "clamp(2rem, 8vw, 2.75rem)"
h2:
font_size: string # e.g., "1.75rem"
h3:
font_size: string
h4:
font_size: string
h5:
font_size: string
h6:
font_size: string
google_fonts_url:
type: string
description: "Precomposed Google Fonts URL for tag in layout templates"
- name: "colors"
description: "Color palette with semantic tokens"
structure:
surfaces:
type: object
description: "Background surface colors (bg, surface, elevated, inset, tinted)"
navigation:
type: object
description: "Semantic navigation surface aliases (sidebar, top, header)"
semantic:
type: object
description: "Purpose-named colors (success, warning, error, info, stage)"
terminal_dots:
type: object
description: "Terminal window dot color aliases (red, yellow, green)"
alternatives:
type: object
description: "Alternative accent palettes with hover/subtle variants"
themes:
type: object
description: "Theme variations (light, dark)"
- name: "spacing"
description: "Spacing scale and layout rhythm"
structure:
scale:
type: object
description: "Named spacing values (xs, sm, md, lg, xl)"
- name: "components"
description: "Reusable UI component specifications"
structure:
type: array
items:
name: string
description: string
variants: array
states: array
css_classes: array
- name: "guidelines"
description: |
Prescriptive UX/design patterns that encode this design system's opinions.
Unlike principles (philosophy, e.g. "Be Honest"), guidelines record concrete
do/avoid choices with rationale — decisions this system makes that other
systems might choose differently. They are implementation opinions, not
universal truths.
structure:
type: array
items:
id: string # kebab-case identifier, e.g. "left-panel-navigation"
title: string # Short human-readable title
applies_to: string[] # Context tags: navigation, layout, forms, dashboard, etc.
rationale: string # Why this choice was made; what problem it solves
do: string # The preferred pattern (concrete, actionable)
avoid: string # The anti-pattern (what NOT to do)
reference: string # Optional: example pages/components that implement this
# =========================================================================
# PASS 11 ADDITIONS — Policy / Invariant blocks (recommended)
# =========================================================================
# Added 2026-04-30 in version 0.1.0. Codify Pass 1-10 canonical rules
# (R-100…R-941) as structural fields. Catalog source:
# tmp/design-rules-catalog/10-canonical-catalog.md
# =========================================================================
- name: "brand_identity"
description: "Canonical identity, deprecated names, brand-component invariants
(R-100, R-102, R-103, R-105, R-106)"
structure:
canonical_identity:
name: string # "Forks" | "Possibility"
status: string # "canonical" | "predecessor" | "parallel"
revert_evidence: string # Optional commit/PR ref
deprecated_names:
type: array
items:
name: string # e.g. "Pico", "p9y", "pCo"
deprecated_at: string # ISO date
replacement: string # e.g. "Possibility"
wordmark:
text: string # e.g. "POSSIBILITY.INC"
text_invariant: boolean # true — period integral, never split
font_token: string # e.g. "--font-serif"
font_weight: number # e.g. 900
aesthetic_inspirations:
type: array
items: string # e.g. ["Dieter Rams functional minimalism", "Terminal aesthetic"]
vernacular_invariants:
user_facing: string # e.g. ".kno" — prose form
identifiers: string # e.g. "kno" — code form
- name: "typography_invariants"
description: "Policy-level typography rules — family-role assignments,
line-height floors, hard-tuning gates (R-110-R-117)"
structure:
family_role_invariants:
type: array
items:
levels: string[] # e.g. ["h1","h2","h3"]
family_token: string # e.g. "--font-serif"
rationale: string # e.g. "display"
line_height_floors:
body_min: number # 1.5 (R-114; WCAG 1.4.12)
heading_min: number # 1.5
enforcement: string # e.g. "design-qa-spec"
fluid_clamps:
type: array
items:
level: string # e.g. "h1"
clamp: string # e.g. "clamp(2rem, 8vw, 2.75rem)"
link_state_contract:
required_states: string[] # ["default","hover","focus-visible","visited"]
code_chrome_contexts:
type: array
items: string # ["inline","block","terminal"]
hard_tuning_gate:
enabled: boolean # true
gate_mechanism: string # e.g. "design-qa spec test re-run required"
reference: string # path to design-qa spec
- name: "color_token_policy"
description: "Policy rules governing colour-token use — hex ban, contrast
floors, status-state naming, a11y theme variants (R-130-R-135)"
structure:
hex_ban:
enabled: boolean # true (R-131)
banned_in: string[] # e.g. ["component CSS"]
allowed_in: string[] # e.g. ["forks_colors source", "tokens.css generator output"]
enforcement: string # e.g. "lint (rollout per R-941)"
border_contrast_floor:
ratio: number # 3.0 (WCAG 1.4.11)
against: string # e.g. "surface"
status_token_naming:
convention: string # "named for state, not colour"
example: string # e.g. "--color-status-error not --color-status-red"
accessibility_theme_variants:
first_class: boolean # true (R-135)
examples: string[] # e.g. ["colourblind-safe surface tints", "high-contrast theme"]
logo_mark_token_suffix:
suffix: string # "-logo-mark"
- name: "accessibility_floors"
description: "WCAG-grounded a11y floors with severity per violation
(R-200-R-214). High-priority block."
structure:
skip_link:
required: boolean # true
first_focusable: boolean # true
reveal_pattern: string # e.g. "translateY(-200%) hidden + :focus reveal"
respects_reduced_motion: boolean # true
severity_if_missing: string # "BLOCKER"
landmark_hygiene:
min_labeled_landmarks: number # 5
required_landmarks: string[] # ["header","nav","main","aside","footer"]
severity_if_below: string # "MAJOR"
severity_if_main_missing: string # "BLOCKER"
public_docs_crawler_access:
bot_gating_allowed: boolean # false
severity_if_violated: string # "BLOCKER"
use_of_colour:
requires_triple: boolean # true (colour + icon + word)
severity_if_violated: string # "MAJOR"
contrast_floors:
normal_text_ratio: number # 4.5
large_text_ratio: number # 3.0
non_text_ratio: number # 3.0
enforcement: string # e.g. "design-qa-spec"
severity_if_violated: string # "BLOCKER"
focus_ring:
width_px: number # 2
offset_px: number # 2
colour_token: string # e.g. "--color-accent"
severity_if_missing: string # "MAJOR"
reduced_motion:
respected_by_all_motion_components: boolean # true
severity_if_violated: string # "MAJOR"
touch_target:
floor_px: number # 24 (R-209, WCAG 2.5.8)
target_px: number # 44 (R-210, Apple HIG)
material_guidance_dp: number # 48 (R-211)
severity_below_floor: string # "BLOCKER"
severity_below_target: string # "MAJOR"
sibling_overlap:
prohibited: boolean # true
opt_out_attribute: string # "data-decorative=true"
severity_if_violated: string # "MAJOR"
heading_levels:
allowed_in_prose: string[] # ["h2","h3","h4"]
severity_if_h5_used: string # "MINOR"
severity_if_h6_used: string # "MAJOR"
decorative_marker:
attribute: string # "data-decorative"
consumers: string[] # ["design-qa harness", "a11y semantics"]
- name: "component_canonicalisation"
description: "Registry of canonicalised components — each entry records the
canonical implementation + bespoke variants it replaces (R-300-R-309)"
structure:
type: array
items:
component: string # e.g. "Wordmark"
spec_anchor: string # e.g. "content/forks-style-guide.kno#components.wordmark"
file: string # e.g. "services/pspace-site/src/components/Wordmark.astro"
replaces_bespoke: string[] # e.g. [".logo", ".home-logo", ".invite-logo"]
props_enum:
type: object # e.g. { size: ["sm","md","lg"] }
severity_invariants: string[] # e.g. ["focus-ring 2px", "POSSIBILITY.INC text invariant"]
single_source_of_truth: boolean # true
- name: "content_voice_policy"
description: "Editorial conventions, vernacular, provider-opacity,
identity-vs-tenant separation (R-360-R-364, R-400-R-404)"
structure:
provider_opacity:
enabled: boolean # true
banned_tokens: string[] # e.g. ["keycloak","cloudflare","sendgrid",…]
allowed_contexts: string[] # e.g. ["troubleshooting","vendor_specific:true","metadata"]
enforcement: string # e.g. "pre-commit (strict mode)"
identity_vs_tenant_separation:
required_in_public_copy: boolean # true
reference_doc: string # e.g. "content/knowledge-base/identity-vs-tenant-rbac.kno"
public_copy_vocabulary: string # e.g. "OIDC standard claims (sub, email, name)"
agent_policy_source_of_truth: string # e.g. "content/agent-policy.kno"
unicode_glyphs_preferred_over_emoji: boolean # true
ascii_box_alignment_required: boolean # true
component_jsdoc_requires_spec_source_citation: boolean # true
canonicalisation_framing_phrase: string # e.g. "replaces N bespoke"
# ===========================================================================
# OPTIONAL SECTIONS
# ===========================================================================
optional_sections:
- name: "shadows"
description: "Box shadow definitions (sm, md, lg, inset)"
- name: "borders"
description: "Border radius and width scales (none, xs, sm, md, lg, full)"
- name: "layout"
description: "Layout tokens (footer_spacing, max_width)"
- name: "transitions"
description: "Animation timing and easing"
- name: "breakpoints"
description: "Responsive design breakpoints"
- name: "z_index"
description: "Stacking context layers"
- name: "icons"
description: "Icon system specification"
- name: "syntax_highlighting"
description: "Code block color scheme"
# =========================================================================
# PASS 11 ADDITIONS — Optional policy/structure blocks
# =========================================================================
# Added 2026-04-30 in version 0.1.0. See top-of-file changelog.
# =========================================================================
- name: "container_widths"
description: "Named container width tiers (R-140-R-143). Default 960 / wide 1200
/ extra-wide 1440 / prose 720."
structure:
type: array
items:
tier: string # "default" | "wide" | "extra-wide" | "prose"
width_px: number # 960 | 1200 | 1440 | 720
use_cases: string[] # e.g. ["Dashboard pages","forms"]
- name: "footer_contract"
description: "Required footer elements (R-144-R-146). Brand nav, meta
date/version, edit link."
structure:
required_elements:
type: array
items:
element: string # "brand_nav" | "meta_date_version" | "edit_link"
required: boolean
source: string # e.g. ".kno provenance.last_updated", "page slug"
- name: "hero_aesthetic"
description: "Page hero / terminal aesthetic invariants (R-147, R-148)"
structure:
border_radius: string # "0" — Rams hard-edge
border_width: string # e.g. "2px"
height_tokens:
use_dual_min_height: boolean # true (100vh + 100dvh)
footer_offset_token: string # e.g. "--footer-height"
- name: "diagram_policy"
description: "D2/Mermaid diagram conventions (R-220-R-228)"
structure:
d2:
canonical_theme:
id: number # 200
name: string # "Mauve"
comment_prefix: string # "#"
comment_prefix_alternates_permitted: string[] # ["//"] discouraged
banned_features: string[] # ["steps","scenarios","layers"]
complex_layout_engine: string # "elk"
header_required_fields: string[] # ["name","version","status","last_updated","description"]
colour_source: string # "forks_colors"
inline_hex_allowed: boolean # false
mermaid:
direction_vocabulary: string[] # ["TB","BT","LR","RL"]
theme_purpose_enum: string[] # ["production","ab-test","dev-only"]
- name: "motion_policy"
description: "Motion / View Transitions / SSR-client-consistency rules (R-380-R-385)"
structure:
toggle_dont_replace:
enabled: boolean # true
forbidden_apis: string[] # ["outerHTML","innerHTML"] for state changes
ssr_renders_all_states: boolean # true
inline_define_vars_requires_data_astro_rerun: boolean # true
when_to_use_css_transitions: string[] # ["hover","focus","transform","opacity","class-toggle"]
when_to_use_js_animations: string[] # ["","height-to-auto","Web Animations API only"]
action_modal_close:
use_custom_event: boolean # true
forbidden: string[] # ["window.location.reload"]
event_delegation_required_for_dynamic: boolean # true
- name: "tooling_policy"
description: "Lint rollouts, audit cadence, enforcement layers (R-500-R-509)"
structure:
promote_threshold:
instances: number # 3 — promote pattern to component or lint
lint_rollout_steps: string[] # ["warn","soft-fail","strict"]
retro_audit_tier_model:
phase: string # "mini-retro + scoped audit (5 spot checks)"
epic: string # "code-auditor"
milestone: string # "code-auditor"
design_qa_harness:
enabled: boolean # true
dimensions: string[] # 7 dimensions
enforcement_layers: string[] # ["edge","origin","runtime","dcr"]
route_rename_redirect_codes:
seo_bearing_rename: number # 301
method_preserving_rename: number # 308
script_idempotence_required: boolean # true (data-astro-rerun + duplicate-listener guard)
- name: "review_capability"
description: "Optional binding to a design-system-review-schema instance.
Forward-pointer that lets a style-guide entity declare which review
schema reviews target it."
structure:
schema: string # e.g. "kno://specs/design-system-review-schema@0.1.0"
review_mode_enum: string[] # ["page-scale","ds-scale"]
- name: "information_architecture"
description: "Nav-shape rules covering the grouped-overflow pattern, sub-route
absorption, light-dismiss, and accessibility for primary and secondary
navs (#2320.c / R-167)."
structure:
primary_nav:
max_visible_tabs: number # 6
overflow_strategy: string # "grouped-dropdown"
overflow_label: string # "More"
overflow_icon: string # Lucide icon name
element: string # "/"
rationale: string
sub_route_absorption:
enabled: boolean
mechanism: string # "absorbs[]"
highlight_parent_on_subroute: boolean
light_dismiss:
required_for: string[] # [" overflow menus"]
triggers: string[] # ["outside-click","Escape"]
idempotent_binding_pattern: string # "documentElement.dataset.Bound = '1'"
script_directive_required: string # "data-astro-rerun"
reference_component: string # path
accessibility:
summary_role: string # "button"
menu_role: string # "menu"
menuitem_role: string # "menuitem"
aria_haspopup_required: boolean
aria_current_page_required_for_active: boolean
nav_surfaces:
header_primary_nav:
consumed_by: string
scope: string
docs_secondary_nav:
consumed_by: string
scope: string
loader: string
icon_library: string # "lucide"
icon_via_package: string # "astro-icon"
framework_version: string # "1.0"
framework_reference: string # path/URL to the lens-framework spec
cluster_inferred: number # 1-5 (R-908)
ds_definition: string # one of: library | discipline | gateway | multi-ds-portal | multi-context
# ===========================================================================
# VALIDATION RULES
# ===========================================================================
validation:
rules:
- name: "css_variable_naming"
description: "CSS variables should use kebab-case with -- prefix"
pattern: "^--[a-z][a-z0-9-]*$"
- name: "color_format"
description: "Colors should be hex (#fff, #ffffff) or CSS variables"
pattern: "^(#[0-9a-fA-F]{3,8}|var\\(--[a-z][a-z0-9-]*\\))$"
- name: "size_format"
description: "Sizes should include units (rem, px, em, %)"
pattern: "^[0-9.]+(rem|px|em|%|vh|vw)$"
# =======================================================================
# PASS 11 ADDITIONS — codify Pass 1-10 canonical rules as lints
# =======================================================================
# Added 2026-04-30 in version 0.1.0. Each maps to one or more R-NNNs in
# tmp/design-rules-catalog/10-canonical-catalog.md. Lints land in
# follow-up Issues using the 3-step rollout per R-501 (warn → soft-fail
# → strict).
# =======================================================================
- name: "no_inline_hex_in_components"
description: "Component CSS must reference var(--color-*); no hex literals (R-131)"
rollout: warn
- name: "no_emoji_in_diagrams"
description: "Diagrams (D2/Mermaid/ASCII) must use Unicode glyphs, not emoji
(R-400)"
rollout: warn
- name: "wordmark_text_invariant"
description: "Wordmark component must render exactly 'POSSIBILITY.INC' — period
integral, never split (R-102)"
rollout: strict
- name: "deprecated_brand_names_banned"
description: "Pico, p9y, pCo banned in user-facing copy (R-103)"
rollout: warn
- name: "kno_vs_dotkno_vernacular"
description: "Use '.kno' in prose, 'kno' (lowercase) in identifiers (R-104)"
rollout: warn
- name: "provider_name_banlist"
description: "Banned provider tokens (keycloak, cloudflare, sendgrid, …) unless
in allowed_contexts (R-360, R-361)"
rollout: strict
- name: "spec_version_status_header_required"
description: "Every spec declares Version and Status, in either '# Version'/'#
Status' comment-header form OR YAML 'version:'/'status:' field form
(R-340; dual-acceptance per #2287)"
rollout: warn # 62 baseline findings as of #2287 (down from 116); advance to soft-fail once <20
- name: "d2_header_required"
description: "Every D2 file has a header block with
name/version/status/last_updated/description (R-228)"
rollout: warn
- name: "d2_no_banned_features"
description: "D2 files must not use steps, scenarios, layers (R-223)"
rollout: warn
- name: "d2_comment_prefix_house_style"
description: "D2 comments use # (warning if //) (R-221)"
rollout: warn
- name: "view_transitions_data_astro_rerun"
description: "