Skip to content

gen:docs 第三种残留宽度:嵌套形状深度 —— INLINE_KEY_LIMIT 只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots 1538 字符) #6374

Description

@os-zhuang

实现 #6225 + #6226(同一个 PR)时量语料量出来的观察类发现,未认领,按 PD#10 立案。与那两条机制不同,故分开立案。

现象

#6225(顶层长枚举搬进 ### Allowed Values)与 #6226(联合变体数上限)落地后,content/docs/references/** 的超宽单元格从 27 个降到 9 个(>900 从 4 降到 1,max 从 6092 降到 1538)。剩下这 9 个里,大部分既不是顶层长枚举、也不是变体重复:

字符数 页面 属性 该单元格内最大联合变体数
1538 ui/page.mdx Page.slots 2
656 ui/page.mdx PageComponent.type 2
617 automation/state-machine.mdx StateMachine.states 3
598 kernel/manifest.mdx Manifest.capabilities 1(无联合)
595 kernel/plugin-registry.mdx PluginRegistryEntry.capabilities 1(无联合)
583 api/protocol.mdx GetTranslationsResponse.translations 1(无联合)
581 data/object.mdx Object.userActions 3
450 ai/conversation.mdx ConversationSession.messages 4
450 kernel/plugin-security-advanced.mdx PluginSecurityManifest.permissions 1(无联合)

4 个根本没有联合,任何变体上限都够不到它们。

机制(为什么这是独立的一条)

INLINE_KEY_LIMIT = 4 只在它自己那一层限制键数。摘要往下走的时候,数组元素、Record 的值、联合的变体都会继续渲染成完整摘要,而这条下钻路径上没有任何深度或字符预算。宽度于是等于「每层键数 × 每层展开出的子形状宽度」,一层一层乘上去。

ui/page.mdxPage.slots 是最干净的样本,也纠正了 #6226 立单时对它的归因 —— 它不是变体重复:

  • slots 是个对象,7 个键,INLINE_KEY_LIMIT 印出前 4 个(header? / actions? / alerts? / highlights?);
  • 每个键的值是一个恰好 2 个变体的联合(TT[]);
  • 于是同一个 T(约 176 字符,{ type: Enum< … > | string; id?: string; label?: string; properties?: Record< string, any >; … })被印了 4 × 2 = 8 遍

所以宽度来自 INLINE_KEY_LIMIT(4)× 联合变体数(2)× 每个变体的摘要宽度(约 176),任何 ≥2 的变体上限都对它无效,而上限取 1 会把语料里 256 个 T | T[] 全部砍掉一半,显然不划算。#6226 的维护者裁决(变体数上限)对它标称的旗舰样本恰恰够不到 —— 裁决本身没错,它确实修掉了 9 个宽单元格(App.navigation 9 个变体里 7 个逐字相同那一类),只是 Page.slots 不属于那一类。

定性

另一半:一个刻意排除的位置

PageComponent.type(656)机制上属于 #6225 的族(长词表),但落在联合变体里(Enum< 34 个成员 > | string)。#6225 的修法刻意只匹配「属性自己的类型节点就是词表」(与整 schema 分支逐条件对齐),因为对数组元素 / Record 值 / 某一个变体来说,「本属性的允许值」不是实话。该词表并没有丢 —— ui/page.mdx## PageComponentType### Allowed Values 完整列着 34 个成员,所以这一格是"宽"而不是"缺"。若要收,需要先决定表格下方那节该怎么措辞才不说谎。

可能的方向(未验证,留给分诊)

三种都涉及公开可读契约的取舍,⛔ 不建议随手拍板。⛔ 不得手改生成的 .mdx,一切来自 gen:schema && gen:docs

相关 / 串行

同文件面:packages/spec/scripts/lib/format-type.ts。与 #5340(PR #6211)、#6225#6226#5729#5606#5338 同源。须与该文件面的其他在飞单串行,不得同批并行。

Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions