Repository navigation
Closed
Labels
domain:specDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch loopReady for the PM dispatch loopprotocol:breakingtarget:v17Release blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GARelease blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GA
Description
#4956 给 dashboard.widgets 补上了 children 下钻,22 个 widget 级键第一次拿到逐键裁决(证据取自 objectui@91757a7 与本仓库 HEAD,2026-08-03 手工闭合调用图)。其中 16 个 live,6 个 dead。
responsive 已经在 #4876 / PR #4995 退休(tombstone),不在本单范围。剩下 5 个 dead 键是 ADR-0049 enforce-or-remove 的工作项:
| 键 | 裁决依据 | 备选出路 |
|---|---|---|
widgets[].colorVariant |
没有任何渲染路径读顶层键。读它的全是编写期界面(WidgetConfigPanel、plugin-designer/DashboardEditor、metadata-admin 的 DashboardWidgetInspector、DashboardWithConfig 的配置草稿)。DashboardRenderer 构造 metric / object-metric 组件 schema 时是显式拼装的({ type: 'metric', ...options, label, value }),所以只有 options.colorVariant 能到达 MetricWidget;dataset 路径(DatasetWidget)则完全没有配色能力 |
enforce(渲染器改读顶层键)或 remove(让作者写进 options)。注意本仓库自己的 packages/platform-objects/src/apps/dashboards/system_overview.dashboard.ts 就写了 7 次 —— 直接删键会改动平台自带看板 |
widgets[].actionUrl |
没有任何渲染器画「每个 widget 的操作按钮」。DashboardRenderer 里 14 处 actionUrl 全部限定在 schema.header.actions[](那是 DashboardHeaderAction,另一个 schema) |
remove,或真的实现 widget 级按钮 |
widgets[].actionType |
同上;唯一读它的是下面那条 lint,用来挑选对 actionUrl 套哪条解析规则 |
同上 |
widgets[].actionIcon |
两个仓库里除 schema 声明和一行 objectui 类型注释外零引用,连 lint 都不看它 | 同上 |
widgets[].aria |
两仓库均无 widget.aria 消费者(DashboardRenderer / DatasetWidget 里的 aria-* 是渲染器自己的 DOM 属性;objectui 唯一的 .aria 读取在 plugin-view/ObjectView.tsx:989,那是 view 的)。与 17.0.0 里被删掉的看板级 aria 是同一种「假合规」 |
remove(与看板级 aria 一致) |
值得单独指出的二阶成本
packages/lint/src/validate-dashboard-action-refs.ts 对 widgets[].actionUrl 做引用完整性强校验:目标解析不到就 ERROR、构建失败。它的 docblock 写着自己「mirrors the objectui runtime dispatch」、把这个键称作 "the per-widget button" —— 而那个按钮并不存在。也就是说,今天一个作者可能因为一个永远不会渲染的按钮指向不存在的 action 而被卡住构建。删键时这条规则的 widget 分支要一并处理。
现状与不做什么
- liveness:
DashboardWidgetSchema的 ~22 个 widget 级键从未被台账分类,而 dashboard.json 的 _note 声称它们已分类 #4956 只记录裁决,不动任何键;5 个键都已带authorWarn+authorHint,objectstack build/lint会在编写期提示(liveness:DashboardWidgetSchema的 ~22 个 widget 级键从未被台账分类,而 dashboard.json 的 _note 声称它们已分类 #4956 同时把dashboard注册进 CLI lint 的TYPE_COLLECTIONS,否则台账正确但无人收到)。 - 走 remove 路线请照
.claude/skills/spec-property-retirement/SKILL.md:DashboardWidgetSchema是.strict(),两条路线(retiredKey tombstone vs 严格删除)对台账行的处置相反。
台账证据:packages/spec/liveness/dashboard.json → props.widgets.children。
Generated by Claude Code
Metadata
Metadata
Assignees
Labels
domain:specDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch loopReady for the PM dispatch loopprotocol:breakingtarget:v17Release blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GARelease blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GA
Activity
docs(spec): point the widget dead verdicts at their worklist issues (#…
fix(spec): 给 dashboard widget 子树补下钻,并让门禁拒绝「未声明的容器继承」(objectstack-ai#4956
xuyushun441-sys commentedon Aug 4, 2026
CLAIM
session_01Ehu85kbvMcrNTUJjwxvLJ9(spec 车道 PM,派发给 os-dev 实施)claude/issue-5010-dashboard-dead-keysgen:strictness-ledger生成物,散文行手写;dashboard.zod.ts 行按新格式词表。相关新证据:DashboardWidget.chartConfig在 dashboard 元数据面只有showLegend落地 —— 12 个已声明键里 11 个惰性,liveness 台账那一行高估了证据 #5175(chartConfig 12 键惰性 11)、PR feat(spec,lint): 声明 chart segment drill ——ChartDrillDownSchema,挂在真正读它的那一层 (#5022) #5221(drillDown 落点与 dashboard 面 guidance)已落,退役措辞与它们对齐。Generated by Claude Code
docs(spec): 订正 WidgetActionTypeSchema 的一处陈述 —— 派发源是 header action
xuyushun441-sys commentedon Aug 4, 2026
colorVariant 补充裁决(2026-08-04,维护者委托 PM 按业务/长远两轴代选):B(落实)
options.colorVariant)被 PR refactor(spec,lint)!: 退役 dashboard widget 的 action 三键与 aria —— 连同那道「为不存在的按钮做引用完整性」的门 (#5010) #5255 的实测推翻 ——dataset必填 ⇒ 所有合法 widget 走 DatasetWidget,options在该路径不可达,D2 只是把死槽搬家。widgets[].colorVariant保留声明,由 objectui 给 DatasetWidget 的 metric 卡接上强调色(objectui#3366 跟踪);spec 零改动、零 v17 窗口占用。选择依据:16 处真实授权(system_overview 7 + showcase 9)证明这是看板的本能需求;A 需再占一次破坏窗口且大概率 v18 词表回摆;B 让既有声明由构造变诚实。Generated by Claude Code
xuyushun441-sys commentedon Aug 4, 2026
更正:上条裁决评论中 colorVariant 的 objectui 跟踪单号应为 objectui#3359(误写为 #3366)。
Generated by Claude Code
refactor(spec,lint)!: 退役 dashboard widget 的 action 三键与 aria —— 连同那道「为…
test(cli,lint): re-judge the per-package parity fixture to the ruled …
fix(spec): the protocol 16 → 17 conversion summaries and three descri…
test(spec): the second ui/ file group's test titles state each cited …