Skip to content

feat(drivers): driver-turso 迁回本仓公开发布,五个 IDataDriver 统一收进 packages/drivers/ (#4645 Phase A) - #5618

Merged
os-zhuang merged 5 commits into
mainfrom
claude/issue-4645-drivers-dir-turso-migration
Aug 5, 2026
Merged

feat(drivers): driver-turso 迁回本仓公开发布,五个 IDataDriver 统一收进 packages/drivers/ (#4645 Phase A)#5618
os-zhuang merged 5 commits into
mainfrom
claude/issue-4645-drivers-dir-turso-migration

Conversation

@os-zhuang

@os-zhuang os-zhuang commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Part of #4645 (Phase A: objectstack half)

⚠️ 刻意不写 Fixes —— 本单要等 Phase B(cloud 半边:pin 前移 + 14 条 link: 改指)落地才关。


做了什么

维护者 2026-08-05 裁定:turso 核心迁回本仓、公开 Apache-2.0 发布;五个 IDataDriver 实现统一收进新的 packages/drivers/。本 PR 是这个方案的 objectstack 半边,一次做完

1. 四个存量 driver 平移(内容零改动)

git mv packages/plugins/driver-{memory,mongodb,sql,sqlite-wasm}packages/drivers/*,rename 检测保住了全部历史。唯一的内容改动是各自 package.jsonrepository.directory,包名、版本、入口、导出面、依赖、行为一字未动 —— 消费者不需要改任何 import。

深度没变(packages/plugins/Xpackages/drivers/X 都是三层),所以每个包里的 tsup --config ../../../tsup.config.tsextends: ../../../tsconfig.jsonvitest.config.ts 里的 path.resolve(__dirname, '../../spec/src/...') 别名全部仍然解析到同一个目标,一处都不用改。

⛔ 按 #5499 冻结令,driver-memory / driver-mongodb 只平移,没有顺手修任何缺陷#5538 的 mongod 门随包平移,默认跑仍是 7 条响亮 SKIP、零下载(见下方验证输出)。

2. packages/drivers/driver-turso —— 自 cloud 迁入

迁移源objectstack-ai/cloud @ bc372e3b(当前 origin/main,含立单后的 #1117/#1116/#1080/#1078/#1074/#1071 六个语义修复)。用 git archive origin/main packages/driver-turso 导出,⛔ cloud 检出上零写操作。

迁入清单(22 个文件)

文件
实现 src/turso-driver.tssrc/remote-transport.tssrc/index.ts
测试工具 src/libsql-sqlite-stub.testkit.ts
spec src/spec/turso.zod.ts
测试(15 个文件 / 538 条) src/turso-driver.test.tssrc/spec/turso.test.tssrc/turso-temporal-conformance.test.tssrc/turso-remote-temporal-conformance.test.tssrc/date-bucket-parity.test.tssrc/remote-read-coercion.test.tssrc/remote-transport-{bare-date-routing,boolean-identity,comparand-refusal,not-operator,null-comparand-refusal,null-where,text-predicates,top-level-where,unknown-select}.test.ts
其他 CHANGELOG.mdREADME.mdpackage.jsontsconfig.jsonLICENSE

⛔ 未迁入(留 cloud)

  • src/multi-tenant.ts + src/multi-tenant.test.ts —— 维护者决策 2,按租户路由是云产品差异化能力
  • src/vector-poc.test.ts —— 维护者决策 3,已核实与驱动零耦合
  • src/spec/turso-multi-tenant.zod.ts + src/spec/turso-multi-tenant.test.ts —— 已裁定 A:不迁入(PM 2026-08-05;维护者可否决)。依据与实测见文末。

3. 迁移适配(逐条)

为什么
package.json version 6.9.0(cloud 版本线) 17.0.0-rc.2 对齐本仓 fixed 组;check:changeset-fixed 要求公开包全部入组
publishConfig.access restricted public 维护者决策 1
repository objectstack-ai/cloud / packages/driver-turso objectstack-ai/objectstack / packages/drivers/driver-turso 随仓随目录
三条 link:../../../objectstack/... link: workspace:* 照抄兄弟 driver 包惯例
nanoid ^5.1.11 ^6.0.0 单一 lockfile 里对齐兄弟 driver(driver-sql / -mongodb / -sqlite-wasm 全是 ^6.0.0);nanoid 具名导出两个大版本都有
better-sqlite3(peer + dev) ^12.x ^13.0.2 同上,driver-sql 是 ^13.0.2onlyBuiltDependencies 里只能有一份
@types/node / vitest ^25.9.1 / ^4.1.7 ^26.1.2 / ^4.1.10 同上
engines.node >=18.0.0 >=22.0.0 兄弟包一致
files ["dist","README.md"] CHANGELOG.md check:published-files 的 COMPLETE 不变量强制要求
scripts tsup / 无 typecheck tsup --config ../../../tsup.config.ts + typecheck: tsc --noEmit 兄弟包惯例;check:type-check-coverage 要求新包到场即覆盖
tsconfig.json extends ../../tsconfig.jsonexclude**/*.test.ts extends ../../../tsconfig.json不排除测试 深度变了;AGENTS.md 明令不得把测试排除出 tsc --noEmit。实测不需要任何 TEST_DEBT —— 含测试的全量 typecheck 直接绿
包内 tsup.config.ts 有(与仓库根一字不差) 删除 兄弟包都用根配置
LICENSE cloud 的 BSL-1.1 文本 Apache-2.0(照抄 driver-sql) 维护者决策 1。⚠️ 顺带一说:cloud 那个包的 package.json 写着 Apache-2.0LICENSE 文件是 BSL-1.1,两者本来就不一致 —— 那是 cloud 侧的事,本 PR 不碰
src/index.ts 导出 createMultiTenantRouter / MultiTenantConfig / MultiTenantRouter / 多租户 schema 移除这四项导出 对应文件不迁入(决策 2)的机械后果
README.md 通篇讲 multi-tenant router 用法 该节改成"本包不提供,是 cloud 的能力";能力矩阵去掉 Multi-Tenant Routing 行 同上 —— ⛔ 不广告本包不交付的能力

4. 全仓路径清扫

git grep -n 'packages/plugins/driver' 的每一处命中都已处理:

已更新(活指针)pnpm-workspace.yaml(新增 packages/drivers/* glob)、scripts/check-driver-conformance.mjsDRIVERS_DIR + 三处注释)、scripts/adr-anchors.json(3 条,check:adr-anchors 会验)、packages/spec/liveness/{field,object,query}.json实测 11 处,与立单读数一致)、.github/workflows/ci.yml(capability 包遍历循环 —— 立单说 :866,当前是 :962)、.github/workflows/lint.yml(嵌套包说明 —— 立单说 :424,当前是 :603)、四个 driver 的 package.jsonREADME.mdARCHITECTURE.mdcontent/docs/plugins/packages.mdxcontent/docs/protocol/objectql/{index,query-syntax}.mdxexamples/app-crm/README.mdexamples/app-showcase/test/external-datasource.test.tspackages/rest/src/rest-server.tspackages/drivers/driver-memory/src/persistence/persistence.test.ts、五个 ADR 正文里的路径串、docs/plans/external-datasource-federation-impl.md.claude/skills/pm-dispatch/SKILL.mddomain:drivers 文件面)。

合入 main 后又补一处:packages/services/service-analytics/src/like-pattern.ts(详见文末「合入 main」段)。

turbo.json、vitest workspace 配置里没有 driver 路径(已核,无需改)。

⛔ 故意保留(历史记录)

  • CHANGELOG.md(含 :2053 记载 turso 当年迁出的那条)、packages/*/CHANGELOG.md.changeset/ 既有条目 —— 历史,一律不改
  • RELEASE_NOTES.md —— 已发布的版本记录
  • docs/audits/2026-06-*.md(3 处)—— 带日期的证据快照,"当时读数"就是它的价值
  • docs/design/driver-turso.md:469 —— Status: Proposal 的设计提案(2026-02-15),描述的是一个从未落地的包结构(turso-schema-driver.tsquery-compiler.ts 之类都不存在)。它是提案,不是活指针
  • .changeset/date-bucket-parity-gate.md:34 里的 "cloud's driver-turso" —— 别人 PR 的待发布 changeset,不动他人在飞文件

5. 两处被本次迁移"证伪"的陈述(真话修复,行为零改动)

迁移让下面这些话变成假的,所以改的是说法,不是行为:

  • packages/cli/src/utils/storage-driver.ts —— UnsupportedDriverError 的信息原文说 turso "ships with the ObjectStack cloud / enterprise distribution, not the open-core CLI"。这句现在是假的。改成"不是 CLI 从 URL 构造的 driver,请显式注册"。⛔ 抛错行为一字未改libsql:// 依然响亮拒收、依然 exit 1。
  • content/docs/data-modeling/drivers.mdx / deployment/self-hosting.mdx / deployment/environment-variables.mdx / getting-started/glossary.mdx —— "开源框架不支持 Turso / 那个 driver 在 Cloud" 改成"URL 不推断,需显式注册"。结论没变(今天 libsql:// 依然不通),变的是理由。
  • docs/adr/0119-...md:31 有一句 "There is no Turso driver here"。ADR 是决策记录,⛔ 不改原文;加了一条带日期的编者注说明前提已变,并点明该 ADR 的决策不受影响(Turso extends SqlDriver,继承同一套 beginTransaction/commit/rollback)。如果认为连编者注都不该加,说一声我撤掉。

6. conformance gate:22 covered + 3 measured DEBT

driver conformance matrix (5 drivers x 5 case-sets)

  driver              FILTER_LOGIC  TEMPORAL  TEMPORAL_TIME  PAGINATION  PAGINATION_UNORDERED
  driver-memory       ok            ok        ok             ok          ok
  driver-mongodb      ok            ok        ok             ok          ok
  driver-sql          ok            ok        ok             ok          ok
  driver-sqlite-wasm  ok            ok        ok             ok          ok
  driver-turso        DEBT          ok        ok             DEBT        DEBT

check-driver-conformance: OK — 22 covered cell(s), 3 in the DEBT ledger, 0 exempt.

turso 落盘即入矩阵(gate 从磁盘发现,本来就该如此)。TEMPORAL 两格真绿:local 与 remote 双面套件都驱动共享 case-set。另外三格按 gate 自己写明的规则记 measured DEBT —— ⛔ 没有为凑绿动过任何判定逻辑DRIVERS_DIR 常量与三处注释是路径跟随,LEDGER 从空数组变成三条实测条目,判定函数一行未改)。

记 DEBT 而非 EXEMPT 的理由写进了 ledger:remote 传输不走 Knexremote-transport.ts 自带 buildWhereSQL(组合子嵌套、算子词表、比较值拒收)和自己的 ORDER BY/LIMIT/OFFSET —— 这是独立的第 N 个后端,正是 #3774 / #4363 设这些共享 case-set 要压住的东西。"继承所以没问题"恰恰是这些套件存在来证伪的假设(driver-sqlite-wasm 当年也是这个理由记的 DEBT,最后是用套件清掉的)。补齐跟踪在 #5590

covered 从 20 → 22,未低于现值。


cloud 侧的预期断裂(方案内状态)

A 合并、B 未落地这段窗口里,cloud 会断 —— 这是维护者裁定方案的预期内状态,不是回归:

Phase B 在本 PR 合并后紧随派发,⛔ 本 PR 不碰 cloud 一个字节。


验证(全部真实输出)

pnpm install(lockfile 重生)

Done in 1m 22s using pnpm v10.31.0
# @libsql/client@0.17.4 + libsql@0.5.29 等首次进入 lockfile;pnpm-lock.yaml +348 / -159

五个 driver 包测试

packages/drivers/driver-turso       Test Files  15 passed (15)     Tests  538 passed (538)
packages/drivers/driver-memory      Test Files  17 passed (17)     Tests  512 passed (512)
packages/drivers/driver-sql         Test Files  63 passed | 4 skipped (67)   Tests  855 passed | 44 skipped (899)
packages/drivers/driver-sqlite-wasm Test Files  18 passed (18)     Tests  250 passed (250)
packages/drivers/driver-mongodb     Test Files  10 passed | 5 skipped (15)   Tests  202 passed | 133 skipped (335)

#5538 的 mongod 门(默认关,7 条响亮 SKIP、零下载) —— 平移后行为不变:

[driver-mongodb] SKIP boolean identity — needs a real mongod, ... Set OS_TEST_MONGODB_MEMORY_SERVER_ENABLED=1 to run it.
[driver-mongodb] SKIP MongoDBDriver — ...
[driver-mongodb] SKIP datetime-storage — ...
[driver-mongodb] SKIP pagination conformance — ...
[driver-mongodb] SKIP temporal conformance — ...
[driver-mongodb] SKIP filter logic conformance — ...
[driver-mongodb] SKIP findOne query-execution — ...

turso 测试 hermetic —— 15 个文件全部走包内 libsql-sqlite-stub.testkit.ts 的 sqlite stub 或 :memory:不需要网络、不需要凭据、无需任何 opt-in 门,默认 CI 直接跑。

全仓 typecheck(含新的嵌套 glob)

$ pnpm exec turbo run typecheck --filter='./packages/*' --filter='./packages/*/*' --concurrency=2
 Tasks:    119 successful, 119 total

仓库级守卫

check-driver-conformance: OK — 22 covered cell(s), 3 in the DEBT ledger, 0 exempt.
OK  self-test: detects driven / unused / re-declared fixtures, discovers both axes, and holds the dead-root hard error

check-adr-anchors: OK (29 anchored file(s), every governing ADR still referenced).
✓ check:published-files — 70 publishable package(s) of 78 workspace member(s) declare a `files` whitelist ...
check-type-check-coverage: OK — 63/78 workspace packages type-checked (plus the root), 15 in the DEBT ledger, 1 exempt.
✓ .changeset/config.json "fixed" group is in sync with 70 public workspace packages.
✓ doc authoring guard: 362 files clean — no bare metadata literals.
check-nul-bytes: OK (scanned 5549 tracked text file(s); ... no raw ASCII control bytes).

liveness evidence 路径守卫 —— 反向验证(结果与预设方向不同,如实记)

packages/spec/liveness/*.json 的是 pnpm --filter @objectstack/spec check:livenessscripts/liveness/check-liveness.mtscheckEvidence)。改完后:

evidence paths: 330 resolved against this checkout, 101 attributed to another repo (objectui / cloud — not resolvable here).
✓ every governed-type property at the walk's one-level granularity is classified, ...

反向验证:把 query.json 的 5 处路径改回 packages/plugins/driver-sql,gate 确实按名指出每一条:

⚠ 5 'live' entr(ies) cite a missing file:
    query/fields → packages/plugins/driver-sql/src/sql-driver.ts
    query/where → packages/plugins/driver-sql/src/sql-driver.ts
    query/orderBy → packages/plugins/driver-sql/src/sql-driver.ts
    query/limit → packages/plugins/driver-sql/src/sql-driver.ts
    query/offset → packages/plugins/driver-sql/src/sql-driver.ts

但它是 警告,不是 ,退出码两种情况下都是 0。 派发词预设的是"路径失效即判红"—— 实测没有判红,只是响亮地说了出来。证据链确实会断,只是今天没有 gate 挡着;如实记在这里而不是让下一个人踩。(顺带一提:那行摘要里的 "330 resolved" 统计的是 local 路径总数而非解析成功数 —— 改坏 5 条之后它仍然是 330。)

其余: 变更文件 eslint 全绿;check:regen-pending 无输出(干净)。

⚠️ 一处与本 PR 无关的既有红packages/clidoctor-ledger-read-failure.test.ts 整块 7 条在 origin/main 上就是红的。已证伪因果 —— 把本 PR 碰过的三个 CLI 文件 git checkout origin/main -- 回去再跑,7 条依旧全红,一条未变。已另立 #5612


合入 main(73580e701)—— 一处「干净合并、联合出错」

git merge origin/main 零冲突,lockfile / workspace glob / conformance gate 三处均未被动。rename 检测工作正常:main 对 sql-driver.ts 的改动(#5489 / #5567)自动落到了 packages/drivers/driver-sql/src/sql-driver.ts

但按 AGENTS.md §10「干净的合并不等于可用的合并」复查后抓到一处:main 侧 #5567 新增的 packages/services/service-analytics/src/like-pattern.ts,其头注释指向 packages/plugins/driver-sql/src/sql-driver.ts —— 前 #4645 的路径。文本上不冲突(文件在 main 上是新增的,改名在本分支上),所以 git 一声不吭;而那句交叉引用正是这个"第二实现"存在理由的锚点,指到空处就废了。已在 7f3834198 修正为 packages/drivers/driver-sql/...

合并后收缩验证集重跑(全部真实输出):

$ pnpm install                    → Done in 7.6s(lockfile 零 diff)
$ turbo build(五个 driver 的依赖闭包 + cli/service-analytics 闭包)→ 33 + 53 successful

五个 driver 包测试(计数与合并前完全一致)
  driver-turso        Test Files  15 passed (15)   Tests  538 passed (538)
  driver-memory       Test Files  17 passed (17)   Tests  512 passed (512)
  driver-sql          Test Files  63 passed | 4 skipped (67)   Tests  855 passed | 44 skipped (899)
  driver-sqlite-wasm  Test Files  18 passed (18)   Tests  250 passed (250)
  driver-mongodb      Test Files  10 passed | 5 skipped (15)   Tests  202 passed | 133 skipped (335)
                      (mongod 门仍是 7 条响亮 SKIP、零下载)

service-analytics(我改的那个文件所在包)  Test Files  51 passed (51)   Tests  854 passed (854)

$ node scripts/check-driver-conformance.mjs
  check-driver-conformance: OK — 22 covered cell(s), 3 in the DEBT ledger, 0 exempt.
$ node scripts/check-driver-conformance.mjs --self-test
  OK  self-test: detects driven / unused / re-declared fixtures, discovers both axes, and holds the dead-root hard error

$ node scripts/check-changeset-fixed.mjs
  ✓ .changeset/config.json "fixed" group is in sync with 70 public workspace packages.
$ node scripts/check-nul-bytes.mjs
  check-nul-bytes: OK (scanned 5561 tracked text file(s); ... no raw ASCII control bytes).
$ pnpm --filter @objectstack/spec check:liveness
  evidence paths: 330 resolved against this checkout, 101 attributed to another repo
  ✓ every governed-type property ... all bound high-risk proofs resolve.
  (无 "cite a missing file" 警告)

$ pnpm --filter {五个 driver} --filter @objectstack/cli typecheck   → 全部 Done
$ pnpm check:type-check-coverage / check:published-files / check:adr-anchors / check:regen-pending → 全绿
$ eslint packages/services/service-analytics/src/like-pattern.ts   → 0

一处合并副产物已剔除:本地跑 spec 构建会让 gen:schemapackages/spec/authorable-surface.base.jsonbaseRev 重锚到当前 main tip。那是 authorable-surface 删除门的锚点,不该由一个功能 PR 顺手重锚 —— 已 git checkout 还原,本 PR 不含该文件。


边界裁定:多租户 schema 留 cloud(已裁定 A —— PM 2026-08-05,维护者可否决)

派发词写的是"⛔ 剔除 multi-tenant.tsmulti-tenant.test.tsvector-poc.test.ts"三个文件,issue 正文的迁移清单里 spec/turso*.{test,zod}.ts 这个 glob 则会把 spec/turso-multi-tenant.{zod,test}.ts 一起带走。结论:不带走(A 案),三条依据:

  1. 它就是多租户能力的声明面。决策 2 划的是「多租户边界留 cloud」,router 的实现留下、它的配置 schema 却迁到开源仓,边界会横穿一个能力。
  2. 迁过来会变成"declared ≠ enforced"TursoMultiTenantConfigSchema / TenantResolverStrategySchema / TursoGroupSchema / TenantDatabaseLifecycleSchema 四个 schema + 四个类型会成为本包的公开 API 面,而实现(createMultiTenantRouter)不在包里 —— 这正是 Prime Directive chore: version packages #10 说的"不广告运行时不交付的能力"。
  3. 实测它零消费git grep 全 cloud,除了 index.ts 的 barrel 再导出之外没有任何 importmulti-tenant.ts 自己都不用它(它有自己的 MultiTenantConfig TS interface,只 import ./turso-driver.js)。一个零消费的声明面,按启动期"能力扩张要有真实业务拉力"的口径,不该借这次迁移进入开源公共契约。

代价也不对称:现在不迁,将来要迁只是复制两个文件;现在迁了要撤,就是公开包的 breaking API 移除,得过 api-surface gate。而且 #4645 评论里已经建议 Phase B 把 cloud 残包改名成 tenant-router —— schema 跟着 router 走,那个包才是自洽的。

维护者否决窗口保留:若认为应当按 glob 字面迁走这两个文件,说一声,一条 commit 的事。


🤖 Generated with Claude Code

https://claude.ai/code/session_01WyvqvKMG6asi9aXjKE6xtx

…aDriver packages under packages/drivers/ (#4645)

Phase A of the maintainer-ruled two-repo migration (objectstack half).

- git mv packages/plugins/driver-{memory,mongodb,sql,sqlite-wasm} -> packages/drivers/*
  (content unchanged; only repository.directory follows the move)
- new packages/drivers/driver-turso, migrated from objectstack-ai/cloud @ bc372e3b,
  published Apache-2.0 / access: public. multi-tenant routing and vector-poc stay in cloud.
- pnpm-workspace glob, check-driver-conformance DRIVERS_DIR, both CI workflows,
  liveness evidence paths, adr-anchors, docs and source comments follow the move
- driver-turso enters the conformance matrix with 3 measured DEBT cells (#5590)
- CLI turso refusal message no longer claims the package ships elsewhere (#5602)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WyvqvKMG6asi9aXjKE6xtx
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 5, 2026 9:21pm

Request Review

…at packages/drivers/driver-sql (#4645)

`like-pattern.ts` arrived with origin/main (#5567) naming
`packages/plugins/driver-sql/src/sql-driver.ts` — the pre-#4645 path. The merge
was textually clean because the file is new on main and the move is on this
branch, which is the jointly-wrong shape AGENTS.md §10 warns about: nothing
conflicts, and the cross-reference the header leans on lands nowhere.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WyvqvKMG6asi9aXjKE6xtx
@github-actions github-actions Bot added documentation Improvements or additions to documentation ci/cd dependencies Pull requests that update a dependency file tests tooling labels Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 9 package(s): @objectstack/cli, @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/driver-turso, @objectstack/rest, @objectstack/service-analytics, @objectstack/spec.

121 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/connect-mcp.mdx (via @objectstack/rest)
  • content/docs/ai/skills-reference.mdx (via packages/cli, @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/data-api.mdx (via @objectstack/service-analytics)
  • content/docs/api/data-flow.mdx (via @objectstack/cli)
  • content/docs/api/environment-routing.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/rest, @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/rest, @objectstack/service-analytics, @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/cli, packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/driver-turso, @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/backup-restore.mdx (via @objectstack/cli)
  • content/docs/deployment/cli.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/deployment/environment-variables.mdx (via @objectstack/driver-turso)
  • content/docs/deployment/self-hosting.mdx (via @objectstack/cli, @objectstack/driver-turso)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via packages/cli, @objectstack/spec)
  • content/docs/deployment/vercel.mdx (via @objectstack/driver-memory)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/glossary.mdx (via @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/driver-turso)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/cli)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/cli, packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/service-analytics, @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authentication.mdx (via @objectstack/cli, @objectstack/driver-memory, @objectstack/rest)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/anatomy.mdx (via @objectstack/driver-sql)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/cli, @objectstack/driver-memory, @objectstack/rest, @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/cli, @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/driver-turso, @objectstack/rest, @objectstack/service-analytics, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/rest, @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via packages/rest, @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/driver-sql, @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/driver-sql, @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/cli)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/cli, @objectstack/driver-memory, @objectstack/driver-mongodb, @objectstack/driver-sql, @objectstack/driver-sqlite-wasm, @objectstack/rest, @objectstack/service-analytics, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/rest, @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/cli, @objectstack/rest, @objectstack/service-analytics, @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added the size/m label Aug 5, 2026
claude added 2 commits August 5, 2026 21:06
… the migrated tests (#4645)

The 15 turso test files arrived from cloud, which predates this repo's
`query-options/no-any-erasure` rule (#5600, landed on main after the first
merge), and added 52 sites — test surface 267 -> 319. Every one is inside
`packages/drivers/driver-turso/src/*.test.ts`; nothing outside turso moved.

Both dispositions the rule names, chosen per site, with no assertion touched:

- 14 sites TYPED. Ordinary on-contract reads whose only defect was the missing
  required `QueryAST.object` key (`driver.count('users', { where: { age: 17 } })`,
  the TEMPORAL_CASES/TEMPORAL_TIME_CASES conformance reads, and the `$not`/`$or`
  spellings the transport is asserted to ANSWER). Declaring `object` is what
  driver-memory's conformance suite already does, and it puts `where` back under
  tsc.
- 38 sites `as unknown as QueryAST`. Deliberately off-contract input: values
  flowing through the suites' `unknown`-typed helpers (`compile`, `refusalOf`,
  `ids`) and inline literals whose whole point is refusal — `where: 42`, `[]`,
  `''`, a class instance, bare AST arrays, `{ $or: [null] }`, `{ $not: null }`,
  non-boolean `$null` comparands. These assert the transport REJECTS them, so
  the type must be bypassed by name rather than erased.

Baseline untouched: 267 is met, not raised.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WyvqvKMG6asi9aXjKE6xtx
@os-zhuang
os-zhuang marked this pull request as ready for review August 5, 2026 21:38
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit 06ba036 Aug 5, 2026
27 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4645-drivers-dir-turso-migration branch August 5, 2026 21:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants