Repository navigation
Commit f3b16fc
Fixes #21094
Clause-②: no
Takes the 2026-10 production-dependency group that Dependabot opened as
#21029 (closed in favour of this card), without the better-auth family
and without `next`. Maintainer ruling, verbatim:
> 按你的推荐:关掉21029立卡,better-auth先放着,21024授权你落地
## What lands
- **43 manifests, 64 range moves.** The 63 range moves #21029 made
(diffed from its merge base `9b0de7de73` to its head `c0b7dd923e`) were
re-applied one line at a time onto current `main`. The 64th is the `tsx`
devDependency #21160 added to
`packages/drivers/driver-turso/package.json`, lifted from `^4.23.12` to
`^4.23.15` after #21160 was merged in. Each move matched the exact old
spelling or the script refused. Excluded: `apps/docs/package.json`
(`next` belongs to #21055 / #21083) and the five better-auth family
lines in `packages/plugins/plugin-auth/package.json`, which stay at
`1.7.3`. `pnpm-workspace.yaml` is not touched. Check, taken before the
#21160 merge: the sorted `-`/`+` lines of this branch's manifest diff
equal #21029's lines minus those exclusions (`diff` exit 0, 126 lines).
- **`pnpm-lock.yaml`**, regenerated with the tooling in three steps
(pnpm 10.31.0, the `packageManager` pin), never by hand:
1. `pnpm install --lockfile-only`, starting from main's lockfile.
2. `pnpm --filter @objectstack/plugin-hono-server --filter
@objectstack/plugin-auth --filter @objectstack/hono update
--lockfile-only --no-save hono`. Step 1 left `hono` at 4.13.7, below the
`^4.13.9` that `plugin-hono-server` now publishes. The workspace
override for `hono` (selector below 5.0.0) rewrites every declaration to
`^4.13.5`, which 4.13.7 still satisfies, so lockfile inertia kept the
old version. CI would have certified 4.13.7 while a downstream install
gets 4.13.12. That is the declared-versus-tested split the card names
for better-auth. Step 2 moves the single `hono` copy to 4.13.12 without
editing the override or any manifest. An unfiltered `pnpm update -r` was
tried and discarded: it also dropped `knex`'s `mysql2` / `pg` /
`tedious` peer links in two importers.
3. After #21160 landed: merge `main` (`e35c40a52`), lift driver-turso's
new `tsx` line, and run `pnpm install --lockfile-only` again.
- The result is a fixed point: a second `pnpm install --lockfile-only`
leaves it byte-identical, and `pnpm install --frozen-lockfile` passes.
Lockfile blob `30ba2147`. The resolved set is unchanged from the set the
OSV scan below covered: 0 names differ.
- **`packages/drivers/driver-turso/src/**`**: the item-4 restamp, 21
lines in 7 files (below).
- **`packages/spec/src/data/driver/common.zod.ts` and
`driver-credential-refusal.test.ts`**: the `@libsql/core` version label
is restamped from 0.17.4 to 0.18.0. The TSDoc of
`CREDENTIAL_URL_QUERY_PARAMS` says it was measured "in the versions
pinned by this tree", so leaving 0.17.4 would have made it false. The
behaviour was re-measured identical on the installed 0.18.0:
`?authToken=` overrides the config token, `auth%54oken` is decoded,
`AuthToken` and `token` give `URL_PARAM_NOT_SUPPORTED`, and the control
without a query keeps the config token.
- **`.changeset/21094-prod-deps-group.md`**: `patch` for the 19
published packages whose `dependencies` range moves. The list was
re-derived from this diff and matches the PM correction on the card,
`plugin-auth` included (`@noble/hashes`, `jose`).
## Resolved versions against the merge base
Every changed `name@version` pair in the `packages:` section, compared
with `main` at `e35c40a52`: 25 names change. **DOWN: 0.**
| package | merge base | this branch |
|:--|:--|:--|
| `@libsql/client` / `@libsql/core` | 0.17.4 | 0.18.0 |
| `zod` | 4.6.1 | 4.6.5 (4.6.1 kept by `apps/docs` only) |
| `@modelcontextprotocol/sdk` | 1.30.0 | 1.31.0 |
| `hono` | 4.13.7 | 4.13.12 |
| `mongodb` | 7.5.0 | 7.7.0 (7.5.0 kept by `mongodb-memory-server-core`
only) |
| `jose` | 6.2.7, 6.2.8 | 6.2.12 |
| `@noble/hashes` | 2.3.0 | 2.4.0 |
| `@noble/ciphers` | 2.3.0 | 2.4.0 (2.3.0 kept by better-auth 1.7.3
only) |
| `react` / `react-dom` / `@types/react` / `@types/react-dom` | 19.2.x |
19.3.0 (19.2.x kept by `apps/docs` only) |
| `tsx` | 4.23.12 | 4.23.15 |
| `yaml` | 2.9.0 | 2.9.1 (2.9.0 kept by the `apps/docs` fumadocs tree
only) |
| `chalk` | 6.0.0 | 6.0.1 |
| `sql.js` | 1.14.1 | 1.14.2 |
| `pinyin-pro` | 3.29.1 | 3.29.4 |
| deduped onto a newer copy already present | `@hono/node-server`
2.0.12, `ws` 8.21.1, `@types/ws` 8.18.1, `eventsource-parser` 3.1.0 |
removed (2.1.1, 8.22.0, 8.18.2, 3.1.1 stay) |
| new transitive copies beside the old ones | none | `bson` 7.3.3 and
`@mongodb-js/saslprep` 1.5.5 (with `mongodb` 7.7.0), `scheduler` 0.28.0
(with `react-dom` 19.3.0) |
`nodemailer` stays at **10.0.13**, main's version and at least the
required 10.0.12. Dependabot's regeneration had moved it down to
10.0.11.
## Item 4: `@libsql/client` lifted to `^0.18.0`, because the premise
holds
The premise was measured before any driver edit, three ways.
1. **Package diff.** `npm pack` of both releases. `@libsql/core` 0.17.4
and 0.18.0 differ only in `package.json` (the version). `@libsql/client`
differs only in `lib-esm/sqlite3.js`, `lib-cjs/sqlite3.js`,
`lib-esm/sqlite3.d.ts` and `package.json`. The change is a connection
pool for the local `file:` client. `http.js`, `ws.js` and `node.js` are
byte-identical. Installed side by side, `@libsql/hrana-client` 0.10.0
and native `libsql` 0.5.29 (with `@libsql/linux-x64-gnu`) are
byte-identical too.
2. **Executed probe, same script against both installs.** Output is
identical except for the version strings and one count: `syncUrl`
occurrences in `sqlite3.js` go from 3 to 4 (the new pool-size line).
3. **The driver's own suite.** At base with 0.17.4: 81 files, 2210
passed, 33 skipped. With 0.18.0, before the restamp: 2209 passed, 1
failed, 33 skipped. Per-test outcomes are identical except the version
pin (`expected '0.18.0' to be '0.17.4'`). After the restamp: 2210
passed, 33 skipped. At `0f87e8488`, with #21160's tests merged in: 2218
passed, 33 skipped, 0 failed.
| site (at base) | claim | 0.18.0 reading | verdict |
|:--|:--|:--|:--|
| `turso-authtoken-url-channel.test.ts:17-18` | client / core / native
versions, range | client 0.18.0, core 0.18.0, native `libsql` 0.5.29;
range now `^0.18.0`. Answers 1-4 (live wire, child-process replica
endpoint) pass, 7/7 non-pin cases, as 8/8 did on 0.17.4 | held,
restamped |
| `turso-authtoken-url-channel.test.ts:281` | version pin | `0.18.0` |
pin moved |
| `turso-driver-remote-url-replica-refusal.test.ts:28`,
`turso-driver.ts:1288`, `:1384` (message) | no embedded replica for a
remote url | `syncUrl` lines: `http.js` 0, `ws.js` 0, control
`authToken` lines 6 / 6. `https` and `ws` clients' `sync()` reject
`SYNC_NOT_SUPPORTED`. `:memory:` + `syncUrl` throws `URL_INVALID`
("Embedded replica must use file for local db"). File 27/27 on both
versions | held |
| `turso-driver-timeout.test.ts:9`, `turso-driver.ts:152` | HTTP arm
rides `Config.fetch`; replica `sync()` is native | `http.js` (one
`config.fetch` site) and hrana-client byte-identical. Timeout file 5/5,
supplied-client refusal file 13/13 on both | held |
| `turso-driver.ts:871` | `Config.timeout` is the busy timeout; "remote
clients ignore it" | core `api.d.ts` docblock byte-identical | held |
| `turso-driver-unrecognised-url-refusal.test.ts:26`,
`turso-driver.ts:1313`, `:1417` (message) | refusals of urls the client
rejects | `URL_INVALID` for `./data/app.db`, `data/app.db`,
`/abs/app.db`, `:MEMORY:`, empty, `libsql:host` (bare paths "not in a
valid format"). `URL_SCHEME_NOT_SUPPORTED` for `sqlite:`, `memory://`,
`C:\data\app.db`. File 42/42 on both | held |
| `turso-driver-uppercase-ws-scheme-timeout-refusal.test.ts:15`, `:26`,
`turso-driver.ts:932` | `expandConfig` lowercases the scheme before the
switch | `WSS://…` gives `wss`, `Ws://…` gives `ws`, control
`LIBSQL://…` gives `https`. `_createClient(expandConfig(config, true))`
present (1 hit). File 20/20 on both | held |
| `turso-driver-ws-timeout-refusal.test.ts:10`, `turso-driver.ts:963`,
`:1001` (message) | the WS client takes no `fetch` and no timeout |
`ws.js`: `fetch` 0, `timeout` 0. hrana `ws/*.js` + `index.js` `timeout`
0, control `fetch` over `http/*.js` 15. File 11/11 on both | held |
| `turso-driver.ts:1061` (message) | a built client's transport cannot
be re-seamed | `config.fetch` is read once, inside `_createClient` in
`http.js` (byte-identical) | held |
| `turso-driver.ts:1212` | the client folds scheme case and opens each
spelling | `FILE:./x.db` gives `file`, `Wss://` gives `wss`, `LIBSQL://`
gives `https`. `createClient` opens each (`http` / `ws` / `file`) | held
|
| `turso-driver.ts:1244` | `:memory:` expands to `file::memory:`;
`isInMemoryConfig` | `file::memory:`. `true` for `file::memory:` and
`file::memory:?cache=shared`, control `false` for `file:./x.db` | held |
After the edit, `git grep -n -E "0\.17\.[0-9]" --
packages/drivers/driver-turso/src` returns 0 lines (exit 1). The control
is the 23 `0.18.0` occurrences in the same 7 files.
## What #21029 never measured
- **Test Core shard 4's eight unreached packages**, measured at
`cf1d700b`, before the `main` merge: `rest` 250 files, 4728 passed / 248
skipped. `driver-sql` 205 files, 3303 passed / 188 skipped.
`plugin-email` 31 files, 510 passed. `plugin-approvals` 52 files, 804
passed. `plugin-webhooks` 13 files, 160 passed. `trigger-schedule` 8
files, 170 passed. `connector-mcp` 3 files, 23 passed. `client-react` 3
files, 34 passed. Turbo ran 45 of 45 tasks, exit 0.
- **`Lint & Repo Gates` from `check:vendor-export-contract` on**: `pnpm
check:vendor-export-contract` reads `VERDICT: PASS — vendor export
contract (installed workspace), 1 edge(s) verified` (better-auth 1.7.3),
and the `-resolve` variant passes on the registry. The 72 later steps of
that job were not run here. They belong to CI's run on this PR. The
families this diff derives are below.
- **OSV.** `osv-scanner` v2.3.8, built from the Go module proxy because
this container's egress refuses `api.osv.dev`. It ran on the offline npm
database over lockfile blob `70547c67` (its resolved set is identical to
the current `30ba2147`), with the repo's `osv-scanner.toml` loaded: 1388
packages, `No issues found`, exit 0. Positive control: the same lockfile
with `hono` rewritten to 4.12.32 gives exit 1 and 8 advisories on
`hono`, among them GHSA-8j4g-w8fx-2239. CI's online step is the
authoritative reading.
- **`zod` 4.6.5 and `z.properties()`**: `git grep -n -E
"z\.properties\(" -- packages/` returns 0 lines; control `z.object(`,
1825 lines.
- **`mongodb` live suites**: NOT MEASURED. They need a `mongod` download
from `fastdl.mongodb.org`, which this container's egress refuses
(CONNECT 403). The default `driver-mongodb` suite passes: 30 files, 675
passed, 172 skipped (the five opt-in live files).
## Gates and tests
Gate families derived by `node scripts/pm/dispatch-gates.mjs --repo
objectstack-ai/objectstack --commands` (no paths, change set from git)
at HEAD **`0f87e8488`** (54 paths against merge base `e35c40a52`): 117
commands. All 117 exit 0, and so does `pnpm
check:vendor-export-contract`. Exit codes were captured before any pipe.
`--ran` reconciliation: `117 derived, 117 run, 0 NOT-MEASURED, 0 UNRUN`,
a derived zero with an exit code on every line.
Package suites, all exit 0:
- At `cf1d700b`: `driver-mongodb`, `mcp` 32/344, `plugin-hono-server`
27/324, `plugin-auth` 115/2472, `service-settings` 33/584,
`plugin-pinyin-search` 2/21, `driver-sqlite-wasm` 36/675,
`driver-memory` 69/1613, `service-analytics` 155/3526 (10 skipped),
`create-objectstack` 16/247, `@objectstack/hono` 5/122. Also
`@objectstack/cli` `--project unit` 242/3432 and `@objectstack/spec`
`--project local` 591 files / 17368 passed.
- `typecheck`: the 19 moving packages plus `client-react`,
`@objectstack/hono` and `lint`. Turbo ran 80 of 80 tasks.
- At `0f87e8488`, after the #21160 merge and a full rebuild: the
`driver-turso` suite (82 files) gives 2218 passed / 33 skipped / 0
failed. That includes #21160's new tests, run on 0.18.0; its two-process
concurrency test overlapped, with 400 writes and 400 distinct numbers.
`typecheck` passes, and `pnpm install --frozen-lockfile` passes.
## Acceptance notes
- **Duplicate copies left by the exclusions**: `zod` 4.6.1, `react`
19.2.8 and `yaml` 2.9.0 are kept only by the excluded `apps/docs` tree.
`@noble/ciphers` 2.3.0 is kept only by the excluded better-auth 1.7.3.
`mongodb` 7.5.0 is kept only by the test harness
`mongodb-memory-server-core` 11.3.0.
- **libsql 0.18.0's one behaviour change, from reading the code (not
measured):** the local client now pools connections, with one connection
for `:memory:` and for embedded replicas. On a replica, a second
`sync()` therefore waits for the first to release the connection. On
0.17.4 the two ran at once on the same native handle. With `timeout`
set, a sync that outlives the window keeps running natively,
uncancelled, so the next periodic sync queues behind it. No driver
docblock claims either behaviour.
- **The remaining 0.17.4 stamps stay**: outside `CHANGELOG.md`, only
`service-package` `index.ts:192` and `mysql2-tuple.test.ts:172` name
0.17.4 ("Measured on `@libsql/client` 0.17.4"). That is a dated
attestation and stays true; the `result.rows` shape was re-measured
identical on 0.18.0.
- **Environment side effect, nothing committed**: turbo 2.11.5 appends a
managed block to `AGENTS.md` whenever an agent runs a repository-scoped
turbo command. It was restored after each turbo run with `git restore
--source=HEAD --staged --worktree AGENTS.md`. No commit on this branch
touches `AGENTS.md`.
- **Merge-queue ejection and its fix**: #21160 added driver-turso's
`tsx` at 4.23.12 while this branch removes `tsx@4.23.12`. The two
lockfiles merged into one that `pnpm install --frozen-lockfile` refuses.
Fixed by merging `main` at `e35c40a52`, lifting that `tsx` line, and
regenerating the lockfile with pnpm.
---
_Generated by [Claude
Code](https://claude.ai/code/session_018gA1pE6eJtwHhqx72G8U9X)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent d34aa58 commit f3b16fc
54 files changed
Lines changed: 640 additions & 511 deletions
File tree
- .changeset
- examples
- app-showcase
- app-todo
- packages
- adapters/hono
- client-react
- client
- cli
- connectors/connector-mcp
- core
- create-objectstack
- drivers
- driver-memory
- driver-mongodb
- driver-sqlite-wasm
- driver-turso
- src
- lint
- mcp
- metadata-core
- metadata-protocol
- metadata
- objectql
- plugins
- embedder-openai
- knowledge-memory
- knowledge-ragflow
- organizations
- plugin-approvals
- plugin-audit
- plugin-auth
- plugin-dev
- plugin-email
- plugin-hono-server
- plugin-pinyin-search
- plugin-security
- plugin-sharing
- plugin-webhooks
- rest
- runtime
- services
- service-analytics
- service-automation
- service-cluster
- service-knowledge
- service-settings
- service-storage
- spec
- src/data/driver
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | | - | |
| 26 | + | |
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | | - | |
| 39 | + | |
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
230 | 230 | | |
231 | 231 | | |
232 | 232 | | |
233 | | - | |
| 233 | + | |
234 | 234 | | |
235 | 235 | | |
236 | | - | |
| 236 | + | |
237 | 237 | | |
238 | 238 | | |
239 | 239 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | | - | |
| 30 | + | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
113 | | - | |
| 113 | + | |
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
119 | | - | |
120 | | - | |
121 | | - | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | | - | |
32 | | - | |
| 31 | + | |
| 32 | + | |
33 | 33 | | |
34 | | - | |
35 | | - | |
| 34 | + | |
| 35 | + | |
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
| 42 | + | |
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
41 | | - | |
| 41 | + | |
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| |||
0 commit comments