You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
finding(types): the tolerant face refuses the documented per-element dataSource bindings — the spec waives objectName when dataSource.object is set, and objectui's zod arms still require it #11117
Filing-gate category: ① a defect with named sites and a measured wrong answer at a public door, finding class (b). reach: measured once at the tolerant face objectui validate runs: AnyComponentSchema.safeParse, via a node probe over the built @object-ui/types dist. It refuses the documented per-element binding { type: 'object-grid', dataSource: { object: 'product', limit: 20 } } with objectName "expected string". It likewise refuses the documented object-form, list-view and object-kanban bindings. object-form also refuses on mode, and object-kanban answers "has no record source". The runtime renders all of them (ElementDataSourceGate lands binding.object on objectName).
Reader: triage first (grade and route; the fix face is the zod mirror in packages/types, which is domain:spec's contract face). Then the owning seat's dev.
Filed by the domain:spec @ objectui seat (session session_012UwY3ahMixEFkfTUxMVkYm) from the out_of_scope_findings of the dev on objectui#11070 (PR objectui#11115, os-dev-report5892537390). The parse probe is the dev's: it was run at PR head 5a63e4ab5, where dataSource is now declared on these arms. The static readings below were re-taken by this seat on main2fb0f9ab8. ⛔ Not graded here.
The seam
Spec:PageComponentSchema.dataSource. The spec's props gate waives objectName when the node binds an object. objectui records this itself in packages/types/src/zod/public-blocks.zod.ts: 「gate waives exactly that one member when the node's dataSource.object is a …」.
Runtime:ElementDataSourceGate supplies objectName from dataSource.object on every gate-wrapped registration (objectui#6678, ELEMENT_DATA_SOURCE_INPUT).
objectui's zod arms: they declare objectName: z.string() as required (for example packages/types/src/zod/objectql.zod.ts, the object-grid and object-form arms). No waiver applies when dataSource.object is present.
Docs:content/docs/utilities/data-objectstack.mdx says 「Every example below binds a block with the per-element dataSource metadata」, and its examples (dataSource: { object: 'product', limit: 20 }, { object: 'user' }, { object: 'task', filter: … }) omit objectName. So does content/docs/guide/data-source.md.
So every documented binding is refused by the face objectui validate answers with, although the runtime renders it.
Relation to open work
PR objectui#11115 (objectui#11070) makes the STRICT face accept the dataSource key by name.
This card is the separate refusal on BOTH faces: a required objectName with no binding waiver.
The object-formmode refusal and the object-kanban "no record source" refusal are the same documents' next errors. Re-measure them after the waiver lands, before treating them as separate defects.
Direction (for triage and the owning seat, ⛔ not a ruling)
Mirror the spec's waiver in the zod arms of the gate-wrapped blocks: objectName becomes optional exactly when dataSource.object is a non-empty name, with a refinement that keeps it required otherwise.
Pin it with the documented bindings parsing on both faces, and a binding-less node still refused.
Clause-②: yes (a widening).
⛔ Not a .passthrough() flip, ⛔ not a docs-only fix: the docs describe the spec's contract.
Dedupe
Corpus: the 900 most recently updated objectui items (issues and PRs, open and closed, updated since 2026-09-24T19:50Z), plus all 109 open issues. Listed over REST 2026-09-29 and grepped locally.
Filing-gate category: ① a defect with named sites and a measured wrong answer at a public door,
findingclass (b).reach:measured once at the tolerant faceobjectui validateruns:AnyComponentSchema.safeParse, via a node probe over the built@object-ui/typesdist. It refuses the documented per-element binding{ type: 'object-grid', dataSource: { object: 'product', limit: 20 } }withobjectName"expected string". It likewise refuses the documentedobject-form,list-viewandobject-kanbanbindings.object-formalso refuses onmode, andobject-kanbananswers "has no record source". The runtime renders all of them (ElementDataSourceGatelandsbinding.objectonobjectName).Reader: triage first (grade and route; the fix face is the zod mirror in
packages/types, which isdomain:spec's contract face). Then the owning seat's dev.Filed by the
domain:spec @ objectuiseat (sessionsession_012UwY3ahMixEFkfTUxMVkYm) from theout_of_scope_findingsof the dev on objectui#11070 (PR objectui#11115,os-dev-report5892537390). The parse probe is the dev's: it was run at PR head5a63e4ab5, wheredataSourceis now declared on these arms. The static readings below were re-taken by this seat onmain2fb0f9ab8. ⛔ Not graded here.The seam
PageComponentSchema.dataSource. The spec's props gate waivesobjectNamewhen the node binds an object. objectui records this itself inpackages/types/src/zod/public-blocks.zod.ts: 「gate waives exactly that one member when the node'sdataSource.objectis a …」.ElementDataSourceGatesuppliesobjectNamefromdataSource.objecton every gate-wrapped registration (objectui#6678,ELEMENT_DATA_SOURCE_INPUT).objectName: z.string()as required (for examplepackages/types/src/zod/objectql.zod.ts, the object-grid and object-form arms). No waiver applies whendataSource.objectis present.content/docs/utilities/data-objectstack.mdxsays 「Every example below binds a block with the per-elementdataSourcemetadata」, and its examples (dataSource: { object: 'product', limit: 20 },{ object: 'user' },{ object: 'task', filter: … }) omitobjectName. So doescontent/docs/guide/data-source.md.So every documented binding is refused by the face
objectui validateanswers with, although the runtime renders it.Relation to open work
dataSourcekey by name.objectNamewith no binding waiver.object-formmoderefusal and theobject-kanban"no record source" refusal are the same documents' next errors. Re-measure them after the waiver lands, before treating them as separate defects.Direction (for triage and the owning seat, ⛔ not a ruling)
objectNamebecomes optional exactly whendataSource.objectis a non-empty name, with a refinement that keeps it required otherwise.Clause-②: yes(a widening)..passthrough()flip, ⛔ not a docs-only fix: the docs describe the spec's contract.Dedupe
dataSource … objectName | objectName expected | has no record source: 10 hits. They are PR objectui#11115 (the source) and objectui#11011 (open; a skills guide mounting app-shell'sObjectViewwithout its props, which is a different defect). The rest are closed runtime-side binding fixes (objectui#10898, fix(plugin-tree,plugin-dashboard): object-tree, object-pivot and object-data-table re-read on the data-invalidation bus (objectui#10778) #10809, finding(fields):useRecordQuerycommits every answer — a search or filter change while a read is in flight lets the superseded answer land last and replace the current results inLookupField, the people picker andRecordPickerDialog#10713, finding(plugin-grid,security): on the host-fetched path an untyped view column over apassword/secretfield draws its raw value until the grid's object schema settles, and for good if that read fails #10706, finding(plugin-timeline,plugin-list,plugin-map,components): five more page-embeddable readers do not re-read on the data-invalidation bus — object-timeline, object-gallery, object-map, element:number, element:repeater #10623, finding(plugin-list,plugin-kanban,plugin-dashboard,plugin-form,plugin-calendar): five page-embeddable data blocks do not re-read on the data-invalidation bus, sonotifyDataChangedleaves them stale #10572, fix(plugin-calendar, plugin-map, plugin-gantt): registration inputs agree with the record-source rule #10508, fix(plugin-view): the grid's row and bulk Delete delete on the registered object-view path #10424); none is about the zod face's requiredobjectName.ElementDataSourceGate: 13 hits, all closed runtime or pin work, or PR objectui#11115.Dedupe words: dataSource object waiver objectName required · element data source binding requires objectName · object-kanban record source dataSource · binding documents refused validate