A quality gate that only ever sees good pages is unproven: any of its checks could be dead and the record would look identical. So the suite takes a page that already passed all 13 checks, injects one known defect per run, and asserts that exactly the right check fires, with no collateral from the others. Generated from the committed evals/results.json; no number on this page is typed in by hand.
every mutation, and the check that caught it
mutationdefect injectedcheck firedverdictcollateral
strip-closing-html
closing </html> tag removed
valid-document
caught
none
inline-script
a <script> tag, so the page no longer ships zero JS
single-file
caught
none
broken-cta-link
a CTA pointing at a host that cannot resolve
cta-specific
caught
none
fixed-width-overflow
a 2000px fixed-width element, far wider than the 375px viewport
responsive
caught
none
low-contrast-text
body copy at #bbbbbb on white, under the AA contrast floor
semantic-html / contrast-aa
caught
none
copy-tell-em-dash
an em dash in rendered copy
copy-tells
caught
none
tel-digit-drop
one digit removed from a tel: href while its label still reads correctly
contact-integrity
caught
none
tel-space-separator
a tel: href written with spaces, so the digits match but the URI is malformed
contact-integrity
caught
none
page-over-weight
an embedded image large enough to push the page past its byte budget
page-weight
caught
none
side-accent-stripe
a coloured stripe down one edge of a callout, the generated-UI callout tell
no-side-stripe
caught
none
unresolved-image-placeholder
an image placeholder left in the src, so the page renders a broken image
imagery-resolved
caught
none
accent-swapped
the brief's accent hex replaced everywhere by a nearby darker tone
palette-from-brief
caught
none
entrance-never-resolves
an entrance start state with no animation to bring it back, so the text never appears
motion-visible
caught
none
reduced-motion-hides-content
content removed entirely under prefers-reduced-motion instead of just its motion
motion-visible
caught
none
the known blind spot, on the record
unsourced-copy-claims
defecta claim in the copy that appears nowhere in the brief, such as the drafter's invented "the keys stay with you" and "no term, no penalty"
why the gate cannot catch itchecking a sentence against a brief is a judgement, not a comparison; nothing deterministic can decide it
caught bythe advisory review pass, which is why that pass exists
The suite grew from 5/6 to 14/14 across five committed runs; that history, including the checks that were added and the one that was demoted, is in
evals/history.md. The finding that started it, a check the page under test could switch off with its own overflow-x:hidden, is told in full on the page above this frame. Repository:
landing-page-engine.