A standard for agent-ready design systems Text and diagrams CC BY 4.0
← The Index
System 7 of 10
Developers Italia / AgID + Dipartimento per la trasformazione digitale, Italy · Sass and vanilla JS, framework-agnostic
Pinned 2026-09-09

Bootstrap Italia.

Bootstrap Italia's tokens are real and plentiful, but they live in Sass, out of reach of the JavaScript layer that is the only thing here the instrument can treat as a component. Nothing in the repository actually consumes the system, so adherence could not be measured at all, and setting it up surfaced a published Sass entry point that will not even compile against its own dependency. Measured at src/js.

1Scores

What the instrument measured.

3Single source · partial466 distinct token(s) across 7 sources; 0% of colour/size references in system source resolve to a token; dark-mode handling is unobservable.
7Legibility · strong62 of the 64 components found in system source carry documentation in some form (a head comment, a colocated doc artifact, or a docs/ entry). Scored from what is in the repository. Documentation held outside it (e.g. Confluence, Notion, Figma) cannot be detected and is neither credited nor penalised.
not measuredAdherencefound 79 application source files (52 readable), but none import the design system, use one of its components, or carry a style declaration this instrument can read. Adherence is not scored rather than scored as clean: there is nothing here to adhere to or drift from.
5Mean of 2of measured
Constraintnot computed by this instrument: scoring it requires parsing component APIs per framework, which is done in the deep audit of a single system rather than across a field
Fidelitynot computed by this instrument: scoring it requires parsing component APIs per framework, which is done in the deep audit of a single system rather than across a field
Completenessrequires a live agent run: a gap only exists relative to something someone tried to build
Trial · informed / cold7 / 2 completeness
7 / 2 legibility
1 / 3 constraint
6 / 6 interaction
2What the instrument read

Measured against a pinned commit.

Repository
italia/bootstrap-italia
Revision
4ae32bd61d29, committed 2026-09-07
System directory
src/js
Components found
64, of which 62 carry documentation and 0 have a colocated doc artifact
Agent context
0 context files, 0 skills
Tokens
466 distinct, across 7 sources (7 authored); dark mode unobservable
Adherence surface
79 files outside the system, graded own-docs-site: no in-repo consumer; the docs site lives in a separate repository, italia/design-web.
3Findings

What the counts point at.

Each finding carries its count, its severity and up to three file references. A finding on a property that was not banded is still a finding; it is reported without a score.

Single source3
18 hardcoded colour and size values in component sourcemajor

The design system's own component source hardcodes colour and size values instead of referencing its own tokens. This happens in 18 of 18 total colour/size references in system source (100%), so an agent copying that file as a pattern copies the hardcoding along with it.

  • src/js/plugins/vendor/accessible-autocomplete.js:1 1px
  • src/js/plugins/scrollspy.js:45 0px
  • src/js/plugins/input-password.js:274 1em
7 separate places tokens are declaredmajor

Design tokens are declared in more than one place in this repository's own authored source, so a value changed in one must be kept in agreement with the others by hand.

  • src/scss/base/_variables.scss sass, 443 token(s)
  • src/scss/base/_maps.scss sass, 10 token(s)
  • src/scss/base/vendor/_rfs.scss sass, 9 token(s)
Legibility7
2 undocumented componentsmajor

Some components carry no documentation an agent could find. That is 2 of the 64 components found in system source, with no head comment on their own source, no colocated doc artifact matching their name, and no docs/ entry, so an agent must reverse-engineer their contract from implementation alone.

  • src/js/plugins/vendor/accessible-autocomplete.js
  • src/js/plugins/util/device.js
1 agent context filemajor

There is no agent-facing context file (a CLAUDE.md, AGENTS.md, or similar) at the project root or inside the design system, so an agent starting cold has no map of how this system wants to be used.

Adherence

Reported, not banded.

17 hardcoded colour valuesmajor

The application hardcodes colour values instead of using the design system's own tokens, so an agent editing nearby code has no signal that a token exists and will likely repeat the pattern.

  • docs/assets/src/js/vendor/tsparticles.min.js:2 rgba(
  • docs/assets/src/js/vendor/easeljs.min.js:12 rgb(
  • docs/assets/src/js/cover-animation.js:10000 #FFFFFF
1 component that duplicates one the system already shipscritical

The application defines its own component under the same name as one the design system already ships. This happens for 1 of the 40 component names the design system exports, so an agent importing that name by convention can silently get the wrong implementation.

  • types/plugins/video.ts:6 VideoPlayer
4The trial

Built twice: cold, then informed.

Set up from its own documentation, in full, with every step that could not be followed recorded. Draw 1 of 3, judged; draws 2 and 3 pending.

Cold arm, draw 119 min · 10 files read · completed
bootstrap-italia-cold-r1 at 1280px
1280px
bootstrap-italia-cold-r1 at 390px
390px
3Constraint
2Legibility
2Completeness
6Interaction
Informed arm, draw 112 min · 8 files read · completed
bootstrap-italia-informed-r1 at 1280px
1280px
bootstrap-italia-informed-r1 at 390px
390px
1Constraint
7Legibility
7Completeness
6Interaction

What setting it up found

material

The system's Sass entry point, src/scss/bootstrap-italia.scss, does not compile. It reaches into @splidejs/splide internals that the dependency's own package.json exports field does not expose, so Dart Sass fails with '"./src/css/core/_index" is not exported under the conditions ["sass","style","production","import"]'.

Handling: Fell back to the package's compiled stylesheet (dist/css/bootstrap-italia.min.css), the system's other published consumption path. Recorded rather than worked around silently. Observed 2026-08-14 with bootstrap-italia 2.18.3 and the transitive @splidejs/splide it resolves.

informational

Consuming the compiled CSS rather than the Sass source means design tokens cannot be overridden at build time.

Handling: Accepted, forced by the gap above. Recorded because it bears on the single-source dimension when the static instrument scores this system.

Screens generated

ArmDrawDateDurationFiles readOutcome
cold12026-08-1419 min10completed
informed12026-08-1412 min8completed

Model: claude-opus-4-8. Generated under GitHub Actions isolation, the agent's own environment, with the frozen task text and no interaction. Files read is the number of repository files the agent opened, from its own transcript.

Cold arm, draw 1 · the working

1Constraint in practiceSet by the volume reading. Kinds: 3, violations of two kinds (44 hardcoded colours, 99 hardcoded dimensions). Volume: 1, 143 in total. The worse of the two is the score.
2Legibility in practiceRead the sprite ids and grepped the minified CSS for class names; never the README or the docs site. Built the markup from those class names.
2CompletenessTime range and timezone: 4. Native time inputs and a select, inside Bootstrap Italia form markup. Reasonable, never said the system lacks a time control. Usage meter: 0. A hand-rolled meter card: 44 hardcoded colours and 99 dimensions in the screen's own stylesheet, no Bootstrap Italia progress component, no acknowledgement.
6Interaction6 of 10 checklist items observed.
Counted
44 hardcoded colours, 99 hardcoded dimensions, 0 raw elements where a component exists, 80 uses of the system's components, 0 foreign UI imports, 0 invented names.
Read
0 documentation reads, 9 reads of the package's source or types; went looking for documentation unprompted: no.
Checklist
I1 yes · I2 yes · I3 yes · I4 yes · I5 no · I6 yes · I7 no · I8 no · I9 yes · I10 noI5: unsaved changes indicated, not observed (probe: changed a control; unsaved wording did not appear). I7: success and failure each communicated, not observed (probe: success wording seen; failure wording not seen (query parameters tried)). I8: loading and load failure render, not observed (probe: loading state seen at first paint; load-failure state not rendered under the query spellings tried). I10: every control keyboard reachable, not observed (probe tab walk: 13 toggles, 2 time inputs, 1 selects reached, save not reached, focus visible on 100%)
Composition
Six no's: conforms. Groups on bordered cards, inset, a sticky save bar. The agent's own transcript records two visual bugs it then fixed in the quiet-hours fields (floating labels colliding with time values).

Informed arm, draw 1 · the working

1Constraint in practiceSet by both readings. Kinds: 1, violations of three or more kinds (16 hardcoded colours, 56 hardcoded dimensions, 1 raw elements where a component exists). Volume: 1, 73 in total. The worse of the two is the score.
7Legibility in practiceRead the package README and fetched six pages of the docs site (toggles, progress, notifications, select, alerts). The output follows them in the main; reservation: it had to work around the system's floating-label script not initialising on async-injected markup, and chose static labels for the time fields.
7CompletenessTime range and timezone: 4. Native time inputs and a select in the system's form markup; the floating-label collision was diagnosed and worked around, but the absence of a time control was never named. Usage meter: 10. The system's progress indicator, per the fetched progress-indicator docs, with the alert component for the warning state.
6Interaction6 of 10 checklist items observed.
Counted
16 hardcoded colours, 56 hardcoded dimensions, 1 raw elements where a component exists, 65 uses of the system's components, 0 foreign UI imports, 0 invented names.
Read
7 documentation reads, 10 reads of the package's source or types.
Checklist
I1 yes · I2 yes · I3 yes · I4 yes · I5 no · I6 yes · I7 no · I8 no · I9 yes · I10 noI5: unsaved changes indicated, not observed (probe: changed a control; unsaved wording did not appear). I7: success and failure each communicated, not observed (probe: success wording seen; failure wording not seen (query parameters tried)). I8: loading and load failure render, not observed (probe: loading state seen at first paint; load-failure state not rendered under the query spellings tried). I10: every control keyboard reachable, not observed (probe tab walk: 12 toggles, 2 time inputs, 1 selects reached, save not reached, focus visible on 100%)
Composition
Q4: a label floats from its control. Category groups are bordered boxes whose heading sits on the border line with the icon outside it, so the group label reads as detached from its group (Q4). A wide empty band under the usage block at 1280. Sticky save bar.

Judged 2026-09-09 by an agent under authorisation; a second read is pending. Constraint from the counts, banded twice, on how many kinds of the system's rules the output broke and on how many times it broke them, with the worse of the two published (deviation of 2026-09-10). Legibility and completeness from the transcript and the source, interaction from the ten-item checklist, composition from the six contract questions. Hover a checklist item for its observation.

5Reproduce it

Clone the repository at the revision above, point the instrument at the system directory, and the same numbers come out. The field manifest, the run script and the full payload this page was built from are committed beside it. Methods.