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
os-zhuang pushed a commit that referenced this pull request Aug 21, 2026
…st (#10813)

`check:published-readme-links` read the docs-site URLs a published README
carries and said nothing about its repo-relative paths. `packages/runtime/README.md`
linked six targets that are not in the tree, and a census across the whole
published population found nine, in four packages. Nothing read them: the
assertions above this one read ABSOLUTE urls, `check:published-readme-exports`
reads fenced import lines, and the lychee lane never sees `packages/**/README.md`.

Adds assertion 5 — a repo-relative destination must name something in the
tree — to the existing gate rather than a second script, so it reuses that
gate's population, extractor and classifier bucket. The gate's own header had
already named this omission ("a different claim, owned by nothing here yet").

Deliberately only the decidable half. Whether a relative href means anything to
a reader on npmjs.com is a separate question: npm renders the README outside the
repo, so EVERY relative link is unresolvable there, including the 101 that are
correct in-tree. Failing them all would be a ruling on link rewriting, not a
scan, and this repo's published READMEs lean on the relative form throughout.
Assertion 5 says GITHUB in its message for that reason.

Vacuity is refused at the population level, never the document level: 18 of the
60 published documents carry no relative link at all, so per-document silence
proves nothing. `run()` throws when the whole scan classifies nothing relative,
the same way it already throws on zero links, and the green line prints the
resolved count so a classifier that stopped recognising the bucket shows up as
a number that fell.

The six runtime targets were each traced to where the content went rather than
deleted: the three MINI_KERNEL_*.md docs were removed from the repo root in
January (d709ecc, 5051 deletions, nothing added) and the kernel reference is
the docs site now; `examples/host/` became app-host, then apps/server, then
apps/objectos, then moved to objectstack-ai/cloud; `examples/msw-react-crud/`
became app-react-crud, then apps/console, and ships as `@object-ui/console`;
`test-mini-kernel.ts` was a root scratch script whose successor is this
package's own 179-file suite under `src/` — which is what the truncated bullet
with the unterminated backtick was reaching for.

The other three packages: `../../plugins/driver-sql` is stale since the driver
moved to `packages/drivers/` (#5618); `plugin-org-scoping`, `service-tenant`
and `service-marketplace` are in no directory of this repo, so those links are
dropped and the names kept as code spans — the spelling those same files
already use for a package they cannot point at in-tree.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wt
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 23, 2026
…st (objectstack-ai#10813) (objectstack-ai#10892)

`check:published-readme-links` read the docs-site URLs a published README
carries and said nothing about its repo-relative paths. `packages/runtime/README.md`
linked six targets that are not in the tree, and a census across the whole
published population found nine, in four packages. Nothing read them: the
assertions above this one read ABSOLUTE urls, `check:published-readme-exports`
reads fenced import lines, and the lychee lane never sees `packages/**/README.md`.

Adds assertion 5 — a repo-relative destination must name something in the
tree — to the existing gate rather than a second script, so it reuses that
gate's population, extractor and classifier bucket. The gate's own header had
already named this omission ("a different claim, owned by nothing here yet").

Deliberately only the decidable half. Whether a relative href means anything to
a reader on npmjs.com is a separate question: npm renders the README outside the
repo, so EVERY relative link is unresolvable there, including the 101 that are
correct in-tree. Failing them all would be a ruling on link rewriting, not a
scan, and this repo's published READMEs lean on the relative form throughout.
Assertion 5 says GITHUB in its message for that reason.

Vacuity is refused at the population level, never the document level: 18 of the
60 published documents carry no relative link at all, so per-document silence
proves nothing. `run()` throws when the whole scan classifies nothing relative,
the same way it already throws on zero links, and the green line prints the
resolved count so a classifier that stopped recognising the bucket shows up as
a number that fell.

The six runtime targets were each traced to where the content went rather than
deleted: the three MINI_KERNEL_*.md docs were removed from the repo root in
January (d709ecc, 5051 deletions, nothing added) and the kernel reference is
the docs site now; `examples/host/` became app-host, then apps/server, then
apps/objectos, then moved to objectstack-ai/cloud; `examples/msw-react-crud/`
became app-react-crud, then apps/console, and ships as `@object-ui/console`;
`test-mini-kernel.ts` was a root scratch script whose successor is this
package's own 179-file suite under `src/` — which is what the truncated bullet
with the unterminated backtick was reaching for.

The other three packages: `../../plugins/driver-sql` is stale since the driver
moved to `packages/drivers/` (objectstack-ai#5618); `plugin-org-scoping`, `service-tenant`
and `service-marketplace` are in no directory of this repo, so those links are
dropped and the names kept as code spans — the spelling those same files
already use for a package they cannot point at in-tree.


Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wt

Co-authored-by: Claude <noreply@anthropic.com>
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