Verification
What Was Checked
Every gate here is poison-tested: broken on purpose to prove it fails.
Every check below actually ran against the build that is live, on 2026-08-22. 17 of 17 gates passed, inspecting 1,332 separate things, and 26 of 26 deliberate breakages were caught.
The gates
| Gate | What it will not allow | Checked | |
|---|---|---|---|
verbatim | every sentence in the library is byte-for-byte hers | 663 | pass |
tags | no markup ever prints as literal text | 32 | pass |
classes | every class used in the HTML is actually styled | 101 | pass |
csp | nothing in the build is dropped by the production CSP | 33 | pass |
a11y | one h1, a lang, a skip link, alt on images, a label on every field | 32 | pass |
privacy | no shipped script can send anything anywhere | 33 | pass |
loops | every loop is 1600x900, has frames, is generated-and-disclosed, and is used by a page | 35 | pass |
seams | every loop’s last frame dissolves into its first with no visible cut | 7 | pass |
jackets | every book on the shelf has a portrait jacket that resolves, and the three made-to-match ones are disclosed | 29 | pass |
films | her two films are carried byte for byte, play, and have a poster | 35 | pass |
icons | a real .ico declared first, every named icon present, a resolving share card | 45 | pass |
links | every internal link answers 200 under the production headers | 108 | pass |
serving | media is served with its own type and answers a Range request | 9 | pass |
instruments | every instrument mounts in a real browser and puts working controls on the page | 28 | pass |
interaction | pressing the controls actually changes what the page says | 10 | pass |
contrast | every word over footage clears WCAG against the real page, at the worst moment of its loop | 118 | pass |
survival | the scrims darken the picture without erasing it — measured on the real page, scrim on vs scrim off | 14 | pass |
The breakages
A gate that passes proves nothing on its own — it might not be looking. So a copy of the finished build is broken on purpose, one fault at a time, and served to the same gate on its own port. Every row here is a real fault of exactly the kind its gate exists to catch, and each one names the failure message that has to appear: a gate that goes red for the wrong reason is reported as not caught.
| Gate | The fault introduced | |
|---|---|---|
verbatim | change six words of one storybook page | caught |
verbatim | hand the gate a source that no longer says what the site says | caught |
tags | let a bold-emphasis tag print as literal characters instead of bold | caught |
classes | ship a class the stylesheet has no rule for | caught |
csp | add an inline script element, which the production CSP drops | caught |
a11y | remove the alt text from a book cover | caught |
a11y | give a page a second heading of the top level | caught |
privacy | add an outbound call to the shipped script — the library promises nothing leaves the browser | caught |
privacy | load an image from a host the reader never chose | caught |
loops | truncate a loop to a handful of frames | caught |
loops | leave the build holding a previous encode of a loop that has since been re-cut | caught |
loops | stop the credits page disclosing a generated loop | caught |
seams | rebuild a loop with no dissolve, so its end cuts hard to its start | caught |
jackets | ship a book cover that is not portrait | caught |
jackets | stop the credits page saying which three jackets were rendered rather than painted | caught |
films | re-encode her film — smaller, and no longer the thing she made | caught |
films | drop one of her read-along captions from the page | caught |
icons | declare the SVG favicon before the .ico — the broken-square link card | caught |
icons | replace the multi-image .ico with a single 16px one | caught |
links | point a link at a page that does not exist | caught |
serving | truncate a loop to zero bytes — still 200, still video/mp4, still nothing | caught |
links | answer on the port with a different site’s X-Served-By | caught |
instruments | make the storybook reader throw the moment it mounts | caught |
interaction | leave the reading-level buttons mounted and looking right, but stop them changing the words | caught |
contrast | delete the scrim behind the words, leaving white type on bare footage | caught |
survival | darken the scrim until the footage is a black rectangle — what a contrast gate alone would happily accept | caught |
Two gates that pull against each other
The words over the moving backgrounds have to be readable, and the backgrounds
have to still be pictures. Those two demands point in opposite directions, and a readability check
on its own is perfectly satisfied by painting everything black. So there are two gates.
contrast screenshots the real page, hides only the letterforms, seeks each loop to
four different moments and measures the worst pixel behind every word. survival
screenshots the same page twice — once as it ships and once with both scrims switched off — and
requires the picture to keep most of its own tonal range.
What is checked about her words
The strictest gate here is verbatim. It reads the files she supplied,
strips the markup and the JavaScript escaping out of them, and then looks for every single sentence
this library prints — all three reading levels of all 47 storybook pages,
every line of every little book, every game question, every film caption — in both directions: her
files must contain it, and the page must actually print it.