Repository navigation
refactor(driver-sql): codemod pilot — generated, byte-identity-proved section split of sql-driver.ts (#29520) - #29598
Conversation
…er.ts and proves the move A deterministic ts-morph codemod: per section banner of SqlDriver, the bodies of every method that can move under the hand series' cut pattern go to sql-driver-<section>.ts unedited, the class keeps one-line host stubs, and the script proves byte-identity (undoing the split rebuilds the base file byte-for-byte) and, on two built dists, the declaration-file bar of ruling 6348891160 item 1. ts-morph resolves through packages/cli's closure; the root adds no dependency. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…emod-split-sql-driver.mjs Output of `node scripts/codemod-split-sql-driver.mjs --write` on sql-driver.ts at dbca3ef, unedited: 20 method bodies in 10 sections move to section modules, the class keeps host stubs. Byte-identity proved by the script (undoing the split rebuilds the base file byte-for-byte). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…ed parse check:parse-guard flagged the raw createSourceFile: a parse whose errors nobody read. The text now passes parseSourceFile first, which refuses a source with parse errors, and ts-morph reads the vouched-for text. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…ver-codemod-pilot
📓 Docs Drift CheckThis PR changes 2 package(s): 90 hand-written doc(s) name something this change touched — list omitted above 15 rows. Re-derive on the tree named below: ⛔ 15 release-owned page(s) also affected — read-only, see AGENTS.md Documentation Guardrails. What this run could not see
Coarse fallback — 170 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 3c556753325153fa135761aa4db663b192cedd6f && git checkout 3c556753325153fa135761aa4db663b192cedd6f
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 40a35ded4157eb685e09a31672abc3f959ec9d5f 5f30cf9f2cb4725398af42ea3876f9e246715afc && git checkout -B drift-repro 40a35ded4157eb685e09a31672abc3f959ec9d5f && git merge --no-ff 5f30cf9f2cb4725398af42ea3876f9e246715afc
node scripts/docs-audit/affected-docs.mjs --json 40a35ded4157eb685e09a31672abc3f959ec9d5f
|
…ver-codemod-pilot
…ttern Lever (a): a section module imports values from sql-driver.ts; a staying top-level name a moved body reads is exported by one generated export list. Lever (b): the top-level declarations ahead of the class move whole, with their comments, into the leaf sql-driver-top-level.ts, which never imports sql-driver.ts or a seam module; sql-driver.ts imports back what it reads and re-exports by name what it exported. The tenant-chokepoint stay rule goes (the gate now reads the seam modules); the host hands getBuilder as a bound reference. Path readers are kept whole by PATH_READER_PINS and the new PATH_READER_NEEDLES. The byte-identity proof splices the leaf back by name and rebuilds the base byte-for-byte. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…dened cut pattern Output of `node scripts/codemod-split-sql-driver.mjs --write` on sql-driver.ts at origin/main b391feb (input sha256 e73b1ce952e1), unedited: 56 method bodies move to 18 section modules, 97 of the 130 top-level declarations ahead of the class move to sql-driver-top-level.ts, and sql-driver.ts goes from 18333 to 13971 lines. Byte-identity proved by the script; output tree sha256 bee30883147c, the same on two runs. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…am module SCAN_FILES widens to the non-test sql-driver-*.ts modules of driver-sql/src, listed from the directory (ruling 6591753301), and a module-level function is read as a class member is, under its own name, so a moved body is still a door. The gate prints its readings (bindings, read doors, tenant predicates, D8 arms) on one line. The watch hints declare each seam module by name; the self-test holds them to the listing both ways and gains a moved-bodies battery. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…s carries none of it The bundler keeps a JSDoc block that leads a module's first statement, and the leaf is bundled first, so its /** */ header was published as 14 lines the base dist/index.d.ts did not carry. The header is // lines now; the self-test holds that. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
Output of `node scripts/codemod-split-sql-driver.mjs --write` on sql-driver.ts at origin/main b391feb (input sha256 e73b1ce952e1), unedited. Only sql-driver-top-level.ts's header changes; output tree sha256 5187eba96f64, the same on two runs. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
… gate resolves their log helper check-durability-degradation-log-level follows same-file helpers, so a moved catch whose only log is this.logDurabilityFailure(...) read as swallowed (measured: migrateMysqlDatetimeColumns and migrateMysqlTimeColumns red). PATH_READER_NEEDLES gains this.runWideningAlters( with that reader. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
Output of `node scripts/codemod-split-sql-driver.mjs --write` on sql-driver.ts at origin/main b391feb (input sha256 e73b1ce952e1), unedited: 54 method bodies and 97 top-level declarations move; sql-driver.ts 18333 -> 14042 lines. Output tree sha256 f4dc8078d9b7, the same on two runs. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
A SEAM_DIR constant read to bare-root-worklist as a new invisible bare-root population; the gate already declares every file it reads, one by one, in DECLARED_WATCH_HINTS, so the directory is spelled inline as the three driver files are. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…l-driver-codemod-pilot # Conflicts: # packages/drivers/driver-sql/src/sql-driver.ts
Output of `node scripts/codemod-split-sql-driver.mjs --write` on sql-driver.ts at origin/main 2ea6042 (input sha256 9abf7867fd98; #29660 touched it), unedited: 54 method bodies move to 18 section modules and 96 of the 129 top-level declarations ahead of the class to sql-driver-top-level.ts; sql-driver.ts 18330 -> 14050 lines. Output tree sha256 ab8990700a0d, the same on two runs. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
|
domain:devx#2 · marchtian · session_017ihL2gLghEqeDKTbDTC7Zd Seat park note · 2026-11-03T06:18Z · parked under
|
…l-driver-codemod-pilot
…d methods only Ruling 6597555122 (round 3): sql-driver-compile-refusal-seam.test.ts adds sql-driver-top-level.ts to the sources it enumerates, in the form of hand cuts 13, 15 and 16. Its three needles leave PATH_READER_NEEDLES for a new CLASS_PATH_READER_NEEDLES table. A top-level declaration carrying one now moves to the leaf the test reads. A method carrying one still stays on the class, because its body would land in a section module the test does not read and drop SqlDriver.resolveWithheldFilterRefusal out of the pinned set. A stale class needle refuses, as a stale needle does. The self-test has 43 cases. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
… the leaf The output of node scripts/codemod-split-sql-driver.mjs --write on origin/main 7a25b39's unsplit sql-driver.ts, unedited. 127 of 129 top-level declarations now move to sql-driver-top-level.ts (96 before), and 54 of 254 methods move as before. sql-driver.ts goes 18,330 -> 12,456 lines. --verify: 54/54 bodies and 127/127 declarations are byte-identical to the base, and undoing the split rebuilds the base byte-for-byte. The output tree sha256 is f5d8722fa697b4530b9f76922c2b5d579f69048463e09cf190693793400b26e0. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…terError to the leaf The #29520 codemod moved the top-level declaration unsupportedAggregationFilterError from sql-driver.ts to the generated leaf sql-driver-top-level.ts. That left the query/aggregations.filter evidence anchor naming a symbol the cited file no longer has, which turned check-liveness.test.ts red in CI. Ruling 6597555122 point 3 says a reader that cites a file by path gains the new module in the same PR, so the one citation now names the leaf. Nothing else in the ledger changes. The other nine driver-sql anchors still name a symbol sql-driver.ts declares. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…t of sql-driver.ts Ruling 6597555122 point 3. Pin 3 of logger-receiver-detach.test.ts asserted that no detach-then-call shape survives in sql-driver.ts, and read only that file. The #29520 split moved 3 of the host's 21 log-channel calls into sql-driver-internal-helpers.ts, sql-driver-filter-helpers.ts and sql-driver-field-mapping.ts. Because the pin asserts an absence, it stayed green while it read less. The pin now lists the directory and reads every non-test sql-driver*.ts. A named list would rot whenever the codemod is regenerated on a newer main and moves a different set. A floor case fails if the listing finds nothing past the host. At base and at head the pin reads 55 log-channel calls (44 warn). Planting (this.logger.error ?? this.logger.warn)( in sql-driver-internal-helpers.ts turns it red. The old host-only pin stays green on that same planted tree. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…line-count change Two defects the #29520 review found. --help was refused by the "already carries stubs" guard (exit 2) on any split tree. It is now answered before any guard and prints the usage. dtsBarFor reported rawDiffLines 0 whenever the two declaration files had different line counts. It now counts what diff prints (lines deleted plus inserted, a Myers edit distance) and names the method in rawDiffMethod. On round 3's dists it reads 19, the same as diff. When the counts are equal it still counts lines that differ in place, one per union swap. The self-test has 45 cases. A mutant of each fix is refused. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…l-driver-codemod-pilot
…s into their modules Ruling 6597555122 point 3, applied to the anchor registry. The #29520 split moved the code the sql-driver.ts ADR-0053 entry names out of that file: formatOutput's folds went to sql-driver-sqlite-serialisation.ts, presentReadValue's datetime and audit arms to sql-driver-filter-helpers.ts, and the fold helpers to sql-driver-top-level.ts. 18 of the host's 33 ADR-0053 citations left with them. check:adr-anchors stayed green on the 15 left behind while it guarded less. Each of the three modules now has its own ADR-0053 entry. Each entry's invariant names the code that moved there, in the shape #25521 cut 8 gave sql-driver-schema-sync.ts. The host entry stays: the stubs still live there, and so do 15 citations. Removing ADR-0053 from one module turns the gate red. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…l-driver-codemod-pilot
…Dependency #29711 dropped ts-morph from @objectstack/cli, and no workspace package declares it any more. The codemod resolved ts-morph through the CLI's closure, so on a fresh `pnpm install --frozen-lockfile` its --verify and --self-test stopped at exit 2 and the ruled proofs could not be reproduced from a clean checkout. - package.json: ts-morph ^28.0.0 joins the root devDependencies, the way the other root scripts take typescript, yaml and semver. - pnpm-lock.yaml: written by `pnpm install --lockfile-only`. It adds ts-morph@28.0.0, @ts-morph/common@0.29.0 and code-block-writer@13.0.3. @ts-morph/common's minimatch resolves to the 10.2.6 already in the tree. - scripts/codemod-split-sql-driver.mjs: the loader resolves from the root manifest. The header says so, and also says which exit a tree with no install at all gets. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…l-driver-codemod-pilot #29911 changed sql-driver.ts. The resolution takes main's packages/drivers/driver-sql/src whole, keeps this branch's sql-driver-compile-refusal-seam.test.ts and logger-receiver-detach.test.ts, and regenerates the split with `node scripts/codemod-split-sql-driver.mjs --write`, unedited. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
…oup.ts and names the fix when a module is undeclared The gate lists every non-test sql-driver-*.ts module from its directory. Its dispatch-gates declaration is a literal list. #29911 added sql-driver-balanced-group.ts, and the self-test went red with a message that did not say what to change. - DECLARED_WATCH_HINTS gains sql-driver-balanced-group.ts. - Both coupling asserts now name each missing or extra entry, and say to add it to or remove it from DECLARED_WATCH_HINTS. - The docblock records why the list stays literal. The extractor accepts a sql-driver-*.ts glob, but through hintCovers that glob covers 31 seam modules and 234 test files. A hint has no negation, so no spelling covers the modules and leaves the tests out. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd
|
domain:devx#2 · marchtian · session_017ihL2gLghEqeDKTbDTC7Zd 席位核对 — ACCEPT ·
|
Requested by 田騏 · project thread
Fixes #29520
Clause-②: no
Metadata-protocol: none
维护者速读
scripts/codemod-split-sql-driver.mjs生成的sql-driver.ts拆分。54 个方法体移入 18 个分节模块,127/129 个类外顶层声明移入叶模块sql-driver-top-level.ts。check-tenant-chokepoint扫描全部非测试sql-driver-*.ts,其 dispatch-gates 声明补上 main 新增的sql-driver-balanced-group.ts,自测失败时直接写出要加或删的条目。按裁决 6597555122 第 3 点,按路径读取sql-driver.ts的读者跟随代码扩到新模块:sql-driver-compile-refusal-seam.test.ts的sources加入叶模块,logger-receiver-detach.test.ts的 pin ③ 改为列目录读全部sql-driver*.ts,liveness 台账的一条锚点改指叶模块,ADR-0053 锚点登记为三个新模块各加一条。根package.json加入 devDependencyts-morph^28.0.0(fix(deps): a fresh scaffold's tree carries no ts-morph — the CLI takes the compiler from typescript directly #29711 后已无包声明它),codemod 从根清单解析。生成文件未手改。sql-driver.ts从 18,334 行降到 12,460 行,低于 13,000 行的门槛。.d.ts按 6441032442 B 的第二归一化判通过,四项读数全部相等,阳性对照抓到去掉的private。回滚即 revert。sql-driver.ts的读者」表(哪些读者跟随了代码);②scripts/codemod-split-sql-driver.mjs的CLASS_PATH_READER_NEEDLES;③.d.ts读数表。pnpm install --frozen-lockfile后运行node scripts/codemod-split-sql-driver.mjs --verify --base 0b5b176038,预期54/54 moved bodies identical、127/127 moved top-level declarations identical、18334 -> 12460 lines,退出码 0。What changes
scripts/codemod-split-sql-driver.mjs(round 3): the three seam-test needles move fromPATH_READER_NEEDLESinto a newCLASS_PATH_READER_NEEDLEStable:unsupportedFilterError(,withheldFilterError(and.INVALID_FILTER.SqlDriver.resolveWithheldFilterRefusalby name.--help/-his answered before any guard (it was refused on a split tree), and--dtscounts a line-count change asdiffdoes (it read 0), naming the count inrawDiffMethod.--self-test: 45 cases in 5 pinned batteries. A mutant of each review fix is refused.package.jsonandpnpm-lock.yaml:ts-morph^28.0.0joins the root devDependencies, besidetypescript,yamlandsemver. The codemod now resolves it from the root manifest.ts-morphfrom@objectstack/cli, and no workspace package declares it. The codemod resolved it through the CLI, so on a freshpnpm install --frozen-lockfileits--verifyand--self-testexited 2.pnpm install --lockfile-only(+25 lines, nothing else re-resolved). It addsts-morph@28.0.0,@ts-morph/common@0.29.0andcode-block-writer@13.0.3.@ts-morph/common'sminimatchresolves to the10.2.6already in the tree, under the existingminimatch@<11.0.0override.node_modulesremoved, thenpnpm install --frozen-lockfile. With onlyts-morphset aside, the script exits 2 and names the root manifest.scripts/check-tenant-chokepoint.mjs:DECLARED_WATCH_HINTSgainssql-driver-balanced-group.ts, which fix(driver-sql): emit large $or / $and groups as balanced halves so gated comment and attachment reads fit hosted libSQL's depth limit #29911 added on main. The scan lists the directory, so it already read the module. The self-test's coupling asserts now name each missing or extra entry, and the one edit that fixes it.packages/drivers/driver-sql/src/sql-driver-*.tsand judges it as a pattern. ThroughhintCovers, though, it covers 31 seam modules and 234sql-driver-*.test.tsfiles, plus any.d.ts. A hint has no negation, and?and[…]are not admitted, so no spelling covers the modules and leaves the tests out. The gate's docblock records this.Fix: add 'packages/drivers/driver-sql/src/sql-driver-balanced-group.ts' to DECLARED_WATCH_HINTS in this gate.sql-driver-compile-refusal-seam.test.ts:sourcesgainssql-driver-top-level.tsunder a[#29520 codemod]comment, in the same form as hand cuts 13, 15 and 16. The enumeration prose names the leaf too.src/sql-driver.ts(22,096 lines, +2,533 in 30 days) along itsSqlDriverseams, one move-only slice per PR #25521 ask 3). It is not an edit of generated output.logger-receiver-detach.test.tspin ③: it readsql-driver.tsonly and asserts an absence, so it stayed green while 3 of the host's 21 log-channel calls moved out. It now lists its directory and reads every non-testsql-driver*.ts(a named list would rot at the next regeneration), with a floor case that the listing finds more than the host. It reads 55 calls at base and at head. Ablation: a planted(this.logger.error ?? this.logger.warn)(insql-driver-internal-helpers.tsturns it red; the old host-only pin stays green on the same tree.packages/spec/liveness/query.json: the one anchor whose symbol moved,unsupportedAggregationFilterError, now citessql-driver-top-level.ts. Nothing else in the ledger changes; the other nine driver-sql anchors still resolve insql-driver.ts.scripts/adr-anchors/: three new ADR-0053 entries, forsql-driver-sqlite-serialisation.ts(formatOutput's folds),sql-driver-filter-helpers.ts(presentReadValue's datetime and audit arms) andsql-driver-top-level.ts(the fold helpers), in the shape [maintainer] refactor(driver-sql): splitsrc/sql-driver.ts(22,096 lines, +2,533 in 30 days) along itsSqlDriverseams, one move-only slice per PR #25521 cut 8 gavesql-driver-schema-sync.ts. 18 of the host's 33 ADR-0053 citations moved with that code; the host entry stays for the stubs and the 15 left. Removing ADR-0053 from one module turnscheck:adr-anchorsred.sql-driver.ts. This round it exports no staying helper, because every helper the moved bodies read now sits in the leaf;getBuilder;check-tenant-chokepoint;no-yieldrule;--writeon origin/main, unedited. On the latest merge base0b5b176038, fix(driver-sql): emit large $or / $and groups as balanced halves so gated comment and attachment reads fit hosted libSQL's depth limit #29911 changedsql-driver.ts(input sha2562d2ebebdba87…). The resolution took main'spackages/drivers/driver-sql/srcand kept this branch's two test files, then regenerated. The same 54 methods and 127 declarations move, and the result differs from the previous head only by fix(driver-sql): emit large $or / $and groups as balanced halves so gated comment and attachment reads fit hosted libSQL's depth limit #29911's own change. It producessql-driver.ts, the leaf, and 18 section modules:lifecycle,crud,sequence-semantics,bulk-operations,aggregation,distinct;window-functions,query-plan,schema-sync-section,rotation,managed-drift,internal-helpers;filter-helpers,field-mapping,window-function-builder,column-creation,database-helpers,sqlite-serialisation.Measurements
sql-driver.tslines (wc -l)path-reader:JSON_COLUMN_TYPESandMEDIA_ID_VARCHAR_CHARS, which the cli pins readsql-driver-top-level.ts3,999 lines; all 19 new files 9,575 lines088547bdc1b4e152d6298d4a1d33b007eec27871e179716a298944b673984170on three runs:--writein the worktree and two plan runs on main's unsplit text. Input sha2562d2ebebdba87…getBuilder()bindings, 21 read doors, 3 inserts, 4 tenant predicates, 0 D8 arms across 15 files. Head: identical across 34 files.d.ts92 = 92; runtime CJS 59 = 59 and ESM 59 = 59 (CJS = ESM)Readers of
sql-driver.tsby path (ruling 6597555122 point 3)sql-driver*.tscheck-tenant-chokepoint#anchorcitationscheck-keyed-text-boundscheck-durability-degradation-log-levelsql-driver-column-creation.ts:53and:84; the host still counts 9 because two new stubs forward)#symbolanchors,check-object-def-param-keys, cli test cache inputs.d.ts: ruling 6441032442 item 1, second normalisation, with ruling 6597555122's header clarificationThe normaliser is
dtsnorm.mjs, sha2569e3ca459fb22015c7e77e4576b564ca46076cfd0f366dc00dcec521274f8e911. The devx lane rewrote it from the ruling's text. It is a report reading, ⛔ not inscripts/(item 3). It does three things:import { }/export { }, and masks chunk hashes. driver-sql emits no chunk.Base is main
0b5b176038's unsplitsrc, built. Head is5f30cf9f2c, built. The readings are the same as round 3's, hash for hash. Each reading below is the same forindex.d.tsandindex.d.mts.0f33bf3f…69d9162d…wc -l8,846 → 8,847468260520fcc1ac2…468260520fcc1ac2…50e5e5be3c1d…50e5e5be3c1d…@objectstack/specimportsdeclare class SqlDriver, which ruling 6597555122 does not countPositive control (catches a dropped
private). I droppedprivatefrom one moved member's stub,compileFilters, rebuilt, ran the normaliser on head against control, then restored and rebuilt. The rebuilt head.d.tsis byte-identical to the earlier head. The control is caught on three readings:468260520fcc…vs73e89389695f…;50e5e5be3c1d…vsacf70f0378d0…. It namesPropertyDeclaration [private] compileFilters→MethodDeclaration [] compileFilters;The normaliser exits 1 on both files. Its
--self-testpasses 8 cases, among them a member reordered inside its class and a changed header text, both refused.Premises.
exportsis.only. It namesdist/index.*and no chunk.git grep 'driver-sql/dist' -- scripts package.jsonfinds 0 hits.Why most methods stay (counted per method; one method can carry several)
already-moved78 ·no-yield55 ·non-public-static47 ·parameter-shape21 ·this-write19 ·path-reader18 ·no-section14 ·static11 ·comment-in-parameters7 ·field-call6 ·inferred-return-type6 ·type-parameters3 ·name-taken3 ·reserved-name1. The full table is the script's plan output.Tests
Every run below is at head
5f30cf9f2con merge base0b5b176038, after everynode_moduleswas removed andpnpm install --frozen-lockfilere-ran. Each ran under oneos-verify-lockhold (VERDICT command-exit 0). The base runs used main's unsplitsrc, built and then restored in place; status was clean afterwards.@objectstack/driver-sql test: exit 0 at both. 250 files (238 passed, 12 skipped). Base 4074 tests (3858 passed, 216 skipped); head 4075 (3859 passed, 216 skipped): the +1 is pin ③'s new floor case.@objectstack/driver-turso test: exit 0 at both. 96 files; 2530 tests (2496 passed, 34 skipped). Base = head.@objectstack/driver-sqlite-wasm test: exit 0 at both. 40 files; 750 tests passed. Base = head.packages/clipin tests that readsql-driver.tsby path exit 0:generate-string-family-width): 1 file, 30 tests.sql-driver-compile-refusal-seam.test.ts: 115/115. With the newsourcesline removed, 3 tests fail (the ablation above).logger-receiver-detach.test.ts: 12/12; the planted shape fails it (ablation above).packages/speccheck-liveness.test.ts74/74 andcheck:livenessexit 0.--self-test45 cases in 5 batteries;--verify --base 0b5b176038exits 0 (54/54, 127/127, 12,460 lines); two plan runs on base's unsplit text give tree088547bd…both times, byte-identical;--helpon the split tree exits 0.check-tenant-chokepoint--self-testand main run exit 0.check:adr-anchorsandcheck:adr-symbol-anchorsexit 0.Acceptance notes
resolveWithheldFilterRefusalintosql-driver-filter-helpers.ts, which the test does not read..d.tspasses ruling 6441032442 B's second normalisation on all four readings, with the control caught. Ruling 6348891160's union-order bar alone still reads FAIL on these files. Under 6441032442 item 1, that is the case the second normalisation exists for.pnpm buildexits 2 in@object-ui/app-shell(Cannot find module '@object-ui/mobile'), outside this change. Every driver and cli closure used here builds.skip-changeset: the.d.tsmeets item 1 by ruling 6441032442, so per item 4 it takes no changeset.Verification
pnpm install --frozen-lockfile, thennode scripts/codemod-split-sql-driver.mjs --verify --base 0b5b176038..d.ts: build@objectstack/driver-sqlat main's unsplitsrcand at head. Then runnode dtsnorm.mjs --diff BASE/index.d.ts HEAD/index.d.ts, and the same for.d.mts. Expect exit 0 and"pass": true. The Codemod split pilot: generate the sql-driver.ts split with a deterministic script, verified byte-identical #29520 report gives the normaliser's path and sha256.node scripts/check-tenant-chokepoint.mjsprints the readings line.mainand takemain'spackages/drivers/driver-sql/src, keeping this branch'ssql-driver-compile-refusal-seam.test.tsandlogger-receiver-detach.test.ts. Then run--writeand commit. If a regeneration moves different code, re-check the reader table above.Gates at head 5f30cf9
node scripts/pm/dispatch-gates.mjs --commandsderives 92 families at5f30cf9f2con merge base0b5b176038, the same list as at5b19e9ac05. Each was run alone after the fresh install, with its exit captured before any pipe: 92 exit 0,check:tenant-chokepointamong them.--ranreconciliation reads 92 derived, 92 run, 0 NOT-MEASURED, 0 UNRUN, exit 0.api.osv.dev. The only advisory-bearing package the three lockfile additions reach isminimatch10.2.6, which is already in the merge base's lockfile and already covered by theGHSA-g3hv-75wg-m249exemption.--dts(ruling 6348891160's bar alone reads FAIL, as before), the seam and logger tests together (127/127), and speccheck:liveness.check:commit-card-trailerspassed on every push.Durable attribution: session
session_017ihL2gLghEqeDKTbDTC7Zd(domain:devx#2, os-dev).🤖 Generated with Claude Code
https://claude.ai/code/session_017ihL2gLghEqeDKTbDTC7Zd