youros

How it worksUnderneath

How we know

Stories, promises, design, code and tests are joined by names, and the site is built from those names when it is built.

The trace

A promise is a heading ending in its slug (files/moves). Code names one with meets:, a test with proves:. tools/trace.mjs reads them all and works each promise out: not built while nothing names it, and otherwise each test with whether it passed in its last run. Three reports feed it: Playwright's for the browser tests (test/results.json), cargo test's for the Rust (test/cargo.txt), and the relay suite's (test/relay.txt). Under a heading in Features, <Serves story="…" /> says which story the promises under it serve; in How it works, Keeps: says which promises a section keeps. --check fails the build on a name pointing at nothing, a promise serving no story, or a promise outside Features.

Docker and Playwright, for the tests

One image (Playwright 1.63 on Ubuntu, with wrangler) builds the site, serves it locally exactly as it ships, and drives real Chromium against it, several tabs at once for the editing tests. Before that, tools/can-fail.mjs builds a copy of the project with each promise broken on purpose (tools/breaks.mjs) and runs that promise's tests against it; they must fail. The Rust runs in its own image (./run.sh test).

This site

Each page in docs/ and each part in spec/ is rendered by site/build.mjs to static HTML, with the page's markdown beside it for agents; a part's Features half and How half are two pages from one file. It is the publish path the editor uses, in its first form. The comparison is built from docs/compare.json.