Skip to content

fix(spec): anchor the Schema-suffix strip when deriving published schema names (#4592) - #4625

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-4592-schema-suffix-regex
Aug 2, 2026
Merged

fix(spec): anchor the Schema-suffix strip when deriving published schema names (#4592)#4625
os-zhuang merged 1 commit into
mainfrom
claude/issue-4592-schema-suffix-regex

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #4592

问题

packages/spec/scripts/build-schemas.ts:200build-docs.ts:133字符串 key.replace('Schema', '') 把导出常量名转成发布的 JSON Schema 名。String.prototype.replace(string, …) 只替换第一处出现,因此名字里前缀/中间也含 Schema 的 4 个常量被剥掉的不是后缀,而是名字内部的一段:

导出常量 旧(错)名 新名
SchemaModeSchema data/ModeSchema data/SchemaMode
SchemaChangeSchema system/ChangeSchema system/SchemaChange
SchemaLevelIsolationStrategySchema system/LevelIsolationStrategySchema system/SchemaLevelIsolationStrategy
DocumentSchemaValidationSchema data/DocumentValidationSchema data/DocumentSchemaValidation

错名同时污染三处对外表面:$id URL、json-schema.manifest.json 棘轮键、参考文档页的小节标题与 import 示例(#4570 之后这 4 个名字在真实导出面查无此名,import 行被剔除,记为 baseline 里 4 对 no schema const export / no type export)。

修复

  • 单一实现,两个生成器共用:抽出 scripts/lib/schema-name.tsschemaNameFromExportKey(锚定后缀的 key.replace(/Schema$/, '')),build-schemas.tsbuild-docs.ts 都改为引用它,避免两个生成器再次各自漂移。
  • pin 测试 scripts/schema-name.test.ts(vitest 已收录 scripts/**/*.test.ts):覆盖上表 4 个前缀含 Schema 的名字、普通后缀、无后缀、双 Schema 后缀等情形。回退成字符串 replace 时,前缀组 4 个用例即红。
  • manifest 换键(有意退役,gen:schema silently drops PageTabsProps since #2967 — references regen would delete real docs #2978 规则):删除 4 条旧键、由生成器补入 4 条新键。旧 $id 名从未对应任何真实导出类型,属于 gen:schema silently drops PageTabsProps since #2967 — references regen would delete real docs #2978 所述「必须在同一 PR 中有意删除」的范畴,非静默消失。
  • authorable-surface.json 前缀改名(14 条):这是 schema 名的改名而非 key 退役——每个 authorable key 都在新名字下原样存活,无 key 消失,故不涉及 tombstone/D2 流程。
  • docs-import-surface.baseline.json 收缩 152 → 144:对应的 4 对(共 8 条)no schema const export / no type export 缺口已消失,build-docs.ts --update-import-baseline 按棘轮规则删行(shrink-only)。
  • 重新生成 4 个参考文档页(data/datasourcedata/driver-nosqlsystem/deploy-bundlesystem/tenant):小节标题改为真实类型名,import 示例恢复(如 import { SchemaModeSchema } from '@objectstack/spec/data' / import type { SchemaMode })。
  • changeset(.changeset/schema-name-suffix-strip.md,patch):携带 FROM → TO 映射,便于引用旧 $id 的一方 grep 到一行修法。TS 导出面本身没有任何变化(api-surface.json 零 diff,check:api-surface 绿)。

验证

  • pnpm --filter @objectstack/spec check:generated:8 个生成物门禁全绿(含 check:authorable-surfacecheck:api-surfacecheck:docs)。
  • pnpm --filter @objectstack/spec test:291 个文件 / 7285 个用例全部通过(含新 pin 测试)。
  • pnpm --filter @objectstack/spec typecheck:通过。

🤖 Generated with Claude Code

https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5


Generated by Claude Code

…ema names (#4592)

build-schemas.ts and build-docs.ts derived the published JSON Schema name via
key.replace('Schema', '') — a string pattern, which replaces the FIRST
occurrence. Consts with 'Schema' in prefix/middle position (SchemaModeSchema,
SchemaChangeSchema, SchemaLevelIsolationStrategySchema,
DocumentSchemaValidationSchema) lost an inner segment instead of the suffix,
publishing $id URLs, manifest keys and docs sections under type names that
exist nowhere in the export surface.

- extract the mapping into scripts/lib/schema-name.ts (schemaNameFromExportKey,
  /Schema$/ anchored) shared by both generators, with a pin test covering the
  four mangled names
- swap the 4 stale json-schema.manifest.json keys for the corrected ones
  (deliberate retirement per #2978 — the old names never named a real type)
- rename the 14 affected authorable-surface.json key prefixes (rename, not a
  key retirement: every authorable key survives under the corrected name)
- shrink docs-import-surface.baseline.json 152 -> 144 (the 4 'no schema const
  export' / 'no type export' pairs are gaps that no longer exist)
- regenerate the 4 reference-doc pages: sections renamed, real import
  examples restored

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5
@vercel

vercel Bot commented Aug 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 2, 2026 12:04pm

Request Review

@github-actions github-actions Bot added the size/m label Aug 2, 2026
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

107 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling labels Aug 2, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 2, 2026 12:04
@os-zhuang
os-zhuang enabled auto-merge August 2, 2026 12:04
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 2, 2026
Merged via the queue into main with commit 0c0fbd9 Aug 2, 2026
22 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4592-schema-suffix-regex branch August 2, 2026 12:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

build-schemas.ts 用 replace('Schema','') 剥后缀,前缀含 Schema 的 4 个 schema 名被截断($id / 文档页名 / import 全错)

2 participants