What the instrument measured.
7 / 2 legibility
1 / 3 constraint
6 / 6 interaction
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.
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.
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
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)
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
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.
Reported, not banded.
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
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
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.




What setting it up found
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.
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
| Arm | Draw | Date | Duration | Files read | Outcome |
|---|---|---|---|---|---|
| cold | 1 | 2026-08-14 | 19 min | 10 | completed |
| informed | 1 | 2026-08-14 | 12 min | 8 | completed |
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
- 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
- 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.
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.