Skip to content

feat(spec)!: converge the dual-source MetadataFormat and CacheStrategy enum declarations (#4537) - #4557

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-4537-format-cachestrategy-enum
Aug 2, 2026
Merged

feat(spec)!: converge the dual-source MetadataFormat and CacheStrategy enum declarations (#4537)#4557
os-zhuang merged 1 commit into
mainfrom
claude/issue-4537-format-cachestrategy-enum

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #4537

#4535 A2 项:MetadataFormat/MetadataFormatSchema/CacheStrategy./shared./system 各有一份声明,且分歧在枚举值上——值不匹配不会编译错,是比形状分歧更易出静默 bug 的一类(#4411 陷阱)。三条基线行全部收敛并删除。

前置核查结论(三仓扫描:本仓 + cloud + objectui)

yml/ts/js 三个别名:零生产者 ⇒ A1 同款收窄。

  • packages/metadata/src/loaders/filesystem-loader.tsdetectFormat 在边界处归一化:.yml'yaml'.ts'typescript'.js'javascript'——扩展名别名从不进入 format 字段;
  • database/remote/memory loader 一律写 'json';
  • 三仓 grep 无任何构造/传入这三个值的位置(唯一命中是 spec 自己的枚举测试);CLI 的 --format 旗标是输出格式(json/yaml/table),不同域。

CacheStrategy 分歧 = 'adaptive'(仅 system 侧声明,零生产者)。

  • shared/enums.zod.tsCacheStrategyEnum(4 值)三仓零 importer;
  • system/cache.zod.tsCacheStrategySchema(5 值)是 CacheTier.strategy 实际引用的一份。

真源侧判定(import 语句级)

  • MetadataFormat:shared 为真源,system 收敛为 re-export(MetadataManagerConfig 模式、反向)。运行时消费者(packages/metadata 的 4 个 serializer + filesystem-loader)从 @objectstack/spec/system 导入——re-export 后符号同一,零改动;kernel/metadata-loader.zodspec 同名双源:两个 MetadataWatchEvent 形状不同、分挂两个子路径入口,其中 kernel 版零消费方(ADR-0049 enforce-or-remove) #4411 起从 shared 导入,无需回改。方向不能选 system:system 已从 kernel re-export MetadataManagerConfigSchema(system → kernel → shared 依赖链),真源放 system 会闭环成模块循环。
  • CacheStrategy:system/cache.zod 成为唯一声明。shared 侧零 importer,按同文件 AggregationFunctionEnum 先例(objectui#2945)删除而非调和——为一个概念保留第二个名字正是词汇当初漂移的成因;'adaptive' 一并收窄,枚举保留两份声明曾共同认可的 4 值(lru | lfu | fifo | ttl)。

变更清单

  • system/metadata-persistence.zod.ts:删除本地 7 值 MetadataFormatSchema,re-export shared 声明(4 值);类型同步 re-export;单一来源注释更新。
  • shared/enums.zod.ts:删除 CacheStrategyEnum + CacheStrategy 类型(附与 AggregationFunctionEnum 同款的处置注释)。
  • system/cache.zod.ts:CacheStrategySchema 收窄掉 'adaptive'
  • 测试:system 侧 canonical 4 值通过 + yml/ts/js 拒绝 pin;cache 侧 'adaptive' 拒绝 pin;shared enums 测试删除对应块。
  • dual-source-exports.baseline.json:删除 3 条基线行(shrink-only ratchet 点名的正是这 3 条,无额外 stale 行)。
  • json-schema.manifest.json:删除 shared/CacheStrategyEnum(deliberate retirement,gen:schema silently drops PageTabsProps since #2967 — references regen would delete real docs #2978 流程)。
  • 生成物:api-surface.json(./shared 少 2 个导出)、references 文档、skill refs 均由 check:generated --fix 再生。
  • changeset(major):含 FROM → TO 迁移说明('yml''yaml''ts''typescript''js''javascript';CacheStrategyEnum@objectstack/spec/systemCacheStrategySchema;'adaptive' → 4 值之一)。

无 ADR-0087 conversion / tombstone:loader envelope + 无 authorable 生产者的配置词汇,同 #4536/#4411 路线(authorable-surface.json 无涉及;存量 sys_metadata 行不携带别名值——DB loader 恒写 'json')。

验证

  • check:dual-source-exports:✅ 无新增,49 条 accepted(3 条已删)
  • check:generated:✅ 8/8 artifacts up to date
  • pnpm --filter @objectstack/spec test:285 files / 7246 tests 全绿
  • pnpm --filter @objectstack/spec typecheck(tsc --noEmit):✅
  • 全仓 pnpm build:71/71 ✅
  • 全仓 pnpm test:132/132 turbo tasks ✅(exit 0)

关联:#4535(主单)、#4506(基线)、#4411#4536(同款处置先例)


Generated by Claude Code

…y enum declarations (#4537)

Two enum vocabularies were declared on both ./shared and ./system and
had diverged on their VALUES — which accepted value set you got depended
on nothing but the import path (the #4411 trap; #4535 A2, #4506
baseline). Value-level divergence is the silent kind: a mismatched value
never fails to compile.

MetadataFormat / MetadataFormatSchema — shared declaration is the
single source:

- system/metadata-persistence.zod.ts no longer declares its own
  7-member copy; it re-exports shared/metadata-types.zod (the
  MetadataManagerConfig pattern, in reverse). The extension-style
  aliases yml/ts/js it carried had zero producers in this repo,
  objectui and cloud: FilesystemLoader.detectFormat normalizes at the
  boundary (.yml -> 'yaml', .ts -> 'typescript', .js -> 'javascript')
  and the database/remote/memory loaders always emit 'json'.
- Direction: shared, not system — kernel/metadata-loader.zod has
  imported the shared schema since #4411 (MetadataManagerConfig.formats
  needs no change), and system already re-exports
  MetadataManagerConfigSchema FROM kernel, so a system-side source
  would close a module cycle (shared -> system -> kernel -> shared).

CacheStrategy — system/cache.zod.ts (CacheStrategySchema) is the
single declaration:

- shared/enums.zod.ts CacheStrategyEnum (+ its CacheStrategy type
  export) removed: zero importers in all three repos, while the system
  schema is the one CacheTier.strategy gates on. Same disposition as
  AggregationFunctionEnum in the same file (objectui#2945): removed
  rather than reconciled.
- 'adaptive', declared only on the system side with zero producers,
  is dropped — the enum carries the four values both declarations
  agreed on (lru | lfu | fifo | ttl).

Bookkeeping:

- dual-source-exports.baseline.json: the three converged rows deleted
  (shrink-only ratchet).
- json-schema.manifest.json: shared/CacheStrategyEnum key deleted
  (deliberate retirement, #2978 flow).
- Pin tests: yml/ts/js rejected on the system entry; 'adaptive'
  rejected on CacheStrategySchema.
- api-surface.json, references docs, skill refs regenerated via
  check:generated --fix.
- Changeset (major) carries the FROM -> TO migration lines.
- No ADR-0087 conversion / tombstone: loader envelope + config
  vocabulary with no authorable-metadata producers (the #4411/#4536
  route).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M9uWvoEp9CoLzYjNExj9sL
@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 3:04am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:system tests tooling labels 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 the size/m label Aug 2, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 2, 2026 04:07
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 2, 2026
Merged via the queue into main with commit 0222d3c Aug 2, 2026
21 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4537-format-cachestrategy-enum branch August 2, 2026 04:19
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 protocol:system size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[#4535·A2] MetadataFormat + CacheStrategy:./shared ≠ ./system 的枚举分歧收敛

2 participants