类别:observation-class(今天没有用户会撞上,不带 pm:queue)。在 #4725 的实现过程中顺手量到,按 Prime Directive #10 记账,不在那个 PR 里修。
事实
authorable-surface.json 自 #4662 起被整文件和它的规范序列化比对:
// build-schemas.tsconstcanonicalSurfaceText=JSON.stringify(canonicalSurface,null,2)+'\n';constsurfaceChanged=surfaceRaw!==canonicalSurfaceText;
理由写在那里:#4662 抓到的是一个被手工规范化过的 description 破折号,一个只比对键集的检查永远看不见它 —— 而「这个文件的字节必须全部来自生成器」正是 #4650 的证据链所依赖的。
它的同胞 json-schema.manifest.json 没有这一层。写触发条件只有:
constmanifestChanged=!manifest||added.length>0||renamedAway.length>0||descriptionStale;
(descriptionStale 是 #4725 刚加的,只覆盖 description 一项。)
因此对以下手编,今天没有任何门禁会说话
- 重排
schemas 数组(生成器写的是 .sort()); - 缩进 / 尾换行改动;
- 重复条目——重复的键既不在
missing(它被产出)也不在 added(它在 manifest 里),manifestChanged 恒 false,重复项会一直留着,直到别的改动碰巧触发一次重写。
added / missing / #4725 的 merge-base 删除门都是集合判定,对上面三种都免疫。
影响评估(诚实版:今天为零)
三种都不改变任何门禁的判定结果,也不改变任何消费者行为 —— manifest 只被 build-schemas.ts 自己读。所以这不是缺陷,是同一个文件家族里两种不同的严格度:一个说「每一个字节都必须来自生成器」,另一个说「键集对就行」。
记下来的理由是它会变得重要:#4725 之后 manifest 是一道删除门的输入(虽然那道门读的是 merge-base 的那份,PR 改不动),而 #5837(按 category 分片三个单体 ratchet)和 #4676(投影类生成物是否该退出仓库)都会重新动这个文件的形状 —— 谁先落地,谁最省事地把两边的严格度对齐。
可能的修法(供 triage,不预设)
把 description 与键集的两个条件合并成一个「整文件 vs 规范序列化」比对,和 authorable-surface.json 同形;--check 报告、写模式重写,沿用现有的 #4711 分叉。代价是任何格式漂移都会要求跑一次 gen:schema,和另外七个生成物一致。
关联
#4662(authorable-surface 的整文件比对是怎么来的)、#4725(本观察项的来源,manifest 删除门)、#5837、#4676。
Generated by Claude Code
事实
authorable-surface.json自 #4662 起被整文件和它的规范序列化比对:理由写在那里:#4662 抓到的是一个被手工规范化过的 description 破折号,一个只比对键集的检查永远看不见它 —— 而「这个文件的字节必须全部来自生成器」正是 #4650 的证据链所依赖的。
它的同胞
json-schema.manifest.json没有这一层。写触发条件只有:(
descriptionStale是 #4725 刚加的,只覆盖 description 一项。)因此对以下手编,今天没有任何门禁会说话
schemas数组(生成器写的是.sort());missing(它被产出)也不在added(它在 manifest 里),manifestChanged恒 false,重复项会一直留着,直到别的改动碰巧触发一次重写。added/missing/ #4725 的 merge-base 删除门都是集合判定,对上面三种都免疫。影响评估(诚实版:今天为零)
三种都不改变任何门禁的判定结果,也不改变任何消费者行为 —— manifest 只被
build-schemas.ts自己读。所以这不是缺陷,是同一个文件家族里两种不同的严格度:一个说「每一个字节都必须来自生成器」,另一个说「键集对就行」。记下来的理由是它会变得重要:#4725 之后 manifest 是一道删除门的输入(虽然那道门读的是 merge-base 的那份,PR 改不动),而 #5837(按 category 分片三个单体 ratchet)和 #4676(投影类生成物是否该退出仓库)都会重新动这个文件的形状 —— 谁先落地,谁最省事地把两边的严格度对齐。
可能的修法(供 triage,不预设)
把 description 与键集的两个条件合并成一个「整文件 vs 规范序列化」比对,和
authorable-surface.json同形;--check报告、写模式重写,沿用现有的#4711分叉。代价是任何格式漂移都会要求跑一次gen:schema,和另外七个生成物一致。关联
#4662(authorable-surface 的整文件比对是怎么来的)、#4725(本观察项的来源,manifest 删除门)、#5837、#4676。
Generated by Claude Code