按 Prime Directive #10 记录。在 #4062 / #4082 两次任务里都撞到,与那两条改动无关,故单独开。
现象
pnpm --filter @objectstack/runtime exec vitest run src/datasource-autoconnect.test.ts
FAIL src/datasource-autoconnect.test.ts > ADR-0062 declared-datasource auto-connect
> makes the federated object queryable through the engine with zero app code
AssertionError: expected [ 'first', 'first', 'first', …(3) ] to deeply equal [ 'first', 'second' ]
测试(packages/runtime/src/datasource-autoconnect.test.ts:118)往外部数据源驱动里 bulkCreate 2 行,然后 engine.find('ext_note'):
- 单独跑整个文件:读到 6 行 —— 同样的 2 行各出现 3 次;
-t "makes the federated object queryable" 只跑这一条(其余 skip):读到 12 行。
行数随运行方式变化,但从来不是 2。
已排除
复现于 b3a2318、5dc4d02、c53aa53 三个 main 快照(容器:Linux 6.18.5,Node 见 CI 同版本)。
但 CI 是绿的
Test Core 在 main 和 PR 上都通过,而且跑整包 pnpm --filter @objectstack/runtime test 时这条偶尔能过(观察到 1 次通过 / 3 次失败)。所以它要么对执行环境敏感,要么是概率性的 —— 单独跑必现只是把概率拉满。
值得看的方向
行数是 2 的整数倍(6 = 3×2,12 = 6×2),像是同一份数据被多个 driver 实例/多次连接重复读出,而不是数据被写了多次。测试里一次 boot 会建 3 个 memory driver(默认 driver + autoconn_ext + decorative),三者都是 driver: 'memory';如果联邦读把绑到 autoconn_ext 的对象在多个实例上各查了一遍、或者多次 connectDeclared 复用了同一个 store,就正好是这个形状。InMemoryDriver 本身没有模块级共享 store(都是实例字段),所以更可能在 DatasourceConnectionService.connectDeclared / 引擎的联邦读那一侧。
需要的动作:找一台非本容器的机器跑一次上面的命令。如果也复现,那 CI 绿只是运气,这条测试保护的 ADR-0062 D1 验收其实没在保护;如果不复现,则值得查清楚是什么环境差异让它必现 —— 那个差异本身可能就是 bug 的触发条件。
关联:#4062、#4082、ADR-0062 D1/D5。
按 Prime Directive #10 记录。在 #4062 / #4082 两次任务里都撞到,与那两条改动无关,故单独开。
现象
测试(
packages/runtime/src/datasource-autoconnect.test.ts:118)往外部数据源驱动里bulkCreate2 行,然后engine.find('ext_note'):-t "makes the federated object queryable"只跑这一条(其余 skip):读到 12 行。行数随运行方式变化,但从来不是 2。
已排除
git stash掉全部改动后同样失败;packages/plugins/driver-memory/src回退到b3a2318^并重新 build,同样失败;pnpm install+pnpm --filter @objectstack/runtime^... build之后复现。复现于
b3a2318、5dc4d02、c53aa53三个 main 快照(容器:Linux 6.18.5,Node 见 CI 同版本)。但 CI 是绿的
Test Core在 main 和 PR 上都通过,而且跑整包pnpm --filter @objectstack/runtime test时这条偶尔能过(观察到 1 次通过 / 3 次失败)。所以它要么对执行环境敏感,要么是概率性的 —— 单独跑必现只是把概率拉满。值得看的方向
行数是 2 的整数倍(6 = 3×2,12 = 6×2),像是同一份数据被多个 driver 实例/多次连接重复读出,而不是数据被写了多次。测试里一次 boot 会建 3 个 memory driver(默认 driver +
autoconn_ext+decorative),三者都是driver: 'memory';如果联邦读把绑到autoconn_ext的对象在多个实例上各查了一遍、或者多次connectDeclared复用了同一个 store,就正好是这个形状。InMemoryDriver本身没有模块级共享 store(都是实例字段),所以更可能在DatasourceConnectionService.connectDeclared/ 引擎的联邦读那一侧。需要的动作:找一台非本容器的机器跑一次上面的命令。如果也复现,那 CI 绿只是运气,这条测试保护的 ADR-0062 D1 验收其实没在保护;如果不复现,则值得查清楚是什么环境差异让它必现 —— 那个差异本身可能就是 bug 的触发条件。
关联:#4062、#4082、ADR-0062 D1/D5。