A standard for agent-ready design systems Text and diagrams CC BY 4.0
The Index
Static run · 2026-09-09
Trial · draw 1 of 3
Methods

Ten systems, one instrument.

Ten design systems, read by one instrument from pinned commits, then built with by one agent under one frozen task. What each system is, and what an agent does with it, both produced by the instrument and reproducible from the repository.

1What each system is

The static scores.

Three of six properties can be read from a repository. Each is 0 to 10. Not measured means the instrument could not read the evidence, and says why.

Shapes before ranks. A React library, a Sass framework and a component tree inside a product are different materials. Adherence was measured against the product for three systems and the docs and examples for the rest; the column does not rank across them. Open a row for the detail.

System What an agent finds to read Single source Legibility Adherence Mean Trial · informed / cold
Ghost (Shade + Admin X Design System)React, inside the product AGENTS.md · 19 skills · Storybookadherence: the product 10 9 9 9.3of 3 not trialledno installable package
PostHog Lemon UIReact, inside the product django-python.mdc, react-typescript.mdc, rust.mdc +2 · 93 skills · Storybook · MCPadherence: the product 8 10 10 9.3of 3 not trialledno installable package
GOV.UK FrontendSass and Nunjucks, framework-agnostic no context file · no skillsadherence: the product 5 9 not measured 7of 2 4 informed4 cold, completeness
Mozilla ProtocolSass and HTML, framework-agnostic AGENTS.md, CLAUDE.md · no skillsadherence: docs and examples 6 8 not measured 7of 2 4 informed0 cold, completeness
IBM CarbonReact library AGENTS.md · no skills · Storybookadherence: docs and examples 3 10 5 6of 3 9 informed4 cold, completeness
Siemens iXStencil web components copilot-instructions.md, AGENTS.md · 4 skills · Storybookadherence: docs and examples 5 10 3 6of 3 7 informed7 cold, completeness
Bootstrap ItaliaSass and vanilla JS, framework-agnostic no context file · no skillsadherence: docs and examples 3 7 not measured 5of 2 7 informed2 cold, completeness
Home Assistant frontendLit web components, inside the product copilot-instructions.md, AGENTS.md · 12 skillsadherence: the product 7 3 not measured 5of 2 not trialledno installable package
Microsoft Fluent (v9)React library AGENTS.md · 13 skills · Storybookadherence: docs and examples 5 7 3 5of 3 7 informed7 cold, completeness
Primer ReactReact library copilot-instructions.md · 15 skills · Storybook · MCPadherence: docs and examples 3 8 4 5of 3 7 informed7 cold, completeness
Context files: AGENTS.md, CLAUDE.md, copilot instructions, cursor rules, llms.txt, at the root or beside the system. Skills: SKILL.md files under a conventional skills directory. Mean: of the measured properties only.

Calibration reference. Astryx, the system the instrument was developed against, is never a ranked row. Under the same conditions: single source 9, legibility 10, adherence 4, mean 7.7. The prediction made before any run held on the first two. Detail · Page.

2What an agent did with them

Reading the docs helped. It did not fix how the screen was put together.

Draw 1 of 3 · 16 of 16 screens judged · second read pending

One agent, claude-opus-4-8 pinned. One frozen task: a notifications settings screen. Every system built twice, cold (told nothing) and informed (pointed at its docs). The distance between the arms is the arm gap.

0/8

cold runs that opened the documentation unprompted. All 8 read the package's source or types instead.

3/7

systems that did better informed at the two planted gaps. None did worse.

At the boundary (16 runs, two gaps each): anticipated by the system 10, named and composed around 1, composed silently 12, hand-rolled silently 2. The silent middle is the habit.

Composition: 6 of 16 screens fail at least one of six questions, and reading the documentation did not help: 2 of 8 cold against 4 of 8 informed. The calibration pair reproduced the earlier read: informed Astryx used the layout primitives correctly and lost on containment and the viewport edge. A finding about defaults, not documentation.

Per system

Cold band, informed beneath, and under the constraint band the number of violations counted in each arm. Arm gap is informed minus cold on completeness. Each cell is a single run. This is draw 1 of 3, so there is no median and no range yet; the number is that one run, and draws 2 and 3 will show how far it moves.

SystemConstraintLegibilityCompletenessInteractionArm gapLooked unprompted
IBM Carbon 12 informed41 → 24 violations 28 informed 49 informed 87 informed +5on the gaps 0/1
Microsoft Fluent (v9) 43 informed8 → 16 violations 28 informed 77 informed 98 informed 0on the gaps 0/1
Primer React 13 informed69 → 19 violations 22 informed 77 informed 88 informed 0on the gaps 0/1
Siemens iX 13 informed72 → 11 violations 25 informed 77 informed 58 informed 0on the gaps 0/1
Bootstrap Italia 11 informed143 → 73 violations 27 informed 27 informed 66 informed +5on the gaps 0/1
GOV.UK Frontend 24 informed22 → 9 violations 210 informed 44 informed 810 informed 0on the gaps 0/1
Mozilla Protocol 12 informed147 → 20 violations 24 informed 04 informed 78 informed +4on the gaps 0/1
Astryx calibration reference, not ranked28 informed29 → 1 violation210 informed1010 informed86 informed0on the gaps0/1

Reading the constraint column. A run is banded twice, on how many kinds of the system's rules it broke and on how many times it broke them, and the worse of the two is the score. Breaking one rule ninety times and breaking three rules once each are both violations, and neither can be traded against the other. Of the 16 runs, 10 were held down by volume, 1 by kinds, and 5 scored the same on both. The counts sit under each band, and each run's page shows both readings. This is a published deviation from the rubric frozen 2026-07-22, made 2026-09-10 after the first draw was scored: as pre-registered the band read kinds alone, so an arm could cut its violations sharply and still band lower. Taking the worse of two readings can only lower a score and never raise one, and over these 16 runs no band rose, 10 fell and 6 were unchanged. Both the old and the new bands are in the results file.

Shapes before ranks, here too. Of the 7 systems, 3 are React libraries, 3 are framework-agnostic and 1 is a web-component library. A JSX screen built against a typed React library and an HTML screen built against a Sass framework are not made of the same materials, so a column compares more safely within a shape than across one. Each system was scaffolded in its own shape rather than forced into a React wrapper, which is what makes the runs fair to each system and the ranking weaker between them.

What the counts never saw. Constraint counts five kinds of violation. Across the 14 ranked runs, hardcoded dimensions in 14, hardcoded colours in 8, raw elements where a component exists in 4, and invented names and foreign UI imports in none. Not one agent invented a component name from a system's own namespace, and not one reached for a UI library other than the system under test. The two failures the rubric treats as most serious did not happen.

Judged by an agent under authorisation; a second read is pending. Rules: Methods. Every count, answer and screenshot is on the system pages.

3How to read a score

Eleven bands, five words.

Each property reduces its evidence to an index from 0 to 1; the index maps onto a band. Each word covers two bands.

Absent
Incidental
Partial
Substantial
Strong
Systematic
0
1
2
3
4
5
6
7
8
9
10

0 to 5 until 2026-09-08; re-banded from the same indexes, nothing re-measured. The trial's ladders followed on 2026-09-09.

4Methods

Pre-registered, pinned, reproducible.

4.1Protocol
Frozen 2026-07-22, before any run.The git history is the proof. Every change since is a published deviation.
4.2Static run
One instrument, one day, pinned commits.No configuration, no cooperation. Each system's directory pinned in the manifest. Re-running is one command.
4.3Readers
What it cannot read is part of the result.Tokens: CSS, DTCG, StyleX, Sass, CSS-in-JS. Components: TS, JS, Vue, Svelte, Astro, template directories. Adherence: TS and JS only. A Lit template or a Nunjucks view is outside it today, and the rows say so.
4.4The instrument on trial
Five runs, not one.The first run scored adherence 5 of 5 for two systems with nothing to read and found GOV.UK's 39 components as two. Each defect was fixed with a test that fails against the old code, and the field re-run.
4.5Deviations
Six, all published.Interaction property added (2026-07-23). Usage-meter pretext reframed (2026-07-23). Static scale to 0 to 10 (2026-09-08). Trial ladders followed (2026-09-09). Interaction checklist frozen after generation, before scoring (2026-09-09). First judge is an agent, second read pending (2026-09-09).
5Limits

What this page cannot say.

5.1One draw
The protocol asks for three draws and a person. This is draw 1 and an agent. Both replace without changing anything else.
5.2Three of six
Constraint, fidelity and completeness are not read from source. The mean averages what was measured.
5.3Seven of ten
PostHog, Ghost and Home Assistant cannot be installed from a package, so they are not trialled. One screen, one model, one task.
5.4Surfaces
Adherence was measured against the code in the repository. GitHub.com is not in Primer's; www.gov.uk is not in GOV.UK Frontend's.
6Submit a system

Public systems only, the same protocol.

An installable package and a repository that can be pinned. Nothing scored privately, nothing for a fee, and a low score is published the same way as a high one.

Propose a system →

7Licence

CC BY 4.0. The instrument is described in the thesis and the repository it reads in Structure. Learey, C. (2026). Correct by Design: the index. correctby.design/index.