Rule handbook metadata
- Rule
AI.VISUAL.RHYTHM_SUBJECTIVE· laneai- Page status
- stale
- page_version
9a851787584568a259e62976e032bb67cd92f6ea87b1ab2857cffe41f939ef30- generated_at
- 2026-05-19T23:15:00.000Z
- registry_fingerprint
6773fda516344e110b5a7b1435e655e1264e773825ca8bbe62194189891c42ba
How this rule is fixed
This is an AI-enabled rule. Pass/fail requires model judgment; there is no deterministic fixer in the pilot registry.
- Harness:
invoke-ai-ruleset-harness.shrunsdesign-rules/ai/run-design-ai-rule.shon the Before fixture and expects findings with matchingprincipleId. - Remediation: Cursor agent plans from
forge-ux-remediation.plan.mdafter sitewide audit — not handbook After copy.
Detection module: docs/design/ux-audit/ai-enabled-design-principles.md#ai-visual-rhythm-subjective. Scroll down for Before / After examples and Evidence and remediation steps.
Purpose
Kitchen Sink landing_page, product_page, and forge-section bands should read as one measured scroll—sections breathe at a shared cadence, card rows align to a grid, and repeated motifs (section-label, forge-card, g-3 g-lg-4) signal structure before the reader parses copy. This AI rule judges felt rhythm: whether spacing and grouping look deliberate, not like fragments pasted together.
Deterministic DET.VISUAL.RHYTHM samples median vertical gaps and spread ratios; DET.LAYOUT.GRID_CONSISTENCY guards column class patterns. This rule catches when those checks pass yet the page still feels accidental—misaligned card baselines, alternating container widths, one-off padding stacks, or section headers that break the motif mid-page.
Plan: Scroll the page and mark where the beat breaks—sections that jump padding, rows with mismatched column spans, or card bands that abandon the established label → heading → grid pattern. Do: Re-stage bands with shared KS spacing utilities (py-5, g-3 g-lg-4), one container width per page mode, and repeated section-label + heading anatomy. Check: Screenshot review from hero through two mid-page bands; confirm adjacent sections share vertical cadence and column alignment. Adjust: When the same accidental grouping repeats (for example mixed card padding in one row), propose a deterministic DET.* companion or catalog contract tightening.
Passing signals
- Section stack repeats a motif:
forge-section py-5(or consistentfs-landing-section py-4 px-2 px-md-3) withsection-label text-cyan→ oneh2/h3→ content grid—reader anticipates the next band. - Row gutters stay on the same scale:
g-3 g-lg-4(org-4) across outcome, proof, and depth bands—notg-1besideg-4without semantic reason. - Card rows use uniform shells:
forge-card breathe-link h-100(orbreathe-static) with matching internal spacing (card-label,h5,forge-support)—columns align at the top and feel like one grid unit. - Container width is stable within a page mode:
containerfor narrative bands orcontainer-fluid landing-hero-wide px-3 px-xxl-5for hero/wide diagrams—not arbitrary switches every other section. - Vertical cadence echoes between bands: similar
py-*between major sections, predictable gap from hero actions to the firstforge-section, no randommt-5/mb-1stacks breaking flow. - Column spans follow a readable grid: three-up
col-md-4, two-upcol-lg-6, or four-upcol-6 col-md-3—notcol-md-4besidecol-md-5besidecol-md-3in the same logical row. - Hash-marked layout roots (
hash="…",data-ks-hash,data-ks-type,data-ks-name) appear on major bands so rhythm fixes map back to catalog contracts.
Failing signals
- Accidental pile-up: hero uses
py-2 g-1, next bandpy-5 g-4, thenpy-3with no narrative reason—scroll feels like stacked templates, even if median gap passesDET.VISUAL.RHYTHM. - Grid drift: sibling
forge-cardtiles in one row usecol-md-4,col-md-6, andcol-md-2—columns do not align; card baselines and gutters disagree. - Motif break: first two sections use
section-label+h3, then a mid-page band jumps to bareh2with no label and differentcontainer-fluid px-1padding—reader loses the scan pattern. - In-row inconsistency: cards mix
p-2,p-4, and inlinepaddingin the same row; one tile isforge-card, another is rawglass—grouping reads accidental, not rhythmic. - Width whiplash: alternating
containerandcontainer-fluid px-1sections cause content rails to jump left/right without a layout mode change (DET.LAYOUT.GRID_CONSISTENCYmay flag; this rule catches perceived jerkiness on screenshot review). - Orphan spacing: lone
mt-5on one card,mb-0on neighbors, or arow g-2inserted between twog-4bands—micro-gaps fight the section cadence. - Heading ladder noise: section titles alternate
h2,h4, and unclassed headings with no scale step—vertical rhythm breaks even when copy is fine (DET.SECTION.HEADINGpartially covers; subjective beat still fails).
Before example
Before (failing example)
Forge Platform
Governed delivery spine
Structure intent and keep review points visible.
Outcomes
What changes
Control
Human gates
Review stays visible.
Logs linked inline.
How it works
Step 1
Shape intent.
Step 2
Delegate with bounds.
12 modules
48 endpoints
∞ agents
Failing KS markup: numeric gaps may average out, but section padding, gutters, column spans, and card treatments jump—grouping feels accidental.
After example
After (passing example)
Forge Platform
Governed delivery you can inspect
Structure intent, delegate safely, and keep human review points—presented with deliberate vertical cadence.
How it works
From intent to evidence
Step 1
Shape intent
Capture goals and boundaries before delegation.
Step 2
Delegate with bounds
Agents execute inside review gates you define.
4 layers
1 governance spine
0 mystery gaps
Passing KS markup: repeated section motif, stable gutters, aligned three-up grid, and consistent card anatomy—rhythm reads intentional on scroll.
Evidence and remediation
Capture: full-page desktop screenshot plus a crop of two adjacent mid-page bands. Note section py-* classes, row g-* utilities, container width, column spans per row, and card shell consistency. Record whether DET.VISUAL.RHYTHM and DET.LAYOUT.GRID_CONSISTENCY passed despite subjective jerkiness.
Remediate (in order):
- Normalize major section padding to one cadence (
forge-section py-5or matchedfs-landing-section py-4 px-2 px-md-3)—remove one-offpy-2/py-3unless marking a distinct page mode. - Restore the section motif:
section-label text-cyan→ one heading → grid; do not drop labels mid-page without reason. - Align row gutters (
g-3 g-lg-4) and column spans (col-md-4triplets,col-lg-6pairs)—fix orphancol-md-6+col-md-2splits in the same logical band. - Unify card anatomy inside a row: one shell (
forge-card breathe-linkorbreathe-static), shared internal spacing (card-label,h5,forge-support),h-100for equal height. - Stabilize container width per page mode—hero wide rail vs narrative
container; avoidcontainer-fluid px-1besidecontainerwithout layout intent. - Re-run deterministic rhythm/grid checks; if accidental grouping repeats with stable DOM signals (mixed card padding in one row, column span drift), propose
DET.*promotion (for example card-row padding parity or max column-span variance per row).