The composition contract
Every public page is interpreted, not written
There is no hand-composed public page left in Homes, and no fallback JSX to fall back to. That is the
single most consequential thing about it, and everything below follows from it.
1 · The manifest
Bundled snapshot, live row
src/site-manifest.ts is the committed snapshot; manifest_active in D1 is the live
one, resolved fail-open — a corrupt or missing row falls back to the bundle rather than
taking the site down.
src/site-manifest.ts · D1 manifest_active
2 · The route
Renders one thing and nothing else
A route renders <InterpretedRoute>. Its loader owns behaviour — queries, auth, actions —
and hands results to the record channel; the manifest owns which bands appear and in what order.
app/routes/*.tsx
3 · The band
Three deliberate edits, or a compile error
Adding one means the component, then src/interpretable-keys.ts, then the manifest. The
interpreter types its key→component map against that list, so a gap is a compile error, and a test
fails if the manifest declares a key nothing renders.
src/interpretable-keys.ts · app/lib/manifest-interpreter.tsx
4 · The catalog
Canonical first, always
A registry key must exist in the design-system catalog before Homes emits it. Canonical first, then the
mirror — never the reverse. The validator refused a band here for referencing a render Homes does not
declare, and it was right to.
.marlocDesignSystem-root · marloc-md-design-system-worker