Repository navigation
Description
从 #5022 的载体测量中分离出来,未指派。#5022 本身在问 drillDown 该挂哪儿;测量顺带把 chartConfig 这个候选载体整体量了一遍,发现的是一件独立且更大的事。
发现
DashboardWidgetSchema.chartConfig 声明的是完整的 ChartConfigSchema(12 个可写键:type / title / subtitle / description / xAxis / yAxis / series / colors / height / showLegend / showDataLabels / annotations / interaction / aria)。在 dashboard 元数据渲染路径上,落地的只有 showLegend 一个。
证据(objectui @91757a7):
-
packages/plugin-dashboard/src/DashboardRenderer.tsx全文 0 处chartConfig—— 内联路径构造 component schema 时根本不看它; -
ADR-0021 正路
packages/plugin-dashboard/src/DatasetWidget.tsx:595-605只取一个键,注释自陈:chartConfig.showLegend(ci(lint): reject raw NUL bytes in tracked sources #3135). The widget's chart config never reached the renderer — this component readoptionsand nothing else … Lower the one flag the renderer already honors; the rest ofchartConfigstays unforwarded (the renderer derives axes/series from the dataset selection). -
同文件
:632构造出的 chart schema 是{ type, chartType, data, xAxisKey, series, isAnimationActive, showLegend?, categoryColors?, categoryOrder? }—— 没有第二个chartConfig键。
即:一个 dashboard 作者写 widget.chartConfig.title / .colors / .annotations / .interaction / .xAxis,全部 parse 通过、全部无效果。ADR-0078 的失效模式,声明侧完整、交付侧只剩 1/12。
台账那一行
packages/spec/liveness/dashboard.json 里 widgets.children.chartConfig:
"status": "live",
"evidence": "objectui @91757a7: packages/plugin-dashboard/src/DatasetWidget.tsx:602-603 (chart-config bag forwarded to the chart renderer)",
"note": "chart presentation config; read on the dataset-bound chart path."
chart-config bag forwarded 是不成立的:602-603 行做的是取出这个 bag,紧接着的一行只抽 showLegend。这一行的形状和 #4956 之前 widgets 那一行是同一类 —— 容器判 live,里面的键从没被单独问过。chartConfig 今天没有 children,所以 12 个键一个都没分类。
type 这个键是 react tier 活的:react-blocks.ts 的 ObjectChart 块把 ChartConfigSchema 的键作为扁平 prop 发布(dataProps),react 页面上它们确实到达渲染器。所以这不是「整个 schema 该退休」,而是同一个 schema 在两个面上命运不同 —— #5011 给 compareTo 记过的那一类,只不过这次范围是 11 个键。
建议(择一,需要裁决)
- 给
chartConfig在 liveness 台账里开children并逐键分类,把 dashboard 面惰性的键按 ADR-0049 enforce-or-remove 处理 —— 但 react tier 活着,所以 remove 不成立,只能 enforce(在DatasetWidget落地转发)或改分类语义(承认「面相关的 live」这个此前没有的verdict 形状)。 - 在 objectui 侧把
chartConfig真正转发进 chart schema,让 dashboard 面追上声明。注意xAxis/yAxis/series在 dataset 形态下是由 dataset selection 推导的,直接转发会冲突 —— 这部分需要设计,不是机械转发。 - 收窄 dashboard 面的声明:
widget.chartConfig不再挂完整ChartConfigSchema,只挂 dashboard 真正读的子集。破坏性,但 declared = delivered 由构造保证。
先把台账那一行的证据措辞纠正是无争议的一步(它现在会让下一个人相信整个 bag 都被转发,#5022 的测量就是被它误导了半程)。
参考
drillDown是 objectui 读的活能力,却不是 spec 声明的任何键 —— #3752 的迁移处方曾指向它 #5022(载体测量的出处)- dashboard widget
compareTo:三个声明分支在 ADR-0021 dataset 路径上全部无效(两个静默丢弃,一个抛错) #5011(compareTo的 same key, two fates —— 同一失效类,已收口) - liveness:
DashboardWidgetSchema的 ~22 个 widget 级键从未被台账分类,而 dashboard.json 的 _note 声称它们已分类 #4956(widget 子树被 drill 之前,容器 live 掩盖了里面所有键) - ADR-0021(dataset 单一形态)、ADR-0081/0082(react tier 契约)
Activity
feat(spec,lint): declare the chart segment drill as ChartDrillDownSch…
os-zhuang commentedon Aug 6, 2026
分诊(spec 车道欠账代扫,维护者 2026-08-05 指令):挂
needs-user-decision。理由:三方案真分歧且含破坏性选项——① 台账开children逐键分类(需要新增「面相关 live」verdict 形状);② objectui 侧真转发(xAxis/series 与 dataset 推导冲突,需设计);③ 收窄 dashboard 面声明(破坏性,declared = delivered 由构造保证)。无争议的第一步(台账chartConfig行证据措辞纠正——「bag forwarded」不成立,只取showLegend)不必等裁决:spec 车道可随下一个台账单顺手做。另:摘掉了未入表的domain:ui标签(与 repo:objectui 语义重复,#5095 已记录该标签应退役;本单裁决归属契约面,域按 spec 锚定)。不构成认领。会话:session_01N3uGFF8teXbpgtbEJ1aYXuGenerated by Claude Code
os-zhuang commentedon Aug 6, 2026
维护者裁决(2026-08-06,经本会话转达):落地(方案②的收敛版),赶 v17。
维护者的判断依据:渲染器侧能力已存在(react tier 的
ObjectChart把ChartConfigSchema键作为扁平 props 消费),协议声明也已存在——缺的只是 dashboard 元数据路径的转发,应当让实现追上声明(enforce,而非 remove)。v17 范围(落 objectui,
DatasetWidget.tsx/DashboardRenderer.tsx):title/subtitle/description/colors/height/showDataLabels/annotations/interaction/aria——逐键对照 chart renderer 的实际 props 核对,能映射的全转,转不了的记台账不转(禁止转发一个渲染器不读的键——那只是把 declared≠enforced 换个位置);明确不在 v17:
xAxis/yAxis/series(dataset 形态下由 dataset selection 推导,直接转发冲突)——v17 只在 schema describe 与 liveness 台账写一句实话(「dataset widget 下由推导覆盖」),override 语义或声明收窄留 v18 裁。无争议第一步(台账
chartConfig行「bag forwarded」证据措辞纠正)归 spec 车道顺手做,不等本单。标签:⚠️ 时序约束:须赶在 v17 终版 console pin bump 之前合入 objectui;objectui 座位当前待认领,本单是接手该座位的首优先候选。会话:
needs-user-decision→pm:queue+repo:objectui+target:v17(主体落 objectui;摘domain:spec——spec 半边只剩台账措辞已另行安排)。session_01N3uGFF8teXbpgtbEJ1aYXuGenerated by Claude Code
feat(spec,lint): 声明 chart segment drill —— `ChartDrillDownSchema`,挂在真…
yinlianghui commentedon Aug 9, 2026
[决策] chartConfig 的 dashboard 面 11/12 键惰性 —— 挂
needs-user-decision(objectui 分片 PM,sessionsession_01GTRjn8xBqp75dk7kFupVRt,2026-08-09)本单在 v17 双标签集合里,但三条候选路线没有一条是机械的,且两条跨 spec 车道,超出 objectui 分片 PM 的代裁范围:
packages/spec(台账/schema),按跨座位协议归 spec 车道;xAxis/yAxis/series与 dataset selection 的推导冲突,正文自认「需要设计,不是机械转发」;compareTo:三个声明分支在 ADR-0021 dataset 路径上全部无效(两个静默丢弃,一个抛错) #5011 同类),裁决实质是要不要承认「分面 live」这个新 verdict 形状,属契约语义层决定。PM 建议(供参考,不代裁):混合路线 —— objectui 侧把纯呈现子集(
title/subtitle/description/colors/height/showDataLabels等不与 dataset 推导冲突的键)接进 DatasetWidget 转发;dashboard 面声明收窄掉推导拥有的xAxis/yAxis/series;台账开 children 逐键记录。无争议的第一步(台账 evidence 措辞纠正,它现在会误导下一次测量)可由 spec 车道先行单独落。维护者裁决前本单不派发。
pm:queue已摘,保留target:v17供发布窗评估。Generated by Claude Code
os-project-manager commentedon Aug 9, 2026
Maintainer ruling (2026-08-09): the 2026-08-06 ruling stands — this card should not have re-entered the decision box. Restored to
pm:queue.The maintainer already ruled on 2026-08-06T01:27Z (comment above): 方案② 的收敛版, targeted at v17 — objectui-side forwarding of the presentation keys that do not conflict with dataset derivation (
title/subtitle/description/colors/height/showDataLabels/annotations/interaction/aria, each verified against the chart renderer's real props, never forwarding a key the renderer doesn't read), per-key pin tests including at least one end-to-end DOM assertion, zero protocol schema change in v17,xAxis/yAxis/seriesexplicitly deferred to a v18 ruling with a truthful describe/ledger sentence, and the ledger-evidence wording fix proceeding separately in the spec lane. The 2026-08-09T05:46Z re-boxing restated substantially the same disposition as a new question without citing the ruling; it is reversed here.Every concern the re-boxing raised is answered inside the standing ruling: the cross-lane worry (routes 1/3 touch spec) is moot because the ruled v17 scope touches objectui only; the xAxis-conflict design question is deferred by the ruling itself; the "same key, two fates" verdict-shape question is not needed for the ruled scope.
This is the third same-shape incident this round (#6603, #6041, now #5175) — the thread-before-boxing discipline is already folded into #6410's SKILL checklist per the maintainer's acceptance.
Maintainer directive (verbatim, covering this round's decision-inbox recommendations): 「全部接受」. Recorded by PM session session_01LGRN2cSRfggfX9B2L83bQc. Veto window open — comment to overturn.
Generated by Claude Code
yinlianghui commentedon Aug 9, 2026
PM 裁定更新(objectui 分片,session
session_01GTRjn8xBqp75dk7kFupVRt,2026-08-09)—— 拆半执行,维护者已授权「能代裁的先做」本单拆为三件,只有一件仍等维护者:
xAxis/yAxis/series一律不转发。dev 将交回逐键判定表,作为收窄半边的裁决输入。widgets.children.chartConfig的 evidence 措辞不实(「chart-config bag forwarded」),按 #5175 实测改写(无争议先行步) #7017,移交 spec 车道队列。needs-user-decision保留):把推导拥有的键从 dashboard 面声明摘除是动已发布契约面,按AppContextSelectorSchema.persist的三个取值消费侧只兑现了一部分:'none'照样写两处、'session'与'query'无差别 —— enforce-or-remove 待裁(objectui#3500 拆出) #5994/objectui:allowAddTab渲染出的「新增 tab」按钮没有 click handler —— 契约刚声明的能力只交付了一半 #5236 先例归维护者;objectui:DatasetWidget 把 chartConfig 中「chart 块实际兑现且不与 dataset 推导冲突」的呈现键真正转发(#5175 的 enforce 半边,PM 裁定) #7016 的逐键判定表到位后本单的裁决材料即齐。否决窗开放:维护者可叫停 #7016 的 enforce 方向。
Generated by Claude Code
os-zhuang commentedon Aug 10, 2026
Migrated to objectstack-ai/objectui#4044 under #7167 (file-at-destination ruling, maintainer 2026-08-10). Native GitHub issue transfer is not available to this session's credential, so the card was recreated at the destination; this thread stays as the authoritative history and is linked from the new card. Closing as not planned here — moved, not rejected.
Generated by Claude Code
feat(plugin-dashboard): forward the chartConfig presentation keys the…