Skip to content

Commit db0cf22

Browse files
docs(driver-memory): re-anchor the dead tracker citations to the commits that decided them (stage 5 of #20595) (#21375)
Part of #20595 Clause-②: no ## What changed Stage 5 of the `domain:engine` lane of the dead-citation sweep: `packages/drivers/driver-memory/**`, comment and docblock prose only, per the claim (`5947712781`). Stages 1 to 4 landed as `a7d9768ec`, `d150c3039`, `4bf4e7e70` and `13a24ece2`; #20595 stays open for the next 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 `5749154545` on #19123): the ADR when one records the decision, otherwise the commit in this repository's history that made it. That is **104 sites on 103 lines in 27 files, covering 13 numbers**: - **59 census sites** (59 lines, 5 files under `src/`): the whole `allocated-but-absent` population of the gate's own census in this package at the base; - **4 sites on 3 lines outside the census glob, inside the claimed surface**: `objectstack.config.ts:19` (#11332) and `:26` (#10724), and `tsconfig.typecheck.json:11` (#11332 and #10724 on one `//` line); - **41 test-comment sites** (41 lines, 20 test files), which the census defers. They carry 11 numbers: 6 the census itself reads as dead in this package's `src`, 2 it reads as dead elsewhere in the repository (#6075, #17590), and 3 it never judges because they stand only in test files (#14434, #16838, #17348), which the board and a single read each settle. No comment-id citation in the package is dead (see Census). **Anchors: 13 numbers by commit, 0 by ADR, 0 by words alone.** 11 numbers reuse the anchor another lane or stage already measured for them; 2 were measured here (#14435, #16838). 13 distinct shas. No ADR or ruling record names any of the 13 for this subject: `git grep` over `docs/adr` and `scripts/adr-anchors` finds only ADR-0088's correction row for #10724, which is about `contributes.functions`, not the `contributes.drivers` retirement cited here. Only comments changed. Every file keeps its line count (103 lines out, 103 in, plus the changeset), so no line citation into any of them moves. No code token moves (the guard below). **No citation number is added**: on every changed line, the numbers on the new text are a subset of those on the old, and the diff-scoped gate judged the 7 citations left on changed lines: all 7 resolve. **A `patch` changeset**: 20 of the 62 rewritten non-test lines are in the published `dist` (the `.d.ts` keeps JSDoc on exported members, and esbuild keeps some comments in the JS), and `dist` is not byte-identical with the base text (see Changeset). ## H0: the largest remaining `domain:engine` package The gate's own `node scripts/check-issue-citations.mjs --census --json` at base `5fd4855a9` (the before run below), `allocated-but-absent` per package over every `domain:engine` family in `.claude/skills/pm-dispatch/SKILL.md`'s lane table: | package | sites | |---|---| | `drivers/driver-memory` | **59** | | `metadata` | 41 | | `core` | 40 | | `platform-objects` | 27 | | `metadata-core` | 19 | | `drivers/driver-turso` | 14 | | `drivers/driver-mongodb` | 9 | | `formula` | 4 | | `metadata-fs` | 2 | | `drivers/driver-sqlite-wasm`, `plugins/plugin-pinyin-search`, `objectql`, `metadata-protocol`, `drivers/driver-sql` | 0 each | `driver-memory` is still the largest (lane total 215), so this stage went ahead. ## Census: `driver-memory`, before and after **Instrument (A1).** The gate's own `node scripts/check-issue-citations.mjs --census --json`, read-only and unchanged. The count is its `allocated-but-absent` findings under `packages/drivers/driver-memory/`. | reading | tree | board | whole-repo `allocated-but-absent` | sites | lines | files | numbers | |---|---|---|---|---|---|---|---| | before | base `5fd4855a9`, run 07:54:54Z to 07:58:32Z | enumerated, 192 pages, frontier #21366, 19,187 records (newest number read before and after the run: #21366) | 330 | **59** | 59 | 5 | 6 | | after | `17f667f86`, run 08:13:08Z to 08:17:18Z | enumerated, 192 pages, frontier #21370, 19,191 records (newest before and after: #21370) | 271 | **0** | 0 | 0 | 0 | The whole-repo drop is 59, and the two finding sets differ by exactly the 59 rows of this package, removed; none was added. `resolves` (34,880), `resolves-as-pull-request` (2,378) and `cross-repo-unjudged` (1,165) did not move. The card's 62 was taken at `f11b5f20a2` with the older extractor; the base here reads 59. The head's later commits are the changeset (outside the census surface) and one merge of `main` that touches no file under `packages/drivers/driver-memory`. **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 exported `extractCitations` (whole-file and comment-prose projections) over every tracked file in the package (89: 82 `.ts`, `package.json`, `tsconfig.json`, `tsconfig.typecheck.json`, `README.md`, `CHANGELOG.md`, `LICENSE`, `objectstack.config.ts` among the `.ts`), and classifies each citation with the gate's `classifyCitation` against one board enumerated by the gate's `enumerateBoard` (192 pages, frontier #21369, 19,190 records, 07:59:39Z to 08:03:13Z). Every one of the 13 numbers in the population was then read on its own over the issues endpoint (08:04Z): **all 13 answer 404**, and the lit controls `#5286` and `#12624` answer 200. | reading | citations | dead | src comment | test comment | other (`tsconfig.typecheck.json`) | test string | changelog | |---|---|---|---|---|---|---|---| | before, `5fd4855a9` | 1,720 | **143** | 61 | 41 | 2 | 21 | 18 | | after, `17f667f86` | 1,616 | **39** | 0 | 0 | 0 | 21 | 18 | `src comment` here is the 59 census sites plus the 2 in `objectstack.config.ts`. The drop of 104 citations is exactly the rewritten sites, and the live counts did not move (src comment: 494 resolve, 13 as pull requests, 1 cross-repo; test comment: 504, 20 and 4). A third, raw reading (every `#` followed by 2 to 6 digits, whatever surrounds it) counts 1,736 before and 1,632 after: a drop of 104. **Comment ids.** Three distinct comment-id citations stand on 6 sites in this package: `5234868334` (1 site), `5861435168` (2) and `5865693155` (3). Each was read over the issue-comments endpoint and answers 200 (control `5947712781`, 200). So no comment id is in the population. ## Per-number table `src` counts the census sites plus the four outside the census glob; `test` counts test-comment sites. Every sha below matches exactly one commit (`git rev-parse --disambiguate`, count 1) and is an ancestor of the base `5fd4855a9` (`git merge-base --is-ancestor`, exit 0 for all 13 shas; the clone is not shallow). The `+` lines introduce exactly these 13 nine-hex spans and no other. The message or the diff of each one names the number it replaces: 6 in the message and the diff (`56c093c4d`, `0f38ab084`, `9dac1ae01`, `be21955ba`, `e04a0aff2`, `d367f03d6`), 6 in the diff alone (`555a89cbd` 28 added lines, `20950404c` 7, `dce5cd4f0` 26, `51efbf116` 4, `20032594f` 8, `b90aff81f` 9), and 1 only in the subject's squash suffix (`93940d492`, where #14434 was that pull request's own number). Each anchor touches `packages/drivers/driver-memory` itself, except `e04a0aff2`, whose two sites name the `driver-sql` fixture it created. `git blame` at the base puts 67 of the 104 sites on their anchor. The other 37 were written by a different commit that cites the number as another change: for #13197, the declared-index commit `b7f645a8a` and the atomicity commits `34e80993f` and `4642f4c64`; for #13195, the clobber generalisation `df1812050`, the reference-matcher retirement `8fec76a2b`, and two commits from while that card was open (`178325bcb`, `9268aec56`, see Wordings to check). In each case the anchor is the commit that made the change the sentence credits to the number. `source` says whether another lane or stage already used this anchor for this number (`reused`) or it was measured here (`measured`). | number | src | test | anchor | kind | source | what it decided | |---|---|---|---|---|---|---| | `#6075` | 0 | 1 | `d367f03d6` | commit | reused (stage 4) | five drivers' query parameters follow `DriverQuery` | | `#10724` | 2 | 0 | `be21955ba` | commit | reused (cli lane, the eleven-package sweep `aaad682dbc`, spec) | retire the nine dead `contributes` members, `drivers` among them, with driver-memory's manifest corrected in the same change | | `#11065` | 2 | 3 | `20950404c` | commit | reused (stage 4) | count a boolean aggregand as 1/0 in avg and sum, on driver-memory's data face and analytics face | | `#11332` | 2 | 0 | `dce5cd4f0` | commit | reused (cli lane, the eleven-package sweep, spec) | retire the plugin manifest's dead top-level containers (`capabilities`, `configuration`, `extensions`), driver-memory's manifest included | | `#13195` | 8 | 11 | `9dac1ae01` | commit | reused (spec stage 4) | `$exists` means HAS A VALUE on the live mingo path, the analytics face and `translateFilter`, with the lowered `$exists` promoted to its own `$and` branch when its key is taken; its changeset records the maintainer's 2026-08-30 ruling | | `#13197` | 16 | 11 | `56c093c4d` | commit | reused (stage 3, the types, rest and spec lanes) | driver-memory enforces field-level `unique`, refusing a colliding write with the ADR-0112 envelope; `updateMany` checks every row before mutating any | | `#14434` | 0 | 1 | `93940d492` | commit | reused (stage 4) | un-mask driver-memory's published `update` / `upsert` types (that pull request's squash) | | `#14435` | 3 | 3 | `20032594f` | commit | measured | publish the declared return types on `find()`, `findOne()` and `create()` | | `#16589` | 23 | 3 | `555a89cbd` | commit | reused (the services lane's pointer `5904005321` on this card) | refuse a tenant-scoped call instead of returning cross-organization rows: seam 3, `assertCallNotTenantScoped` | | `#16729` | 7 | 1 | `0f38ab084` | commit | reused (stage 4) | an explicit tenancy opt-out survives a partial `syncSchema` re-registration, on driver-memory and driver-sql | | `#16838` | 0 | 4 | `b90aff81f` | commit | measured | read a stored ARRAY as its elements in the equality arm, so both filter faces answer one filter one way | | `#17348` | 0 | 1 | `51efbf116` | commit | reused (spec stage 3) | type-gate a text operator over a declared temporal column; it pinned driver-memory's divergence by name and recorded the follow-up as filed | | `#17590` | 0 | 2 | `e04a0aff2` | commit | reused (stage 4) | compile `$contains` on a JSON column as a per-dialect MEMBERSHIP test; it created the `driver-sql` fixture these two sites copy | ## Wordings to check Most rewrites swap a tag in place (`[#N]` to `[commit SHA]`, `(#N)` to `(commit SHA)`, `#N's X` to `commit SHA's X`, `since #N` to `since commit SHA`), the form the landed stages use. These say more than the tag: - **`#17348`** (`memory-driver-filter-logic-conformance.test.ts:598`): 「the repair is in the driver, and it is #17348's, filed」 became 「the repair is in the driver, named as owed in commit 51efbf1 and filed」, with `:599` (「against #5499's investment freeze.」) untouched. `51efbf116` wrote this note, and its changeset records 「That divergence is filed as #17348 and pinned by name」. - **`#13195` where it was written while that card was open** (`memory-matcher-no-value-negated-operators.test.ts:32`): the sentence says `$exists` 「is the neighbouring cell」 and 「still read[s] it as key-presence」, and `:47` already calls that caution history. A bare swap would credit `9dac1ae01` with a still-open divergence, so it reads 「(the card commit 9dac1ae closed)」. The other site written while that card was open, `memory-exists-has-value-faces.test.ts:4`, is the file's title from the pin `9268aec56` took before the fix; the header under it says the file 「is no longer a pin of a divergence」 but was inverted in place, and `9dac1ae01` is the commit that inverted it, so a tag swap reads true there. - **A quotation of this note's own earlier text** (`memory-driver-document-not.test.ts:239`-`:241`, 「It used to say "… the direction is now #13166's and #13195's to settle."」): the dead number inside the quote became a bracketed editorial substitution, 「[commit 9dac1ae]'s」, so the quote stays recognisable as a quote and says where the edit is. It is the note quoting itself, not a ruling. - **Where the number named the defect, not the change**: 「(this is the #16589 defect)」 became 「(this is the defect commit 555a89c fixed)」 (`memory-tenancy-guard.ts:271`); 「This is the #16589 answer」 became 「This is the defect's answer (fixed in commit 555a89c)」 (`memory-tenant-scope-refusal.test.ts:139`); and in that file's reading table (`:29`) the cell 「the #16589 defect」 became 「what commit 555a89c fixed」, which fits the column's 28-character width, so the table stays aligned and no row is added. - **Slash and list pairs**: 「#13197/#13239」 became 「commit 56c093c and #13239」 (two sites); 「#13197 / #13239」 became 「commit 56c093c / #13239」; 「[#13197, #13239]」 became 「[commit 56c093c, #13239]」 (four sites); 「(#11332 / #10724 / #4914)」 became 「(commit dce5cd4 / commit be21955 / #4914)」, the exact form the eleven-package sweep (`aaad682dbc`) gave the same sentence in `plugin-hono-server`. - **`driver-sql`'s fixture** (`memory-20874-contains-membership.test.ts:63`, `:110`): 「`driver-sql`'s #17590 fixture」 / 「assertions」 became 「`driver-sql`'s commit e04a0af fixture」 / 「assertions」; `e04a0aff2` created `sql-driver-17590-json-column-membership.test.ts`. - **Dated rulings keep their date**: the `#13195` sites that say 「ruled … 2026-08-30」 keep it (`9dac1ae01`'s changeset and docblocks carry 「the maintainer ruled on 2026-08-30」). - **Capitalisation**: where the number opened a sentence, the new text opens with 「Commit」 (five sites). - No line was reflowed, so some are longer than their block's wrap (`eslint.config.mjs` declares no line-length rule, and a reflow would move neighbouring lines and every line citation into the file). ## Sites left - **In comments (src, test, the two config files): none.** - **String literals: 21 test-string sites, 7 numbers, 11 files** (`describe` and `it` titles, assertion arguments): `#13195` 7, `#13197` 7, `#11065` 2, `#16838` 2, `#14435` 1, `#16589` 1, `#16729` 1. Every one of the 7 is in this stage's population, so the table above holds an anchor for each. Non-test strings carry none. Strings are outside this stage's surface. - **Outside `src`:** the release-owned `CHANGELOG.md` names dead numbers on 18 sites (11 numbers); left. `package.json`, `tsconfig.json`, `README.md` and `LICENSE` cite no dead number. ## Mechanical guard: no code token moves The guard (stages 2 to 4's) compares base `5fd4855a9` against the working tree over all 27 touched files, with TypeScript 6.0.3 (`tsconfig.typecheck.json` through `ts.parseJsonText`, the same two walks): - **Reading 1**: the parser's leaf nodes, from a `forEachChild` walk. Comments are trivia there, and JSDoc is never visited. A leaf that is not itself a token is re-scanned with trivia skipped. - **Reading 2**: the full token stream in parser context, from a `getChildren` walk, JSDoc nodes skipped. String, template and numeric literals are compared in full on both readings. Results: - Real run at the head: 61,808 base tokens, **0 files with a token change** (exit 0). - Comment control (「The declaration dies with the table.」 to 「DIES」, `memory-driver.ts`): 0 files changed (exit 0). - Positive control, an identifier (`tenantFieldOf` to `tenantFieldOfX`, `memory-unique-constraint.ts`): DIFFER on both readings (exit 1). - Positive control, a string literal (`'MEMORY_MULTI_TENANT_UNSUPPORTED'` to `…X`, `memory-tenancy-guard.ts`): DIFFER on both readings (exit 1). - Positive control, a numeric literal (`UNIQUE_VIOLATION_STATUS = 409` to `410`, `memory-unique-constraint.ts`): DIFFER on both readings (exit 1). - Positive control, a JSON value (`"rootDir": "."` to `"./"`, `tsconfig.typecheck.json`): DIFFER on both readings (exit 1). Each mutation went through `scripts/ablation-replace.mjs` (wrap mode, anchor hit 1 to 0) under a shell trap that restores by absolute path from `HEAD`. Each restore was proven equal to its `HEAD` blob (`ac823bf8fa9b`, `eb0eb11358ea`, `7b008c1f12b7`, `eb0eb11358ea`, `88035b359542`), with `git diff HEAD` empty and a clean tree afterwards. ## Changeset: `patch` (`dist` measured) `files[]` is `dist`, `README.md` and `CHANGELOG.md`, and the package is not private. The dependency closure and the package were built first (`turbo run build --filter='@objectstack/driver-memory^...' --filter=@objectstack/driver-memory`, 5 of 5 tasks, VERDICT command-exit 0). Then the package's own `build` (tsup plus `check-dts-emitted`) ran three times in one script under the shared verify lock (VERDICT command-exit 0), at `17f667f86`: - **Leg 1**, the head text: 6 `dist` files hashed. Of the 62 rewritten non-test lines, 20 appear verbatim in `dist`: 11 from `memory-driver.ts`, 4 each from `memory-tenancy-guard.ts` and `memory-unique-constraint.ts`, 1 from `memory-analytics.ts`; in `index.d.ts` / `index.d.mts` (16) and `index.js` / `index.mjs` (10). - **Leg 2**, the base text put back in the 7 non-test touched files (7 of 7 proven equal to their base blob): 4 of the 6 files differ from leg 1 (`index.d.ts`, `index.d.mts`, `index.js`, `index.mjs`), and `scripts/ablation-dist-preflight.mjs` finds the base marker 「[#16729] One driver's record」 in 2 built files (exit 0). - **Leg 3**, after the proven restore (7 of 7 equal to their `HEAD` blob, `git diff HEAD` empty, porcelain empty): all 6 files are byte-identical to leg 1, and the preflight's `--absent` reading exits 0, so the build is deterministic and the difference is the rewrite. So the rewrite ships, and `.changeset/20595-driver-memory-provenance-anchors.md` declares a `patch` for `@objectstack/driver-memory`, comment text only, with the claim's `Clause-②: no` line. The later changeset commit and the merge of `main` touch no file under `packages/drivers/driver-memory`. ## Gates (head `381dddc9c`) - **Derived gates:** `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` at `381dddc9c` (28 paths against merge base `fbe2debb7`, 220 changed lines) derived 62 commands. All 62 ran, each exit code captured before any pipe: 62 exit 0. `--ran` reports 「62 derived, 62 run, 0 NOT-MEASURED, 0 UNRUN」 (a derived zero) and exits 0. - **Roster families the derivation flags under a touched directory**, also run, each exit 0: `node scripts/check-changeset-fixed.mjs`, `pnpm check:authz-resolver`, `pnpm check:error-code-casing`, `pnpm check:filter-alias-parity`, `pnpm check:object-def-param-keys`, `pnpm check:tenant-chokepoint`. - **Named readings:** `node scripts/check-issue-citations.mjs` exits 0 (「every citation this change adds resolves」, 7 judged across 5 files); `pnpm check:issue-citations` exits 0 (self-test, 173 cases, 9 batteries); `pnpm check:doc-authoring` exits 0 (the sibling-package prose-id baseline holds, no growth); `pnpm check:nul-bytes` exits 0 (9,669 files, no raw control bytes), and a control-byte grep over the 28 changed files finds none (exit 1). - **Build before the gates:** `turbo run build --filter='./packages/*' --filter='./packages/*/*' --concurrency=2` at `381dddc9c`, 71 of 71 tasks, VERDICT command-exit 0. - **Tests and typecheck, under the verify lock, at `381dddc9c`:** `pnpm --filter @objectstack/driver-memory test`: 70 test files pass (70), 1,718 tests pass (1,718), exit 0; `pnpm --filter @objectstack/driver-memory typecheck` (both programs, `tsconfig.json` and `tsconfig.typecheck.json`) exits 0. `tsc --listFiles` puts all 70 tracked test files and the 25 changed `src` files in the `tsconfig.json` program, and `objectstack.config.ts` in the `tsconfig.typecheck.json` one. - **Lint, as a proven narrowing:** eslint with inline config disabled, over the 26 touched `.ts` files plus `dist/index.js` as the control: 27 results, 0 errors and 1 warning, the control's ignore notice; none of the 26 is reported ignored. `eslint.config.mjs` never enables type-aware linting (its lines 327-328 say so), so a comment edit cannot move the verdict on an untouched file. `tsconfig.typecheck.json` is not an eslint target (run alone, eslint answers 「File ignored because no matching configuration was supplied」); the token guard covers it. The repo-wide `pnpm lint` is CI's run. ## Acceptance notes - **Base.** The branch was cut at `5fd4855a9` and merged with `main` once, at `fbe2debb7`, before the gates (merge `381dddc9c`, no conflict, no file under `packages/drivers/driver-memory`, and neither `check-issue-citations.mjs` nor `dispatch-gates.mjs`). `45ce12a48` (the last `driver-memory` change before this stage) is in the base (`merge-base --is-ancestor` exit 0; control `13a24ece2`, exit 0). The net diff against `main` is the 27 rewritten files (+103/−103) and the changeset. - **One sentence keeps a deictic whose antecedent was the number.** `memory-exists-has-value-faces.test.ts:264` says 「not in the card」 two lines under the tag that named that card, now `[commit 9dac1ae]`. It has no number of its own, so it was not touched. - **Wording only:** no line without a number was changed. --- _Generated by [Claude Code](https://claude.ai/code/session_017xfMoEjKUuSh2xYB8sCozp)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7b21af8 commit db0cf22

28 files changed

Lines changed: 117 additions & 103 deletions
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
'@objectstack/driver-memory': patch
3+
---
4+
5+
Provenance comments in `@objectstack/driver-memory` cite the commits that decided them, not tracker numbers that no longer resolve
6+
7+
Clause-②: no
8+
9+
Docblocks and comments across the package cited issue-tracker numbers that now answer 404 on GitHub.
10+
Each one now cites the commit in this repository's history that made the decision it describes. Some of
11+
these docblocks sit on exported members, so the reworded text appears in the published `index.d.ts` /
12+
`index.d.mts`, and comments that esbuild keeps appear in the JavaScript output.
13+
14+
Comment only: no export, type, error code, status, message text or runtime behaviour changes.

‎packages/drivers/driver-memory/objectstack.config.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ const MemoryDriverPlugin: ObjectStackManifest = {
1616
scope: 'project',
1717
description: 'A reference specification implementation of the IDataDriver interface using in-memory arrays. Suitable for testing and development.',
1818

19-
// `configuration` and `capabilities` were retired (#11332, ADR-0049
19+
// `configuration` and `capabilities` were retired (commit dce5cd4f0, ADR-0049
2020
// enforce-or-remove): nothing ever read either container. The settings this
2121
// driver needs are passed by the host that composes it (the options object
2222
// handed to its constructor), and protocol/capability discovery never
2323
// consulted the declaration — dependency resolution runs off top-level
2424
// `dependencies`.
2525

26-
// `contributes.drivers` was retired (#10724, ADR-0049): the declaration drove
26+
// `contributes.drivers` was retired (commit be21955ba, ADR-0049): the declaration drove
2727
// nothing — this driver is wired by registering the `driver.memory` kernel
2828
// service (the objectql plugin calls `registerDriver` on `driver.*` services),
2929
// which is the enforced channel.

‎packages/drivers/driver-memory/src/index.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,21 @@ export {
1818
MULTI_TENANT_UNSUPPORTED_CODE,
1919
assertSingleTenantPosture,
2020
assertObjectsNotTenantScoped,
21-
// [#16589] Seam 3 — the per-call refusal. Exported on the same reasoning as
21+
// [commit 555a89cbd] Seam 3 — the per-call refusal. Exported on the same reasoning as
2222
// the two boot seams above: a consumer asserting this driver's behaviour under
2323
// a tenant scope needs the refusal's identity, not its message text.
2424
assertCallNotTenantScoped,
2525
declaresTenantScope,
2626
} from './memory-tenancy-guard.js';
2727
export type { TenancyAwareSchema } from './memory-tenancy-guard.js';
2828

29-
// [#13197, #13239] Uniqueness on BOTH declaration surfaces — field-level
29+
// [commit 56c093c4d, #13239] Uniqueness on BOTH declaration surfaces — field-level
3030
// `unique` and object-level declared `indexes[]` — with the refusal's wire
3131
// identity and the scoping helpers, exported so a consumer can assert the
3232
// envelope (`code` AND `status`, never merely "it threw") without
3333
// string-matching the message.
3434
//
35-
// [#16729] `computeAndRecordTenantField` is published BESIDE `tenantFieldOf`,
35+
// [commit 0f38ab084] `computeAndRecordTenantField` is published BESIDE `tenantFieldOf`,
3636
// not kept private, because publishing only the inner half is what let this
3737
// package diverge in the first place: `tenantFieldOf` mirrors
3838
// `SqlDriver.computeTenantField`, the stickiness lives in the wrapper AROUND

‎packages/drivers/driver-memory/src/memory-20874-contains-membership.test.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ import { MemoryAnalyticsService } from './memory-analytics.js';
6060

6161
const byId = (a: string, b: string) => a.localeCompare(b);
6262

63-
/** `driver-sql`'s #17590 fixture, plus its #20874 `owners` column. */
63+
/** `driver-sql`'s commit e04a0aff2 fixture, plus its #20874 `owners` column. */
6464
const MEMBERSHIP = {
6565
object: 'mem20874_membership',
6666
fields: {
@@ -107,7 +107,7 @@ const SHAPES = {
107107
type Fixture = typeof MEMBERSHIP | typeof SHAPES;
108108
type Case = readonly [name: string, where: FilterCondition, expected: readonly string[]];
109109

110-
/** Fixture one — `driver-sql`'s #17590 assertions, verbatim, and #20874's. */
110+
/** Fixture one — `driver-sql`'s commit e04a0aff2 assertions, verbatim, and #20874's. */
111111
const MEMBERSHIP_CASES: readonly Case[] = [
112112
['tags: the member row, never the substring row', { tags_: { $contains: 'red' } }, ['1']],
113113
['tags: a whole member', { tags_: { $contains: 'redwood' } }, ['2']],

‎packages/drivers/driver-memory/src/memory-analytics-echo-operator-coverage.test.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ describe('[#7117] the analytics echo renders the query it describes', () => {
364364
});
365365

366366
/**
367-
* [#13195] The one cell where SQL could not say what mingo said — CLOSED,
367+
* [commit 9dac1ae01] The one cell where SQL could not say what mingo said — CLOSED,
368368
* and closed from the mingo side.
369369
*
370370
* This assertion used to be an INEQUALITY, kept so the split could not be
@@ -468,7 +468,7 @@ describe('[#7117] the analytics echo renders the query it describes', () => {
468468
it(`${op}: running the echo returns exactly the rows the query returns`, async () => {
469469
const executed = await executedIds(where);
470470
const echoed = await echoIds(where);
471-
// [#13195] `$exists` used to return early here — the documented residue
471+
// [commit 9dac1ae01] `$exists` used to return early here — the documented residue
472472
// above was asserted there and skipped in this loop, so the loop was a
473473
// statement about every OTHER operator. The residue is gone, the skip
474474
// with it, and this loop is now total over the face's vocabulary.

‎packages/drivers/driver-memory/src/memory-analytics.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ const CUBE_OPERATOR_TO_MONGO_PREDICATE: Readonly<Record<CubeOperator, MongoPredi
358358
// builds for `$notContains` (`memory-driver.ts` `normalizeFieldOperators`) —
359359
// and, since #20874, the SAME test it builds, membership or substring.
360360
notContains: ({ raw, containment }) => ({ $not: containment(raw[0]) }),
361-
// [#13195] A presence flag, not a comparand — and "present" means HAS A
361+
// [commit 9dac1ae01] A presence flag, not a comparand — and "present" means HAS A
362362
// VALUE (`!= null`), never key presence: #5298 leg 3 / #5369, landed in PR
363363
// #5962, ruled onto this face 2026-08-30. It used to emit `{$exists: <bool>}`
364364
// and hand it to mingo, which reads key presence, so this exit EXECUTED the
@@ -555,7 +555,7 @@ function globSubstringPattern(value: unknown): string {
555555
* `memory-analytics-echo-operator-coverage.test.ts` so it could not be closed
556556
* in silence.
557557
*
558-
* [#13195] It was not closed in silence: the maintainer ruled on 2026-08-30
558+
* [commit 9dac1ae01] It was not closed in silence: the maintainer ruled on 2026-08-30
559559
* that `$exists` means HAS A VALUE (`!= null`) on every exit — #5298 leg 3 /
560560
* #5369, shipped in PR #5962 and until then still unmet here — so the mingo
561561
* twin now emits `{$ne: null}` / `{$eq: null}`. SQL's `IS NOT NULL` was already
@@ -660,7 +660,7 @@ function sizeDistinctSet(values: readonly unknown[]): number {
660660
}
661661

662662
/**
663-
* [#11065] `path`, with a BOOLEAN rendered as the number it is worth — the
663+
* [commit 20950404c] `path`, with a BOOLEAN rendered as the number it is worth — the
664664
* aggregand expression `$sum` and `$avg` consume on this face, and, since the
665665
* #11152 ruling (maintainer 2026-08-28: booleans aggregate as numbers on every
666666
* face, no per-aggregate exception), `$min` and `$max` as well.

‎packages/drivers/driver-memory/src/memory-boolean-aggregand.test.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
22

33
/**
4-
* [#11065] `avg` and `sum` over a BOOLEAN column answer the SQL number here too.
4+
* [commit 20950404c] `avg` and `sum` over a BOOLEAN column answer the SQL number here too.
55
*
66
* ## The measurement this file pins
77
*
@@ -248,7 +248,7 @@ describe('[#11065] InMemoryDriver data face — a boolean aggregand is worth 1 o
248248
*
249249
* It reaches the numbers by a different route — a mingo `$group` expression
250250
* rather than JavaScript — and mingo's `$avg` ignores a non-numeric value
251-
* exactly as MongoDB's does, so before #11065 this face had the identical
251+
* exactly as MongoDB's does, so before commit 20950404c this face had the identical
252252
* divergence on its own account: `{avg: null, sum: 0}` over the same five rows.
253253
* Aligning the data face alone would have left it free to keep that answer,
254254
* which is the same mistake #6814 recorded on `count_distinct`.

‎packages/drivers/driver-memory/src/memory-bulk-create-atomicity.test.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020
* ```
2121
*
2222
* ⛔ Asserting "the refusal still happens" proves NOTHING here — the refusal
23-
* was already correct, and #13197 / #13239 already pin it. That assertion was
23+
* was already correct, and commit 56c093c4d / #13239 already pin it. That assertion was
2424
* green throughout the defect's entire life. **The discriminating fact is that
2525
* THE ROW COUNT DOES NOT MOVE**, so every test below reads the store after the
2626
* refusal rather than stopping at the envelope.
2727
*
28-
* The fix is `updateMany`'s posture, one method over: #13197 made that method
28+
* The fix is `updateMany`'s posture, one method over: commit 56c093c4d made that method
2929
* prepare and check every row before mutating any of it, precisely so a
3030
* half-applied batch cannot happen. The two batch paths of this driver now
3131
* give the SAME answer to "is a batch atomic?" — they disagreed for as long as

‎packages/drivers/driver-memory/src/memory-bulk-update-delete-atomicity.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* are the third and fourth batch doors it did not reach.
1616
*
1717
* ⛔ Asserting "the refusal still happens" proves NOTHING here — the refusal
18-
* was already correct (#13197/#13239 pin `assertUnique`, `delete`'s own
18+
* was already correct (commit 56c093c4d and #13239 pin `assertUnique`, `delete`'s own
1919
* strict-mode throw predates this file). **The discriminating fact is that
2020
* the TABLE DOES NOT MOVE**, so every test below reads the store back after
2121
* the refusal — full rows, not just a count — rather than stopping at the

‎packages/drivers/driver-memory/src/memory-compensated-sum.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* (`in-memory-aggregation-compensated-sum.test.ts`) against the same literals.
2323
*
2424
* Both faces, and both doors of the data face, are driven: one face aligned
25-
* alone is how this package's faces come to disagree (#5374, #6814, #11065).
25+
* alone is how this package's faces come to disagree (#5374, #6814, commit 20950404c).
2626
*/
2727

2828
import { describe, it, expect, beforeEach } from 'vitest';

0 commit comments

Comments
 (0)