Repository navigation
Closed
Labels
documentationImprovements or additions to documentationImprovements or additions to documentationpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchtarget:v17Release blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GARelease blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GA
Description
实现 #6374(形状深度预算)时量出来的观察类发现,未认领,按 PD#10 立案。
不在 #6374 的 PR 里顺手改,因为它落在 #6226 刚被维护者裁决过的那个面上。
现象
#6374 给内联形状摘要加了深度预算(SHAPE_DEPTH_LIMIT = 1,嵌套形状印 object)。
后果之一:一个联合的多个变体如果都是对象,它们现在会渲染成同一个字符串,
于是单元格里出现连续重复的 object。全语料实测 11 格,改前是 0 格:
| 页面 | 属性 | 现在印出 |
|---|---|---|
ai/conversation.mdx |
ConversationSession.messages |
content: (object | object | object | object)[] |
ui/view.mdx / data/object.mdx / api/protocol.mdx |
View.list / .listViews / ViewItem.config 等 7 格 |
data?: object | object | object | object |
kernel/manifest.mdx |
Manifest.navigationContributions |
items: (object | object | object | object | … +5 more)[] |
最后一格尤其刺眼:… +5 more 在数「还有 5 个和已印出的这四个一样的 object」。
为什么 #6374 没有顺手收掉它
三条理由,都指向「这不是实施者能单方面决定的」:
- 它落在 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(
PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 的裁决面上。 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 的维护者裁决是「变体数上限 + 自报被省略的
变体数」,理由是省略必须自报数量。把 4 个同形变体折叠成 1 个object,丢掉的
正是元数(arity)—— 这一格还剩的唯一事实(「你要在 N 个形状里选一个」)。 - 仓库已经有意在印这种重复了。
format-type.test.ts里 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 的一条现存 pin:
string | string | string | string | string逐字保留、不省略,理由写在测试注释里
——「标记比省下的还长」。也就是说「重复拼写同一个变体」是这个渲染器已经钉住的
既有行为,object | object | object | object只是同一行为遇上了新的拼写,
不是 gen:docs 第三种残留宽度:嵌套形状深度 ——INLINE_KEY_LIMIT只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots1538 字符) #6374 造出来的新行为。 - 共享的「标记必须挣回自己的位置」守卫在这里是对的。 6 个
object比替换掉
其中两个的计数标记还窄,所以守卫拒绝加标记 —— 拒绝是正确的,只是结果好看不了。
待裁决的问题
同一个单元格内渲染结果逐字相同的联合变体,应该:
- A(现状,gen:docs 第三种残留宽度:嵌套形状深度 ——
INLINE_KEY_LIMIT只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots1538 字符) #6374 落地后): 逐个印出。元数保留;object | object | object | object
读起来像 bug,但它说的是真话(四个可选形状,一个都没在这格里拼出来)。 - B(折叠): 印一次。好看;丢掉元数;并且会覆盖 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(
PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 对
Manifest.navigationContributions那一格的渲染裁决。 - C(折叠 + 自报元数): 印一次并带上计数(需要发明一种新记号,例如
object后面跟一个数量标记)。保住元数,但在同一张表里引入第四种省略风格
—— 而 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 的裁决理由恰恰是「同一张表里出现两种省略风格,才是比宽度更严重的
问题」。
定性
- 观察类:信息正确,只是拼写冗余;今天没有用户被误导。
- 影响面 11 格,总计约 259 字符 —— 宽度上无关紧要(gen:docs 第三种残留宽度:嵌套形状深度 ——
INLINE_KEY_LIMIT只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots1538 字符) #6374 实测:折叠只把 >200 的
单元格从 42 降到 39),纯粹是可读性与契约一致性的取舍。 - ⛔ 不建议随手拍板;需要维护者在 A/B/C 里选一个。
相关
同文件面:packages/spec/scripts/lib/format-type.ts。与 #6374(本条的来源)、
#6226(裁决面)、#5340、#6225 同源。须与该文件面的其他在飞单串行。
#6374 的 PR 已把 A 的行为明确钉在
format-type.test.ts 的 prints an identical variant once per variant 一条里,
并在注释里写明这是待裁决项 —— 裁决若选 B/C,改的是那一条 pin。
Metadata
Metadata
Assignees
Labels
documentationImprovements or additions to documentationImprovements or additions to documentationpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchtarget:v17Release blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GARelease blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GA
Activity
os-project-manager commentedon Aug 8, 2026
认领 ·
domain:spec-tooling座位派单 — 会话session_01AZgRyPVwi1jLb1mNNuUQ9o(座位贴 #6018),分支claude/issue-6569-identical-variant-dedupe,pm:queue→pm:dispatched。三查(12:3xZ):① ㉔
packages/spec/scripts/lib/format-type.ts最新提交d0a5ceb(#6374 via PR #6572,06:14Z)—— 正是制造本卡条件的那次落地,此后零改动,前提就位;② 竞态:线程仅分诊评论,非认领;③ 不相交:本批唯一的全语料重生成面(一次只允许一个在飞,本单持有)。裁决口径说明(重要,因为分诊评论的 A/B/C 与本卡正文的 A/B/C 编号不一致):分诊推荐的是「去重相同变体 + 用 #6226 既有的
… +N more标记自报数量」—— 即按语义取「折叠但不丢元数、且不发明第四种省略记法」这条路,介于正文的 B 与 C 之间:折叠(非正文 A 的维持现状),自报数量(非正文 B 的静默丢弃),复用既有标记词汇(非正文 C 的新记法)。派单按此语义执行,维护者否决窗口开在本线程。两条硬约束:标记共享「必须挣回自己的位置」守卫(实测判定,不豁免);与 #6226 既有 pin 的相互作用(
string | string | …那条可能翻转)必须测出来并逐条交代,夹具替换按本仓纪律给出理由。target:v17在卡上,优先级高于常规。Generated by Claude Code
os-project-manager commentedon Aug 8, 2026
重新派单 — 会话
session_01AZgRyPVwi1jLb1mNNuUQ9o(座位贴 #6018),分支claude/issue-6569-identical-variant-dedupe不变,认领不变。前一个 dev 在探索阶段死于共享配额墙(与 #6629 / #6585 / #6566 同一批,同一条 API 错误)。与那三张卡不同,本卡没有留下待判优劣的未验证工作:死前它把一处来自更早运行的游离改动存成 patch 后回退了,工作树现为
git status全空、origin/main..HEAD= 0 commits。接手的 dev 因此从干净基线起步,无继承判断负担。重派已显式指定
model: opus(本次事故的根因是 agent 定义未声明模型、静默继承 PM 会话模型;PR #6688 已把model: opus钉进.claude/agents/os-dev.md,正在合并队列中)。㉔ 前提复查(13:1xZ,重派前重做,非沿用):
packages/spec/scripts/lib/format-type.ts最新提交仍是d0a5ceb(#6374 via PR #6572,06:14Z)—— 正是制造本卡条件的那次落地,此后零改动,前提就位。不相交性同样复核:本批在飞的另两张卡(#6585packages/lint/src/validate-expressions.ts、#6629packages/lint/src/validate-page-field-bindings.ts)均不碰本文件面,全语料重生成面仍由本单独占。裁决口径与两条硬约束(标记「必须挣回自己的位置」守卫不豁免、与 #6226 既有 pin 的相互作用必须实测并逐条交代)按 12:23Z 那条认领评论原样执行,维护者否决窗口继续开在本线程。
Generated by Claude Code
docs(spec): 注释里的语料数字改用本次实测值,并写明与 issue 正文 11 格的差因 (#6569)