发现于 #3765 的实施(PR #4756),回传立单。observation-class:生产代码无人引用,今天无用户受害。
事实一:重复实现
packages/components/src/custom/action-param-dialog.tsx 是第二个 action param 对话框实现,从 components 的 custom barrel 导出(:21,已发布 API)。它用裸 Radix Select 直接 param.options?.map(...) 渲染(:257),完全不经过共享 evaluator —— 逐选项 visibleWhen 在这个 surface 上不是算错,是根本不参与(全给)。仓内仅其自身 4 个测试 import,生产代码零引用。
待裁:删除(retirement 流程,已发布 API 需按 breaking 纪律)还是并到 app-shell 的共享路径。与 #3765/PR #4756 修的主对话框是平行实现,不修它则 B 案语义在已发布 API 面上不成立。
事实二:回退链无生产者(unexercised drift)
useCascadingOptions.ts:38 与 LookupField.tsx:329 回退链里的 ctx.formValues / ctx.data 在本仓没有任何生产者 —— SchemaRendererContextType 只声明 dataSource/debug/debugFlags/apiFetch,全仓 grep 不到写入者。含义:#3765 里 A 案的前提(「页面记录参与求值」)实践中基本等于 {};PR #4756 的钉子用显式构造的 context 钉住了链本身(host 若供仍生效),所以不是死代码,但今天无人喂。将来裁「链保留还是收敛」时以此为据。
参考
发现于 #3765 的实施(PR #4756),回传立单。observation-class:生产代码无人引用,今天无用户受害。
事实一:重复实现
packages/components/src/custom/action-param-dialog.tsx是第二个 action param 对话框实现,从 components 的 custom barrel 导出(:21,已发布 API)。它用裸 Radix Select 直接param.options?.map(...)渲染(:257),完全不经过共享 evaluator —— 逐选项visibleWhen在这个 surface 上不是算错,是根本不参与(全给)。仓内仅其自身 4 个测试 import,生产代码零引用。待裁:删除(retirement 流程,已发布 API 需按 breaking 纪律)还是并到 app-shell 的共享路径。与 #3765/PR #4756 修的主对话框是平行实现,不修它则 B 案语义在已发布 API 面上不成立。
事实二:回退链无生产者(unexercised drift)
useCascadingOptions.ts:38与LookupField.tsx:329回退链里的ctx.formValues/ctx.data在本仓没有任何生产者 ——SchemaRendererContextType只声明dataSource/debug/debugFlags/apiFetch,全仓 grep 不到写入者。含义:#3765 里 A 案的前提(「页面记录参与求值」)实践中基本等于{};PR #4756 的钉子用显式构造的 context 钉住了链本身(host 若供仍生效),所以不是死代码,但今天无人喂。将来裁「链保留还是收敛」时以此为据。参考
packages/components/src/custom/action-param-dialog.tsx:21,:257packages/fields/src/widgets/useCascadingOptions.ts:38、LookupField.tsx:329