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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions