Product design skills

scenarios.md

A supporting file of the break skill.

Scenario axes

The menu step 2 of SKILL.md selects from. Each axis carries a cue: the property of the component that makes the axis worth running. Cue matches, axis stays; cue fails, axis is dropped and the drop is named in the plan.

An axis that stays contributes its scenarios as written here, plus any value the component's own props make obviously worse, such as the longest option in a real dataset.

Content length

Cue: the component renders text it does not author. User input, CMS content, API data, translations. A fixed label the codebase controls fails the cue.

ScenarioWhat it catches
Empty stringCollapsed boxes, floating labels with nothing to float over, placeholder-only inputs
One wordButtons and badges sized to their longest expected content
Typical contentThe baseline the others are judged against
Several sentencesWrapping, line-height at multiple lines, containers that assumed one line
One unbreakable stringA long URL or Donaudampfschiffahrtsgesellschaft: overflow with no wrap opportunity

Breaks land in better-typography for wrapping and truncation, better-layout where the container has no room and better-writing where the source copy is the problem.

Content shape

Cue: the text can come from users or locales the team does not write in. Same sources as content length, minus content the codebase fully controls.

ScenarioWhat it catches
Emoji, alone and mixed into textLine-height jumps, broken vertical centering, truncation splitting a character
RTL textDirection handling, punctuation landing on the wrong side
Mixed-direction textAn LTR product name inside an RTL sentence, and the reverse
Diacritics and tall scriptsClipped ascenders and descenders in tight line boxes
Numbers where columns alignProportional figures wobbling in tables and timers

Breaks land in better-typography; spatial mirroring lands in better-layout.

Quantity

Cue: the component repeats over items. Lists, tables, grids, tag rows, avatar stacks. A singular component fails the cue.

ScenarioWhat it catches
Zero itemsBlank regions, missing empty states
One itemGrids and layouts designed around plural content
The realistic countThe baseline
Ten times the realistic countMissing scroll or pagination, performance collapse, sticky elements unsticking

Zero-item breaks land in better-writing for the empty state and better-layout for the region; the rest land in better-layout.

Container

Cue: always. Everything renders inside something, and the component does not choose its container's width. Each width is a fixed container on the page, never a viewport to resize.

ScenarioWhat it catches
A 320px containerClipping, horizontal scroll, controls escaping the box
Squeezed by a flex or grid siblingMin-content blowout, the component refusing to shrink
A very wide containerUnbounded measure, stretched controls, content pinned to opposite edges

Breaks land in better-layout.

State

Cue: the component has the state. Read the props and the interaction model; render only the states that arrive as props. A static component fails the cue entirely.

ScenarioWhat it catches
LoadingLayout shift when content arrives, spinners with no accessible name
ErrorMessages that overflow, color as the only signal
DisabledContrast collapse, focus behavior on disabled controls

Focus and hover are the user's to try while they view the page. Invite them to tab through the instances in the report rather than simulating focus in the harness.

Breaks land in better-accessibility; purely visual state polish lands in better-ui.

Environment

Cue: the project supports the mode. These are viewing modes, not page content, so the page renders nothing for them. Name them in the report for the user to toggle while viewing: OS dark mode where a dark theme exists, browser zoom, reduced motion. Simulating one on the page, such as re-declaring dark tokens under a class, observes a different component.

Dark-mode breaks land in better-colors; zoom and motion land in better-accessibility.

On this page