Skip to content

[docs] ADR-0005 的「Index migration」段落描述的是已不存在的机制:addSysMetadataOverlayIndex 已随 #6771 删除,段落还写着 project_id 与 partial 键 #6825

Description

@os-zhuang

发现于 #6771(PR #6824)的实施——删除 addSysMetadataOverlayIndex 后逐条清点该导出的引用时读到。不在该单的 file surface 内(packages/metadata + tests + changeset),故单独记录。

事实

docs/adr/0005-metadata-customization-overlay.md:405-416 用现在时描述一套已经不存在的机制:

Drivers ignore `indexes` declarations on synced tables today, so a new
idempotent migration is provided and run automatically by
`DatabaseLoader.ensureSchema()`:

- `addSysMetadataOverlayIndex(driver)` — exported from
  `@objectstack/metadata/migrations`.

这三句现在逐句为假:

  1. addSysMetadataOverlayIndex 已删除[metadata] addSysMetadataOverlayIndex 用 ADR-0048 之前的键抢占 idx_sys_metadata_overlay_active——同名索引有两个生产者,先跑的赢 #6771 / PR fix(metadata): one owner for idx_sys_metadata_overlay_active — remove the stale-keyed second producer #6824),@objectstack/metadata/migrations 不再导出它;
  2. DatabaseLoader.ensureSchema() 不再运行任何覆盖层索引迁移——两处调用点随之移除;
  3. 「Drivers ignore indexes declarations on synced tables」本身已经不成立,且与 [metadata] addSysMetadataOverlayIndex 用 ADR-0048 之前的键抢占 idx_sys_metadata_overlay_active——同名索引有两个生产者,先跑的赢 #6771 无关:SqlDriver.syncDeclaredIndexes 会把声明的索引物化出来。这一条是该段落里最容易误导人的,因为它正是 [metadata] addSysMetadataOverlayIndex 用 ADR-0048 之前的键抢占 idx_sys_metadata_overlay_active——同名索引有两个生产者,先跑的赢 #6771 里「删除生产者是安全的」这个判断的反面——实测(真实 SQLite)声明索引确实被建出来,且带的是现行键 (type, name, organization_id, package_id)

同段的 YAML 示例还写着 fields: ['type','name','organization_id','project_id','scope']partial: "state = 'active'"——project_id 早已改名 environment_id 后退役,partial 键在 #5248 / #4943 已被 enforce-or-remove 撤销。这两处的陈旧早于 #6771,不是本次改动造成的。

影响

无运行时影响,纯文档漂移——因此按 observation-class 归档(finding,不带 pm:queue)。代价在于 ADR 是人和 AI 抄写的语料:这一段读起来像是在描述当前交付覆盖层唯一性的机制,而真正交付它的是 metadata-protocolensureMetadataOverlayIndexes(partial + NULL-safe)与 metadata-core 声明索引(粗粒度兜底)这两层。

处理方向(未决定,留给 triage)

ADR 是历史决策记录,通常不就地改写正文。两条可选:一是加一段 Amended 说明,指明 Phase 1 的这套迁移机制已被 #5248/#4943/#6771 取代、现行归属在哪两层;二是只订正那句关于 syncDeclaredIndexes 的事实陈述。倾向前者——它保留了历史,也让读者不会把历史当现状。

复现

docs/adr/0005-metadata-customization-overlay.md:405-416,与 packages/metadata/src/migrations/index.ts 的 tombstone 注释、packages/metadata-core/src/objects/sys-metadata.object.ts:200-230 对照即可,无需运行。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions