Skip to content

驱动工厂仍保留 4 处未声明的 ?? 容错,应按 ADR-0087 转换层退役(#4410 收尾发现) #4456

Description

@os-zhuang

#4410datasource.config 装上了 per-driver 的 zod 门禁,作者侧现在只有一种拼写。但
createDefaultDatasourceDriverFactory 里仍留着几处未声明的读取侧 ?? 回退——它们不是
契约的一部分,任何文档、表单、示例都没写过,纯粹是"读的人比较宽容"才碰巧能用:

位置 容错的拼写 契约里的键
buildSqlConnection(sqlite 分支) cfg.file / cfg.database filename
buildSqlConnection(pg 分支) cfg.connectionString url
buildSqlConnection / buildMysqlConnection cfg.user username
buildMongoUrl cfg.uri url

这正是 AGENTS.md Prime Directive #12 点名的债:"When you must tolerate an alias at all,
declare it as a conversion-layer entry (never a bare ??), so it is declared, loud, tested,
and removable on a schedule."
filtersfilterobjectobjectName 已经按这条路
毕业了(flow-node-crud-filter-alias 等),这四处是同一形状。

#4410 为什么没有顺手删掉。 删了会静默改变已持久化的运行时数据源的行为:一条早先通过
API 存进 sys_metadataconfig 里写着 file 的记录,删回退之后会落到 :memory:——
数据位置无声改变,比现在的容错更糟。正确做法是 ADR-0087 D2 的转换条目:在加载时把旧键改写
成规范键(applyConversionsToStoredItem 会对存量数据重放整条链,#3903),然后回退就可以
真的删除,而不是继续留在 reader 里。

建议做法

  1. 加一条 datasource-config-driver-key-aliases 转换条目(含 fixture),覆盖上表四组映射;
    需要一个 mapDatasources walker(conversions/walk.ts 目前没有)。
  2. 转换落地后删除工厂里的四处 ??,并把 sqlite.zod.ts / mongo.zod.ts 里"工厂仍容忍
    存量记录"的注释一并删掉——那两段注释是专门为这个中间状态写的。
  3. spec-changes / upgrade-guide 按常规重新生成。

关联#4410(本 issue 的来源)、#3796(同类 alias 毕业)、ADR-0087 D2、ADR-0078。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions