发现于 #6384(修 SYNC_ARCHITECTURE.md L3 字段映射值转换措辞,PR #6395)的邻域扫描,不在该 PR 范围内,故单独记录。
事实(origin/main @ c78be03)
packages/spec/src/automation/etl.zod.ts 的 ETLPipelineSchema / ETLTransformation 在本仓没有任何执行侧消费者。
$ grep -rln "automation/etl\|ETLPipeline" packages apps --include=*.ts --include=*.tsx | grep -v "^packages/spec/"
apps/docs/.source/browser.ts
apps/docs/.source/server.ts
两处命中都是 fumadocs 生成的文档源,不是执行器。packages/spec 内部的引用只有 migrations/registry.ts、scripts/build-docs.ts 与自身测试。
补充读数:
packages/spec/liveness/ 下没有 etl.json / pipeline.json —— 该面未进入 liveness 账本,所以 Spec property liveness 门禁对它没有读数。
- 同目录的
mapping.json 存在,并且 shared/mapping.zod.ts 的模块 TSDoc 明确把 import mapping 的 transform 描述为"applied row by row by the REST import path and recorded live, key by key, in packages/spec/liveness/mapping.json" —— 即同一文件家族里,被执行的那一面有账本,ETL 这一面没有。
为什么值得记
SYNC_ARCHITECTURE.md 把 L2 ETL 当作在役的一层在推荐,而且是 L1 退役时指定的去处。文档 L34-40(#4738 写的):
**What to use instead:**
- **Transformation pipelines** — `ETLPipeline` (`automation/etl.zod.ts`) for
multi-source, multi-stage data movement.
而 #4738 退役 L1 DataSyncConfig 的理由正是"narrative-only:no engine ever parsed, scheduled or executed a DataSyncConfig —— the schema had zero importers across objectstack, cloud and objectui"。L2 现在的读数与当时 L1 的判据同型:零执行侧 importer。
文档同时在 L158-171 的 ### Transformation Types 表里逐行宣传十种 transformation(含 script | Custom JavaScript/Python | return row.price * 1.1),这是一份具体到能照抄的能力清单。#6384 的 PR #6395 刚刚在同一文件里把 L3 字段映射的值转换措辞改成如实说法,并把作者引向"L2 ETL transformation step"——如果 L2 本身也没有执行器,那条引导指向的是另一个不执行的面。这是我在那个 PR 里没法自行裁定、也不该顺手改的部分。
我测了什么、没测什么(请勿据此直接动手)
测了:本仓 packages/* / apps/* 的 TS/TSX 标识符引用;packages/spec/liveness/ 目录清单;/home/user/cloud 与 /home/user/objectui 两个同级 checkout 的同名 grep(均无命中)。
没测:
- 两个同级仓的 checkout 是否处在与
origin/main 一致的状态 —— 结论不应只靠我这次的本地读数。
- 是否存在非 TS import 的消费路径(JSON 元数据装载、
os CLI 的 metadata root 注册、插件契约按名解析)。etl 作为字符串出现在 migrations/registry.ts,我未展开该链路。
- ADR-0049 的账本里是否已有对该面的裁定记录。
因此这是观察类,不是已定性的缺陷:今天没有用户会看到报错(作者写一份 pipeline,得到的是静默不执行 —— 这恰恰是 ADR-0078 命名的那种不对称,但要断言"确实无执行器"需要补完上面三项)。按 objectstack#4949 的分级,打 finding、不打 pm:queue、不指派,严重度请 PM 复核 —— filing 时刻的严重度判断两个方向都不可靠。
若确认为 dead,可选路线(不预设结论)
- 建执行器 —— 若 ETL 是真实业务方向(需要有实际业务拉力的证据:谁在写 pipeline、哪个部署在跑)。
- 按 ADR-0049 enforce-or-remove 退役 —— 与 L1 同样处理,并把
SYNC_ARCHITECTURE.md 的推荐去处改掉。
- 先补 liveness 账本读数 —— 成本最低的一步,把这一面纳入既有门禁,让裁定有数据而不是靠一次性 grep。
我倾向 3 作为下一步(它不预判 1/2,且把判断建立在持续读数上),但这是维护者的裁定,不是我的。
参考
Generated by Claude Code
发现于 #6384(修
SYNC_ARCHITECTURE.mdL3 字段映射值转换措辞,PR #6395)的邻域扫描,不在该 PR 范围内,故单独记录。事实(origin/main @ c78be03)
packages/spec/src/automation/etl.zod.ts的ETLPipelineSchema/ETLTransformation在本仓没有任何执行侧消费者。两处命中都是 fumadocs 生成的文档源,不是执行器。
packages/spec内部的引用只有migrations/registry.ts、scripts/build-docs.ts与自身测试。补充读数:
packages/spec/liveness/下没有etl.json/pipeline.json—— 该面未进入 liveness 账本,所以Spec property liveness门禁对它没有读数。mapping.json存在,并且shared/mapping.zod.ts的模块 TSDoc 明确把 import mapping 的transform描述为"applied row by row by the REST import path and recorded live, key by key, inpackages/spec/liveness/mapping.json" —— 即同一文件家族里,被执行的那一面有账本,ETL 这一面没有。为什么值得记
SYNC_ARCHITECTURE.md把 L2 ETL 当作在役的一层在推荐,而且是 L1 退役时指定的去处。文档 L34-40(#4738 写的):而 #4738 退役 L1
DataSyncConfig的理由正是"narrative-only:no engine ever parsed, scheduled or executed aDataSyncConfig—— the schema had zero importers across objectstack, cloud and objectui"。L2 现在的读数与当时 L1 的判据同型:零执行侧 importer。文档同时在 L158-171 的
### Transformation Types表里逐行宣传十种 transformation(含script | Custom JavaScript/Python | return row.price * 1.1),这是一份具体到能照抄的能力清单。#6384 的 PR #6395 刚刚在同一文件里把 L3 字段映射的值转换措辞改成如实说法,并把作者引向"L2 ETL transformation step"——如果 L2 本身也没有执行器,那条引导指向的是另一个不执行的面。这是我在那个 PR 里没法自行裁定、也不该顺手改的部分。我测了什么、没测什么(请勿据此直接动手)
测了:本仓
packages/*/apps/*的 TS/TSX 标识符引用;packages/spec/liveness/目录清单;/home/user/cloud与/home/user/objectui两个同级 checkout 的同名 grep(均无命中)。没测:
origin/main一致的状态 —— 结论不应只靠我这次的本地读数。osCLI 的 metadata root 注册、插件契约按名解析)。etl作为字符串出现在migrations/registry.ts,我未展开该链路。因此这是观察类,不是已定性的缺陷:今天没有用户会看到报错(作者写一份 pipeline,得到的是静默不执行 —— 这恰恰是 ADR-0078 命名的那种不对称,但要断言"确实无执行器"需要补完上面三项)。按 objectstack#4949 的分级,打
finding、不打pm:queue、不指派,严重度请 PM 复核 —— filing 时刻的严重度判断两个方向都不可靠。若确认为 dead,可选路线(不预设结论)
SYNC_ARCHITECTURE.md的推荐去处改掉。我倾向 3 作为下一步(它不预判 1/2,且把判断建立在持续读数上),但这是维护者的裁定,不是我的。
参考
DataSyncConfig退役,narrative-only 判据)FieldMapping.transform退役,同样"无执行器"理由)Generated by Claude Code