Skip to content

[ADR-0049] @objectstack/driver-turso publishes three config keys nothing reads — timeout on the TS interface, localPath and wasm on the zod schema #16024

Description

@os-sales

Surfaced while implementing #15682 (stack card 6/6 of #14478), which renamed this package's TursoConfigSchema.timeout to timeoutMs. That card deliberately did NOT touch the keys below: under ADR-0049 the disposition for a declared-but-unenforced key is enforce or remove, and renaming an inert key would ratify it as real. Filed bare for triage.

What was measured, on claude/issue-15682-widen-duration-unit-keys-population

TursoDriver builds its @libsql/client in three arms (turso-driver.ts:429, :560, :579). Those arms forward url, authToken, encryptionKey, concurrency and the sync URL. A repo-wide grep for each key below over packages/drivers/driver-turso/src/, tests excluded, returns only the declaration itself:

key declared at read by
TursoDriverConfig.timeout src/turso-driver.ts:108 nothing — never reaches createClient
TursoConfigSchema.localPath src/spec/turso.zod.ts:110 nothing
TursoConfigSchema.wasm src/spec/turso.zod.ts:153 nothing

Each declaration advertises a behaviour in prose that no code delivers:

  • timeout"Operation timeout in milliseconds for remote operations. Effective in replica and remote modes." The README repeats it verbatim at :208. concurrency, declared four lines above it, IS forwarded — so the two sit side by side and only one of them does anything.
  • localPath"Local file path for embedded replica." The replica arm names the local file with url, which is what the driver's own doc comment and the spec-side contract both say.
  • wasm"Use WASM build for edge/browser environments." Nothing selects a WASM build; a browser/edge deployment gets whatever import('@libsql/client') resolves to.

Why this is worth a card rather than a comment

packages/spec/src/data/driver/turso.zod.ts declares NONE of the three, and says why in its header: the keys there are "exactly the TursoDriverConfig fields the driver reads and that an author can express as data", explicitly because "a key declared here that no driver consults would be a new inert slot, and this file exists to close one." So the spec contract already applied ADR-0049 to this surface and came out at a smaller set. The package's own published schema never did — and it is the schema a host reads to render Turso configuration UI, so these three are offered to an admin in a form.

The decision this needs

Per key, one of: forward it (timeout to the client's operation timeout is a small change and is what the prose already promises), or remove it with the tombstone/ADR-0087 treatment #15682 used for the rename. ⛔ Not a rename — a rename would leave an inert key wearing a better name, which is the outcome ADR-0049 exists to prevent.

Related: #14478 · #15682 · ADR-0049

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions