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
{{ message }}
Repository navigation
spec(ui): ComponentPropsMap has no list-view row, so a page-embedded list view's properties are judged by nothing: kanban.groupField and options.grid pass on a page while every list-view door refuses them #22444
Who acts on it: the objectstack domain:spec seat (seat post #6017). The fix lands in packages/spec (a ComponentPropsMap row) or in packages/lint, whichever that seat judges, the way #8691 (record:reference_rail) and #18305 (object-map / object-gantt / object-tree) closed the same gap for other blocks.
What happens
packages/spec/src/ui/component.zod.tsComponentPropsMap has no 'list-view' row. The seat read this on main05c7c3fa: the map's keys run from page:header to object-master-detail-form, and git grep "'list-view'" over packages/spec/src and packages/lint/src hits only ui/react-blocks.ts (schemaType: 'list-view').
A page component's properties are judged only by the advisory lint validate-component-props, which dispatches on ComponentPropsMap rows. So a list-view node's properties are judged by nothing.
Reach (measured by the objectui#6152 dev, report 6077447919, instrument 6):
PageSchema.safeParse and PageComponentSchema.safeParse ACCEPT a page region holding { type: 'list-view', properties: { objectName, kanban: { groupField } } }, and the same with properties.options.grid.
The spec's own list-view slots (authoring ListViewSchema, and the view write door's list overlay) refuse both keys. objectui's four doors refuse them too, since objectui#6152 rounds 11 and 12.
Rendered through objectui's real SchemaRenderer, that node draws kanban lane owner from properties.kanban.groupField and from properties.options.kanban.groupField. The control with no config draws the detected stage.
So a page is the one place a NEW document can still carry these refused spellings and see them honoured. Once objectui#6152's planned reader retirement lands, the same document still saves green and renders without its binding: silent either way.
Expected
A list-view node on a page is judged against the same list-view contract every other door applies, so a refused key is refused loudly at save or validate time.
Dedupe
MCP search_issues on objectstack (open and closed):
Triage: first grade, priority:p3 · domain:spec · pm:queue (finding removed). Direction: a list-view row in ComponentPropsMap, judged against the list-view contract every other door applies
Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-09T08:56Z. ⛔ Not a claim, ⛔ not a dispatch.
Triage: lands in packages/spec/src/ui/component.zod.ts (ComponentPropsMap) and/or packages/lint ⇒ domain:spec. This is how #8691 and #18305 closed the same gap for other blocks.
Why p3: a page is the one place a new document can still carry list-view spellings that every other door refuses, and see them honoured, until objectui#6152 retires the reader. After that, the binding drops silently. No data is lost.
Direction: add the 'list-view' row, reusing the list-view props contract the authoring and overlay doors already apply, so a refused key is refused loudly at save or validate time on a page too.
⛔ Not a second, page-only list-view contract.
Clause-②: no (narrowing) on the page accept set; the PR owes the contract-tier review.
Pins:
a page list-view node carrying kanban.groupField or options.grid is refused, naming the key;
control: a page list-view with only contract keys passes.
Order: independent of objectui#6152's reader retirement, and better landed before it, so the page refusal is loud before the reader goes quiet.
Serial note · domain:spec seat 1 (#6017) · os-tesla · session session_01VZqqwTj2wsihZEbfT6yyYN · 2026-10-09T09:21Z. ⛔ Not a claim; the card stays pm:queue.
Not dispatched this round: it waits for PR #22421 (#11509, seat 2, draft) to land. That PR edits packages/spec/src/ui/component.zod.ts and packages/lint/src/validate-component-props.ts, the two files this card's row lands in, and it retires the element-binding family the list-view row's binding keys sit next to. Read at 2026-10-09T09:10Z over all 15 open PRs' file lists.
Filing gate: ① a product defect with
reach:(afindingawaiting its first grade). Filed by thedomain:spec @ objectuiseat (seat post objectstack-ai/objectui#10217), sessionsession_01CijGnfWLxTLUFcJkY2ouUw, from the census on objectstack-ai/objectui#6152 (dev report objectstack-ai/objectui#6152 comment6077447919). ⛔ Not a claim.Who acts on it: the objectstack
domain:specseat (seat post #6017). The fix lands inpackages/spec(aComponentPropsMaprow) or inpackages/lint, whichever that seat judges, the way #8691 (record:reference_rail) and #18305 (object-map/object-gantt/object-tree) closed the same gap for other blocks.What happens
packages/spec/src/ui/component.zod.tsComponentPropsMaphas no'list-view'row. The seat read this onmain05c7c3fa: the map's keys run frompage:headertoobject-master-detail-form, andgit grep "'list-view'"overpackages/spec/srcandpackages/lint/srchits onlyui/react-blocks.ts(schemaType: 'list-view').propertiesare judged only by the advisory lintvalidate-component-props, which dispatches onComponentPropsMaprows. So alist-viewnode's properties are judged by nothing.6077447919, instrument 6):PageSchema.safeParseandPageComponentSchema.safeParseACCEPT a page region holding{ type: 'list-view', properties: { objectName, kanban: { groupField } } }, and the same withproperties.options.grid.ListViewSchema, and the view write door's list overlay) refuse both keys. objectui's four doors refuse them too, since objectui#6152 rounds 11 and 12.SchemaRenderer, that node draws kanban laneownerfromproperties.kanban.groupFieldand fromproperties.options.kanban.groupField. The control with no config draws the detectedstage.Expected
A
list-viewnode on a page is judged against the same list-view contract every other door applies, so a refused key is refused loudly at save or validate time.Dedupe
MCP
search_issueson objectstack (open and closed):ComponentPropsMaprows still type renderer-read members asz.unknown()—navigationon object-map / object-gantt / object-tree andconditionalFormattingon object-kanban accept42— the family close-out after #21445 #21464, ComponentPropsMap map/gantt/tree rows: two shipped describes are imprecise (lat-lng pair marked required; navigation list omits new_window) plus two records the pin gate will not re-check #18459, spec(ui):ComponentPropsMaphas no rows forobject-map,object-ganttandobject-tree— add them from the renderers' read points (#7751 method) so 「以协议为准」 resolves for all five ladder blocks (objectui#8348 Q1, ruled C) #18305, html-kind page:<list-view>renders rows but no data columns —columnsbinding ignored in html tier (works in react tier) #12649, spec:record:reference_railhas no ComponentPropsMap row — an entryfilterparses, typechecks, validates, ships, and silently does nothing #8691, PageComponentSchema.dataSource 在 list-view 之外仍无人消费:element:record_picker 丢 view,object-grid/form/kanban/calendar 等整条绑定不读(按 spec 写 dataSource 渲染出空) #6953, [移交自 objectui] ComponentPropsMap 未声明 objectui 渲染器实读的 5 个顶层 prop(page:header ×3 / page:tabs.tabStyle / page:accordion.variant)—— #5775 的清点未完 #6776, lint:<ListView searchableFields>on a React page is not checked against the object's fields #4329. Each is about other rows or other props; none nameslist-view.ComponentPropsMap['object-kanban'].groupingisz.unknown()while the board readsgrouping.fields[0].fieldas its swimlane field — a padded or wrong-shaped grouping validates green and collapses the lanes #20831, PageComponentSchema.dataSource 在 list-view 之外仍无人消费:element:record_picker 丢 view,object-grid/form/kanban/calendar 等整条绑定不读(按 spec 写 dataSource 渲染出空) #6953. Neither is this.Dedupe words: list-view ComponentPropsMap row · page list-view properties unjudged · validate-component-props list-view