Gates
What has to pass
before this ships.
Ten automated checks can stop a change from going live. Seven run on every push and stop the deploy if one fails. Three run in real browsers before a layout change is committed. Edge drift checks the live site after a deploy, so it can't stop one and isn't counted in the ten. Each check records its own result when it runs, and this page prints that record. All are currently green.
Each check reports two numbers: how much it examined, and how much of that failed.
Harness
the checks themselves, tested first
- gate unit tests172tests0failing
npm run testjust nowthe gate scripts against fixtures with planted faults, the Worker and its validator, the commit hook, the Wrangler configs, and every link between the docs
- gate unit tests172tests0failing
Source
the files as written
- type check54files0errors
npm run typecheckjust nowAstro's checker over the site and tsc over the Worker, against the bindings wrangler generates and first confirms current
- prose check4posts0tells
npm run check:prosejust nowevery published post checked against the house writing standard: banned words and patterns fail it, and length and tone measures only warn
- type check54files0errors
Build
the transform from source into publishable output
- derived CSP19built pages0failures
npm run build15h agothe policy is derived from the build: 13 directives, 3 script hashes read off the emitted HTML, no 'unsafe-inline' for scripts
- prelaunch gate91output files0leaks
npm run build15h agoevery built file searched for the names of 3 unlaunched entries, read from each entry's draft flag
- copy compliance60output files0violations
npm run build15h agoevery built file searched for language this site has committed not to publish: a partner's restricted vocabulary, claims no signed agreement backs up, contact details kept private
- derived CSP19built pages0failures
Output
the files that will be served
- build assertions36assertions0failing
npm run test:build15h agoassertions against the files in dist/: the CSP and its hashes, headers, redirects, the feed, the sitemap, OG cards, and that no comment and no orphaned asset ships
- build assertions36assertions0failing
Rendered
what a browser does with them, in two engines
- visual matrix532combinations0failing
npm run check:visual5d ago19 pages × 14 viewports × 2 engines, portrait and landscape, touch emulated on phone and tablet widths, each asserting no horizontal overflow and no page errors
- interaction harness40behaviors0failing
npm run check:interactions5d agoevery console command, the grid and its badge, the Konami flip, the input guard, the WebGL mount, the 404 physics, the contact form against a stub, hover stability and the styled feed, under the production CSP, in 2 engines
- layout audit276page renders0findings
npm run check:layout5d ago23 routes × 6 viewports × 2 engines, inspected for text drawn over text, tap targets under 24×24, contrast below WCAG AA, clipped text, unreadably narrow measures, and in-sentence links drawn like their sentence
- visual matrix532combinations0failing
Ship
the deploy, which CI runs only when the first seven checks pass
Deployed
what the live site serves, compared byte for byte with the build
- edge drift45comparisons0drifts
npm run check:edge15h agolive robots.txt, the CSP and the page elements byte for byte against the build, the security headers and the directives that carry the policy, the one-hostname rule, the build’s own files reachable, the Worker’s routing, the scripts a browser is served, and the certificate’s remaining life
- edge drift45comparisons0drifts