A composition a reader manifests has an address, is held before it binds, and enters the ground only by proposal
A shape a reader or an agent composes at runtime lives in its own address: the whole of it, roles, edges and pins, carried in the fragment of the page that composed it, so it is theirs and is never written to the ground by being made. Before it binds it is held to the same grammar as a declared pattern, by a check that does not know who wrote it. It enters the ground only as a proposal the gates decide.
What goes wrong without it
The ground was built so that the surface could compose over it, and the composer proved it could, for declared patterns from a declared term. A shape nobody declared had nowhere to live and nothing to hold it: the engine would bind any roles and edges it was handed, which is exactly right for an engine and exactly wrong for a sandbox. A pattern is data with a closed grammar - roles that name kinds, edges that name declared relationships between them - and that is what makes composing over it safe rather than hopeful: an agent that proposes a relationship the model does not declare is refused by the law that refuses an author. The private platforms settled that agents propose and never write canon; a composition that lives in its link and not in a registry is that discipline made structural.
What proves it — 2
Each is a gate the build runs: a check inside a ring, a whole ring, or an eval beside them. A build stops at the first that refuses.
- eval:enginethe engine agrees with itself
The binder that runs while the graph is built and the binder that runs in a reader's browser find the same bindings: every pattern bound against the whole model to the same instances and the same rows in every role, the published example among them, and every view bound again from every row it answers from, row for row, and the port of the pattern law beside the browser's engine refuses every way a declared pattern can be broken exactly as the law does, and every question bound again from every row of its root kind finds an answer exactly where the build published one and nothing where it did not. - ring:6the site ring
The built site is the whole graph and nothing else: every page indexed, addressed by a label, self-contained and free of any private name; every structured-data identifier a subject the standards export wrote; every page unfurling to its own card, and every sitemap entry naming that card as its image; every journey with its SCXML twin; the sitemaps held to the graph; a graph under a megabyte. And the host held to the ground: the Worker serving the build as its assets and running first for every request; the allowlist and the redirect list it carries cut from the graph, every address the graph once answered to in the list with the status the law gives it and none of them a page; every endpoint served by the files it names; and the beacon sending to the collector's endpoint and nowhere else; every projection the law declares in the build, served by the files that say they serve it, and named in llms.txt; and the Worker reading the host's caching rules and owed headers from the law, writing none of its own; every answer a question carries a page where the walk is non-empty and nowhere else, its structured data naming exactly the rows the walk reached.
Derived from — 2
- Berners-Lee, W3C, 1998Cool URIs don't change
- Grüninger and Fox, IJCAI-95 Workshop on Basic Ontological Issues in Knowledge Sharing, 1995Methodology for the Design and Evaluation of Ontologies
Where this model stands
site/src/lib/bind.ts carries a shape's address, compact JSON in URL-safe base64 in the fragment the law names, and `holds`: the structural half of FND-021 ported beside the engine. The two fragment keys a composition may live in are declared in the law's addresses like every other fragment.
The engine eval holds every declared pattern with the ported law, breaks a declared pattern every way FND-021 refuses and holds the port to refusing each with the law's own words, and holds a shape to surviving its own address exactly.
law.json `operations` declares `hold`, served by the engine and by the law, so an agent learns that a shape is held before it binds from the same declaration that tells it how to bind.
/compose/ is the blank place: no row and no pattern to begin with. A reader adds a role by kind, extends it along a relationship the grammar offers, pins a row, and the shape is held, bound and drawn as it is built; or begins from a declared pattern and departs from it. The shape lives in the page's fragment as it is built, the map lights the kinds it touches and shows it as a pill of its own family, and it leaves as a table or a link.
A composed address carries the first twelve characters of the digest of the ground the shape was composed on. Opened on a later ground, the shape is held again and the page says which ground it came from; it is never refused for its age, only for what no longer holds.
What it does not claim
The binding half of FND-021 - that a rooted pattern binds from some row - is not ported. A composed shape that binds nothing says so when it is bound, which is the same finding a moment later.
Nothing yet promotes a composed shape to the ground. The path is a proposal: the shape as a pattern declaration, held by every gate the authored ones are, decided by a person.
RUL-043