sg.dist
zero station
The site was built at all: the deploy folder has pages. Otherwise every other gate would be staring at nothing.
- traps
- 1
sitegen · gate self-test
63 trap pages roll past 24 stations of a site pipeline. 42 must drop exactly where the test says, 21 clean ones must reach the finish. Each marble's route comes from a file, not from chance.
Twenty-four stops for one page: 23 pipeline gates and a zero station that asks whether the site was built at all. The order is the one the pipeline runs them in.
zero station
The site was built at all: the deploy folder has pages. Otherwise every other gate would be staring at nothing.
The page skeleton: language, hreflang, icon, a poster for scroll video.
The security policy matches what is really embedded in the page, with no foreign hosts.
Long cache only for files with a fingerprint in the name, or visitors get an old version.
What breaks only in Safari: height jumps, glass, picking a phone by touch rather than width.
Nothing extra gets deployed: sources, secrets, heavy uncompressed 3D models.
Every module is syntactically whole. One broken file switches off the whole site.
Identical dictionary keys and the right letters in the font, including the Ukrainian ones.
For search: distinct titles, h1, alt, full addresses, an open robots.txt.
For AI search: complete business data, markup that matches visible text, llms.txt pointing at live pages.
Nothing sticks out at any width, the page is not blank, an iPad does not get the phone layout.
No errors in the browser console.
With reduced motion on, nothing spins forever.
A rail swipes under the finger, and a live first screen is alive without a cursor.
A press-and-hold action shows progress and also fires on a plain tap.
The request button works even if the data has not arrived.
No exceptions without a graphics card, and the page stays whole.
No trap of its own
A sticky panel is no taller than the window and does not ride over text outside it.
Everything visible is translated: embedded frames, SVG, labels. No Cyrillic on the English page.
On a slow network there are no broken images, and a character does not cover the controls.
The Safari engine on iPad and iPhone: glass, security policy errors, scroll video states.
Video is served in ranges, with no torn seam in the loop.
No trap of its own
Lighthouse speed on a phone, with compression as on Cloudflare.
No trap of its own
WCAG 2.1 AA accessibility: keyboard, contrast, focus. Enabled by the site's contract.
The names are real, from tests/fixtures.mjs. Tap a marble to see what is broken in that page and release it alone.
These pages catch false alarms. If a gate stops one of them, the self-test goes red.
A bug found on any site is never quietly patched. It becomes a lesson, then a trap page, then a check. There are 94 lessons so far. The trap lives next to the check, so the check cannot forget what it was meant to catch.
A gate that stops everything is broken too. So 21 of the 63 pages are legal: a rail that sits off-screen on purpose, a proper name left untranslated. They have to roll through.
sg.nogpu, sg.media and sg.lh have no trap of their own in the self-test, though the log shows they ran. The machine does not hide it: the tray stands empty.
The rails, hinges, glass and collisions are drawn for clarity. The real self-test runs each trap only through its own gates, not through all of them in a row. Routes, trays and counters come from the files unchanged.
A physics engine written for this page: a step of 1/120 s, nothing but addition, multiplication, division and a square root. At build time the same machine runs on the server and records a signature of its end state. After a full run your browser compares its own. If a marble lands in the wrong tray at build time, the site does not build.
The portfolio holds 62 sites from the pipeline. Open any of them and check.