Zdůvodnění
Domovská stránka driftuje po jedné obhajitelné sekci. Tahle dosáhla dvaadvaceti sekcí na celou šířku a 42 229 px při šířce 320 px, než kdokoli rozhodl, že by měla: každá matice, každý argument a každý seznam dostal vlastní pás, každý sám o sobě rozumný, a dohromady byly mapou webu, kterou musel návštěvník přečíst, než se dozvěděl, co produkt je. Jednorázové osekání nezabránilo opakování, protože nic neříkalo, k čemu stránka je.
Totéž platilo o tom, co se ukazovalo vyhledávačům. Z asi tisíce publikovaných rout tři čtvrtiny tvořila auditní stopa repozitáře — jedna stránka na úkol, na schopnost, na relaci — publikovaná ve stejné výšce jako stránky produktu a uvedená ve stejné sitemap, takže hledání produktu našlo nejdřív jeho backlog.
Obojí je podoba, kterou toto repozitář všude jinde odmítá: strukturální rozhodnutí, které nikdo nezapsal, takže by se jím nemohla řídit žádná projekce.
Požadované chování
Sekce domovské stránky se deklarují jednou, jako order v site/data/homepage.toml, a vykreslená stránka je s tímto seznamem držena přesně — nevykreslí se žádná sekce, kterou seznam nejmenuje, žádná jmenovaná sekce nechybí a žádná není mimo pořadí. Každá deklarovaná sekce nese alespoň jeden odkaz nebo jedno odvozené číslo. Domovská stránka neodkazuje žádnou funkci, jejíž stav v modelu produktu není stable. Její sekce instalace nese příkazy instalace, dalšího kroku a ověření, které udává data/registry/distribution.json.
Soupisy produktu, které ukazuje domovská stránka, jsou modelové, v obou směrech. Nástroje workerů, které jmenuje, jsou přesně poskytovatelé data/registry/product.json: ten přidaný do modelu a nevykreslený je zastaralá stránka a ten vykreslený, který model nejmenuje, je poskytovatel natypovaný do šablony. Každá karta jeho pásu důvěry nese hodnotu ze svého vlastního datasetu — release, který instalátor vyhodnotí, a příkaz, který jej potvrdí z data/registry/distribution.json, commit, ze kterého byl tento build vytvořen, jak jej servíruje build.json, provedené případy užití z katalogu — a tam, kde dataset nic nenese, čte unknown, takže karta, za kterou nic nestojí, nemůže projít jako známá.
Fungující rozhraní, která uvádí, patří také datům: stabilní funkce, které webová topologie přisuzuje povrchu interface, v pořadí funkcí, poté ostatní povrchy produktového modelu. Rozhraní je odkazováno jako publikované přesně tehdy, když topologie přiřadí jeho mount povrchu, který publikace nese; to, na co odpovídá jen běžící proces, uvádí svůj mount a neodkazuje na žádnou kopii, takže stránka nemůže poslat návštěvníka na adresu, kterou nic neobsluhuje, ani dál nazývat publikovaný povrch lokálním.
The hero opens the product, and which product is the data's answer: the first of those
interfaces. The hero carries exactly one call to open it, naming its feature; the call leads to
its mount when a publication holds it there and to no such address when only a running process
answers it; the view the hero draws beside the call is of that product. The hero counts none
of the plan's issues: /roadmap/ counts them, by the plan's statuses, in the plan's order, and
when it is built it is held to the plan's counts.
The plan's counts leave the hero (version 2, 2026-10-22)
Version 1 required the hero's product view to count the plan's issues by status. On 2026-10-22
an outside reviewer read the figures it drew (384 blocked against 228 ready and 5 active) as a
sign of scope out of control rather than of discipline. The owner decided the same day to take
the backlog off the hero (I3917): the counts stay on /roadmap/ and in the UI, where a reader
comes for them, and a count of the plan's issues on the hero is refused.
What the homepage makes every visitor download is declared too, as [budget] in
site/data/homepage.toml: the bytes of its own HTML, the bytes of scripts and stylesheets it
loads from the site, and the bytes of graph data it carries inline. A page over any of the
three, a budget that leaves one out, or a page linking an asset the build did not produce, is
refused. The HTML was unbudgeted until 2026-10-12 and had reached 243,477 bytes. No page of the site loads the Mermaid runtime without a diagram to
render — the homepage did, for its whole life, and paid the heaviest file on the site for nothing.
Sekce, jejichž detailní stránky jsou doklady, se deklarují jednou, jako [indexing] unlisted v site/data/nav.toml. Každá stránka pod takovou sekcí nese robots noindex a chybí v sitemap.xml; každá jiná stránka je indexovatelná a v něm je, pokud si její vlastní front matter nevyžádá noindex, a pak chybí i v sitemap. Stránky zůstávají publikované a odkazované: nezařazení se týká řazení ve vyhledávání, ne dostupnosti.
Chování při selhání
scripts/ci/homepage-check skončí kódem 10 s jedním zjištěním na porušení, které pojmenovává sekci, funkci, příkaz nebo stránku; scripts/site-check hlásí svá zjištění a selže s ním, takže build Pages odmítne publikovat domovskou stránku nebo mapu webu, které se od své deklarace odchýlily.
Ověření
test/cases/333_homepage_narrative.sh builds a small site tree and proves each check both ways:
a clean tree passes, and a page loading Mermaid with no diagram, HTML, scripts or inline JSON over
the declared budget, no budget declared, a budget without the HTML, a linked asset missing, an
interface the page does not list or the data does not give, a published copy linked that the
topology does not carry, a published surface still described as local, a hero that opens no product, one typed into the template, one sent to an address only a process answers, a published one the hero does not lead to, a view of something else, a count of the plan's issues on the hero, a /roadmap/ count the plan does not give, an undeclared section, a declared section not rendered, sections out of
order, an empty section, a draft feature linked, a missing install command, a provider of the
model the page does not name, a name the model does not carry, a trust card that disagrees with
its dataset, a trust card missing altogether, a receipt page without noindex, a receipt page in
the sitemap and an indexable page missing from it each fail with a finding that names what is
wrong.