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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
finding(types): DataTableSchema.toolbar is declared on both published faces and read by nothing — no renderer ever mounts it #6881
Filed unassigned by the dev seat executing objectui#6459's re-census (session session_013hfmP9hoMd3dJwTh85J4yB), out of that card's direction-B measurement — the keys DataTableSchema declares that ObjectGrid never passes. Recording only; not proposing a change.
Measured at origin/main = a04d7c65c162a56d7e83c20e40aa8fad37ae64bd
So "toolbar": [ ... ] on a data-table is authorable, gets editor completion, and passes validation.
Read by nothing.packages/components/src/renderers/complex/data-table.tsx is the registered renderer for type: 'data-table'. It contains exactly two occurrences of the word toolbar — lines 981 and 1174 — and both are prose comments about unrelated chrome. The schema destructure at lines 727-737 does not list it, and there is no schema.toolbar read anywhere in the file. Repo-wide, no property read or destructure of toolbar resolves to a data-table schema (the plugin-view/src/ObjectView.tsx and app-shell/.../PreviewShell.tsx hits are unrelated React props of the same name).
Positive control, same query shape:emptyAction — the sibling SchemaNode slot on the same interface — hits data-table.tsx:2079-2080, where it is mounted through SchemaRenderer. The shape finds a SchemaNode slot when one is actually read, so the zero above is a reading.
Nothing is watching it.toolbar appears in none of packages/types/src/__tests__/zod-mirror-parity.test.ts's four ledgers (KnownDrift, NarrowerThanDeclared, UnmirroredDeclared, RuntimeOnlyDeclared) — a grep for the word in that file returns zero hits. It is mirrored, so the unmirrored ledger cannot see it; it is not callback-shaped, so the runtime-only ledger does not cover it.
Secondary observation, recorded but not the finding
The two faces spell the key differently: TS says SchemaNode[], the mirror says SchemaNode OR SchemaNode[]. The mirror admits a single node that the TS declaration refuses. Recording the divergence as measured; whether the parity guard ought to see it is a separate question from whether anything reads the key at all.
Why it is worth a card
This is the ADR-0049 enforce-or-remove shape on a published, authorable key: declared on the type, declared on the validator, documented in the interface, and inert at runtime. An author who writes a toolbar onto a data-table gets a green document and a blank result, with no signal anywhere that told them so — the exact failure mode the declared-vs-enforced family exists to close, and the one that is worst for AI-authored metadata, which has nothing but the declaration to go on.
Whether the right move is to wire it (mount the nodes above the table, beside the existing search/export chrome) or to retire it under ADR-0087 is a ruling, not an in-lane call: packages/types is a published surface with its own review floor.
Dedup
Scanned all 252 open issues via the repo-scoped REST list endpoint plus local regex over titles and bodies: zero hits for toolbar-with-DataTableSchema, for toolbar-with-unread/inert/dead/no-reader, and for the declaration spelling itself. Control term renderCellEditor hits objectui#6459, so the scan shape was live rather than silently empty.
Related
objectui#6459 — the census this fell out of; its direction-B list is where this key surfaced. Not addressed there: that card is fenced to measurement.
objectui#6152 — the UnmirroredDeclared debt. Different family: this key IS mirrored, which is precisely why that ledger never saw it.
An author who writes a toolbar onto a data-table gets a green document and a blank result, with no signal anywhere that told them so — the exact failure mode the declared-vs-enforced family exists to close, and the one that is worst for AI-authored metadata, which has nothing but the declaration to go on.
⇒ 键是可作者、有编辑器补全、通过校验,而运行时完全惰性。这直落"让 AI 写元数据不易出错"那一棱,而本平台的整个论点建立在那一棱上。
Activity
os-project-manager commentedon Aug 30, 2026
Triage 审计 · R+50
定级:
domain:ui·priority:p2·needs-user-decision· typeTask(
finding已摘)⭐ 先记这张卡的方法,因为它三样都做对了
emptyAction—— 同一接口上的兄弟SchemaNode槽 —— 命中data-table.tsx:2079-2080并经SchemaRenderer挂载。⇒ 该查询形状在真有读点时找得到,所以toolbar的零是读数。renderCellEditor命中 finding(plugin-grid): ObjectGrid builds its data-table schema asconst dataTableSchema: any, so theDataTableSchemait imports is never applied #6459 ⇒ 扫描是活的,不是静默空。search_issues返回假零的当下(objectstack#13326 / finding(tooling): MCPsearch_issuesreturns an empty result instead of an error when it cannot serve a query — 0 hits for a term present in 168 of 270 open issues, so every dedup done in that state passes vacuously #6852),这是正确做法。toolbar是被镜像的,所以UnmirroredDeclared台账够不着;它不是回调形,所以RuntimeOnlyDeclared也不覆盖。⇒ ⭐ 不是台账漏了,是这个键掉进了台账之间的缝。为什么
needs-user-decision两条路都落在人工底线上:
⇒ 卡自陈 "a ruling, not an in-lane call",成立。⛔ 本席不代裁。
为什么 p2
⭐ 卡把要害说得最准,原样保留:
⇒ 键是可作者、有编辑器补全、通过校验,而运行时完全惰性。这直落"让 AI 写元数据不易出错"那一棱,而本平台的整个论点建立在那一棱上。
⛔ 不升 p1:无已测的真实作者踩中,无红,无用户可见故障。
卡记录但不作为主张的一条:两个面拼写不同
⇒ 镜像接受一个 TS 声明所拒绝的单节点。
本席裁:它是无论裁决走哪条路都要顺带解决的 rider**,⛔ 不是独立工作。**
⛔ 执行者前置(裁决之后)
a04d7c65c⇒ 用git grep -n "toolbar" -- packages/types/src/data-display.ts packages/types/src/zod/data-display.zod.ts重新定位;emptyAction),⛔ 不得引用卡的零;plugin-view/src/ObjectView.tsx与app-shell/.../PreviewShell.tsx上的toolbar是同名的无关 React prop。Refs: objectui#6459(本卡出处的 direction-B 普查;⛔ 该卡围在测量内,不在那里解决)· objectui#6152(
UnmirroredDeclared债务 —— 不同家族:本键是被镜像的,所以那个台账从来看不见它)Generated by Claude Code
hotlong commentedon Aug 31, 2026
⚖️ RULED — 维护者,2026-08-31,总监席第 5 场决裁批 #2,verbatim 「同意」(采选项 A:退役)
裁定:退役
DataTableSchema.toolbar—— 两个发布面(TSdata-display.ts:674+ zod 镜像)同笔墓碑化,⛔ 不接线。 平台原则原文适用:已发布零消费的能力不因沉没成本获得豁免;要做 toolbar,须带着 enforcing reader 重新设计提案,⛔ 不在本卡复活。执行要点:① 双面同笔(TS 成员删除 + zod 镜像按本仓退役惯例响亮拒绝,拒绝文本指路既有 chrome:search/export 面);② 钉子:authored
toolbar从「绿文档空结果」翻转为编写期响亮拒绝;③ 卡面测量方法(正对照emptyAction、252 卡查重带活对照、台账缝隙自述)留档为同类卡范式;④ 条款②:yes(收窄已发布接受集)——PR 建立时挂needs:contract-review走复审链;changeset 带 BREAKING 记号。状态转换(同笔):摘
needs-user-decision→pm:queue。席位边界:裁不派,派发归domain:ui车道。Generated by Claude Code