|
| 1 | +--- |
| 2 | +"@objectstack/spec": patch |
| 3 | +--- |
| 4 | + |
| 5 | +fix(spec): 参考文档的联合单元格每种拼写只印一次,重复的变体计入既有的 `… +N more` (#6569) |
| 6 | + |
| 7 | +`content/docs/references/**` 的类型单元格里,同一个联合的多个变体如果**渲染成 |
| 8 | +逐字相同的字符串**,现在只印一次,被折叠掉的变体数计进 #6226 既有的 |
| 9 | +`… +N more` 标记。全语料实测:**14 格**改变(7 个页面),这些格的类型文本合计 |
| 10 | +**3682 → 2469 字符**;字面的 `object | object | object | object` 从 **9 格降到 |
| 11 | +0 格**。 |
| 12 | + |
| 13 | +## 为什么会有这种重复 |
| 14 | + |
| 15 | +#6374 给内联形状摘要加了深度预算(嵌套形状印 `object`)。后果之一:一个联合的 |
| 16 | +多个变体如果**都是对象**,它们在摘要之下就都渲染成 `object`,单元格里于是出现 |
| 17 | +连续重复。`kernel/manifest.mdx` 的 `Manifest.navigationContributions` 最刺眼 —— |
| 18 | +它印了四个 `object`,再数「`… +5 more`」个**和已印出的那四个一模一样**的 |
| 19 | +`object`。 |
| 20 | + |
| 21 | +重复本身不是 #6374 造出来的新行为(`ui/app.mdx` 的 `App.navigation` 在 #6226 |
| 22 | +之前就把同一个形状印了九遍),但深度预算让它变成了语料里的常见拼写。这些页面是 |
| 23 | +AI 作者的权威输入(ADR-0033),一格读起来像渲染 bug 的代价高于它的宽度。 |
| 24 | + |
| 25 | +## 裁决落地的形状 |
| 26 | + |
| 27 | +维护者的裁决在 issue 正文的 B 与 C 之间:**折叠**(重复的拼写不携带第一份之外 |
| 28 | +的任何信息),但**自报元数**(#6226 的规则:省略必须说出自己的大小),并且用 |
| 29 | +表格**已有**的标记词汇,而不是新发明一种 `object ×4` 之类的记号 —— #6226 的 |
| 30 | +裁决理由恰恰是「同一张表里出现第二种省略风格,比它要修的宽度更糟」。 |
| 31 | + |
| 32 | +于是一句话对读者成立:**印出的拼写数 + 计数 = 联合的元数**,无论某个变体是被 |
| 33 | +变体数上限藏起来的,还是因为这一格已经逐字印过它而被折叠掉的。 |
| 34 | + |
| 35 | +## 三条有意的边界 |
| 36 | + |
| 37 | +- **判等在渲染出来的字符串上**,不在 schema 结构上:`object | object[]` |
| 38 | + (`ui/page.mdx` 的 `Page.slots`)是两种拼写,永不折叠。这个渲染器判的是读者 |
| 39 | + 看到的东西。 |
| 40 | +- **不限于相邻**。实测语料里唯一一处两种规则会分歧的地方,正是 #6226 立案的那 |
| 41 | + 一格:`App.navigation` 的九个变体里,八个是同一种导航项拼写、一个是 |
| 42 | + `{ type: 'separator'; … }`,而分隔符排在**第七位**——`uniq` 式的相邻规则会 |
| 43 | + 把第八份导航项**再印一遍**,等于把缺陷留在这一格里。 |
| 44 | +- **共享的「标记必须挣回自己的位置」守卫原样适用**,没有豁免:`object | object` |
| 45 | + 加上标记反而**变长 3 字符**,`object | object | object` 只省 6 字符而标记占 |
| 46 | + 12 字符,两者都保留重复;四个重复才是第一个划算的宽度(省 15 字符)。语料里 |
| 47 | + 14 处带重复拼写的联合渲染全部通过守卫。 |
| 48 | + |
| 49 | +## 一条既有 pin 因此翻转 |
| 50 | + |
| 51 | +#6226 曾把 `string | string | string | string | string` 逐字钉住,理由写在测试 |
| 52 | +注释里:按变体数上限印四个再加标记会**更长**,守卫拒绝。这次改的是**候选**而 |
| 53 | +不是守卫 —— 一种拼写加 `… +4 more` 是 18 字符对 42 字符,省 24 —— 同一条未经 |
| 54 | +修改的守卫因此接受。旧 pin 给出的理由,正是新 pin 给出相反结论的理由。守卫的 |
| 55 | +拒绝区间仍然有人占着,只是往下挪了一档(见上一节)。 |
0 commit comments