Skip to content

1.3.1 — a state is not a variant

Latest

Choose a tag to compare

@agiwhitelist agiwhitelist released this 05 Aug 21:29

PROOF, the system-register showcase, failed its own gate: 5 button variants against a budget of 4, 5 links against 4. The two "extra" variants turned out to be a disabled secondary button and a run link inverted inside a late row — both required by the state matrix system.md makes compulsory.

So the gate was charging a product for implementing states correctly. A system with no disabled state at all scored better than one that had them; the gate was pushing against its own doctrine.

systemscan now reads [disabled] / aria-disabled, aria-current / aria-selected, and any control inside an element carrying a non-default data-state — counts them as states, prints them per kind in the report, and keeps them out of the variant budget. A fifth button painted by hand with no such hook is still drift, and still fails.

On the published PROOF build: link 5 → 3, button 5 → 4, toggle 3 → 2, exit 0, with current ×5 · in-running ×8 · in-late ×3 · in-queued ×6 · in-done ×13 and two disabled instances now listed as states rather than as drift.

Give your states real hooks (data-state, aria-*) and the gate reads them as states. That is also just better markup than a bespoke class.