观察类记录(finding),发现于 #5679 实施过程(PR #5743 ),按 Prime Directive #10 单独登记,未在该 PR 内处理。
事实(全部实测)
check:generated 自报:「Generated but ungated (2): gen:openapi, gen:sbom — nothing verifies these are current」 ——工具链自己声明这两个生成器无新鲜度校验。
其中 gen:openapi 的产物 packages/spec/json-schema/openapi.json 是 gitignore 的、且被运行时读盘消费 :packages/rest/src/rest-server.ts:3388 的 /openapi.json 路由在请求时从磁盘读取该文件。
缺失时的失败形态是静默 503 ,不是构建期报错。实证:routes.mcp 是 REST /discovery 发出、objectui 真实消费、但 ApiRoutesSchema 从未声明的键(#4828 同族,低一层) #5679 实施期间 check:authorable-surface 重跑 build-schemas.ts(不含 gen:openapi)清掉了该文件,packages/rest 随即 8 条 OpenAPI 用例以 503 判红——失败形态与「你的改动弄坏了什么」无法区分,定位耗时后才确认是生成顺序副作用(gen:openapi 重跑即恢复 755/755)。
CI 的 build 序列(gen:schema && gen:openapi && tsup)目前顺序正确,所以线上未爆——该缺口是潜在 的:任何单跑部分生成器的本地/脚本路径都会复现。
为什么值得记
一个被运行时消费的产物没有「是否新鲜/存在」的门禁,违反本仓 check-generated 机制自己的完备性主张(该机制的价值正在于「生成物不新鲜必被机器发现」);
失败形态(运行时 503)与根因(构建期产物缺失)相距两层,已经造成一次真实的误诊成本(见上第 3 条)。
相邻工作
gen:sbom 同报无门禁,但无运行时消费者,严重度不同。与 #5040 / #5078 (check-generated 机制族)相邻,修法大概率是给 check:generated 补两条 freshness/existence 条目或把 openapi.json 改为 build 产物内嵌。
不预设修法,交分诊分级。
观察类记录(finding),发现于 #5679 实施过程(PR #5743),按 Prime Directive #10 单独登记,未在该 PR 内处理。
事实(全部实测)
check:generated自报:「Generated but ungated (2): gen:openapi, gen:sbom — nothing verifies these are current」——工具链自己声明这两个生成器无新鲜度校验。gen:openapi的产物packages/spec/json-schema/openapi.json是 gitignore 的、且被运行时读盘消费:packages/rest/src/rest-server.ts:3388的/openapi.json路由在请求时从磁盘读取该文件。check:authorable-surface重跑build-schemas.ts(不含gen:openapi)清掉了该文件,packages/rest随即 8 条 OpenAPI 用例以 503 判红——失败形态与「你的改动弄坏了什么」无法区分,定位耗时后才确认是生成顺序副作用(gen:openapi重跑即恢复 755/755)。gen:schema && gen:openapi && tsup)目前顺序正确,所以线上未爆——该缺口是潜在的:任何单跑部分生成器的本地/脚本路径都会复现。为什么值得记
相邻工作
gen:sbom同报无门禁,但无运行时消费者,严重度不同。与 #5040 / #5078(check-generated 机制族)相邻,修法大概率是给check:generated补两条 freshness/existence 条目或把 openapi.json 改为 build 产物内嵌。不预设修法,交分诊分级。