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: two ComponentPropsMap entries contradict their ruled authorities — object-grid.data vs ViewDataSchema, element:number.filter vs the platform filter form (rulings ui#6207-A, ui#6206-B) #12039
Filed by the triage seat from two maintainer rulings (2026-08-25 decision-inbox batch adjudication, objectui batch 4; acceptance verbatim: 「同意」). Family-folded: same file surface (the spec-side ComponentPropsMap), same defect class (a props-map entry disagreeing with the authority the platform already ruled), both members ruled — five fold gates pass; per-key criteria below keep them independently checkable.
Today z.array(z.unknown()).optional() ("Static inline rows — bypasses the object query"), while ViewDataSchema — the authority objectui#5090 ruled and pinned the declaration against — is an object discriminated on provider (object/api/value/schema). Measured on @objectstack/spec@17.2.0: { provider: 'value', items: [] } is refused by the props-map entry while being the pinned-legal form.
Ruled: the props-map entry converges onto ViewDataSchema. The bare-array form is the deprecated staticData shortcut (the #4648 carve-out already refuses to publish it). Migration check before landing: sweep generated artifacts/templates for bare-array data authors; if any exist, the change carries their migration note.
Today record | object ("Filter criteria"), while every otherfilter input across the component tree is the platform's array-of-rules form (ViewFilterRule entries — object-grid, object-metric, record:related_list, plugin-list, data-list). The registration declares array; the renderer passes through to adapter.aggregate({ filter }) / adapter.find(object, { $filter }) opaquely.
Ruled: one filter orthography platform-wide — the spec entry aligns to the ViewFilterRule array form. Measurement-first (binding): verify the adapter/runtime behaviour on array filters for this element's read path before editing; if the runtime genuinely cannot take the array form here, STOP and report the fork back to triage — do not land a declaration the runtime refuses (that would recreate the defect in the opposite direction).
Acceptance (per key, independently checkable)
ComponentPropsMap['object-grid'].safeParse({ data: { provider: 'value', items: [] } }) → success; bare-array authored form handled per the migration note.
ComponentPropsMap['element:number'].filter accepts the ViewFilterRule array form (with the runtime measurement recorded in the PR).
Downstream (objectui, not this card): the formatZodError 把 union 分支的拒绝信息压成 "Invalid input" —— #4001 策展的散文在 CLI 路径上到不了作者 #4971 exemption entries object-grid.data:object and element:number.filter:array in registry-inputs-spec-parity.test.ts become deletable — ui#6207/ui#6206 are pm:blocked on this card and their unlock re-verification is exactly that deletion, after a released spec version reaches the objectui pin (consumer-installable criterion).
Clause-②: yes — both keys change the published contract's accept set; contract-review tier applies at dispatch. Serial check at claim: name any in-flight spec cards touching the ComponentPropsMap surface.
Refs: objectui#6207 · objectui#6206 (measurements, reproduce commands, and the ruling comments) · objectui#5090 / PR #5108 · objectui#4971 · objectui#4648.
Status (PM, 2026-08-25, round R6) — Key 1 landed via PR #12120 (merged 13:45Z). Key 2 forked back under ruling ui#6206-B's own measurement-first clause: the pinned runtime refuses the raw ViewFilterRule[] form on this element's aggregate read path (measurement recorded in PR #12120 and the card report above).
Unblock re-verification: when objectui#6302 lands (adapter lowers rule-arrays on the aggregate path) and a spec-consumable pin bump follows, Key 2 re-enters the queue on this card.
Filed by the triage seat from two maintainer rulings (2026-08-25 decision-inbox batch adjudication, objectui batch 4; acceptance verbatim: 「同意」). Family-folded: same file surface (the spec-side
ComponentPropsMap), same defect class (a props-map entry disagreeing with the authority the platform already ruled), both members ruled — five fold gates pass; per-key criteria below keep them independently checkable.Key 1 —
ComponentPropsMap['object-grid'].data(ruling ui#6207-A)Today
z.array(z.unknown()).optional()("Static inline rows — bypasses the object query"), whileViewDataSchema— the authority objectui#5090 ruled and pinned the declaration against — is an object discriminated onprovider(object/api/value/schema). Measured on@objectstack/spec@17.2.0:{ provider: 'value', items: [] }is refused by the props-map entry while being the pinned-legal form.Ruled: the props-map entry converges onto
ViewDataSchema. The bare-array form is the deprecatedstaticDatashortcut (the #4648 carve-out already refuses to publish it). Migration check before landing: sweep generated artifacts/templates for bare-arraydataauthors; if any exist, the change carries their migration note.Key 2 —
ComponentPropsMap['element:number'].filter(ruling ui#6206-B)Today
record | object("Filter criteria"), while every otherfilterinput across the component tree is the platform's array-of-rules form (ViewFilterRuleentries — object-grid, object-metric, record:related_list, plugin-list, data-list). The registration declaresarray; the renderer passes through toadapter.aggregate({ filter })/adapter.find(object, { $filter })opaquely.Ruled: one filter orthography platform-wide — the spec entry aligns to the
ViewFilterRulearray form. Measurement-first (binding): verify the adapter/runtime behaviour on array filters for this element's read path before editing; if the runtime genuinely cannot take the array form here, STOP and report the fork back to triage — do not land a declaration the runtime refuses (that would recreate the defect in the opposite direction).Acceptance (per key, independently checkable)
ComponentPropsMap['object-grid'].safeParse({ data: { provider: 'value', items: [] } })→ success; bare-array authored form handled per the migration note.ComponentPropsMap['element:number'].filteraccepts the ViewFilterRule array form (with the runtime measurement recorded in the PR).object-grid.data:objectandelement:number.filter:arrayinregistry-inputs-spec-parity.test.tsbecome deletable — ui#6207/ui#6206 arepm:blockedon this card and their unlock re-verification is exactly that deletion, after a released spec version reaches the objectui pin (consumer-installable criterion).Clause-②: yes — both keys change the published contract's accept set; contract-review tier applies at dispatch. Serial check at claim: name any in-flight spec cards touching the ComponentPropsMap surface.
Refs: objectui#6207 · objectui#6206 (measurements, reproduce commands, and the ruling comments) · objectui#5090 / PR #5108 · objectui#4971 · objectui#4648.
Status (PM, 2026-08-25, round R6) — Key 1 landed via PR #12120 (merged 13:45Z). Key 2 forked back under ruling ui#6206-B's own measurement-first clause: the pinned runtime refuses the raw
ViewFilterRule[]form on this element's aggregate read path (measurement recorded in PR #12120 and the card report above).Blocked-by: objectstack-ai/objectui#6302
Unblock re-verification: when objectui#6302 lands (adapter lowers rule-arrays on the aggregate path) and a spec-consumable pin bump follows, Key 2 re-enters the queue on this card.