Part of #10206
Blocked-by: #10210
Why blocked
Not a dependency of substance — a hot-file serial. #10210 holds the first position on content/docs/ui/meta.json; this card takes the second. Two agents editing one nav file is the collision the serial discipline exists to prevent. This card returns to pm:queue when #10210 closes; nothing else about it is waiting on anything.
The gap — three subjects, one shape
Each is an authorable surface with a generated schema reference and no page teaching it. Same defect shape, same fix method, same directory, one meta.json — folded into one card under the family-dispatch gates.
report — references/ui/report.mdx (148 lines). defineStack({ reports }), describe string 'Analytics Reports'. The only prose anywhere is the "Binding a report" section of data-modeling/analytics.mdx, which is written from the dataset side and assumes you already know what a report is. capabilities/analytics.mdx has a ## Reports heading but that page is business-language evaluation material, not authoring.
theme — references/ui/theme.mdx (137 lines). defineStack({ themes }), describe string 'UI Themes'. Total hand-written coverage is one sentence in ui/index.mdx: "Themes define palettes, typography, and spacing as metadata — the showcase example ships light and dark theme variants."
book — references/system/book.mdx (172 lines). defineStack({ books }), ADR-0046 §6, describe string 'Documentation navigation spines — ordered groups with derived membership'. content/docs/ui/doc-pages.mdx is the page that covers the doc kind, and the string "book" appears in it zero times. The navigation spine that turns flat src/docs/*.md into an ordered structure is invisible.
File surface
content/docs/ui/reports.mdx — newcontent/docs/ui/theming.mdx — newcontent/docs/ui/doc-pages.mdx — edit (a book section + how doc and book compose)content/docs/ui/meta.json — two added entries
⛔ Do not touch content/docs/ui/pages.mdx or content/docs/ui/react-pages.mdx — #10210 owns them. Nothing outside content/docs/ui/.
Nav placement
Into the existing top group, not the ---Recipes--- group: reports after dashboards, theming after reports. Resulting order — index, apps, pages, react-pages, views, actions, dashboards, reports, theming, translations, forms, doc-pages, setup-app, ---Recipes---, …. react-pages will already be there from #10210; take main as you find it and do not re-order anything you did not add.
What to write
reports.mdx
From ReportSchema (packages/spec/src/ui/report.zod.ts):
- what a report is and how it differs from a list view and from a dashboard widget — lead with the distinction, it is why the reader is here;
- report types, groupings, aggregates, filters, formatting — whatever the schema actually declares;
- the two data paths: object-bound and dataset-bound.
data-modeling/analytics.mdx §"Binding a report" already covers the dataset side — cross-link it, do not duplicate it, and make sure the two pages agree; - permissions/sharing on a report if the schema carries any.
theming.mdx
From ThemeSchema (packages/spec/src/ui/theme.zod.ts):
doc-pages.mdx — the book half
From BookSchema (packages/spec/src/system/book.zod.ts) and ADR-0046 §6:
- what a book is: an ordered group with derived membership — say what derives it, precisely;
- how
doc items and a book compose into a rendered documentation surface; - a worked example alongside the existing
doc example; - keep the existing
doc content intact — this is an addition, not a rewrite.
⛔ Non-goals
- Do not touch
packages/spec/**. Dead or contradictory schema properties are domain:spec findings — report them. - Do not duplicate generated property tables; link
references/**. - Three subjects, one PR — but three independently checkable pieces. A PR that lands two of them well and one as a stub is a rework, not a partial success.
Gates (derived at dispatch time via node scripts/pm/dispatch-gates.mjs, not recalled)
check:doc-anchors, check:docs-audit-scope, check:docs-redirects, check:published-readme-links, check:role-word, check:cross-package-test-inputs, and the spec liveness set (check:empty-state, check:liveness, check:strictness-ledger, check:variant-docs). Re-derive against your actual diff; ADR anchor checks apply once you cite ADR-0046 decision letters.
Acceptance
- Reports, theming and the
book spine are each reachable from the Views & Apps sidebar and authorable from the page alone. reports.mdx and data-modeling/analytics.mdx agree; theming.mdx and react-pages.mdx agree.- Named gates green.
Part of #10206
Blocked-by: #10210
Why blocked
Not a dependency of substance — a hot-file serial. #10210 holds the first position on
content/docs/ui/meta.json; this card takes the second. Two agents editing one nav file is the collision the serial discipline exists to prevent. This card returns topm:queuewhen #10210 closes; nothing else about it is waiting on anything.The gap — three subjects, one shape
Each is an authorable surface with a generated schema reference and no page teaching it. Same defect shape, same fix method, same directory, one
meta.json— folded into one card under the family-dispatch gates.report—references/ui/report.mdx(148 lines).defineStack({ reports }), describe string'Analytics Reports'. The only prose anywhere is the "Binding a report" section ofdata-modeling/analytics.mdx, which is written from the dataset side and assumes you already know what a report is.capabilities/analytics.mdxhas a## Reportsheading but that page is business-language evaluation material, not authoring.theme—references/ui/theme.mdx(137 lines).defineStack({ themes }), describe string'UI Themes'. Total hand-written coverage is one sentence inui/index.mdx: "Themes define palettes, typography, and spacing as metadata — the showcase example ships light and dark theme variants."book—references/system/book.mdx(172 lines).defineStack({ books }), ADR-0046 §6, describe string'Documentation navigation spines — ordered groups with derived membership'.content/docs/ui/doc-pages.mdxis the page that covers thedockind, and the string "book" appears in it zero times. The navigation spine that turns flatsrc/docs/*.mdinto an ordered structure is invisible.File surface
content/docs/ui/reports.mdx— newcontent/docs/ui/theming.mdx— newcontent/docs/ui/doc-pages.mdx— edit (abooksection + howdocandbookcompose)content/docs/ui/meta.json— two added entries⛔ Do not touch
content/docs/ui/pages.mdxorcontent/docs/ui/react-pages.mdx— #10210 owns them. Nothing outsidecontent/docs/ui/.Nav placement
Into the existing top group, not the
---Recipes---group:reportsafterdashboards,themingafterreports. Resulting order —index, apps, pages, react-pages, views, actions, dashboards, reports, theming, translations, forms, doc-pages, setup-app, ---Recipes---, ….react-pageswill already be there from #10210; takemainas you find it and do not re-order anything you did not add.What to write
reports.mdxFrom
ReportSchema(packages/spec/src/ui/report.zod.ts):data-modeling/analytics.mdx§"Binding a report" already covers the dataset side — cross-link it, do not duplicate it, and make sure the two pages agree;theming.mdxFrom
ThemeSchema(packages/spec/src/ui/theme.zod.ts):hsl(var(--token))convention thatui/react-pages.mdx(docs(ui):kind:'react'/kind:'html'page authoring has no guide, and the Page Properties table omitskindandsourceentirely #10210) tells react-page authors to use. These are two ends of one system and the pages must not contradict each other. If docs(ui):kind:'react'/kind:'html'page authoring has no guide, and the Page Properties table omitskindandsourceentirely #10210 has landed by the time you write, read it and align; if it has not, write the token half from the schema and note the cross-link for review.doc-pages.mdx— thebookhalfFrom
BookSchema(packages/spec/src/system/book.zod.ts) and ADR-0046 §6:docitems and abookcompose into a rendered documentation surface;docexample;doccontent intact — this is an addition, not a rewrite.⛔ Non-goals
packages/spec/**. Dead or contradictory schema properties aredomain:specfindings — report them.references/**.Gates (derived at dispatch time via
node scripts/pm/dispatch-gates.mjs, not recalled)check:doc-anchors,check:docs-audit-scope,check:docs-redirects,check:published-readme-links,check:role-word,check:cross-package-test-inputs, and the spec liveness set (check:empty-state,check:liveness,check:strictness-ledger,check:variant-docs). Re-derive against your actual diff; ADR anchor checks apply once you cite ADR-0046 decision letters.Acceptance
bookspine are each reachable from the Views & Apps sidebar and authorable from the page alone.reports.mdxanddata-modeling/analytics.mdxagree;theming.mdxandreact-pages.mdxagree.