Skip to content

gen:docs 深度预算落地后,11 个单元格出现 object | object | object | object —— 同形变体是否该去重,落在 #6226 的裁决面上 #6569

Closed

Description

@os-project-manager

实现 #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 没有顺手收掉它

三条理由,都指向「这不是实施者能单方面决定的」:

  1. 它落在 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的裁决面上。 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的维护者裁决是「变体数上限 + 自报被省略的
    变体数
    」,理由是省略必须自报数量。把 4 个同形变体折叠成 1 个 object,丢掉的
    正是元数(arity)—— 这一格还剩的唯一事实(「你要在 N 个形状里选一个」)。
  2. 仓库已经有意在印这种重复了。 format-type.test.ts 里 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的一条现存 pin:
    string | string | string | string | string 逐字保留、不省略,理由写在测试注释里
    ——「标记比省下的还长」。也就是说「重复拼写同一个变体」是这个渲染器已经钉住的
    既有行为
    ,object | object | object | object 只是同一行为遇上了新的拼写,
    不是 gen:docs 第三种残留宽度:嵌套形状深度 —— INLINE_KEY_LIMIT 只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots 1538 字符) #6374 造出来的新行为。
  3. 共享的「标记必须挣回自己的位置」守卫在这里是对的。 6 个 object 比替换掉
    其中两个的计数标记还窄,所以守卫拒绝加标记 —— 拒绝是正确的,只是结果好看不了。

待裁决的问题

同一个单元格内渲染结果逐字相同的联合变体,应该:

定性

相关

同文件面: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。

Activity

  1. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    CollaboratorAuthor

    认领 · 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

  2. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    CollaboratorAuthor

    重新派单 — 会话 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)—— 正是制造本卡条件的那次落地,此后零改动,前提就位。不相交性同样复核:本批在飞的另两张卡(#6585 packages/lint/src/validate-expressions.ts、#6629 packages/lint/src/validate-page-field-bindings.ts)均不碰本文件面,全语料重生成面仍由本单独占。

    裁决口径与两条硬约束(标记「必须挣回自己的位置」守卫不豁免、与 #6226 既有 pin 的相互作用必须实测并逐条交代)按 12:23Z 那条认领评论原样执行,维护者否决窗口继续开在本线程。


    Generated by Claude Code

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

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions