docs(driver-turso): re-anchor the dead tracker citations to the commits that decided them (stage 10 of #20595) - #21546
Conversation
…ts that decided them Comment and docblock prose only, 50 sites on 49 lines in 12 files under packages/drivers/driver-turso/src: every site citing a tracker number that answers 404 now cites the commit in this repository's history that made the decision it describes (13 numbers, 12 distinct commits). Every file keeps its line count; no code token moves. Claude-Session: https://claude.ai/code/session_01DDZNkDVwPQnevTFcYE47H3 Co-authored-by: Claude <noreply@anthropic.com>
The rewritten docblocks reach the published declaration files and the JavaScript output (measured: three builds, head / base text / restored), so the package ships a patch; comment text only. Claude-Session: https://claude.ai/code/session_01DDZNkDVwPQnevTFcYE47H3 Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDZNkDVwPQnevTFcYE47H3 Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 1 package(s): 3 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 2 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 7 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 750df44b24d24efc0234db54eef514015b02f79e && git checkout 750df44b24d24efc0234db54eef514015b02f79e
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 1ac7308d7aadf2c800154afb706d3a3cb0738ddf e89bd10cd80d6729b86b2525fed08f0dc744b9ea && git checkout -B drift-repro 1ac7308d7aadf2c800154afb706d3a3cb0738ddf && git merge --no-ff e89bd10cd80d6729b86b2525fed08f0dc744b9ea
node scripts/docs-audit/affected-docs.mjs --json 1ac7308d7aadf2c800154afb706d3a3cb0738ddf
|
Part of #20595
Clause-②: no
What changed
Stage 10 of the
domain:enginelane of the dead-citation sweep:packages/drivers/driver-turso/**, comment and docblock prose only, per the claim (5965451347). Stages 1 to 9 landed asa7d9768ec,d150c3039,4bf4e7e70,13a24ece2,db0cf2231,85986144c,48fa7a381,c205b6c35andc98a72d69. #20595 stays open: the other half of this lane is the packages this stage does not touch (drivers/driver-mongodb9,formula4,metadata-fs2 on the census after this stage, 15 in all), plus the test-string sites the card carries for a widened stage.Every comment or docblock site in the package that cited a tracker number answering 404 is rewritten in ruling C+D's form C (record
5749154545on #19123): the ADR when one records the decision, otherwise the commit in this repository's history that made it. That is 50 sites on 49 lines in 12 files, covering 13 numbers:src/): the wholeallocated-but-absentpopulation of the gate's own census in this package at the base.turso-driver.ts:2131carries two of them (refactor(spec)!: IDataDriver 的 query 参数改为 DriverQuery,对象名只写一遍 (#5181) #6076 and [finding][drivers] 五个驱动的find/count/…仍声明query: QueryAST,而调用方已可省略object—— 双变让它编译,但声明开始说谎 #6075);src([finding][drivers] 五个驱动的find/count/…仍声明query: QueryAST,而调用方已可省略object—— 双变让它编译,但声明开始说谎 #6075, [finding] driver-sql's SQLite json codec is not round-trip faithful for a string whose content is valid JSON — '123' reads back as a number, and Postgres does not agree #12380, [finding]MongoDBDriver.update()andRemoteTransport.update()fabricate a record for a missing id — a third posture that becomes a semantic violation onceIDataDriver.update()declaresnull(#13878 ruling item 5) #14428, [finding]SqlDriver.update()keeps an explicitPromise[any]while returningnullon a miss — the same published-type mask #14434 removed from driver-memory, inherited by TursoDriver and SqliteWasmDriver #14438, driver-sql:initObjects/registerObjectMetadatastill omitindexesfrom a parameter type they read it through — the shape #4311 fixed fortenancy, one key over #16570, [finding]SqlDriverreads keys off caller objects through(obj as any)at 7 sites while 3 parameter types declare none of them — a class, not a third coincidence (after #4311tenancy, #16570indexes) #16711, [finding] Nine more IDataDriver doors are still masked asanyon the SQL drivers — the #17277 census answered triage's 「is aggregate the only one?」 with NO #17690), and 5 that stand only in test files here (feat(spec): declare the not-found arm on IDataDriver.update() and un-mask driver-memory's published update/upsert types #14434, driver-sql: the $contains MEMBERSHIP spelling on any multi-valued / JSON column is a DATABASE_ERROR 500 on live PostgreSQL (SQLSTATE 42883, operator does not exist: json ~~ text) — it has only ever been executed on SQLite #17590, fix(driver-sql,driver-turso): eight more IDataDriver doors publish their declared return type #17876, [finding] 类型级 pin 家族的 IsAny 探测器看不见嵌套的 any —— 规定红两次的门只红一次,已落地的 #17689 pin 上实测,另有 10 个同族文件未测 #17879, [finding] 落地的 ContainsAny 探测器对**联合类型的门**全盲 —— 它在联合上分配而求值为 boolean,于是回归时那条腿照常绿(含 #17876 自己的 findOne 腿) #17970), which the board and a single read each settle;vitest.config.ts,tsconfig.json,package.json,README.mdandLICENSEcite no dead number.No comment-id citation is dead here: the package's two comment ids, ruling records
5865693155and5861435168(remote-transport.ts:38,:4152to:4153,turso-20444-empty-operator.test.ts:8), both answer 200 (see Census).Anchors: 13 numbers by commit, 0 by ADR, 0 by repository qualifier; 12 distinct shas (#17690 and #17876 share
be5c60291: the squash of PR #17876, whose message opens 「Part of」 #17690). 12 numbers reuse the anchor stage 4 (driver-sql) measured for them;ca3fd4b1a(#14428) is measured here.Only comments changed. Every file keeps its line count (49 lines out, 49 in, plus the changeset), so no line citation into any of them moves. No code token moves (the guard below). All 98 changed lines open with a comment marker. No citation number is added: on every changed line the numbers on the new text are a subset of those on the old (the only numbers on
+lines are #5181, #6210 twice, #6212, #13878 and #20987, each already on its line and each answering 200).A
patchchangeset: all 13 rewritten non-test lines are in the publisheddist(the.d.tskeeps JSDoc on exported members, and esbuild keeps these comments in the JavaScript), anddistis not byte-identical with the base text (see Changeset).H0: the package and its size
The gate's own
node scripts/check-issue-citations.mjs --census --jsonat base31d2255f5(the before run below),allocated-but-absentper remainingdomain:enginepackage:drivers/driver-tursodrivers/driver-mongodbformulametadata-fsmetadata-core,core,metadata-protocol,objectql,metadata,drivers/driver-sql,drivers/driver-memory,drivers/driver-sqlite-wasm,plugins/plugin-pinyin-search,platform-objectsThe lane total goes 29 to 15.
driver-tursois the largest remaining package and reads 14, as at stage 9's head census (99f2cfdf0), so the stage went ahead.Census:
driver-turso, before and afterInstrument (A1). The gate's own
node scripts/check-issue-citations.mjs --census --json, read-only and unchanged. The count is itsallocated-but-absentfindings underpackages/drivers/driver-turso/.allocated-but-absent31d2255f5, run 04:20:17Z to 04:23:32Z841405134, run 04:32:36Z to 04:35:47ZThe whole-repo drop is 14, and the two finding sets differ by exactly the 14 rows of this package, removed; none was added.
resolves(35,495),resolves-as-pull-request(2,388) andcross-repo-unjudged(1,247) did not move.The head's later commits are the changeset and one merge of
main. The census was run a third time at the heade89bd10cd(04:53:10Z to 04:56:16Z, 194 pages, frontier #21544, 19,365 records, newest #21543 before and #21544 after): whole-repo 130,driver-turso0. Against the after run, 5 rows moved line (all inpackages/spec, shifted by the mergedmaincommit48eb9c193), and the finding multiset with line numbers set aside is identical. Itsresolvesreads 35,509, 14 more than above, from the mergedmaincommits outside this package.Supplementary instrument, the whole package. The census reads neither test files nor strings nor files outside
src. A second reading runs the gate's own exportedextractCitations(whole-file and comment-prose projections) over every tracked file in the package (102) and classifies each citation with the gate'sclassifyCitationagainst one board enumerated by the gate'senumerateBoard(194 pages, frontier #21537, 19,358 records, read 04:24:21Z to 04:27:29Z), the same board for both readings. Every one of the 13 numbers was then read on its own over the issues endpoint (04:29:27Z): all 13 answer 404; the numbers that stay on changed lines (#5181, #6210, #6212, #13878, #20987) and the lit controls #15280, #12585 and #6402 answer 200.31d2255f5841405134The citation count drops by 50, the 50 rewritten sites; no respelling stays a citation. The live counts did not move (src comment: 522 resolve, 80 as pull requests, 8 cross-repo; test comment: 609, 75 and 6). A third, raw reading (every
#followed by 2 to 6 digits, whatever surrounds it,CHANGELOG.mdaside) counts 1,558 before and 1,509 after, and the URL-spelled issue links go 7 to 6: also a drop of 50.Comment ids. Every ten-digit run under
packages/drivers/driver-turso(itsCHANGELOG.mdaside) was read: five lines.5861435168(the record of ruling B on #20311) and5865693155(the record of ruling A on #20399) answer 200 (the control5965451347, the claim, answers 200 too).remote-canonical-backfill.ts:357is an epoch-seconds example, not a citation.Per-number table
srccounts census sites,testthe test-comment sites. Every sha matches exactly one commit (git rev-parse --disambiguate, count 1), is an ancestor of the base31d2255f5and oforigin/main(git merge-base --is-ancestor, exit 0 for all 12 on both; the clone is not shallow), and resolves over the commits endpoint. The+lines carry exactly these 12 nine-hex spans as new ones. Each commit names the number it replaces, in its message, its diff or both: 7 in the message and the diff (#6075, #12380, #16570, #17590, #17690, #17879, #17970), 3 in the diff alone (#14428 forca3fd4b1a, #14438 for2200f8ec8, #16711 for7862fb711), and 3 only in the subject's squash suffix (#6076 for6513c1749, #14434 for93940d492, #17876 forbe5c60291), where the dead number was that pull request's own and the commit is its squash.git blameat the base puts 24 of the 49 changed lines on their anchor; the other 25 were written by a commit that cites the number as an earlier decision (242eb0ac1,9f4a6d55f,9bfbacbf8and6bd3231f6citing #12380;3cbcedb62ande35c40a52citing #14438;fa2d3b737citing #6075 and #6076;5ba2ec3caciting #17690;862f12c0bciting #17590;2200f8ec8citing #14428;ca3fd4b1aciting #14434;7862fb711citing #16570;eb9334915citing #17876), and in each case the anchor is the commit that made the change the sentence credits to the number.sourcesays whether stage 4 already used this anchor for this number (reused) or it was measured here (measured).#6075d367f03d6queryparameters followDriverQuery; its turso diff narrowscount'squeryand leavesoptions?: any, the half-narrowed state both sites describe. It is the squash of PR #6210, the live number kept beside it#60766513c1749IDataDriver'squeryparameter becomesDriverQuery(that pull request's squash)#123804045b954dField.jsoncodec injective, one encoding across all three dialects: the local half's codec every site credits#14428ca3fd4b1aupdate()on a missing id answersnullon Turso's remote face; it wrote theRemoteTransport.update()docblock and theturso-update-missing-id.test.tsheader the sites carry, and declared that door's record-or-null return#1443493940d492IDataDriver.update()(that pull request's squash)#144382200f8ec8update()publishes the contract's record-or-null, notany, onSqlDriverand onTursoDriver's override (the squash of PR #15280)#16570b72226f48indexeskeyinitObjects/registerObjectMetadataalready read#167117862fb711TursoDriver.initObjects's docblock andturso-driver-16711-init-objects-param.test.ts#17590e04a0aff2$containson a JSON column as a per-dialect MEMBERSHIP test#17690be5c60291IDataDriverdoors publish their declared return type,TursoDriver's overrides among them; its message records the transaction door left un-narrowed because each of the two repairs is 「neither of which is an annotation swap」, with the 「+14 further consumer sites」 measurement, the sentenceturso-driver.ts:3549cites#17876be5c60291ContainsAnydetector#17879eb9334915ContainsAnyphantom-leg sweep across eight door pins; its message records that both repair candidates were measured#1797047e6601c5ContainsAny's distributivity so union-shaped doors assertNo ADR or ruling record names any of the 13 numbers as the place their decision is recorded; ADR-0104 names #12380 in passing, and
4045b954dis the change these sites describe.Wordings to check
Most rewrites swap a tag in place (
[#N]to[commit SHA],(#N)to(commit SHA),with #Ntowith commit SHA, stage 1's form). These say more than the tag:QueryAST.object与第一实参重复 —— 下游被迫as any(20 处实测),提议 Omit/optional 化 #5181 (PR refactor(spec)!: IDataDriver 的 query 参数改为 DriverQuery,对象名只写一遍 (#5181) #6076), [finding][drivers] 五个驱动的find/count/…仍声明query: QueryAST,而调用方已可省略object—— 双变让它编译,但声明开始说谎 #6075 (PR refactor(drivers)!: 五个驱动的 query 参数跟进 DriverQuery,休眠的类型谎言没有藏身处 (#6075) #6210)」 became 「[spec] IDataDriver 的 query 参数要求QueryAST.object与第一实参重复 —— 下游被迫as any(20 处实测),提议 Omit/optional 化 #5181 (commit 6513c17), commit d367f03 (PR refactor(drivers)!: 五个驱动的 query 参数跟进 DriverQuery,休眠的类型谎言没有藏身处 (#6075) #6210)」 (turso-driver.ts:2131): the dead pull-request number gives way to its squash, and the dead card number to the commit that landed its fix with the live pull-request number kept beside it as a convenience link, stage 4's 「Commit 2200f8e (PR feat(driver-sql,driver-turso):update()publishes its honest type — the contract'sRecord[string, unknown] | null, notany(#14438) #15280)」 form. 「[finding][drivers] 五个驱动的find/count/…仍声明query: QueryAST,而调用方已可省略object—— 双变让它编译,但声明开始说谎 #6075 (PR refactor(drivers)!: 五个驱动的 query 参数跟进 DriverQuery,休眠的类型谎言没有藏身处 (#6075) #6210) narrowed」 became 「commit d367f03 (PR refactor(drivers)!: 五个驱动的 query 参数跟进 DriverQuery,休眠的类型谎言没有藏身处 (#6075) #6210) narrowed」 (turso-driver-options-door.test.ts:21). 「Since [finding]InMemoryDriver.update()returnsnullfor a missing id, whichIDataDriver.update()'s declared return type forbids — hidden for the life of the code by an inferredany#13878 (PR feat(spec): declare the not-found arm on IDataDriver.update() and un-mask driver-memory's published update/upsert types #14434)」 became 「Since [finding]InMemoryDriver.update()returnsnullfor a missing id, whichIDataDriver.update()'s declared return type forbids — hidden for the life of the code by an inferredany#13878 (commit 93940d4)」 (turso-update-missing-id.test.ts:20). 「ContainsAny(fix(driver-sql,driver-turso): eight more IDataDriver doors publish their declared return type #17876)」 became 「ContainsAny(commit be5c602)」 on three test lines.pre-spellings: 「restoring the pre-[finding] driver-sql's SQLite json codec is not round-trip faithful for a string whose content is valid JSON — '123' reads back as a number, and Postgres does not agree #12380 SQLitejsonbranch」 became 「restoring the SQLitejsonbranch from before commit 4045b95」 (remote-transport.ts:2612), and 「The pre-[finding] driver-sql's SQLite json codec is not round-trip faithful for a string whose content is valid JSON — '123' reads back as a number, and Postgres does not agree #12380 form of the string 'bare'」 became 「The form of the string 'bare' from before commit 4045b95」 (turso-local-json-backfill-depth-limit.test.ts:72), stage 4's 「from before commit」 form.turso-json-column-type-asymmetry.test.ts:84), stage 4's 「@see commit e04a0af (the membership construct)」 form. The three@seelinks beside it (Converging driver-turso's two transports onto one physical column type for Field.json — and the measured reason VALUE_ROUNDTRIP cannot adjudicate it #12738, [finding] driver-turso puts one declaredField.jsonin two different physical column types —jsonon the local transport,TEXTon the remote one — and nothing records that as intended #12586, driver-sql: single→multi-value field change never migrates the existing column type (varchar/text kept), arrays silently stored as stringified literals — data corruption on Postgres #11535) resolve and stay.SqlDriverreads keys off caller objects through(obj as any)at 7 sites while 3 parameter types declare none of them — a class, not a third coincidence (after #4311tenancy, #16570indexes) #16711 验收口径 item 4)」 became 「(验收口径 item 4 of the card commit 7862fb7 closed)」 (turso-driver-16711-init-objects-param.test.ts:105), stage 4's wording for the same sentence indriver-sql's twin test, verbatim. Neither the card nor PR fix(drivers): object-definition parameters declare the keys they are read for, plus a gate that sees subclass overrides #16816 resolves any more, so 「closed」 rests on stage 4's reading and on7862fb711itself: its diff names [finding]SqlDriverreads keys off caller objects through(obj as any)at 7 sites while 3 parameter types declare none of them — a class, not a third coincidence (after #4311tenancy, #16570indexes) #16711 32 times and creates this test file, and its message records the TS2353 negative control this paragraph introduces.turso-json-column-type-asymmetry.test.ts:259), 「- Commit b72226f'sindexesfix」 (turso-driver-16711-init-objects-param.test.ts:17), 「// Commit 2200f8e — 」 (turso-driver-update-declared-null.test.ts:3) and 「⛔ Commit 7862fb7 — this parameter type must declare every key」 (turso-driver.ts:3689). 「* commit 4045b95 had to defeat」 (turso-json-column-type-asymmetry.test.ts:46) stays lower-case: it continues 「the measured … exposure that」 from the line above.turso-driver-doors-declared-types.test.ts:117now opens 「[commit be5c602]」, and its line 119 still says 「every door on this card had regressed to」. That line carries no number, so it was not touched; it now reads as the card behind the commit in the tag (be5c60291's message opens 「Part of」 that card).turso-driver-update-declared-null.test.ts:3and:11cite2200f8ec8, the commit that created that test file. Its subject is 「feat(driver-sql,driver-turso):update()publishes the contract's … notany」, so it is both the override fix the header names and theSqlDriver.update()narrowing line 11 credits.eslint.config.mjsdeclares no line-length rule, and a reflow would move neighbouring lines and every line citation into the file).Sites left
describetitles atturso-driver-16711-init-objects-param.test.ts:67([finding]SqlDriverreads keys off caller objects through(obj as any)at 7 sites while 3 parameter types declare none of them — a class, not a third coincidence (after #4311tenancy, #16570indexes) #16711),turso-driver-update-declared-null.test.ts:85([finding]SqlDriver.update()keeps an explicitPromise[any]while returningnullon a miss — the same published-type mask #14434 removed from driver-memory, inherited by TursoDriver and SqliteWasmDriver #14438) andturso-update-missing-id.test.ts:141and:223([finding]MongoDBDriver.update()andRemoteTransport.update()fabricate a record for a missing id — a third posture that becomes a semantic violation onceIDataDriver.update()declaresnull(#13878 ruling item 5) #14428), and two assertion-message strings atturso-json-column-type-asymmetry.test.ts:266and:291([finding] driver-sql's SQLite json codec is not round-trip faithful for a string whose content is valid JSON — '123' reads back as a number, and Postgres does not agree #12380). All four numbers are in this stage's table. Strings are outside this stage's surface; non-test strings cite none.src: the release-ownedCHANGELOG.mdnames dead numbers on 27 sites (11 numbers); left.Mechanical guard: no code token moves
The guard (stages 2 to 9's, copied verbatim from stage 9) compares base
31d2255f5against the tree over all 12 touched files, with TypeScript 6.0.3:forEachChildwalk. Comments are trivia there, and JSDoc is never visited. A leaf that is not itself a token is re-scanned with trivia skipped.getChildrenwalk, JSDoc nodes skipped. String, template and numeric literals are compared in full on both readings.Results, at
841405134(the later commits touch none of the 12 files):turso-driver.ts): 0 files changed (exit 0).export class RemoteTransporttoXRemoteTransport,remote-transport.ts): DIFFER on both readings (exit 1).turso-update-missing-id.test.ts): DIFFER on both readings (exit 1).turso-driver-16711-init-objects-param.test.ts): DIFFER on both readings (exit 1).deepArray(1001)to1002,turso-local-json-backfill-depth-limit.test.ts): DIFFER on both readings (exit 1).Each mutation went through
scripts/ablation-replace.mjs(wrap mode, anchor hit 1 to 0, blob changed) under a shell trap that restores by absolute path fromHEAD. Each restore was proven equal to itsHEADblob (cc15138aba39,8deefdb0598b,e36d370cb3ed,f9142478172e,7343e92b5c7d), withgit diff HEADempty and a clean tree afterwards.Changeset:
patch(distmeasured)files[]isdist,README.mdandCHANGELOG.md, and the package is not private. In one script under the shared verify lock (VERDICT command-exit 0, held 104s), at841405134: the dependency closure was built first (pnpm --filter '@objectstack/driver-turso^...' build), then the package's ownbuild(tsup andcheck-dts-emitted) ran three times:distfiles hashed (index.js,index.mjs, their sourcemaps,index.d.ts,index.d.mts). All 13 rewritten non-test lines appear verbatim indist. The 5 docblock lines on exported members (remote-transport.ts:1645,:2601,:2612;turso-driver.ts:3689,:3694) are in all four ofindex.js,index.mjs,index.d.tsandindex.d.mts; the 8//lines inturso-driver.tsare inindex.jsandindex.mjs.index.d.ts,index.d.mts,index.js,index.mjs); the two sourcemaps do not.scripts/ablation-dist-preflight.mjsfinds the base marker 「[[finding]MongoDBDriver.update()andRemoteTransport.update()fabricate a record for a missing id — a third posture that becomes a semantic violation onceIDataDriver.update()declaresnull(#13878 ruling item 5) #14428] A miss answers」 in those 4 built files (exit 0).HEADblob,git diff HEADempty, porcelain empty): all 6 files are byte-identical to leg 1, and the preflight's--absentreading exits 0 with a clean tree, so the build is deterministic and the difference is the rewrite.So the rewrite ships, and
.changeset/20595-driver-turso-provenance-anchors.mddeclares apatchfor@objectstack/driver-turso, comment text only, with the claim'sClause-②: noline. Every anchor is a commit, so it names no ADR, repository qualifier or bracketed substitution; it says which published files carry the reworded text, as measured above. The changeset commit touches no file underpackages/drivers/driver-turso.Gates (head
e89bd10cd)Derived gates:
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsate89bd10cd(13 paths against merge base49161683f, 113 changed lines) derived 65 commands. All 65 ran (04:52:21Z to 05:03:07Z, after the workspace build), each exit code captured before any pipe: 65 exit 0.--ranreports 「65 derived, 65 run, 0 NOT-MEASURED, 0 UNRUN」 (a derived zero) and exits 0. The PM's lead derivation (55 commands, tree550f4cc2f) is a subset: the extra 10 are the eight families the.changeset/path adds (the ADR-0087 registration and empty-changeset pairs,check:objectui-changeset,check:pm-changeset-deadline-censusand two release self-tests) and two gates whose source namespackages/drivers/driver-turso/src/turso-driver.tsitself (check:object-def-param-keys,check:tenant-chokepoint).Named readings:
node scripts/check-issue-citations.mjsexits 0 (「every citation this change adds resolves (or is a declared cross-repo reference)」: 3 judged across 2 files, the three numbers kept onturso-driver.ts:2131, two of them issues and one a pull request);pnpm check:issue-citationsexits 0 (self-test, 173 cases, 9 batteries);pnpm check:doc-authoringexits 0 (the sibling-package prose-id baseline holds, no growth);pnpm check:nul-bytesexits 0 (9,888 files, no raw control bytes), and a control-byte grep over the 13 changed files finds none (exit 1). The changeset gates (check-changeset-no-major,check-adr-0087-registration,check-empty-changesetwith--base origin/main, andcheck:changeset-gate-self-tests) exit 0;check:object-def-param-keysexits 0 (5 override parameter positions compared).Build, tests and typecheck, under the verify lock: at
e89bd10cd, the dependency closure and the package were rebuilt, thenpnpm --filter @objectstack/driver-turso test: 88 test files pass (88), 2,365 tests pass and 33 are skipped (2,398);pnpm --filter @objectstack/driver-turso typecheck(tsc --noEmit) exits 0 (VERDICT command-exit 0, held 151s).tsc --listFilesOnlyputs all 88 tracked test files and all 12 changed files intsconfig.json's program. The workspace build after the merge (turbo run build --filter='./packages/*' --filter='./packages/*/*' --concurrency=2, 71 of 71 tasks, 1 cached; VERDICT command-exit 0, held 319s) ran before the gates. No importing package owes a run: the declaration files change only in comment text.Lint, as a proven narrowing, at
e89bd10cd: eslint with inline config disabled, over the 12 touched.tsfiles plusdist/index.jsas the control: 13 results, 0 errors and 1 warning, the control's ignore notice; none of the 12 is reported ignored.eslint.config.mjsnever enables type-aware linting (its lines 327 and 328 say so), so a comment edit cannot move the verdict on an untouched file. The repo-widepnpm lintis CI's run.Acceptance notes
origin/mainat550f4cc2f; by the time the worktree was cut,mainhad moved one commit (31d2255f5,packages/mcp/server.jsononly), and the branch was cut there. It mergesmainonce, pinned to49161683f(mergee89bd10cd, no conflict). The two commits it brought (48eb9c193,spec;49161683f,plugin-sharingandplugin-audit) touch neitherpackages/drivers/driver-turso,check-issue-citations.mjsnordispatch-gates.mjs; the closure and the workspace were rebuilt after the merge, before the tests and gates. The net diff againstmainis the 12 rewritten files (+49/−49) and the changeset (+15).driver-mongodb(this lane's next stage) names [finding]MongoDBDriver.update()andRemoteTransport.update()fabricate a record for a missing id — a third posture that becomes a semantic violation onceIDataDriver.update()declaresnull(#13878 ruling item 5) #14428 insrc/mongodb-driver.tsand its tests and feat(spec): declare the not-found arm on IDataDriver.update() and un-mask driver-memory's published update/upsert types #14434 inmongodb-update-missing-id.test.ts, whereca3fd4b1aand93940d492are the anchors;driver-sqlite-wasm, which the census reads 0, still carries [finding] driver-sql's SQLite json codec is not round-trip faithful for a string whose content is valid JSON — '123' reads back as a number, and Postgres does not agree #12380, [finding]SqlDriver.update()keeps an explicitPromise[any]while returningnullon a miss — the same published-type mask #14434 removed from driver-memory, inherited by TursoDriver and SqliteWasmDriver #14438, [finding]SqlDriverreads keys off caller objects through(obj as any)at 7 sites while 3 parameter types declare none of them — a class, not a third coincidence (after #4311tenancy, #16570indexes) #16711, [finding] Nine more IDataDriver doors are still masked asanyon the SQL drivers — the #17277 census answered triage's 「is aggregate the only one?」 with NO #17690, fix(driver-sql,driver-turso): eight more IDataDriver doors publish their declared return type #17876 and [finding] 类型级 pin 家族的 IsAny 探测器看不见嵌套的 any —— 规定红两次的门只红一次,已落地的 #17689 pin 上实测,另有 10 个同族文件未测 #17879 in five test files (comments and twodescribetitles; the census defers test files, every anchor is in this table, and the comment sites are the same sentences this stage rewrote here);scripts/check-object-def-param-keys.mjsand.github/workflows/lint.ymlname driver-sql:initObjects/registerObjectMetadatastill omitindexesfrom a parameter type they read it through — the shape #4311 fixed fortenancy, one key over #16570 and [finding]SqlDriverreads keys off caller objects through(obj as any)at 7 sites while 3 parameter types declare none of them — a class, not a third coincidence (after #4311tenancy, #16570indexes) #16711 (outside the census surface);service-analytics'scontains-membership.test.tscarries driver-sql: the $contains MEMBERSHIP spelling on any multi-valued / JSON column is a DATABASE_ERROR 500 on live PostgreSQL (SQLSTATE 42883, operator does not exist: json ~~ text) — it has only ever been executed on SQLite #17590 in a comment, anddriver-sql's test strings carry [finding] driver-sql's SQLite json codec is not round-trip faithful for a string whose content is valid JSON — '123' reads back as a number, and Postgres does not agree #12380 and driver-sql: the $contains MEMBERSHIP spelling on any multi-valued / JSON column is a DATABASE_ERROR 500 on live PostgreSQL (SQLSTATE 42883, operator does not exist: json ~~ text) — it has only ever been executed on SQLite #17590; ADR-0104 names [finding] driver-sql's SQLite json codec is not round-trip faithful for a string whose content is valid JSON — '123' reads back as a number, and Postgres does not agree #12380 (governed); the release pages name [finding][drivers] 五个驱动的find/count/…仍声明query: QueryAST,而调用方已可省略object—— 双变让它编译,但声明开始说谎 #6075 and [finding] driver-sql's SQLite json codec is not round-trip faithful for a string whose content is valid JSON — '123' reads back as a number, and Postgres does not agree #12380 (release-owned).Generated by Claude Code