Filed by the domain:ui execution seat (session session_01EMrWaQw3XS5DxTHxp4yRyC), unassigned, finding only — ⛔ domain:* and grading are triage's. Handed back by the #4895 implementer, which repaired every instance it was forced to touch but could not file the root observation: search_issues is the only channel matching issue-body text and its repo-scoped REST probe does not cover /search/*, so it declined to file without a duplicate check rather than file blind. This seat ran the check.
The observation
Several authored surfaces used ComponentSchema as the name of the generic protocol node interface — "a component node". But the only symbol of that name in the repo was the block family's narrow type: 'component' kind (componentName / props / children), the fifth arm of BlockComponentSchema. The two are unrelated: one is a generic concept, the other a specific node kind in a family with no renderer anywhere.
objectui#7082 already found and corrected nine rows of this on six component pages. ⚠️ The same latent mismatch survived elsewhere and was only exposed when PR #7432 retired the family and those references became imports of a deleted export:
AGENTS.md — its topology table gave ComponentSchema as the example @object-ui/types interface;
content/docs/guide/architecture.md, guide/troubleshooting.md, guide/layout.md;
content/docs/components/feedback/empty.mdx, components/overlay/alert-dialog.mdx;
packages/data-objectstack/README.md;
packages/components/src/renderers/feedback/empty.tsx (a type annotation);
scripts/check-doc-snippet-types.mjs — where it was the harness's own positive control, so the gate exited 2 with "HARNESS CONTROL FAILED — no verdict about the documents can be read from this run" rather than reporting a document failure.
All are repaired in PR #7432 as forced consequences. ⛔ This card is not those repairs — they are done. It is the root cause underneath them.
Why it is worth a card rather than closing with that PR
There is no single documented name for "a component node", so every author reaches for whatever the docs last said. Three candidates are in circulation and none is both correct and canonical:
| candidate |
status |
ComponentSchema |
was never the generic concept — a narrow block-family kind, and now retired outright |
UIComponent |
what AGENTS.md §4 calls the shape — ⚠️ not exported at all, so it cannot be imported or type-checked |
BaseSchema |
the real object half, and what #7082 and PR #7432 both landed on — but nothing documents it as the name |
⭐ That this recurred after #7082 corrected nine rows of it is the argument for fixing the name rather than the instances. #7082 fixed sites; the sites regrew because the vocabulary gap was left open.
The subtlety any fix must keep
⛔ SchemaNode is not a drop-in for these positions, and #7082 recorded why: the renderer's typeof === 'object' guard rejects the string | number | boolean members SchemaNode also admits. BaseSchema is exactly that object half. Both #7082 and PR #7432 chose BaseSchema for the node-slot positions and SchemaNode only where the wider union is genuinely correct (guide/layout.md). A fix that flattens that distinction would be a regression dressed as a cleanup.
Suggested shape, not a decision
Pick one documented name for the concept and make the docs and AGENTS.md agree with the exports. If it is BaseSchema, say so where authors look. If UIComponent is the intended vocabulary, ⚠️ it needs to become a real export before anything can be pinned to it. ⛔ This seat is not choosing: naming a published concept is a contract-shaped call, and AGENTS.md is binding text.
Related, checked and not duplicates
Duplicate check run with a control that fires — the semantic search returned 24 on-topic results, so the absence of an exact match is a reading rather than a broken query. Nearest neighbours, none of which is this:
Filed by the
domain:uiexecution seat (sessionsession_01EMrWaQw3XS5DxTHxp4yRyC), unassigned,findingonly — ⛔domain:*and grading are triage's. Handed back by the #4895 implementer, which repaired every instance it was forced to touch but could not file the root observation:search_issuesis the only channel matching issue-body text and its repo-scoped REST probe does not cover/search/*, so it declined to file without a duplicate check rather than file blind. This seat ran the check.The observation
Several authored surfaces used
ComponentSchemaas the name of the generic protocol node interface — "a component node". But the only symbol of that name in the repo was the block family's narrowtype: 'component'kind (componentName/props/children), the fifth arm ofBlockComponentSchema. The two are unrelated: one is a generic concept, the other a specific node kind in a family with no renderer anywhere.objectui#7082 already found and corrected nine rows of this on six component pages.⚠️ The same latent mismatch survived elsewhere and was only exposed when PR #7432 retired the family and those references became imports of a deleted export:
AGENTS.md— its topology table gaveComponentSchemaas the example@object-ui/typesinterface;content/docs/guide/architecture.md,guide/troubleshooting.md,guide/layout.md;content/docs/components/feedback/empty.mdx,components/overlay/alert-dialog.mdx;packages/data-objectstack/README.md;packages/components/src/renderers/feedback/empty.tsx(a type annotation);scripts/check-doc-snippet-types.mjs— where it was the harness's own positive control, so the gate exited 2 with "HARNESS CONTROL FAILED — no verdict about the documents can be read from this run" rather than reporting a document failure.All are repaired in PR #7432 as forced consequences. ⛔ This card is not those repairs — they are done. It is the root cause underneath them.
Why it is worth a card rather than closing with that PR
There is no single documented name for "a component node", so every author reaches for whatever the docs last said. Three candidates are in circulation and none is both correct and canonical:
ComponentSchemaUIComponentBaseSchema⭐ That this recurred after #7082 corrected nine rows of it is the argument for fixing the name rather than the instances. #7082 fixed sites; the sites regrew because the vocabulary gap was left open.
The subtlety any fix must keep
⛔
SchemaNodeis not a drop-in for these positions, and #7082 recorded why: the renderer'stypeof === 'object'guard rejects thestring | number | booleanmembersSchemaNodealso admits.BaseSchemais exactly that object half. Both #7082 and PR #7432 choseBaseSchemafor the node-slot positions andSchemaNodeonly where the wider union is genuinely correct (guide/layout.md). A fix that flattens that distinction would be a regression dressed as a cleanup.Suggested shape, not a decision
Pick one documented name for the concept and make the docs and AGENTS.md agree with the exports. If it is⚠️ it needs to become a real export before anything can be pinned to it. ⛔ This seat is not choosing: naming a published concept is a contract-shaped call, and AGENTS.md is binding text.
BaseSchema, say so where authors look. IfUIComponentis the intended vocabulary,Related, checked and not duplicates
Duplicate check run with a control that fires — the semantic search returned 24 on-topic results, so the absence of an exact match is a reading rather than a broken query. Nearest neighbours, none of which is this:
ComponentRendererPropsdual declaration in two files.trigger/content/actionasComponentSchema, a different shipped type than theSchemaNodethose keys actually declare #7082 — corrected nine rows of exactly this mismatch on six component pages; the recurrence outside that file surface is what this card records.AnyComponentSchemaaccepts the block-family discriminants that the published TSAnySchemaexcludes — a shipped validator green-lights nodes no renderer renders #7023 — dissolves into PR feat(types)!: retire the block schema family (#4895) #7432's retirement.