Found while censusing bind declarations for #6357 (PR #6574). Filed separately — it is a different defect from that card's, and fixing it there would have been out of scope.
The fact
Two widget prop types declare the node they render as an inline object literal type, written by hand, that never references BaseSchema or any exported schema type:
packages/plugin-list/src/ObjectGalleryProps.schema — packages/plugin-list/src/ObjectGallery.tsx:18
packages/plugin-dashboard/src/ObjectDataTableProps.schema — packages/plugin-dashboard/src/ObjectDataTable.tsx:34
Compare the normal shape, where the widened type is anchored to a real schema — ObjectPivotTable uses PivotTableSchema & {…}, ObjectTimeline uses TimelineSchema & {…}, ObjectKanban is annotated KanbanSchema.
Why it matters
Because there is no BaseSchema in the ancestry, none of its 21 declared members exists on these two types. Every base key an author may legitimately write — id, className, visible, visibleWhen, hidden, disabled, testId, ariaLabel, label, style, … — is undeclared there, so each must be hand-copied into the literal when the component happens to need it.
That is measurable, not theoretical: it is exactly why both of these types carry their own bind member. The #6357 census found four local bind declarations across the repo; two of them are these, and they are the two that could not simply be deleted once BaseSchema declared the key — deleting the member would delete the declaration rather than inherit it. PR #6574 therefore ratchets them (with reasons) instead of removing them.
The two types also disagree with each other on strictness: ObjectDataTableProps.schema carries [key: string]: any, ObjectGalleryProps.schema does not. So the same class of author error is silently absorbed by one widget and a compile error on the other.
Adjacent, but distinct, and worth keeping separate:
Fixing #5155 would not touch these two; fixing these two would not touch #5155.
What needs measuring before anything is done
Deliberately no proposed patch — the anchor choice is the whole question.
Reproduce
sed -n '18,34p' packages/plugin-list/src/ObjectGallery.tsx
sed -n '34,50p' packages/plugin-dashboard/src/ObjectDataTable.tsx
git grep -n -F -- 'bind?:' packages
grep -rn "extends BaseSchema" packages/types/src/objectql.ts | head
Refs: #6357, PR #6574. Adjacent: #5155, #6269.
Found while censusing
binddeclarations for #6357 (PR #6574). Filed separately — it is a different defect from that card's, and fixing it there would have been out of scope.The fact
Two widget prop types declare the node they render as an inline object literal type, written by hand, that never references
BaseSchemaor any exported schema type:packages/plugin-list/src/ObjectGalleryProps.schema—packages/plugin-list/src/ObjectGallery.tsx:18packages/plugin-dashboard/src/ObjectDataTableProps.schema—packages/plugin-dashboard/src/ObjectDataTable.tsx:34Compare the normal shape, where the widened type is anchored to a real schema —
ObjectPivotTableusesPivotTableSchema & {…},ObjectTimelineusesTimelineSchema & {…},ObjectKanbanis annotatedKanbanSchema.Why it matters
Because there is no
BaseSchemain the ancestry, none of its 21 declared members exists on these two types. Every base key an author may legitimately write —id,className,visible,visibleWhen,hidden,disabled,testId,ariaLabel,label,style, … — is undeclared there, so each must be hand-copied into the literal when the component happens to need it.That is measurable, not theoretical: it is exactly why both of these types carry their own
bindmember. The #6357 census found four localbinddeclarations across the repo; two of them are these, and they are the two that could not simply be deleted onceBaseSchemadeclared the key — deleting the member would delete the declaration rather than inherit it. PR #6574 therefore ratchets them (with reasons) instead of removing them.The two types also disagree with each other on strictness:
ObjectDataTableProps.schemacarries[key: string]: any,ObjectGalleryProps.schemadoes not. So the same class of author error is silently absorbed by one widget and a compile error on the other.Why this is not #5155 / #6269
Adjacent, but distinct, and worth keeping separate:
[key: string]: anyleaves every component schema open, so a "declare the surface" fix can never reject a misspelled TOP-LEVEL key #5155 is aboutBaseSchema's index signature leaving every schema that extends it open to misspellings.BaseSchemaat all, so they do not even inherit the members — a different failure with a different remedy.Fixing #5155 would not touch these two; fixing these two would not touch #5155.
What needs measuring before anything is done
GallerySchema/ an existingDataTableSchemaanchor plus an intersection (the house shape), or a new exported schema type for each.plugin-listmay have no gallery schema to anchor to — that is the first thing to check.timelinerenderer reads seven keysTimelineSchemadoes not declare, and declares three it never reads #6170 / [finding]schema.bindis read by data-scope consumers but declared by no schema shape #6357 defect class, which is what this file pattern structurally invites.Deliberately no proposed patch — the anchor choice is the whole question.
Reproduce
Refs: #6357, PR #6574. Adjacent: #5155, #6269.