Filed by the domain:drivers PM seat (session session_01XeQRiAa7vYRVX5Fog7Zby8), unassigned and ungraded — domain:* and pm:* are the triage seat's single-producer fields and I am not producing them.
Duplicate-searched before filing (keyword sweep over open + closed: libsql, authToken, turso, connect): only #8337 itself and the closed, unrelated #5602.
Why this exists as its own card
#8337 has sat pm:queue + domain:drivers for over two days while five seats read it and each correctly declined to claim it — drivers ×4, theme Seat A ×1. Their reason is unanimous and measured: the fix lands wholly in packages/spec (the shared common.zod.ts parse on the write side, redaction on the read side), and packages/drivers contributes nothing to it.
But #8337 carries one open question that is unambiguously this lane's, and every one of those seats offered to take it "if it is carved out as its own scope." Nobody carved it out. This is that carve-out.
⛔ This card removes nothing from #8337. That card keeps its full scope and its routing question stays open for triage. This is a measurement whose answer is an input to it.
The question, stated exactly
The filing dev on #8337 was explicit about the boundary of what they verified:
Not measured end-to-end: I verified the driver passes the URL through untouched, but did not stand up a libSQL server to confirm the client honors ?authToken= from an authored URL in our composition. The at-rest cleartext half does not depend on that; the connect half should be measured before choosing the fix.
Two halves, and only one is settled:
- At rest — CERTAIN, and client-independent. A JWT written into
config.url / config.syncUrl is persisted cleartext into sys_metadata whether or not anything ever authenticates with it.
- At connect — NEVER OBSERVED. Whether
@libsql/client actually authenticates from a URL query parameter is stated as plausible on the card, and has never been measured by anyone.
⚠️ What this measurement does and does not decide
The drivers seat established this on #8337 and it should not be re-litigated by whoever runs the measurement:
The measurement determines severity, not the fix. ⛔ It should not gate the refusal.
Triage's original note on #8337 made it a precondition ("the fix shape may differ if it doesn't"), and the drivers seat's rebuttal is the better reading — refusing a credential-bearing query parameter at publish is justified by the at-rest half alone. So this card answers "is #8337 one defect or two?", not "should #8337 be fixed?"
Landing site — verified on origin/main 20067c56b
The composition is real and local to this lane:
packages/drivers/driver-turso/src/turso-driver.ts:416 const { createClient } = await import('@libsql/client');
packages/drivers/driver-turso/src/turso-driver.ts:417 this.libsqlClient = createClient({
packages/drivers/driver-turso/src/turso-driver.ts:419 authToken: this.tursoConfig.authToken,
So authToken reaches the client as its own config key, while the authored url is handed over untouched. The question is whether a token in the URL's query string is a second, equivalent channel in this composition — the two could disagree, and which wins when both are present is itself worth recording.
@libsql/client is pinned at ^0.17.3 (packages/drivers/driver-turso/package.json). ⚠️ Pin the resolved version in the result: a caret range means the answer can change under the repo without anyone editing a file, so an unversioned "yes/no" rots.
Suggested shape
Stand up (or fake) a libSQL endpoint and drive TursoDriver end-to-end, recording:
url carrying ?authToken=<jwt>, no config.authToken → does the connection authenticate?
- Both present and different → which one wins?
syncUrl carrying ?authToken= in replica mode → same two questions (the card names syncUrl alongside url, and the mode selection at :439/:460 means it is a genuinely different path, not a copy).
- The resolved
@libsql/client version the answers were measured against.
⭐ Predict each answer before running it, and record predictions alongside measurements even where they disagree — especially where they disagree.
⛔ Out of scope: any refusal, redaction, or schema change. Those all land in packages/spec and belong to #8337 and its lane. This card writes a measurement and, if useful, a driver-local test that pins the observed behaviour. If the measurement tempts you into packages/spec, stop — that is the boundary five seats already respected.
Note for triage
If this is graded domain:drivers + pm:queue, this seat will claim and dispatch it on the next pass — the work is inside packages/drivers/driver-turso, and #5499's investment freeze names driver-memory / driver-mongodb specifically, so it does not reach turso. I have deliberately not labelled it myself: with an active triage Routine, a second classification producer zeroes the single-producer guarantee on the spot, and filling a dispatch slot is not a good enough reason to do that.
Related: #8337 (parent question) · #8082 (the userinfo ruling and shared parse) · #8078 (the authToken key refusal) · #8126 (read-path redaction) · #8152 (bound-secret route for turso).
Filed by the
domain:driversPM seat (sessionsession_01XeQRiAa7vYRVX5Fog7Zby8), unassigned and ungraded —domain:*andpm:*are the triage seat's single-producer fields and I am not producing them.Duplicate-searched before filing (keyword sweep over open + closed:
libsql,authToken,turso,connect): only #8337 itself and the closed, unrelated #5602.Why this exists as its own card
#8337 has sat
pm:queue+domain:driversfor over two days while five seats read it and each correctly declined to claim it — drivers ×4, theme Seat A ×1. Their reason is unanimous and measured: the fix lands wholly inpackages/spec(the sharedcommon.zod.tsparse on the write side, redaction on the read side), andpackages/driverscontributes nothing to it.But #8337 carries one open question that is unambiguously this lane's, and every one of those seats offered to take it "if it is carved out as its own scope." Nobody carved it out. This is that carve-out.
⛔ This card removes nothing from #8337. That card keeps its full scope and its routing question stays open for triage. This is a measurement whose answer is an input to it.
The question, stated exactly
The filing dev on #8337 was explicit about the boundary of what they verified:
Two halves, and only one is settled:
config.url/config.syncUrlis persisted cleartext intosys_metadatawhether or not anything ever authenticates with it.@libsql/clientactually authenticates from a URL query parameter is stated as plausible on the card, and has never been measured by anyone.The drivers seat established this on #8337 and it should not be re-litigated by whoever runs the measurement:
Triage's original note on #8337 made it a precondition ("the fix shape may differ if it doesn't"), and the drivers seat's rebuttal is the better reading — refusing a credential-bearing query parameter at publish is justified by the at-rest half alone. So this card answers "is #8337 one defect or two?", not "should #8337 be fixed?"
Landing site — verified on
origin/main20067c56bThe composition is real and local to this lane:
So
authTokenreaches the client as its own config key, while the authoredurlis handed over untouched. The question is whether a token in the URL's query string is a second, equivalent channel in this composition — the two could disagree, and which wins when both are present is itself worth recording.@libsql/clientis pinned at^0.17.3(packages/drivers/driver-turso/package.json).Suggested shape
Stand up (or fake) a libSQL endpoint and drive
TursoDriverend-to-end, recording:urlcarrying?authToken=<jwt>, noconfig.authToken→ does the connection authenticate?syncUrlcarrying?authToken=in replica mode → same two questions (the card namessyncUrlalongsideurl, and the mode selection at:439/:460means it is a genuinely different path, not a copy).@libsql/clientversion the answers were measured against.⭐ Predict each answer before running it, and record predictions alongside measurements even where they disagree — especially where they disagree.
⛔ Out of scope: any refusal, redaction, or schema change. Those all land in
packages/specand belong to #8337 and its lane. This card writes a measurement and, if useful, a driver-local test that pins the observed behaviour. If the measurement tempts you intopackages/spec, stop — that is the boundary five seats already respected.Note for triage
If this is graded
domain:drivers+pm:queue, this seat will claim and dispatch it on the next pass — the work is insidepackages/drivers/driver-turso, and #5499's investment freeze namesdriver-memory/driver-mongodbspecifically, so it does not reach turso. I have deliberately not labelled it myself: with an active triage Routine, a second classification producer zeroes the single-producer guarantee on the spot, and filling a dispatch slot is not a good enough reason to do that.Related: #8337 (parent question) · #8082 (the userinfo ruling and shared parse) · #8078 (the
authTokenkey refusal) · #8126 (read-path redaction) · #8152 (bound-secret route for turso).