从 objectstack#5022 的读取点测量中分离出来,**未指派**。那单在问 spec 该怎么声明这个形状;要声明就得先知道哪些键真的活着,量的过程中掉出来三个不活的。 ## 发现 `packages/types/src/data-display.ts:897` 的 `DrillDownConfig` 是 5 个 widget 共享的 drill 配置接口(ObjectChart / ObjectDataTable / ObjectPivotTable / ObjectMetricWidget / PivotTable)。其中: ### 1. `view?: string` —— 无任何消费者 接口里自陈是 "Optional list view id (**reserved**)"。全仓 grep `drillDown?.view` / `drillDown.view` 零命中,`computeDrillFilter` / `resolveDrillTitle` / `isDrillEnabled` 也都不看它。一个作者写了它,drill 抽屉照旧渲染内联 `object-data-table`。 ### 2. `sort?: Array<{ field: string; dir?: 'asc' | 'desc' }>` —— 无任何消费者 接口注释 "Default sort applied to the drill list"。全仓无读取点:ObjectChart `:756-766` 构造 drill 表格 schema 时只放 `objectName` / `filter` / `pagination` / `pageSize` / `columns` / `drillDown`,没有 sort;ObjectPivotTable `:246-252` 同样;`DrillDownDrawer` 也不接。写了不排序。 ### 3. `target: 'navigate'` —— 在 **ObjectChart** 上静默降级成 drawer `'navigate'` 的实现在 `packages/plugin-dashboard/src/DrillDownDrawer.tsx:84`(`navigateOnly`),所以走 `DrillDownDrawer` 的 ObjectDataTable / ObjectPivotTable / ObjectMetricWidget 都honors 它。 但 **ObjectChart 不走 `DrillDownDrawer`** —— 它在 `packages/plugin-charts/src/ObjectChart.tsx:750-809` 自绘抽屉,并且只有一个分支: ``` const target = drillDown?.target ?? 'drawer'; … if (target === 'dialog') { return ( … Dialog … ); } return ( … Sheet … ); // 'navigate' 落在这里 ``` `'navigate'` 落进 `return Sheet`,和 `'drawer'` 无差别。共享接口的 JSDoc 却写着 "Requires a host that provides drill navigation …; **falls back to `'drawer'` when none is available**" —— 在 chart 上,即使 host 提供了 navigation(console 就提供),也一样回落。作者按文档写 `target: 'navigate'` 拿不到承诺的行为,而且没有任何提示。 (旁注:chart 抽屉里的 "Open in list" escape hatch 是**独立**于 `target` 的,`openRecordList` 在就显示 —— 所以「能跳转」这件事本身没坏,坏的是 `target: 'navigate'` 这个声明在 chart 上不兑现。) ## 为什么值得单开 这三个都是 declared ≠ delivered:类型声明在 `@object-ui/types` 的公共接口上,作者(以及正在照着这个接口反推 spec 形状的 objectstack#5022)会当成可写能力。objectstack 侧正在决定要不要把这个形状提升成协议声明键 —— 如果照抄全集,这三个键会被**带上协议权威**,那就从「渲染器里的死键」升级成「协议承诺的死键」,代价高一个量级。 ## 建议(择一) - **实现**:`view` 接 app 的 list view registry;`sort` 透传进 drill 表格 schema;ObjectChart 改走 `DrillDownDrawer`(或自己加 `navigate` 分支)。 - **或删**:三个键从 `DrillDownConfig` 摘掉(`view`/`sort` 无人写,`target` 收窄成 chart 支持的 `'drawer' | 'dialog'` 需要按 widget 分型,不能一刀切)。 无论哪条,都应该先于 objectstack#5022 的声明落地,否则协议会照着一份含死键的接口成形。 ## 参考 - objectstack#5022(`drillDown` 是活能力却不是 spec 声明的任何键) - objectstack#5175(`chartConfig` 在 dashboard 面只有 `showLegend` 落地 —— 同一次测量的另一半)
Activity
yinlianghui commentedon Aug 5, 2026
认领:objectui 分片 PM 滚动补位第 5 单(bug 优先口径)
会话:
session_01GTRjn8xBqp75dk7kFupVRt分支:
claude/issue-3354-drilldown-declared-enforcedWorktree:
objectui-issue-3354域:objectui 分片(types / plugin-charts)
文件面:
packages/types/src/data-display.ts(DrillDownConfig)、packages/plugin-charts/src/ObjectChart.tsx+ 相应测试 +.changeset/*.md。⛔packages/plugin-dashboard/**只读(另一 dev 在飞 #5407 在该包)—— navigate 分支在 plugin-charts 内实现或原样复用 DrillDownDrawer,不改它。方向裁定(PM,恢复不变量口径,否决窗口):正文「择一」定为混合——
view/sort:全仓零消费者、自陈 reserved ⇒ 删(declared = enforced;若实现,得先有人要它 —— 现在没有);target: 'navigate':三个 widget 已兑现、文档已承诺,chart 是唯一静默降级点 ⇒ 修(在 ObjectChart 补 navigate 分支,语义对齐 DrillDownDrawer 的navigateOnly含其文档化回退);fieldspelling passes every RelatedList read, then renders header + blank cells at the data-table accessor #5022 留一行知会 spec 车道以清理后的形状为准。Generated by Claude Code
yinlianghui commentedon Aug 5, 2026
PM 验收:ACCEPT → PR #3382 已转 ready + auto-merge(报告时 9 项完成全绿、6 项在跑零失败),跟到 MERGED。
落地内容(按裁定混合路线):
view/sort从DrillDownConfig删除(零读取点经邻近词反查证实,编译期钉子 + JSDoc 不变量防悄悄回来);ObjectChart 补target:'navigate'分支,语义对齐DrillDownDrawer.navigateOnly含文档化回退,plugin-dashboard 全程只读。反向验证两处方向均与预判一致(含「只有判别例红、3 条防回归保持绿」的精确预测)。PM 特别记账 —— dev 的自我纠正正确且重要:实施中发现 spec
ChartDrillDownSchema已把 chart target 声明为'drawer'|'dialog'(strict,发布 lint 真的 parse),故撤回了在 objectui 面板广告'navigate'的改动 —— 面板广告一个发布闸门会拒绝的值,正是 #5022 要消灭的失效模式。现状:组件兑现三 target、面板广告两 target、协议声明两 target。协议联合是否扩展(additive/minor)已由 dev 立 objectstack#5435 并附完整选项分析,本 PM 已路由domain:spec+pm:queue转 spec 车道,触发条件为本 PR 合并;spec 车道采纳 A 后 objectui 面板再跟进广告。objectui 分片 PM
session_01GTRjn8xBqp75dk7kFupVRtGenerated by Claude Code
fix(types,plugin-charts): DrillDownConfig 只声明有人读的键,ObjectChart 补 targ…