Carded now because #6172's 2026-08-31 maintainer ruling asked for it: the escalation that produced that ruling recorded this as evidence rather than a card, on the explicit disposition "card it separately if the ruling picks A or B". The ruling picked A, and PR #7643 landed it — so this is due. ⛔ Unassigned; grading is the triage seat's.
What was measured, at 2e99852ca (before PR #7643) and re-derived after it
packages/types/src/registry.ts documents SchemaRegistry as "the Single Source of Truth for component type lookups". Its 'kanban' entry maps to the declarative schema declared in packages/types/src/complex.ts — after #7643 that is DeclarativeKanbanSchema, before it, the same declaration under the bare name.
The renderer actually registered for the 'kanban' key is ObjectKanbanRenderer in @object-ui/plugin-kanban, and it consumes that package's KanbanSchema (packages/plugin-kanban/src/ObjectKanban.tsx:31 imports it from ./types). The two are structurally unrelated dialects — the declarative face carries draggable, column color and card labels / assignees / priority; the plugin face carries objectName, groupBy, cardTitle, cardFields, card badges and thirteen more.
⇒ For this key, the value side of the "single source of truth" map does not describe the component the key names.
It is LATENT, and that is the point of filing rather than fixing
Measured, not assumed: the value side of SchemaRegistry is reached only through ComponentType = keyof SchemaRegistry, and nothing in the repo performs an indexed access (no SchemaRegistry['kanban'], no SchemaRegistry[K] read site). So nothing consumes the wrong value today — the defect is a false claim in a map that advertises itself as authoritative, waiting for the first consumer that trusts it.
PR #7643 renamed the declarative copy rather than relocating the plugin dialect into @object-ui/types, which was the ruled outcome and which leaves this latent-but-named — that PR adds a comment at the entry saying exactly this. Only the option-C route (promoting the plugin dialect into @object-ui/types) would have made the map true, and the ruling declined it because it would move sixteen renderer-specific keys into the declared zero-workspace-dependency bottom layer.
The question this card is really asking
Should the one-authority family rule be extended so that SchemaRegistry's value must be the type the registered renderer honours — and if so, for kanban specifically, by which of: relocating the plugin dialect up, letting @object-ui/types declare a renderer-facing alias it can reach without a workspace dependency, or narrowing the map's documented promise to the key set it really owns?
That is a contract decision about a published type, not a measurement, so it is recorded rather than answered.
Reproduce
grep -n "'kanban':" packages/types/src/registry.ts
grep -rn "SchemaRegistry\[" packages --include=*.ts --include=*.tsx # zero indexed accesses
grep -n "from './types'" packages/plugin-kanban/src/ObjectKanban.tsx
Refs: #6172 (the ruling and its escalation record) · PR #7643 (option A, landed) · #6155.
Generated by Claude Code
Carded now because #6172's 2026-08-31 maintainer ruling asked for it: the escalation that produced that ruling recorded this as evidence rather than a card, on the explicit disposition "card it separately if the ruling picks A or B". The ruling picked A, and PR #7643 landed it — so this is due. ⛔ Unassigned; grading is the triage seat's.
What was measured, at
2e99852ca(before PR #7643) and re-derived after itpackages/types/src/registry.tsdocumentsSchemaRegistryas "the Single Source of Truth for component type lookups". Its'kanban'entry maps to the declarative schema declared inpackages/types/src/complex.ts— after #7643 that isDeclarativeKanbanSchema, before it, the same declaration under the bare name.The renderer actually registered for the
'kanban'key isObjectKanbanRendererin@object-ui/plugin-kanban, and it consumes that package'sKanbanSchema(packages/plugin-kanban/src/ObjectKanban.tsx:31imports it from./types). The two are structurally unrelated dialects — the declarative face carriesdraggable, columncolorand cardlabels/assignees/priority; the plugin face carriesobjectName,groupBy,cardTitle,cardFields, cardbadgesand thirteen more.⇒ For this key, the value side of the "single source of truth" map does not describe the component the key names.
It is LATENT, and that is the point of filing rather than fixing
Measured, not assumed: the value side of
SchemaRegistryis reached only throughComponentType = keyof SchemaRegistry, and nothing in the repo performs an indexed access (noSchemaRegistry['kanban'], noSchemaRegistry[K]read site). So nothing consumes the wrong value today — the defect is a false claim in a map that advertises itself as authoritative, waiting for the first consumer that trusts it.PR #7643 renamed the declarative copy rather than relocating the plugin dialect into
@object-ui/types, which was the ruled outcome and which leaves this latent-but-named — that PR adds a comment at the entry saying exactly this. Only the option-C route (promoting the plugin dialect into@object-ui/types) would have made the map true, and the ruling declined it because it would move sixteen renderer-specific keys into the declared zero-workspace-dependency bottom layer.The question this card is really asking
Should the one-authority family rule be extended so that
SchemaRegistry's value must be the type the registered renderer honours — and if so, forkanbanspecifically, by which of: relocating the plugin dialect up, letting@object-ui/typesdeclare a renderer-facing alias it can reach without a workspace dependency, or narrowing the map's documented promise to the key set it really owns?That is a contract decision about a published type, not a measurement, so it is recorded rather than answered.
Reproduce
Refs: #6172 (the ruling and its escalation record) · PR #7643 (option A, landed) · #6155.
Generated by Claude Code