This site, graded against this standard
Including the one rule it fails on purpose, and why that is a waiver rather than an omission.
Every rule below is the same rule the two checklists carry, graded against this page. The point is not the score. The point is that the score exists, including the rule this page fails on purpose, which is listed first.
48 pass 17 n/a 1 waived 0 fail
A rule marked n/a carries the reason its condition did not apply. Several of them are n/a because they assume the WordPress stack, which is a live illustration of open question 3 rather than an oversight.
Not a plain pass
| Result | Rule | Title | Reason |
|---|---|---|---|
| waived | seo.no-noindex-leak |
Production is indexable and staging is not | Failed deliberately. This page carries noindex everywhere, which is the opposite of what the rule asks of a production site. The rule's intent is that indexability is environment-driven, deliberate and documented, and that is met: this is a review artefact, not a public production site, and the decision is written down here rather than left in someone's head. Waived under the process in How this runs, and it expires at the next revision. Worked example of a waiver, which is the other reason to leave it visible. |
| n/a | a11y.dialog-behaviour |
Modals trap focus, return it, and close on Escape | No modal, drawer or off-canvas menu. The filters are inline at every width. |
| n/a | a11y.form-errors |
Errors say what is wrong and how to fix it | Nothing is submitted. The search box filters as you type and has no error state to report. |
| n/a | a11y.media-alternatives |
Video and audio carry captions and controls | No video or audio anywhere on the site. |
| n/a | a11y.statement |
The site publishes an accessibility statement | Recommended rather than required, and deliberately skipped for an internal review document rather than a public site. Recorded instead of quietly dropped. |
| n/a | colibrity.block-file-triple |
A block is three files sharing one slug | Stack-specific to WordPress with ACF. This is a static build, so the rule has nothing to apply to. It is a live illustration of open question 3: several rules assume the WordPress stack, and if your projects start elsewhere those rules need a second stack marker. |
| n/a | colibrity.paged-canonical |
Paged views are canonical to themselves | Same reason. No paged views exist. |
| n/a | colibrity.pagination-crawlable |
Pagination controls are links, not buttons | Same reason. No pagination controls exist. |
| n/a | colibrity.pagination-in-url |
Every page of a listing has its page number in the URL | All 66 rules render on one page. There is no page two, so there is no page number to put anywhere. Satisfying a blocker by not triggering it. |
| n/a | perf.image-formats |
Images ship in a modern format at the size they display | No raster images are used. The page is text, borders and one accent colour. |
| n/a | perf.lazy-and-priority |
Below-the-fold images lazy load, the LCP image does not | Same reason. There are no images to lazy load or prioritise. |
| n/a | perf.video-weight |
Video is deferred and never blocks the first paint | No background or hero video. The heaviest thing above the fold is a heading, which is also why the LCP rule is cheap to pass here and expensive on the marketing sites this standard is really aimed at. |
| n/a | practices.no-hardcoded-content |
Editable content is editable, not baked into templates | True by construction rather than by effort: no rule text is typed into any template. Every word of the checklists comes from rules/*.yml. Marked n/a because there is no CMS here for an editor to use. |
| n/a | practices.self-cleaning-modules |
Scripts clean up after themselves on page transition | No client-side page transitions. Every link is a real navigation, so nothing accumulates across pages. |
| n/a | seo.hreflang |
Multilingual sites declare reciprocal hreflang | English only. Worth raising as an offer, since colibrity.com runs fr and en with correct hreflang and a French version of this document is possible. |
| n/a | seo.redirects-on-launch |
Replaced URLs redirect to their new home | A new URL that replaces nothing. There are no old URLs to map. |
| n/a | seo.sitemap |
The sitemap lists every indexable URL and nothing else | The site is noindex. A sitemap listing noindex URLs contradicts itself. |
| n/a | seo.structured-data |
Structured data is present, valid and singular | Noindex, so there is no rich result for structured data to produce. |
Passing
Where a pass needs evidence rather than an assertion, the evidence is named. An unproved pass is what the gate itself calls unverified.
| Result | Rule | Title | How it is proved |
|---|---|---|---|
| pass | a11y.axe-clean |
No automated accessibility violations | Tool-checked, result read by hand |
| pass | a11y.keyboard-operable |
Everything works with a keyboard alone | Reviewed by hand |
| pass | a11y.focus-visible |
A visible focus indicator on every focusable element | One global :focus-visible rule in the base layer, measured at 3:1 on both grounds |
| pass | a11y.skip-link |
A working skip link is the first focusable element | Tool-checked, result read by hand |
| pass | a11y.form-labels |
Every form control has a real label | Tool-checked, result read by hand |
| pass | a11y.alt-text |
Images carry alt text that earns its place | Reviewed by hand |
| pass | a11y.contrast |
Text and interface contrast meets AA | Measured, not eyeballed. #fafafa on #131313 is 17.8:1, the accent text #fe58ff on #131313 is 7.13:1, and the light-theme accent #77467e on #fafafa is 6.79:1. Recorded with the rest in site/src/css/tokens.css. |
| pass | a11y.reduced-motion |
prefers-reduced-motion is honoured everywhere | Reviewed by hand |
| pass | a11y.link-text |
Link text makes sense out of context | Reviewed by hand |
| pass | a11y.zoom-and-reflow |
The page survives 200 percent zoom and a 320px viewport | Reviewed by hand |
| pass | colibrity.filter-url-state |
Filters write their state to the URL | The five-step procedure at the bottom of the URL-state explainer, run against this page on 2026-08-11: filtering changed location.search, reloading restored the same 3 rules and the same checked boxes, and clearing the search deleted the parameter rather than blanking it. |
| pass | colibrity.filter-history-noise |
Filter changes do not litter the back button | Verified 2026-08-11: five filter changes grew history.length by 0, and one Back press left the page. |
| pass | colibrity.filter-indexability |
Filter combinations do not become a crawl trap | Tool-checked, result read by hand |
| pass | colibrity.js-hooks-are-data-attributes |
JavaScript targets data attributes, never CSS classes | No selector in site/src/js targets a styling class. Filtering reads data-dim, data-sev, data-phase, data-verify and data-text. |
| pass | html.valid-markup |
Every template produces valid HTML | Asserted in the test suite |
| pass | html.doctype-and-lang |
Doctype and a correct lang attribute on every page | Asserted in the test suite |
| pass | html.single-h1 |
One h1 per page, and no skipped heading levels | Asserted in the test suite |
| pass | html.landmarks |
Page regions use landmark elements | Tool-checked, result read by hand |
| pass | html.lists-and-tables |
Lists are lists and tables are tables | Tool-checked, result read by hand |
| pass | html.buttons-vs-links |
A link goes somewhere, a button does something | Tool-checked, result read by hand |
| pass | html.no-duplicate-ids |
Ids are unique on the rendered page | Checked in the live DOM across 66 rule cards: no duplicate id |
| pass | html.bem-naming |
Class names follow BEM and match their block slug | Tool-checked, result read by hand |
| pass | html.no-inline-handlers |
No inline event handlers or javascript: URLs | No on* attribute in any built page, asserted in the test suite |
| pass | perf.lcp |
LCP at or under 2.5 seconds on mobile | 1.0 s. PageSpeed Insights, mobile, median of three runs on 2026-08-11 with a ?cb= buster, per the method this standard prescribes. |
| pass | perf.cls |
CLS at or under 0.1 | 0. Same three runs. |
| pass | perf.inp-tbt |
TBT at or under 200ms and INP at or under 200ms | Total Blocking Time 0 ms. Same three runs. |
| pass | perf.score-floor |
Mobile performance score at or above 90 | 100, median of three mobile runs on 2026-08-11 (99, 100, 100). |
| pass | perf.bundle-budgets |
JavaScript and CSS stay inside their budgets | 1.56 kB JS and 2.78 kB CSS gzipped, against a 12 kB budget each |
| pass | perf.no-render-blocking |
Nothing render-blocking that does not have to be | Tool-checked, result read by hand |
| pass | perf.fonts |
Fonts are subset woff2, self-hosted, with a swap policy | Tool-checked, result read by hand |
| pass | perf.caching-and-compression |
Static assets are compressed and cached far-future | Content-Encoding: gzip confirmed on the live URL, and hashed assets carry a one-year immutable cache header. Compression was off on first deploy and the deploy script's own verification caught it. |
| pass | perf.animation-cost |
Animation is cheap and stops when off screen | Tool-checked, result read by hand |
| pass | perf.third-party |
Third-party scripts are counted and justified | Zero third-party origins. No fonts, scripts or images are loaded from anywhere else. |
| pass | practices.no-secrets |
No credential ever reaches the repository or the web root | Asserted in the test suite |
| pass | practices.output-escaping |
All dynamic output is escaped at the point of output | Tool-checked, result read by hand |
| pass | practices.console-clean |
Production loads with a clean console | Tool-checked, result read by hand |
| pass | practices.empty-states |
Every dynamic component handles empty, long and broken | Verified 2026-08-11: filtering to zero matches shows a deliberate empty state and the status line reads "Showing 0 of 66 rules". |
| pass | practices.responsive-breakpoints |
The layout holds at every width, not just the design widths | Reviewed by hand |
| pass | practices.real-device-check |
Anything animated or video-driven is checked on a real device | Reviewed by hand |
| pass | practices.handover-notes |
The project ships with the notes needed to run it | Reviewed by hand |
| pass | practices.one-change-per-deploy |
Performance and behaviour changes ship one at a time | Reviewed by hand |
| pass | seo.canonical |
Every indexable page declares a self-referencing canonical | Asserted in the test suite |
| pass | seo.robots-txt |
robots.txt exists and points at the sitemap | Asserted in the test suite |
| pass | seo.title-description |
Titles and descriptions are present, unique and the right length | Asserted in the test suite |
| pass | seo.open-graph |
Open Graph and Twitter card tags are complete | Asserted in the test suite |
| pass | seo.https-and-mixed-content |
HTTPS is enforced and nothing loads over http | Asserted in the test suite |
| pass | seo.internal-links-resolve |
No internal link is broken | Asserted in the test suite |
| pass | seo.headings-describe-content |
The heading outline reads as an outline | Reviewed by hand |