Escalated by the domain:devx @ objectui execution seat (#5748), PM session session_019b5UBNMtTzKbVtZZGvFuxe, out of #6122 / PR #6130. The measuring dev flagged this as the one cost it could not decide alone, and I agree — it is a public-contract question, not a documentation cleanup.
What was measured
#6122 began as "16 doc sites annotate props as string | ActionConfig, and ActionConfig does not exist — which type did they mean?" Resolved individually against the builtpackages/*/dist/*.d.ts with the compiler API:
Zero of the 16 sites resolve to ActionSchema or UIActionSchema.
Every slot the shipped types declare is a plain function callback. The question the card asked has no answer because its premise was wrong.
Of the 16: 6 were determinable and are fixed in PR #6130. 4 need the documented prop renamed and 1 restructured into a nested object — I ruled those, since a slot exists under a different name and the docs are simply wrong about it. These 5 have no declared slot at all:
| page | documented prop | shipped type says |
|---|
sonner | action.onClick | SonnerSchema (feedback.d.ts:194) has noaction prop |
context-menu | onSelect | absent (overlay.d.ts:388) |
menubar | onSelect | absent (overlay.d.ts:415) |
dropdown-menu | onSelect | only onOpenChange (overlay.d.ts:383) |
button-group | onValueChange | absent (navigation.d.ts:330) |
Two further measurements, both independent of the above:
- The
string | half of all 16 annotations documents exactly the shape objectui#4453 ruled is DROPPED — an authored onAction: 'NOT-A-FUNCTION' is discarded (packages/plugin-calendar/src/calendar-view-renderer.tsx:322-331). - No renderer reads any of these schema-level slots, for any of the 15 components.
The question
Correcting these five is not a rename, because there is nothing to rename to. The choice decides something about the product:
Are ObjectUI component schemas meant to carry JSON-authorable action references at all?
- If no — the docs are advertising a capability that does not exist, and should stop.
- If yes, eventually — deleting now and restoring later is churn, and the honest interim is a types gap recorded as such.
That is why this is not the seat's to settle.
Options
A — Documentation follows the shipped types all the way. Delete the five documented props; optionally move the menu handlers onto the item, where the shipped MenuItem.onClick (overlay.d.ts:334) actually lives.
Cost: reader-facing removal across 15 pages. Benefit: every remaining line is true.
B — Record it as a types gap. Leave the docs, file a types card asking whether these schemas should gain authorable action slots.
Cost: the pages keep teaching something that does nothing, and #5867's components group (71 files) stays blocked meanwhile. Benefit: no churn if the answer turns out to be yes.
C — Declare the blocks fragments. ⛔ Rejected on its face — FRAGMENT_MARKER is forbidden on genuinely-TypeScript blocks, and it converts a measured defect into a declared skip.
D — Mint ActionConfig or an action-reference union. ⛔ Rejected — minting a symbol so documentation becomes retroactively true, refused three times already this session (#5329's $schema URL, #6107's cell renderers, #6122's own prohibition).
四棱分析
Seat recommendation: A, with B's follow-up card if you also want the types question formally opened. The measuring dev independently reached the same conclusion.
⚠️This blocks #5867's components group — 71 files, the largest remaining group in that card's burn-down.
Reply 「A」/「B」, or per-component if you want the menus treated differently from sonner / button-group.
Refs: #6122 / PR #6130 · #4453 · #5867 · #5329 · #6107.
Escalated by the
domain:devx@ objectui execution seat (#5748), PM sessionsession_019b5UBNMtTzKbVtZZGvFuxe, out of #6122 / PR #6130. The measuring dev flagged this as the one cost it could not decide alone, and I agree — it is a public-contract question, not a documentation cleanup.What was measured
#6122 began as "16 doc sites annotate props as
string | ActionConfig, andActionConfigdoes not exist — which type did they mean?" Resolved individually against the builtpackages/*/dist/*.d.tswith the compiler API:Every slot the shipped types declare is a plain function callback. The question the card asked has no answer because its premise was wrong.
Of the 16: 6 were determinable and are fixed in PR #6130. 4 need the documented prop renamed and 1 restructured into a nested object — I ruled those, since a slot exists under a different name and the docs are simply wrong about it. These 5 have no declared slot at all:
sonneraction.onClickSonnerSchema(feedback.d.ts:194) has noactionpropcontext-menuonSelectoverlay.d.ts:388)menubaronSelectoverlay.d.ts:415)dropdown-menuonSelectonOpenChange(overlay.d.ts:383)button-grouponValueChangenavigation.d.ts:330)Two further measurements, both independent of the above:
string |half of all 16 annotations documents exactly the shape objectui#4453 ruled is DROPPED — an authoredonAction: 'NOT-A-FUNCTION'is discarded (packages/plugin-calendar/src/calendar-view-renderer.tsx:322-331).The question
Correcting these five is not a rename, because there is nothing to rename to. The choice decides something about the product:
Are ObjectUI component schemas meant to carry JSON-authorable action references at all?
That is why this is not the seat's to settle.
Options
A — Documentation follows the shipped types all the way. Delete the five documented props; optionally move the menu handlers onto the item, where the shipped
MenuItem.onClick(overlay.d.ts:334) actually lives.Cost: reader-facing removal across 15 pages. Benefit: every remaining line is true.
B — Record it as a types gap. Leave the docs, file a types card asking whether these schemas should gain authorable action slots.
Cost: the pages keep teaching something that does nothing, and
#5867's components group (71 files) stays blocked meanwhile. Benefit: no churn if the answer turns out to be yes.C — Declare the blocks fragments. ⛔ Rejected on its face —
FRAGMENT_MARKERis forbidden on genuinely-TypeScript blocks, and it converts a measured defect into a declared skip.D — Mint
ActionConfigor an action-reference union. ⛔ Rejected — minting a symbol so documentation becomes retroactively true, refused three times already this session (#5329's$schemaURL, #6107's cell renderers, #6122's own prohibition).四棱分析
examples/、apps/、content/与packages/*/src中检索作者写入的字符串型onSelect/onAction,除 plugin-calendar: an authoredonEventClickreaches CalendarView through the spread and throws an UNCAUGHT error on click — needs a contract decision, not a strip #4453 记录「该值被丢弃」的注释外一个都没有。没有任何已知使用者在等这个能力。string | SomeAction、而声明侧是函数类型,正是该规则禁止的第二套事实上的方言;plugin-calendar: an authoredonEventClickreaches CalendarView through the spread and throws an UNCAUGHT error on click — needs a contract decision, not a strip #4453 已经就这个方向裁过一次。string | ActionConfig出现在参考页上,恰恰会让 AI 作者写出一个能通过校验、能发布、然后静默什么都不做的字符串处理器。这是四个维度里代价最实的一个。Seat recommendation: A, with B's follow-up card if you also want the types question formally opened. The measuring dev independently reached the same conclusion.
componentsgroup — 71 files, the largest remaining group in that card's burn-down.Reply 「A」/「B」, or per-component if you want the menus treated differently from
sonner/button-group.Refs: #6122 / PR #6130 · #4453 · #5867 · #5329 · #6107.