Repository navigation
[#5704 批次3] 7 个 integration 测试真迁 driver-sql sqlite :memory:(rest ×3 / plugin-approvals ×3 / trigger-record-change ×1) #5785
Description
Activity
- addedpriority:p0Critical: blocker, must ship before MVPCritical: blocker, must ship before MVP
on Aug 6, 2026 认领:PM 循环第 8 轮(drivers 车道,#5704 批次 3)
会话:session_01WyvqvKMG6asi9aXjKE6xtx
分支:claude/issue-5785-integration-tests-sqlite
Worktree:objectstack-issue-5785
域:跨域执行 — 落点packages/rest(domain:cli)+packages/plugins/plugin-approvals、packages/triggers/trigger-record-change(domain:services);程序锚点 #5704 属 domain:drivers,维护者 2026-08-06 裁决 Q1=C 并指令本车道执行(落档见 #5704 裁决评论)
文件面:7 个测试文件(rest:export-integration / import-integration / import-job-integration;plugin-approvals:record-lock-multi-update / record-lock-schedule-run / status-mirror-cascade 的.integration.test.ts;trigger-record-change:record-change-integration)+ 3 个包的 package.json(加@objectstack/driver-sqldevDep)定向在飞检查(实测,origin/main
fc5f536双清单 git grep 比对):cli 车道在飞 #5674 的 15 个 getDiscovery 替身文件与本单 3 个 rest 文件零相交,可并行;#5726 落点 packages/cli,不相交;services 车道(#4604 正文)无登记在飞单。注意 rest 测试面近日高频变动(#5723/#5705/#5682/#5740),执行以最新 origin/main 为准。
Generated by Claude Code
复核:ACCEPT → PR #5806(PM 实测复核,不采信报告自述):
- 变更面 = 申报面,分毫不差:三点 diff 恰为 11 文件(7 测试 + 3 个 package.json 各一行 devDep + lockfile);疑似越界的
import-runner.ts/import-runner-cancel.test.ts经查 main 上本就含 better-sqlite3 字样,非本 PR 所动。 - 验收线过硬:7 文件
makeMemoryDriver归零、SqlDriver:memory:全部落地;undeclared-field-write-driver-split与 main 同 blob(Q2-B 边界零触碰)。 - 语义分叉处置全部「声明而非放松」:The #1888 user-less fail-open is wider than the lint that guards it — record-change flows fired by a system write run UNSCOPED, unlinted #3760 断言改
?? null并加严(新增记录存在断言、拒用 toBeFalsy);sys_import_job手写镜像换真身SysImportJob尤其漂亮 —— 真表一句no such column: undo_log就暴露了镜像漏掉整个 undo 能力(data import undo: 撤销一次「historical」导入无法还原被保留的 readonly / 审计字段 — undo 的 writeCtx 缺 preserveAudit (#3493 follow-up) #3549)与 3 个 datetime 类型漂移,这正是本次迁移要买的保真度;日志层分叉(静默空集 → no such table,判决不变)如实留档。 - 用例计数零缩水:rest 55/782、approvals 19/446、trigger 5/55 与基线逐项相同;合 main(含 test(rest): getDiscovery 测试替身发
routes,不再发 #4828 已退役的endpoints(#5674) #5788/fix(objectql): hook 层用 Logger 契约形状写诊断,不再自带方言 (#5637) #5780/refactor(metadata-protocol): 删除 saveMetaItem 中已不可达的 legacy raw-engine 写入分支 (#5264) #5782)后重跑仍绿,增量 +1 文件/+2 用例全部来自 test(rest): getDiscovery 测试替身发routes,不再发 #4828 已退役的endpoints(#5674) #5788 新文件 —— 与 packages/rest 的 14 个 getDiscovery 测试替身返回endpoints,一个真实生产者从未发过、且已在 #4828 退役的键 #5674 车道的零相交由此坐实。 - 方向性验证:预判在先(拆 DDL 应红在「表不存在」),实测一致;另有分叉 2 的非人为同向证据。
- CI(28ac111):Check Changeset 已按
skip-changeset转 skipped;已完成检查全绿,余下重活在跑。
CI 清零后转 ready 入合并队列(GraphQL 配额恢复窗口已排程),跟到 MERGED。两单(#5784/#5806)齐落后回 #5704 执行收口。
Generated by Claude Code
- 变更面 = 申报面,分毫不差:三点 diff 恰为 11 文件(7 测试 + 3 个 package.json 各一行 devDep + lockfile);疑似越界的
- added a commit that references this issue
on Oct 7, 2026
Part of #5704(批次 3)。维护者 2026-08-06 裁决 Q1=C 的真迁半边(落档见 #5704 裁决评论):这 7 个文件名为 integration、实跑手写替身,名不副实,真迁有实际收益。
范围:7 个文件,真迁
@objectstack/driver-sql+ better-sqlite3:memory:以
git grep -l "makeMemoryDriver" packages/rest packages/plugins/plugin-approvals packages/triggers(对 origin/main)复核实际文件名 — survey 基线a58c0b5,先复核前提。做法
cli db clean、PR test(runtime,dogfood): 批次 0 —— 两个真依赖测试后端迁到 sqlite:memory:#5715 的makeDefaultDriver()同款):new SqlDriver({ client: 'better-sqlite3', connection: { filename: ':memory:' }, useNullAsDefault: true });@objectstack/driver-sql(workspace 协议;better-sqlite3 由 driver-sql 的 optionalDependency 提供 — test(runtime,dogfood): 批次 0 —— 两个真依赖测试后端迁到 sqlite:memory:#5715 实测);survey 已核无循环依赖(driver-sql 不依赖这三包);execute()(external 模式)— 参照 test(runtime,dogfood): 批次 0 —— 两个真依赖测试后端迁到 sqlite:memory:#5715 的处理;:memory:(#5499 重启条件 · memory 半边,维护者 2026-08-06 立项) #5704 风险声明的设计内收益);拿不准的列 open_questions 返回,⛔ 不要静默放松或删除断言 — 改写后的断言必须继续承载等价保真度。边界(⛔)
验收
:memory:后端跑绿;skip-changeset约定(label 由 PM 代打)。