## 现象 `packages/spec/scripts/build-schemas.ts:200` 把导出常量名转成 JSON Schema 名时用的是**字符串** replace,不是后缀正则: ```ts const schemaName = key.endsWith('Schema') ? key.replace('Schema', '') : key; ``` `String.prototype.replace(string, …)` 只替换**第一处**出现。常量名里 `Schema` 出现在前缀或中间时,被剥掉的就不是后缀,而是名字里面的那一段。目前受影响的 4 个: | 导出常量 | 实际生成的 schema 名 | 正确的名字 | |:---|:---|:---| | `SchemaModeSchema` (`src/data/datasource.zod.ts:440`) | `data/ModeSchema` | `data/SchemaMode` | | `SchemaChangeSchema` (`src/system/deploy-bundle.zod.ts:46`) | `system/ChangeSchema` | `system/SchemaChange` | | `SchemaLevelIsolationStrategySchema` (`src/system/tenant.zod.ts:376`) | `system/LevelIsolationStrategySchema` | `system/SchemaLevelIsolationStrategy` | | `DocumentSchemaValidationSchema` (`src/data/driver-nosql.zod.ts:119`) | `data/DocumentValidationSchema` | `data/DocumentSchemaValidation` | ## 影响面 这个名字不是内部细节,它同时是三处对外表面: 1. `$id`:`https://schema.objectstack.io/v17/data/ModeSchema.json` —— 一个并不存在的类型名,IDE 自动补全和外部引用都会拿到它; 2. `json-schema.manifest.json` 的棘轮条目(已记录了这 4 个错名); 3. `content/docs/references/` 的页面小节标题与 import 示例 —— 在 #4570 的修复之后,这 4 个名字在真实导出面里查无此名,于是被从 import 行里剔除,并作为 4 条 `no schema const export` 记进 `packages/spec/docs-import-surface.baseline.json`。也就是说这 4 个 schema 现在有文档页、但页面给不出任何 import 示例。 ## 建议 改成 `key.replace(/Schema$/, '')`,然后 `gen:schema` + `gen:docs` + `gen:api-surface` 重跑,并把 `json-schema.manifest.json` 里 4 条旧键换成新键(属于 #2978 说的「有意退役」范畴,要在 PR 里说明),同时把 `docs-import-surface.baseline.json` 里对应的 4 条 `no schema const export` 删掉(该 baseline 是只减不增的棘轮,修好后必须删行,否则 `check:docs` 会因为陈旧条目变红)。 发现于 #4570。
Activity
os-zhuang commentedon Aug 2, 2026
🔒 CLAIM — pm-dispatch round 6
branch:
claude/issue-4592-schema-suffix-regexworktree:
objectstack-issue-4592本轮由 PM 会话派发给 os-dev agent。若另有会话已在做此题,以本 issue 更早的 CLAIM 评论为准,后到者退出。
Generated by Claude Code
os-zhuang commentedon Aug 2, 2026
PM 复核:ACCEPT ✅(PR #4625,已转正并挂自动合并,CI 绿后进队列)
build-docs.ts:133有同一 bug 的第二份拷贝;两处收敛为共享的schemaNameFromExportKey(锚定/Schema$/),生成器不可能再各自漂移,附 4 例前缀Schema的 pin 测试(回退成字符串 replace 即红);--update-import-baseline;4 个参考页恢复真实 import 示例;api-surface.json零 diff(TS 导出面未变),无多余搅动;Generated by Claude Code
fix(objectstack-ai#4570): spell reference-doc import examples from th…
fix(spec): anchor the Schema-suffix strip when deriving published sch…
fix(spec): key the reference-docs index by `<category>/<name>` (objec…