发现于 #3832 的实施(PR 见下)。#3832 的裁定把范围钉在「五个实测标本」,这两个不在那张表里,所以本 PR 按不扩围处理,单独立卡。 ## 机制 与 #3832 的四个 i18n 标本**逐字同形**:input 自己的 `description` 教作者写内联翻译映射,同一个 input 的 `type: 'string'` 又让 manifest 门对这个映射报 `type-mismatch`。 | 键 | 声明位 | description 原文 | spec 实测 | 渲染器 | |---|---|---|---|---| | `element:text.content` | `packages/components/src/renderers/basic/elements.tsx:109` | `Accepts an inline translation map ({ en, "zh-CN", … })` | 字符串 **或** 内联映射均 OK | `elements.tsx:98` 走 `pickLocalized` | | `element:button.label` | `packages/components/src/renderers/basic/elements.tsx:319` | 同上 | 同上 | 走 `pickLocalized` | 两个键都 `required: true`,且两个块都在 `PUBLIC_BLOCKS`(`public-blocks.ts:89` / `:91`),所以它们进 `sdui.manifest.json` 与 `sdui-intrinsics.d.ts`,是 AI 作者直接读到的发布面。 ## 实测(objectui `origin/main` @ `1b21b1aaa`,与 #3832 六个标本同一次探针) ``` element:text.content (i18n map) -> warning/type-mismatch: prop "content" expected a string element:button.label (i18n map) -> warning/type-mismatch: prop "label" expected a string ``` spec 侧(`ComponentPropsMap`,pin 在 `@objectstack/spec` 17.0.0-rc.6)对两个键的实测:`string=OK i18n-map=OK number=no boolean=no`。即门比契约窄一条臂,和 #3832 的五个标本同一根因。 ## 修复 #3832 的机制部分已经落地(`type` 收粗类型数组,任一臂命中即过),所以这两处各是**一行**: ``` type: ['string', 'object'] ``` 修完请一并把它们挂进 `apps/console/src/__tests__/component-input-union-specimens.test.ts`(那个文件已经是标本验收面,每个标本带一条「不命中任何臂仍要报」的对照断言)。 ## 为什么单独立卡而不是并进 PR #3832 的维护者裁定逐字写的是「the five measured specimens」,这两个是本次实施中新测出来的,不在裁定的完成范围内 —— 按 Prime Directive #10 与本轮派发的不扩围要求单独记档,不搭 PR。范围小、判据已经写好,可以直接接批次。 关联:#3832(机制 + 五标本)、#4163(`I18nLabel` 渲染读点审计 —— 与本卡相反的方向:那边是渲染器丢掉映射形态,这两个键的渲染器**已经**解析映射)、#3808、AGENTS.md #0.1
Activity
yinlianghui commentedon Aug 17, 2026
同一次扫描里的一条相邻观察,不扩本卡范围,记在这里免得丢:
packages/plugin-detail/src/renderers/record-alert.tsx:62-84的RecordAlertProps把title/body都声明成title?: string(两处:properties.*与 flat 兼容那一份),而同一个文件:126-127是pickLocalized(props.title, language)—— 即渲染器实际接受内联映射,它自己的 props 类型只说字符串。今天不咬人:这个 interface 没有导出(只做
React.FC<RecordAlertProps>的参数),pickLocalized收unknown,所以 TS 不报、没有消费者被误导。但 #3832 的 PR 刚把record:alert.title/.body的发布面声明成['string','object'],所以这两处局部类型现在是包内唯一还说「只有字符串」的地方 —— 属于 #4581 那一族(声明比渲染器实际能力窄),尺度最小的一档。真要修就是两行
string | Record< string, string >(或直接用 spec 的I18nLabel),和本卡的 elements.tsx 两处属于同一次收拾。是否值得单独排期交 PM 判。Generated by Claude Code
yinlianghui commentedon Aug 17, 2026
认领(objectui 分片 PM 座席,批次 20)。Session
session_01GTRjn8xBqp75dk7kFupVRt,分支claude/issue-4970-elements-i18n-arms,os-dev 子代理实施。派发前置已核:#3832 的机制与五标本已随 PR #4975 落 main(
279fb139d),本卡两处各一行的前提成立。范围裁定:评论 5314024815 那条相邻观察(record-alert.tsx:62-84两处未导出局部 props 类型仍写title?: string,窄于其自身pickLocalized渲染与刚落地的发布面声明)并入本卡一次收拾 —— 同族、同验收面、两行,不值得再立卡排期。文件面:
packages/components/src/renderers/basic/elements.tsx、apps/console/src/__tests__/component-input-union-specimens.test.ts、packages/plugin-detail/src/renderers/record-alert.tsx—— 与在飞四席(#4190/#4974 收尾中/#4976/#4941)不相交。Generated by Claude Code
docs(plugin-detail): name the CTA label slot this pass deliberately l…
fix(plugin-detail): record:alert CTA action.label accepts the inline …
fix(components,plugin-detail): element:text.content / element:button.…
fix(plugin-detail): record:alert CTA action.label accepts the inline …