From 6c5a1a75435a74c47c378af79b3ae9a40fa368a5 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 08:50:40 +0000 Subject: [PATCH] docs(react-pages): state the html tier's registered-name rule and scope the PascalCase one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The html tier's allowed tags are the registry's own type names: `compile()` in `@objectstack/sdui-parser` builds its whitelist as `Object.keys(manifest.components)` and `parse.ts` matches the tag against it by exact string, with no case folding. All 57 keys in `sdui.manifest.json` are lowercase — `list-view` is there, `ListView` is not — so a PascalCase tag borrowed from the react tier is rejected at save time with "is not an allowed component". The page never said so. Its PascalCase sentence was unqualified while the page is also the documentation home for the html tier, so an author reading top to bottom had no way to learn the naming rule before hitting the error. Two body edits, no restructuring: - the html-tier section now names the registered spelling, including the namespaced and layout forms, and names the error a borrowed PascalCase tag produces; - the react-tier sentence is scoped to that tier and points at the html spelling. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC --- content/docs/ui/react-pages.mdx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/content/docs/ui/react-pages.mdx b/content/docs/ui/react-pages.mdx index ba01f4f12f..a0c730b9f5 100644 --- a/content/docs/ui/react-pages.mdx +++ b/content/docs/ui/react-pages.mdx @@ -31,6 +31,13 @@ tags in the public block manifest are accepted, props are checked against each b declared inputs, and an unknown tag is a hard error at save time. That is the tier for author- or AI-generated pages you have not reviewed. +Those tags are the **registered type names, written verbatim** — lowercase and +kebab-case, keeping the namespace prefix where a block has one: ``, +``, ``, ``, ``. The **PascalCase** +spellings further down this page (``, ``, ``) are the +**react tier's** convention and are not registered names, so an html page that borrows +one is rejected at save time with ` is not an allowed component`. + Reach for `'html'` by default. Reach for `'react'` when the page genuinely needs behaviour the schema tree cannot express — local state, computed lists, one block's @@ -74,8 +81,10 @@ builds for it: | `useAdapter` | The live data source: `find` / `findOne` / `create` / `update`. | | `data`, `variables`, `page` | The page's data, its `variables` map, and its own schema. | -Blocks are referenced by the **PascalCase form of their registered type**: `object-form` -→ ``, `list-view` → ``, `object-chart` → ``. +**On this tier** blocks are referenced by the **PascalCase form of their registered +type**: `object-form` → ``, `list-view` → ``, `object-chart` → +``. A `kind:'html'` page writes the registered name itself instead — +``, ``, ``. The per-block prop lists are **generated** from the spec's block index, so they cannot drift out of step with the runtime. Treat the generated file as the authority and read it