Split the config types out of theme.ts RefraktConfig, SiteConfig, PlanConfig, XrefPattern, EntityRoute, and RouteRule live in packages/types/src/theme.ts, which is not about themes. Move them to config.ts, leave the theme-system types behind, and stop index.ts re-exporting the whole batch under one // Theme system types comment.The file was created by c3fe915 (v0.25.0), a mechanical split of one types module into fifteen files. The same commit left packages/types/src/types.ts as a zero-line file that is still empty and still unreferenced.This matters because SPEC-126 claims the docs are generated from the schema and the schema is drift-tested against the types. A reader following that chain should not land in a file whose name says it is about something else.
medium simple
Per-row templates for the data rune Give {% data %} an optional body, transformed once per row with $row bound, so a data file can drive arbitrary Markdoc rather than only table cells.
high moderate
Generate the configuration reference A repo script flattens refrakt.config.schema.json into a committed JSON artifact; a docs page renders it with {% data %}. The configuration pages stop carrying hand-written field tables.
high moderate
Add a frontmatter schema Frontmatter has no machine-readable description. Add packages/content/frontmatter.schema.json, publish it on the versioned routes BUG-004 built, and make Frontmatter derive its documented members from it.
high moderate
Decide which rune pages should carry an attribute table Only 13 of ~115 rune pages have an ## Attributes section. Before generating anything, work out why — the answer sets the scope of WORK-548 and nothing sensible can be estimated without it.Two possibilities, with very different consequences:
high simple
Generate rune attribute tables Rune pages render their attribute tables from the reference data refrakt reference --format json already produces, instead of hand-copying schemas. Extends scripts/check-rune-docs.mjs from page coverage to page content.
high complex
A pre-transform include rune Implement SPEC-129: an {% include %} rune that pastes a file's AST during preprocess, so data and snippet inside it resolve. Unblocks WORK-548's shared-block criterion.
high moderate
data body as a table row Extend SPEC-127's per-row body so a body can emit a table row rather than a run of blocks — cells delimited by ---, headers named by a new attribute.
high moderate
An inline code rune An inline rune that renders its body as code, so a variable can be code-styled. Backticks cannot do it: a code span is literal by definition, so the Markdoc syntax inside one is never parsed.
medium simple
Suppress an accordion's schema.org emission {% accordion schema="none" %} emits no structured data — not on the accordion, not on its items.Narrow on purpose. The general answer is SPEC-130; this is the one value that is needed now, and "none" stays valid under whatever that spec settles, so shipping it forecloses nothing.
medium simple
Nested data queries A {% data %} inside another one's body should resolve, with $row bound to the nearest enclosing query — a correlated subquery, parameterised by the outer row.
high moderate