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
Surfaced while implementing #15682 (stack card 6/6 of #14478), which renamed this package's
TursoConfigSchema.timeouttotimeoutMs. 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-populationTursoDriverbuilds its@libsql/clientin three arms (turso-driver.ts:429,:560,:579). Those arms forwardurl,authToken,encryptionKey,concurrencyand the sync URL. A repo-wide grep for each key below overpackages/drivers/driver-turso/src/, tests excluded, returns only the declaration itself:TursoDriverConfig.timeoutsrc/turso-driver.ts:108createClientTursoConfigSchema.localPathsrc/spec/turso.zod.ts:110TursoConfigSchema.wasmsrc/spec/turso.zod.ts:153Each 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 withurl, 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 whateverimport('@libsql/client')resolves to.Why this is worth a card rather than a comment
packages/spec/src/data/driver/turso.zod.tsdeclares NONE of the three, and says why in its header: the keys there are "exactly theTursoDriverConfigfields 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 (
timeoutto 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