A project can now be graded against the standard, and the first one has been. There is a
record per project at /projects/, and Vocalcom is on it.
It is the same mechanism this site already used on itself. Every rule has to be named - as
proved, not applicable, waived, unverified, or failing - and the build refuses to publish
until all of them are. There is no default, so nothing passes by nobody having looked at it.
A project's record lives in that project's own repository, beside the code that satisfies the
rules, which is what stops it becoming a document somebody updates twice and then forgets.
Vocalcom reads FAIL, and that is the record working rather than the project being bad.
Two blockers are open. One is the primary button's contrast, which is already with you as a
decision - Figma's own light label on Corail measures 3.17:1 against the 4.5:1 the rule asks,
and the hover and pressed states are lighter still. The other is a single inline event
handler on an internal styleguide page. Eleven rules are proved with the evidence named, and
fifty-six are unverified, each with the specific thing that would settle it - a build three
weeks old with no production host yet has not been measured for speed, validated, or run
through an accessibility tool, and saying so is more use than a number that flatters it.
A fifth verdict had to be added to say that. The four this site used - proved, n/a,
waived, unverified - had no way to state a blocker that is open, because this site can always
fix or waive one before publishing. A project under review cannot, and "unverified" would
have understated a defect that has been measured. This site still may not declare a failure
of its own; a test enforces it.
Three corrections came out of reading the above, and two of them are ours. This site had
been declaring its own noindex as a waived blocker while How this runs says a blocker cannot
be waived - two published pages contradicting each other. It is graded as not applicable now,
which is the honest reading: the rule asks that production be indexable and staging not, and
this is a review artefact with no production stage at all. The worked example of a waiver is
still here, on seo.robots-txt, which is a required rule and legitimately waivable.
colibrity.filter-url-state was asking for the wrong thing on its own row. The
measurable read "replaceState, cleared parameters deleted" while the instruction and the
acceptance test underneath it described the outcome and said outright that client-rendered
and server-rendered listings get there differently. They do: on a server-rendered filter the
form submit pushes its own history entry regardless, so replaceState cannot deliver the
rule's own acceptance test and the starter component uses location.replace() instead. The
row now states the outcome. Nothing about what the rule requires has changed.
And a rule now has to state an outcome rather than name an API. Enforced by the test
suite, on the measurable only, because a rule may legitimately be about an API in its
acceptance prose. That is the guard the first one needed and did not have.