Skip to content

fix(cli): dispatch OS_DATABASE_DRIVER=memory to the mingo InMemoryDriver (#3276) - #3285

Merged
os-zhuang merged 2 commits into
mainfrom
fix/cli-memory-driver-dispatch
Jul 19, 2026
Merged

fix(cli): dispatch OS_DATABASE_DRIVER=memory to the mingo InMemoryDriver (#3276)#3285
os-zhuang merged 2 commits into
mainfrom
fix/cli-memory-driver-dispatch

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Problem

Fixes#3276.

os dev / os start / os serve all advertise a memory database driver —
--database-driver … | memory (dev.ts:88-90, start.ts:99-100),
OS_DATABASE_DRIVER=memory, and a memory:// URL scheme in the help text — but
serve.ts's driver dispatch had no memory branch. So selecting it silently
fell through to the dev SQLite :memory: default (resolveSqliteDriver
SQLite-in-memory, a different engine), or, in production, registered no
driver at all
. The mingo InMemoryDriver was only ever reached as the last
resort when both native better-sqlite3 and the wasm fallback failed to load.

Declared ≠ enforced — picking memory gave a different engine than intended.

Fix

  • Extract the driver kind-resolution + construction out of serve.ts's inline
    if/else chain into packages/cli/src/utils/storage-driver.ts, mirroring the
    existing utils/telemetry-datasource.ts / utils/plugin-detection.ts pattern,
    so the whole dispatch is unit-testable in isolation (it previously required a
    full HTTP boot to exercise). Net −75 lines in serve.ts.
  • Add the missing memory branch (aliases mingo, in-memory) that builds the
    mingo InMemoryDriver, honored in dev AND production — an explicit operator
    choice is enforced, not silently swapped.
  • Recognize the advertised memory:// / mingo:// URL scheme in
    inferDriverTypeFromUrl, kept deliberately distinct from sqlite's :memory:
    pseudo-file (which stays SQLite's own in-memory mode).
  • Telemetry-datasource provisioning is preserved exactly — keyed on an explicit
    SQLite primary path (sqliteFilePath), never the memory driver nor the dev-default
    :memory: store, matching pre-extraction behavior.

Tests

storage-driver.test.ts (14 cases) covers the full URL→kind mapping, explicit>URL
precedence, and every construction branch. Proven to go red without the fix
(verified by disabling the branch): memorySqlDriver in dev, null in prod.

  • vitest run — new file 14/14; existing serve/dev tests 29/29
  • tsc -p tsconfig.build.json clean
  • eslint clean

Out of scope (flagged separately)

The same "declared ≠ enforced" gap exists for turso/libsql: URLs infer to
driverType = 'turso' but there is no 'turso' dispatch branch and no
driver-turso package, so it also falls through to SQLite. Left for a follow-up
(either implement a turso driver, or stop advertising it).

🤖 Generated with Claude Code

@vercel

vercelBot commented Jul 19, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
specReadyReadyPreview, CommentJul 19, 2026 4:49pm

Request Review

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests tooling size/l labels Jul 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/cli.

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

  • content/docs/ai/skills-reference.mdx(via packages/cli)
  • content/docs/api/client-sdk.mdx(via @objectstack/cli)
  • content/docs/api/data-flow.mdx(via @objectstack/cli)
  • content/docs/api/environment-routing.mdx(via @objectstack/cli)
  • content/docs/api/error-catalog.mdx(via @objectstack/cli)
  • content/docs/automation/hook-bodies.mdx(via packages/cli)
  • content/docs/deployment/backup-restore.mdx(via @objectstack/cli)
  • content/docs/deployment/self-hosting.mdx(via @objectstack/cli)
  • content/docs/getting-started/cli.mdx(via @objectstack/cli)
  • content/docs/getting-started/your-first-project.mdx(via @objectstack/cli)
  • content/docs/kernel/runtime-services/data-service.mdx(via packages/cli)
  • content/docs/kernel/runtime-services/index.mdx(via packages/cli)
  • content/docs/permissions/authentication.mdx(via @objectstack/cli)
  • content/docs/plugins/packages.mdx(via @objectstack/cli)
  • content/docs/protocol/kernel/plugin-spec.mdx(via @objectstack/cli)
  • content/docs/protocol/kernel/realtime-protocol.mdx(via @objectstack/cli)
  • content/docs/releases/implementation-status.mdx(via @objectstack/cli)

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.

os-zhuangand others added 2 commits July 20, 2026 00:08
…ver (#3276)
`os dev` / `os start` / `os serve` all advertise a `memory` database driver
(`--database-driver memory`, `OS_DATABASE_DRIVER=memory`, and a `memory://`
URL scheme), but serve.ts's driver dispatch had no `memory` branch. So
selecting it silently fell through to the dev SQLite `:memory:` default
(SQLite-in-memory — a different engine), or registered no driver at all in
production. Declared ≠ enforced.
Fix + refactor:
- Extract the driver kind-resolution and construction out of serve.ts's
inline if/else chain into utils/storage-driver.ts, mirroring the existing
utils/telemetry-datasource.ts / utils/plugin-detection.ts pattern, so the
whole dispatch is unit-testable in isolation.
- Add the missing `memory` (aliases `mingo`, `in-memory`) branch that builds
the mingo InMemoryDriver, honored in dev AND production.
- Recognize the advertised `memory://` / `mingo://` URL scheme in
inferDriverTypeFromUrl (distinct from sqlite's `:memory:` pseudo-file,
which stays SQLite's own in-memory mode).
- serve.ts telemetry-datasource provisioning behavior is preserved exactly
(keyed on an explicit-sqlite primary path; never the memory driver).
Tests (storage-driver.test.ts) cover the full URL→kind mapping, explicit>URL
precedence, and every construction branch; the `memory` assertions go red
without the new branch (verified: dev→SqlDriver, prod→null).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@xuyushun441-sys
xuyushun441-sysforce-pushed the fix/cli-memory-driver-dispatch branch from e157e0c to d8cfa0bCompareJuly 19, 2026 16:10
@os-zhuang
os-zhuang merged commit da58467 into mainJul 19, 2026
15 of 16 checks passed
@os-zhuang
os-zhuang deleted the fix/cli-memory-driver-dispatch branch July 19, 2026 16:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/lteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

cli: OS_DATABASE_DRIVER=memory is advertised but serve.ts has no dispatch branch (falls through to SQLite)

1 participant

@os-zhuang