现象(PR #5312 同步接力实测)
packages/spec/scripts/build-schemas.ts(gen:schema)开场 fs.rmSync(OUT_DIR) 清空 packages/spec/json-schema/,而 openapi.json 只由另一条生成链 gen:openapi(build-openapi.ts)写入,且 gitignored、无门(AGENTS.md 已记录 gen:openapi/gen:sbom 无门)。
于是任何「gen:schema(或原地跑 build-schemas 的 check:generated)之后、没有再跑 full spec build/gen:openapi」的窗口里,openapi.json 处于被抹掉状态。此时跑 @objectstack/rest 测试:
FAIL src/rest-openapi-route.test.ts — 5 条
AssertionError: expected 503 to be 200
(loadOpenApiSpec() 找不到 @objectstack/spec/json-schema/openapi.json → OPENAPI_UNAVAILABLE)
失败读起来像 rest 路由坏了,实际是 spec 侧生成物被兄弟生成器清场。归因成本一整圈(§9 陈旧产物陷阱的又一变体:这次不是「陈旧」,是「被抹掉」)。
为什么今天没人在 CI 撞到
CI 的 test job 干净检出后走完整 pnpm build(spec build = gen:schema && gen:openapi && tsup,顺序保证 openapi.json 最后在场);只有本地/agent 工作流会在 build 之后再跑独立 gen:schema 或 check:generated,然后再跑 rest 测试。多 agent 接力(合并后重生成基线)恰好就是这个顺序。
候选修法(供 triage)
build-schemas.ts 清场时保留 openapi.json(它不属于该生成器的输出集,删别人的产物本身就是越界);
- 或
gen:schema 末尾顺带触发 gen:openapi(两者本来在 build 里就是连体);
- 或 rest 测试对缺失产物给出指向性 fail(「run gen:openapi」),把一圈归因变成一行提示。
第一条最小:各生成器只拥有并清理自己的输出。
观察级:CI 与发布产物不受影响,只咬本地/agent 的验证圈。发现于 #5312 同步接力,当场以 pnpm --filter @objectstack/spec gen:openapi 恢复后 rest 40 files / 608 tests 全绿。
现象(PR #5312 同步接力实测)
packages/spec/scripts/build-schemas.ts(gen:schema)开场fs.rmSync(OUT_DIR)清空packages/spec/json-schema/,而openapi.json只由另一条生成链gen:openapi(build-openapi.ts)写入,且 gitignored、无门(AGENTS.md 已记录 gen:openapi/gen:sbom 无门)。于是任何「
gen:schema(或原地跑 build-schemas 的check:generated)之后、没有再跑 full spec build/gen:openapi」的窗口里,openapi.json处于被抹掉状态。此时跑@objectstack/rest测试:失败读起来像 rest 路由坏了,实际是 spec 侧生成物被兄弟生成器清场。归因成本一整圈(§9 陈旧产物陷阱的又一变体:这次不是「陈旧」,是「被抹掉」)。
为什么今天没人在 CI 撞到
CI 的 test job 干净检出后走完整
pnpm build(spec build =gen:schema && gen:openapi && tsup,顺序保证 openapi.json 最后在场);只有本地/agent 工作流会在 build 之后再跑独立gen:schema或check:generated,然后再跑 rest 测试。多 agent 接力(合并后重生成基线)恰好就是这个顺序。候选修法(供 triage)
build-schemas.ts清场时保留openapi.json(它不属于该生成器的输出集,删别人的产物本身就是越界);gen:schema末尾顺带触发gen:openapi(两者本来在 build 里就是连体);第一条最小:各生成器只拥有并清理自己的输出。
观察级:CI 与发布产物不受影响,只咬本地/agent 的验证圈。发现于 #5312 同步接力,当场以
pnpm --filter @objectstack/spec gen:openapi恢复后 rest 40 files / 608 tests 全绿。