Found while bumping cloud's framework pin for the #3624 follow-up. Currently live on framework main.
症状
cloud 的 @objectstack/service-ai 有一个测试断言:配置了 provider 时,embedder 会经由 EMBEDDER_SERVICE 构建并注册。对着 framework main 跑,它红了:
FAIL src/__tests__/ai-service.test.ts > AIServicePlugin > embedder binding
> builds and registers embedder via EMBEDDER_SERVICE when provider is configured
AssertionError: expected undefined to be defined
❯ src/__tests__/ai-service.test.ts:2059:26
2057| const services = ctx.getServices();
2058| const embedder = services.get('embedder') as any;
2059| expect(embedder).toBeDefined();
同一个测试文件里还打了一行:[AI] Metadata service not available: Service "metadata" not found。
二分结果
同一份 cloud 工作副本、同一份 node_modules,只切换 framework 构建:
| framework SHA |
@objectstack/service-ai |
bc17d39 (#3647 合入点) |
✅ 563 passed (44 files) |
ce1f100 (当时的 main 顶端) |
❌ 1 failed / 562 passed |
区间里只有两个提交:
f1a8114 — fix(client,service-i18n): ledger the autonomous service-mount surface; two i18n SDK calls reached nothing (#3636) (#3646)
ce1f100 — fix(rest): emit the projected export header on an empty result set (#3547) (#3649)
首要嫌疑是 f1a8114。 失败的正是"服务是否被注册/挂载"这件事,而那个提交改的就是 autonomous service-mount 的登记方式;ce1f100 只动 REST 导出表头,与服务注册无关。我没有为区分这两个再跑一次完整 framework 构建,所以这一条是强推断而非已验证的二分终点 —— 谁接手可以只构建 f1a8114 来钉死。
为什么 framework CI 没抓到
embedder / EMBEDDER_SERVICE 的这条注册路径由 cloud 的 @objectstack/service-ai 覆盖,framework 仓库里没有对应测试。cloud CI 又把 framework 钉在 .objectstack-sha(当时是 6ba3788),所以直到有人抬 pin 才会撞上 —— 也就是现在。
影响
任何把 framework pin 抬过 f1a8114 的 cloud 升级都会红。#3624 的 cloud 侧跟进 PR 因此刻意只把 pin 抬到 bc17d39(最小、且已验证干净),而不是 main 顶端 —— 抬到顶端就会连带吞下这个回归。
建议
- 确认
f1a8114 是不是真凶(单独构建那个 SHA 跑 cloud 的 service-ai)。
- 修 framework 侧的注册,或修正 cloud service-ai 对新 mount 契约的用法 —— 取决于哪一边才是对的。
- 考虑把这条注册路径在 framework 侧也补一个测试,否则同类回归还会以同样的方式(只有抬 pin 时才暴露)再来一次。
Refs #3624, #3647, #3646。
Found while bumping cloud's framework pin for the #3624 follow-up. Currently live on framework
main.症状
cloud 的
@objectstack/service-ai有一个测试断言:配置了 provider 时,embedder 会经由EMBEDDER_SERVICE构建并注册。对着 frameworkmain跑,它红了:同一个测试文件里还打了一行:
[AI] Metadata service not available: Service "metadata" not found。二分结果
同一份 cloud 工作副本、同一份
node_modules,只切换 framework 构建:@objectstack/service-aibc17d39(#3647 合入点)ce1f100(当时的main顶端)区间里只有两个提交:
f1a8114—fix(client,service-i18n): ledger the autonomous service-mount surface; two i18n SDK calls reached nothing (#3636) (#3646)ce1f100—fix(rest): emit the projected export header on an empty result set (#3547) (#3649)首要嫌疑是
f1a8114。 失败的正是"服务是否被注册/挂载"这件事,而那个提交改的就是 autonomous service-mount 的登记方式;ce1f100只动 REST 导出表头,与服务注册无关。我没有为区分这两个再跑一次完整 framework 构建,所以这一条是强推断而非已验证的二分终点 —— 谁接手可以只构建f1a8114来钉死。为什么 framework CI 没抓到
embedder/EMBEDDER_SERVICE的这条注册路径由 cloud 的@objectstack/service-ai覆盖,framework 仓库里没有对应测试。cloud CI 又把 framework 钉在.objectstack-sha(当时是6ba3788),所以直到有人抬 pin 才会撞上 —— 也就是现在。影响
任何把 framework pin 抬过
f1a8114的 cloud 升级都会红。#3624 的 cloud 侧跟进 PR 因此刻意只把 pin 抬到bc17d39(最小、且已验证干净),而不是main顶端 —— 抬到顶端就会连带吞下这个回归。建议
f1a8114是不是真凶(单独构建那个 SHA 跑 cloud 的 service-ai)。Refs #3624, #3647, #3646。