break-ui
Worst-case data pass on a component or screen - realistic bad values behind a dev-only toggle, then a Broken / Ugly / Fragile report.
Skill by Akindu23
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/akindu23-break-ui
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, design, frontend, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/break-ui
What's inside
- Skill name
break-ui- Description
- Worst-case data pass on a component or screen - realistic bad values behind a dev-only toggle, then a Broken / Ugly / Fragile report. Fixes only the ones you name.
- License
- MIT
- Instructions
- 98 lines in SKILL.md · view on GitHub
Files (4)
- SKILL.md
- BREAK-UI-LICENSE · references/
- CATALOG.md · references/
- FIXES.md · references/
SKILL.md (first lines)
# Break UI The UI was built against **kind data**: "Jane Doe, jane@acme.com, 12 members", every optional field filled. Your job is the **worst case**: the most annoying real user this component will ever meet, fed in one field at a time, then a report of what broke. Every worst-case value is one a real user could produce, or the longest value the backend actually accepts. `aaaaaaaa…` and 5,000-character names prove nothing and get ignored. Long text is only the first break; the ones that ship are the short name, the missing avatar, "1 members", the empty list. This skill breaks and reports. Layout options belong to `/prototype`. ## Invocation | Typed | Run | |-------|-----| | `/break-ui <component or screen>` | Steps 1-5, then stop | | `/break-ui <component> + fix` | Steps 1-5, then step 6 on every row outside **Decisions for you** | | `fix all` / `fix 1, 3` after a report | Step 6 on the named rows | ## 1. Map the surface Read the component and list every value it renders: | Field | Source | Type | Limit | Optional? | |-------|--------|------|-------|-----------| | `name` | `member.name` | string | 255 (`schema.ts:14`) | No | | `email` | `member.email` | string | unbounded | No | Include the values people forget: header counts, relative timestamps, badge and status text, data-driven button labels, tooltips, avatar images, and the list length itself. Take limits from the validation schema, DB migrations, API types, and form `maxLength`. A frontend limit shorter than the backend column is a finding: longer values arrive through imports and the API. No limit found → write `unbounded`, which is a finding too. **Done when**: every rendered value has a row with a source and a limit or `unbounded`. ## 2. Build the worst case Read [`references/CATALOG.md`](references/CATALOG.md) and pick values for each field from the rows that apply. Write one worst-case fixture beside the existing demo data, shaped exactly like it (same type, same file conventions). It enters through the same boundary the demo data does: fixture, mock, props, or API stub. The component's markup and CSS stay untouched, so the test measures the component. Spread failures across the rows on screen: row 1 the long name, row 2 the long email, row 3 the one-letter name, as real data mixes them. Add the cases one dataset cannot hold: - **Empty** - zero items, the no-results state. - **One** - a single item, every count at exactly 1. - **Huge** - the realistic upper bound for list length (1,000+ rows when unpaginated). **Done when**: every catalog row that fits a mapped field is in a fixture, and Empty, One, and Huge each have one (or a one-line reason they cannot apply). ## 3. Wire the toggle A segmented control, **Demo / Worst case / Empty / One / 1,000 rows**, swapping the fixture at the data boundary. - **Dev server** - a `?data=worst` URL param read where the fixture is chosen, on the route that already hosts the component (same placement rule as `/prototype` UI sub-shape A). The URL keeps the state across reloads. Gate it to the dev environment. - **No project** - one self-contained HTML file with the component and every dataset inline. Fixed bottom-center, plain chrome (gray track, white pill on the active segment, system font), instant switch. **Done when**: every fixture is one click away and the toggle is dev-only. ## 4. Break it Flip to each state and check it: - at the component's **real container width**, then **320px**, then the **widest** layout it supports; - at **200% browser zoom**; - in **dark mode** and **RTL** (`dir="rtl"` on a wrapper) when the product supports them. Read [`references/FIXES.md`](references/FIXES.md) and match what you see against its signatures. Screenshot only when the user asked for browser checks; otherwise reason from the CSS and the fixture, and mark each finding **seen** or **inferred**. **Done when**: every fixture has been checked at every width and environment above, and every break has a signature, a cause, a fix, and `path:line`. ## 5. Report and stop ```markdown ### What broke | # | Severity | Field | Worst-case value | What happens | Fix (`path:line`) | |---|----------|-------|------------------|--------------|-------------------| | 1 | Broken | `email` | `bartholomew.fitzgerald@northwind-industries-holdings.example.com` | Pushes the ••• menu off the row at 400px | `min-width: 0` on text column, `overflow-wrap: anywhere` on email - `MemberRow.tsx:42` | ### Decisions for you - <field>: <option A> or <option B>. Recommend <pick>, because <reason>. ### What held up - <worst case the component already handles> Toggle: <URL or file path>, states <list>. Say `fix all` or `fix 1, 3`. ``` Severity, worst first: **Broken** (content unreadable, action unreachable, wrong data shown), **Ugly** (readable but visibly wrong), **Fragile** (fine now, one realistic step from breaking: no limit, no fallback). **Decisions for you** holds every break with more than one right answer (truncate or wrap, what an empty role shows, paginate or virtualize). A short report on a sturdy component is a good result. **Done when**: the report is in chat, the toggle is still running, and you have stopped. ## 6. Fix on request Apply only the named rows, with the project's existing conventions and design tokens. Flip every state again, Demo included, and confirm each fixed break is gone with no regression on kind data. Keep the worst-case fixture as the regression set for the next change; the toggle stays dev-only. The user commits. **Done when**: every named row is fixed and re-checked in every state, or reported as still broken with the reason.
From Akindu23/my-agent-skills, MIT.
More from Akindu23/my-agent-skills
- 0.609score
architecture-decision-records
Akindu23
ADRs.
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
code-review
Akindu23
Diff/PR review: council → thermos deep + quality/yagni/slop-report → delta BPR → merge.
SkillAFreshness: A★ 4Claude Code +9 - 0.604score
council
Akindu23
Council.
SkillAFreshness: A★ 4Claude Code +9 - 0.604score
commit-msg
Akindu23
Commit message.
SkillAFreshness: A★ 4Claude Code +9 - 0.603score
codebase-design
Akindu23
Deep modules.
SkillAFreshness: A★ 4Claude Code +9 - 0.601score
afk
Akindu23
Unattended run of approved tickets: frontier waves of parallel /implement worktrees merged to an integration branch, then /code-review until clean.
SkillAFreshness: A★ 4Claude Code +9 - 0.587score
gamma
Akindu23
Mini fixture skill gamma
SkillAFreshness: A★ 4Claude Code +9 - 0.587score
delta
Akindu23
Mini fixture skill delta
SkillAFreshness: A★ 4Claude Code +9 - 0.566score
codebase-onboarding
Akindu23
Analyze an unfamiliar codebase and produce a structured onboarding guide with architecture map, conventions, and a starter AGENTS.md.
SkillBFreshness: B★ 4Claude Code +9 - 0.564score
best-practices-research
Akindu23
Best practices.
SkillBFreshness: B★ 4Claude Code +9 - 0.562score
deep-research
Akindu23
Runs a multi-phase deep dive - defaulting to a product/market lens - and writes a navigable multi-page HTML report pack under docs/research/<topic-slug>/.
SkillBFreshness: B★ 4Claude Code +9 - 0.497score
alpha
Akindu23
Mini fixture skill alpha
SkillCFreshness: C★ 4Claude Code +9
Signals
- Stars
- 4
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 5, 2026 (23 days ago)
- Last release
- Jul 22, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Akindu23/my-agent-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Akindu23
- 0.609score
architecture-decision-records
Akindu23
ADRs.
SkillAFreshness: A★ 4Claude Code +9 - 0.606score
code-review
Akindu23
Diff/PR review: council → thermos deep + quality/yagni/slop-report → delta BPR → merge.
SkillAFreshness: A★ 4Claude Code +9 - 0.604score
commit-msg
Akindu23
Commit message.
SkillAFreshness: A★ 4Claude Code +9 - 0.604score
council
Akindu23
Council.
SkillAFreshness: A★ 4Claude Code +9 - 0.603score
codebase-design
Akindu23
Deep modules.
SkillAFreshness: A★ 4Claude Code +9 - 0.601score
afk
Akindu23
Unattended run of approved tickets: frontier waves of parallel /implement worktrees merged to an integration branch, then /code-review until clean.
SkillAFreshness: A★ 4Claude Code +9
Cite this page
break-ui skill. Agent Mart. https://agentmart.dev/skills/akindu23-break-ui (last updated 2026-10-24)