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
spec(types): 32 keys the renderers read are refused by the strict authoring face — declare each or rule it runtime-only, the ruled precondition before objectui validate goes strict (objectui#5250) #11070
Filing-gate category: ① — a defect with named read sites and a measured reproduction (finding class (a)), filed as a derived child of objectui#5250 with the parent's priority:p2. reach: the published export StrictAnyComponentSchema (@object-ui/types/zod, since objectui#8345) refuses documents whose keys a registered renderer reads. objectui validate on PR objectui#11069's head, the ruled consumer, exits 1 on them and tells the author to remove a key that works.
Reader: triage first (route; suggested domain:spec, because the fix face is packages/types and declaring a key widens the strict accept set, so Clause-② is yes). Then that seat's dev. Filed by the domain:devx @ objectui seat 2 (objectui#10917), session_01TdiauJaVCHuj45EzZGUxHh, 2026-09-29T08:51Z. ⛔ Not claimed, ⛔ not routed here.
This card takes the declaration half. objectui#5250 keeps the wiring (PR objectui#11069, parked as draft until this card and objectui#6152 land).
Why it blocks the wiring
The maintainer's ruling on objectui#5250 (2026-09-04, 5534418546), verbatim: 「The number tells the programme how red it goes red, and which components need their declarations repaired (per #6939's shape) before strict can be switched on.」
The population (measured, not inherited)
Source: PR objectui#11069, section M3. Base f6ae5e22d (objectui main, 2026-09-29), the SHIPPED strict face over 588 corpus documents (catalog, docs fences, authored). Class (ii) = a renderer reads the key and no schema declares it: 32 (component, key-path) pairs, 149 document occurrences, 141 of them strict-only. The enumeration, copied from that section:
form · showSubmit in 76 documents. form.tsx destructures showSubmit from schema. All 76 are catalog fields-* fixtures.
form · fields[]: multiple (6), rows (5), return_type (3), columns (3), summary_type (3), min / max / format / reference_to / dimensions (2 each), minLength / maxLength / pattern / accept / min_length / validation.message (1 each). Each has a named read in @object-ui/fields widgets or in form.tsx.
dashboard · widgets[].options: data (7), xField (6), yField (6), value (5), read in DashboardGridLayout / DashboardRenderer; description and trend (1 each), which reach the child through { ...widget, ...options }. And widgets[].component: chartType, xAxisKey, series (1 each); the slot is typed narrower than the chart node it carries.
dataSource on object-grid (2), list-view (2), object-form (1) and object-kanban (1). It reaches the component as a React prop through SchemaRenderer's spread.
page · regions[].children (1) and page:tabs · items (1).
The seat's spot-check of the largest pair (objectui origin/main480de81, 2026-09-29T08:49Z):
packages/components/src/renderers/form/form.tsx:1189 reads showSubmit = true, and :3406 renders the submit button on {showSubmit && (.
showSubmit has 0 hits in packages/types/src/form.ts and packages/types/src/zod/form.zod.ts. Control, same files: submitLabel is declared at form.ts:1962 and form.zod.ts:991.
77 files under examples/schema-catalog carry "showSubmit".
Direction (for triage and the owning seat, ⛔ not a ruling)
⛔ Not a .passthrough() flip (ruling), ⛔ not an exemption list inside the strict face.
Acceptance, executable: re-run PR objectui#11069's M3 classification on the merged ref. It reads 0 class (ii) pairs, or each remaining pair carries its runtime-only ruling and its corpus documents are corrected.
The class (iii) half (a key the TypeScript type declares and the zod mirror omits: 10 pairs in the same M3) is objectui#6152's UnmirroredDeclared ledger, ⛔ not this card.
Dedupe
The 1000 most recently updated objectui items (issues and PRs, open and closed), listed over REST and grepped locally, read 2026-09-29T08:50Z:
showSubmit: 1 hit (objectui#6033, closed, an earlier mirror-drift round).
StrictAnyComponentSchema / strict face: objectui#11022 (closed, same class for metric-card registered inputs, fixed), objectui#10859 (the type-arm refusals, a different defect), objectui#5250, objectui#8347 and seat posts.
Control: passthrough 25 hits.
Dedupe words: strict authoring face refuses read key · showSubmit undeclared FormSchema · undeclared read strict face · StrictAnyComponentSchema false refusal · declaration debt before strict
Blocked-by: #11389
Filing-gate category: ① — a defect with named read sites and a measured reproduction (
findingclass (a)), filed as a derived child of objectui#5250 with the parent'spriority:p2.reach:the published exportStrictAnyComponentSchema(@object-ui/types/zod, since objectui#8345) refuses documents whose keys a registered renderer reads.objectui validateon PR objectui#11069's head, the ruled consumer, exits 1 on them and tells the author to remove a key that works.Reader: triage first (route; suggested
domain:spec, because the fix face ispackages/typesand declaring a key widens the strict accept set, so Clause-② is yes). Then that seat's dev. Filed by thedomain:devx@ objectui seat 2 (objectui#10917),session_01TdiauJaVCHuj45EzZGUxHh, 2026-09-29T08:51Z. ⛔ Not claimed, ⛔ not routed here.This card takes the declaration half. objectui#5250 keeps the wiring (PR objectui#11069, parked as draft until this card and objectui#6152 land).
Why it blocks the wiring
The maintainer's ruling on objectui#5250 (2026-09-04,
5534418546), verbatim: 「The number tells the programme how red it goes red, and which components need their declarations repaired (per #6939's shape) before strict can be switched on.」The population (measured, not inherited)
Source: PR objectui#11069, section M3. Base
f6ae5e22d(objectuimain, 2026-09-29), the SHIPPED strict face over 588 corpus documents (catalog, docs fences, authored). Class (ii) = a renderer reads the key and no schema declares it: 32 (component, key-path) pairs, 149 document occurrences, 141 of them strict-only. The enumeration, copied from that section:form·showSubmitin 76 documents.form.tsxdestructuresshowSubmitfromschema. All 76 are catalogfields-*fixtures.form·fields[]:multiple(6),rows(5),return_type(3),columns(3),summary_type(3),min/max/format/reference_to/dimensions(2 each),minLength/maxLength/pattern/accept/min_length/validation.message(1 each). Each has a named read in@object-ui/fieldswidgets or inform.tsx.dashboard·widgets[].options:data(7),xField(6),yField(6),value(5), read in DashboardGridLayout / DashboardRenderer;descriptionandtrend(1 each), which reach the child through{ ...widget, ...options }. Andwidgets[].component:chartType,xAxisKey,series(1 each); the slot is typed narrower than the chart node it carries.dataSourceonobject-grid(2),list-view(2),object-form(1) andobject-kanban(1). It reaches the component as a React prop through SchemaRenderer's spread.page·regions[].children(1) andpage:tabs·items(1).The seat's spot-check of the largest pair (objectui
origin/main480de81, 2026-09-29T08:49Z):packages/components/src/renderers/form/form.tsx:1189readsshowSubmit = true, and:3406renders the submit button on{showSubmit && (.showSubmithas 0 hits inpackages/types/src/form.tsandpackages/types/src/zod/form.zod.ts. Control, same files:submitLabelis declared atform.ts:1962andform.zod.ts:991.examples/schema-catalogcarry"showSubmit".Direction (for triage and the owning seat, ⛔ not a ruling)
dataSourcereaching components through the renderer's prop spread is the obvious candidate for that second route. Existing rulings bind and are read before any declaration: the 2026-08-18 host-composition ruling (ObjectView 用(schema as any)从 object-view 节点读 31 个键转发给 renderListView,其中 27 个不是 ObjectViewSchema 声明成员 —— #5091 在 ObjectView 上的同形实例 #5097) and the grid non-author keys (ObjectGrid 用(schema as any)读的 4 个键不在GRID_QUERY_INPUTS里 —— #4648 要消除的「渲染器读得到、声明面否认」在这些键上仍然存在 #5091, pinned byplugin-grid/src/__tests__/gridNonAuthorKeys.test.tsx)..passthrough()flip (ruling), ⛔ not an exemption list inside the strict face.UnmirroredDeclaredledger, ⛔ not this card.Dedupe
The 1000 most recently updated objectui items (issues and PRs, open and closed), listed over REST and grepped locally, read 2026-09-29T08:50Z:
showSubmit: 1 hit (objectui#6033, closed, an earlier mirror-drift round).read … undeclared: 6 hits. objectui#8347 (the TS index signature), objectui#8649 (plugin-detail reads,pm:on-hold, other components), and objectui#7928, finding(plugin-list):ListView's columns-only filter fallback readsoptionsoff a list column, a keyListColumnSchemarefuses #10547, [finding]ObjectChartSchemastill leaves three keys undeclared thatObjectChart.tsxreads — andObjectChartBlock, the registry shell wrapping it, is still published as(props: any)#8885, finding(plugin-list):ListView's declared-columns branch readsreference_toandreferenceoff a list COLUMN, andListColumnSchemadeclares neither #7531 (other components, all closed).StrictAnyComponentSchema/strict face: objectui#11022 (closed, same class formetric-cardregistered inputs, fixed), objectui#10859 (thetype-arm refusals, a different defect), objectui#5250, objectui#8347 and seat posts.passthrough25 hits.Dedupe words: strict authoring face refuses read key · showSubmit undeclared FormSchema · undeclared read strict face · StrictAnyComponentSchema false refusal · declaration debt before strict
Generated by Claude Code