content/docs/guide/quick-start.md 的 Next Steps → Add Actions 一节,用一句斩钉截铁的散文把 events bag 教成声明 action 的规范方式:
Actions are data, not inline functions. Define them in schema events:
后面是那个 bag(:141-158):
{
"type": "button",
"label": "Open details",
"events": { "onClick": [ { "action": "navigate", "params": { "url": "/users/ada" } } ] }
}
events 在运行时无人读取 —— 四项证据,逐条在 origin/main 上跑过
A. git grep -nE '\??\.events\b' -- 'packages/*/src' 'apps/*/src' (排除测试)
⇒ 0 处。SDUI 节点读取点:零。
B. git grep -n 'EventableSchema' -- packages apps
⇒ 恰好三处:api-types.ts:278 自身声明 · :470 一个联合成员 · index.ts:718 索引再导出。
无 extender、无 mirror、无 reader。
C. packages/core/src/utils/dom-props.ts:24
⇒ DOM 直通白名单的注释里,正把 events="[object Object]" 当作它要关掉的泄漏来举例。
D. ButtonSchema.onClick 的 handlerKeyRefusal 信息指向的是一个**节点类型**
(`action:button` + `actionType`),从来不是 events bag。
⚠️ 措辞精确性:EventableSchema 是 api-types.ts 里的 TypeScript interface,不是 zod schema。作者写的 events 能过 parse 是因为 ButtonSchema / BaseSchema 是 .passthrough()。准确说法是**「TS 面上有声明、索引有导出、运行时无人读」**。
背景:objectui#6497 已记录这套声明无人读取;objectui#6182 在 2026-08-25 的 Option A 裁定把它重定价为 ADR-0049 退役,明确写着它不会成为任何 wiring 的座位。所以这不是「等 events 长出读取端」,是文档在教一个正在退役且从未接线的通道。
面:恰好一处,这是量出来的
全 content/docs 里作者写 "events" 的只有两个文件:
| 文件 |
内容 |
判定 |
guide/quick-start.md:148 |
"events": { "onClick": [...] } on a button |
缺陷,本卡 |
api/schema-reference.md:669,1092 |
{ "type": "timeline", "events": [] } |
⛔ 不是缺陷 —— timeline 自己的 events,有真实读取端 |
⛔ 不要把第二个也改了。
修复方向
用 objectui#7898 / PR objectui#7931 已经量过并落地的方言:action:button 节点携带 actionType。那条 navigate 的意图对应内置词汇里的 url(objectui 另有 navigation 别名)—— ⚠️ 具体 spelling 要按 ActionSchema 自己的声明重新量一遍,不要从 ButtonSchema 那次结论直接搬(见下)。散文那句「Define them in schema events」必须同时改掉,否则改了 fence 而留着散文只是把矛盾换个位置。
⚠️ 一条未测量的相邻观察,⛔ 不要当成本卡的一部分
本页把读者指向 /docs/core/enhanced-actions(content/docs/core/enhanced-actions.mdx),而那一页教的是 ActionSchema 对象模型({ type:'action', label, actionType:'ajax', api:'/api/orders/process', method:'POST' }),不是 events bag —— 也就是说 quick-start 目前与它自己的链接目标互相矛盾,这是本卡该修的一半理由。
但 ⚠️ 那一页里的 actionType: 'ajax' 与 api: 两个 spelling,看起来像 objectui#7898 在 ButtonSchema 语境下量到的两个缺陷(内置词汇是 script/url/modal/flow/api/form,端点键是 endpoint 而非 api)。⛔ 不要据此认定它是缺陷:那是 ActionSchema,不是 ButtonSchema,两者的词汇表必须各自测量 —— 从上游卡的结论推断适用层级,正是本仓今晚已经踩过的错误。而且那是一个 ts fence,check:doc-snippets 会判它,它今天是绿的,这本身就是它对 ActionSchema 合法的强信号。要立卡,先量。
相关:objectui#6497(声明无读取端的本体卡,退役链)· objectui#6182(2026-08-25 Option A 裁定)· objectui#7898 / PR objectui#7931(同一族的九处按钮键修复,本卡由它的席位报出)· objectui#7872(其记录里那条「已测量、不是缺陷」的注记已被更正)。
Generated by Claude Code
content/docs/guide/quick-start.md的 Next Steps → Add Actions 一节,用一句斩钉截铁的散文把eventsbag 教成声明 action 的规范方式:后面是那个 bag(
:141-158):{ "type": "button", "label": "Open details", "events": { "onClick": [ { "action": "navigate", "params": { "url": "/users/ada" } } ] } }events在运行时无人读取 —— 四项证据,逐条在origin/main上跑过EventableSchema是api-types.ts里的 TypeScript interface,不是 zod schema。作者写的events能过 parse 是因为ButtonSchema/BaseSchema是.passthrough()。准确说法是**「TS 面上有声明、索引有导出、运行时无人读」**。背景:objectui#6497 已记录这套声明无人读取;objectui#6182 在 2026-08-25 的 Option A 裁定把它重定价为 ADR-0049 退役,明确写着它不会成为任何 wiring 的座位。所以这不是「等 events 长出读取端」,是文档在教一个正在退役且从未接线的通道。
面:恰好一处,这是量出来的
全
content/docs里作者写"events"的只有两个文件:guide/quick-start.md:148"events": { "onClick": [...] }on abuttonapi/schema-reference.md:669,1092{ "type": "timeline", "events": [] }events,有真实读取端⛔ 不要把第二个也改了。
修复方向
用 objectui#7898 / PR objectui#7931 已经量过并落地的方言:⚠️ 具体 spelling 要按
action:button节点携带actionType。那条navigate的意图对应内置词汇里的url(objectui 另有navigation别名)——ActionSchema自己的声明重新量一遍,不要从ButtonSchema那次结论直接搬(见下)。散文那句「Define them in schema events」必须同时改掉,否则改了 fence 而留着散文只是把矛盾换个位置。本页把读者指向
/docs/core/enhanced-actions(content/docs/core/enhanced-actions.mdx),而那一页教的是ActionSchema对象模型({ type:'action', label, actionType:'ajax', api:'/api/orders/process', method:'POST' }),不是eventsbag —— 也就是说 quick-start 目前与它自己的链接目标互相矛盾,这是本卡该修的一半理由。但⚠️ 那一页里的
actionType: 'ajax'与api:两个 spelling,看起来像 objectui#7898 在ButtonSchema语境下量到的两个缺陷(内置词汇是script/url/modal/flow/api/form,端点键是endpoint而非api)。⛔ 不要据此认定它是缺陷:那是ActionSchema,不是ButtonSchema,两者的词汇表必须各自测量 —— 从上游卡的结论推断适用层级,正是本仓今晚已经踩过的错误。而且那是一个tsfence,check:doc-snippets会判它,它今天是绿的,这本身就是它对ActionSchema合法的强信号。要立卡,先量。相关:objectui#6497(声明无读取端的本体卡,退役链)· objectui#6182(2026-08-25 Option A 裁定)· objectui#7898 / PR objectui#7931(同一族的九处按钮键修复,本卡由它的席位报出)· objectui#7872(其记录里那条「已测量、不是缺陷」的注记已被更正)。
Generated by Claude Code