Skip to content

Commit bfaada0

Browse files
os-trumpclaude
andauthored
docs: restate the dissolved #5499 freeze prose on surviving grounds (#13196)
The maintainer lifted the #5499 investment freeze for driver-mongodb and driver-memory on 2026-08-11 (recorded in the head note of packages/spec/src/data/aggregation-conformance.ts), but ~13 in-code sites still asserted it in the present tense, three of them as the REASON for a structural choice. Group A (present-tense claims): re-dated so each records what was true when it was written, keeping the #5499 anchor. Group B (three design rationales in packages/spec/src/data/): each rationale survives losing the freeze premise and is restated on the surviving ground — the #7956 divergence matrix and the #7872 / #8234 shared-face rulings. The freeze is kept on record as the premise the argument was FIRST made from, never silently deleted. Group C (dated/historical records) is untouched, and so is packages/spec/src/migrations/registry.ts, which is generated. packages/runtime/src/datasource-autoconnect.test.ts asserted RETIREMENT, not freeze, on the same anchor: re-anchored to #5704 / #6664, the mechanism that actually owns it and that check:driver-memory-census enforces. filter-logic-conformance.ts:179 is deliberately left alone: it is the table cell for the behavioural divergence #13166 owns, and that card is undecided. Co-authored-by: Claude <noreply@anthropic.com>
1 parent 33184fd commit bfaada0

12 files changed

Lines changed: 78 additions & 41 deletions

packages/objectql/src/engine-autonumber-resync.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -680,9 +680,11 @@ describe('ObjectQL autonumber resync (#6806)', () => {
680680

681681
// The honest outcome: the number is issued a second time, the write
682682
// SUCCEEDS, and nothing anywhere says so. Fixing this needs uniqueness in
683-
// the driver — `packages/drivers/**` is under the #5499 freeze, and a
684-
// pre-issue existence probe in the engine would cost a query per insert
685-
// and still be racy. Reported as a follow-up, not implemented here.
683+
// the driver, and a pre-issue existence probe in the engine would cost a
684+
// query per insert and still be racy. (`packages/drivers/**` was under
685+
// the #5499 freeze when this was written; it was lifted on 2026-08-11,
686+
// and the remedy is still the driver's.) Reported as a follow-up, not
687+
// implemented here.
686688
expect(written.doc_no).toBe('D-0005');
687689
expect(rows.filter((r) => r.doc_no === 'D-0005')).toHaveLength(2);
688690
// One create attempt: with no rejection there is nothing to retry.

packages/objectql/src/engine.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4462,8 +4462,10 @@ export class ObjectQL implements IObjectQLEngine {
44624462
* driver, NOT a pre-issue existence probe here: a probe costs a query on every
44634463
* insert (the cost this resync was designed to avoid) and is still racy, so it
44644464
* would trade a silent duplicate for a rarer silent duplicate at double the
4465-
* read cost. `packages/drivers/**` is under the #5499 investment freeze, so
4466-
* that work is not this change's to do.
4465+
* read cost. `packages/drivers/**` was under the #5499 investment freeze when
4466+
* this was written, so that work was not this change's to do; the freeze was
4467+
* lifted on 2026-08-11 and the remedy is still the driver's, still not done
4468+
* here.
44674469
*
44684470
* # And when it does not converge
44694471
*

packages/objectql/src/filter-comparand-shape.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
* `assertListComparandShapes` below is a DELEGATING WRAPPER. The rule "a list
1212
* operator takes a list" has exactly one implementation, and it is
1313
* `@objectstack/spec/data`'s `filter-comparand-shape.ts`, whose module note
14-
* carries the divergence table, the #5499 freeze argument and the
14+
* carries the divergence table, the shared-face argument (including the record
15+
* of the dissolved #5499 freeze it was first argued from) and the
1516
* deliberately-not-refused list. Read that file for the rule; read this
1617
* function for the engine's two call sites and its wording contract.
1718
*

packages/objectql/src/search-filter.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@
3030
* `$icontains` (#6520 / #6682): both `driver-sql` compilers (and
3131
* `driver-sqlite-wasm` / turso-local by inheritance), turso's independent
3232
* `RemoteTransport`, service-analytics' read-scope and cube lowerings,
33-
* `formula`'s RLS matcher, objectql's own HAVING evaluator, and the frozen
34-
* `driver-memory` / `driver-mongodb` (#5499).
33+
* `formula`'s RLS matcher, objectql's own HAVING evaluator, and
34+
* `driver-memory` / `driver-mongodb` — which got it as a sanctioned one-off
35+
* while they were under the #5499 investment freeze, lifted 2026-08-11.
3536
*
3637
* Pinyin recall (#2486): when the object carries the hidden `__search`
3738
* companion column (provisioned by the SchemaRegistry when

packages/objectql/src/temporal-comparand-door.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@
5757
* makes the zero non-vacuous).
5858
*
5959
* The only other seam holding both facts is the driver layer — four packages
60-
* each mirroring one function, under the #5499 investment freeze, where the
61-
* pass-through is a DELIBERATE contract with counter-pins asserting it
62-
* (`sql-driver-temporal-dialect.test.ts` asserts
60+
* each mirroring one function (they sat under the #5499 investment freeze when
61+
* this door was placed; it was lifted on 2026-08-11, and it is not what rules
62+
* that seam out), where the pass-through is a DELIBERATE contract with
63+
* counter-pins asserting it (`sql-driver-temporal-dialect.test.ts` asserts
6364
* `temporalFilterValue('t','at','not-a-date') === 'not-a-date'` on purpose) and
6465
* where `storageDatetimeValue` is shared with the WRITE path and the legacy
6566
* read-repair, so refusing there would also reject ingest of pre-convention

packages/runtime/src/datasource-autoconnect.test.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@
1616
// to `@objectstack/driver-sql` + better-sqlite3 `:memory:` — the repo's
1717
// canonical ephemeral store (`examples/app-crm`, `cli db clean`). driver-memory
1818
// is the project's legacy test-convenience backend and its in-project test
19-
// surface is being retired (#5499). `:memory:` keeps every acceptance below
20-
// hermetic: the database lives and dies inside the process, so nothing reaches
21-
// the host filesystem and each boot starts empty.
19+
// surface is being retired — by #5704, which migrated the test backends, and
20+
// #6664, which replaced the prose census with the ledger
21+
// `check:driver-memory-census` enforces. NOT by #5499: that was an INVESTMENT
22+
// freeze, a different proposition on the same anchor, and it was lifted on
23+
// 2026-08-11 while the retirement carried on. `:memory:` keeps every
24+
// acceptance below hermetic: the database lives and dies inside the process, so
25+
// nothing reaches the host filesystem and each boot starts empty.
2226

2327
import { describe, it, expect, beforeAll, afterAll, beforeEach, afterEach } from 'vitest';
2428
import { existsSync, rmSync } from 'node:fs';

packages/runtime/src/package-service.null-seam.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
* ## Why the driver here is a LOCAL DOUBLE, not `@objectstack/driver-memory`
1818
*
1919
* The first version of this file booted the real `InMemoryDriver`. That made it
20-
* a THIRD consumer of a package whose investment is frozen (#5499), arriving
21-
* after #5704 migrated the test backends and #6664 replaced the prose census
22-
* with a ledger — and `check:driver-memory-census` refused it, correctly.
20+
* a THIRD consumer of a package whose investment was frozen at the time (#5499,
21+
* lifted 2026-08-11), arriving after #5704 migrated the test backends and #6664
22+
* replaced the prose census with a ledger — and `check:driver-memory-census`
23+
* refused it, correctly. That gate is what still refuses it: the census is
24+
* #5704/#6664's and it outlived the freeze.
2325
*
2426
* The disposition taken was MIGRATE, not ledger. The two consumers a maintainer
2527
* ruled permanent are both kept because nothing can stand in for them: one needs

packages/spec/src/data/filter-comparand-shape.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,15 @@
3838
* The table above IS the argument for a shared face: three backends, three
3939
* answers, one declared contract. `driver-memory` already carries a shape gate
4040
* (`filter-refusal.ts`), but it is that package's own and no other driver reads
41-
* it — and both driver families are under a maintainer investment freeze
42-
* (#5499), so the policy cannot be grown per driver.
41+
* it. The second reason this was first argued from — both driver families sat
42+
* under the #5499 maintainer investment freeze, so the policy could not be
43+
* grown per driver — no longer holds: that freeze was lifted on 2026-08-11
44+
* (recorded in `./aggregation-conformance.ts`). The table is the reason that
45+
* survives, and it was always the load-bearing one: growing the policy per
46+
* driver means one declared contract with an implementation per backend, which
47+
* is what the three rows above measured. #8234 settled the same question one
48+
* branch over for comparand TYPE — "enforced once at the shared compile face
49+
* for all five drivers" — and this file is that answer for comparand SHAPE.
4350
*
4451
* [#9228] It now lives in `packages/spec` rather than in the engine. The gate
4552
* shipped at `@objectstack/objectql`'s lowering seam (PR #6209), which covers

packages/spec/src/data/filter-comparand-type-conformance.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@
2626
* - `door-refusal` cases: assert `parseFilterAST(filter)` throws the envelope
2727
* (`code` AND `status`, plus {@link ComparandTypeRefusalCase.mustMention}) —
2828
* proving the input can never reach this driver through a platform door.
29-
* This is how the frozen drivers (#5499) inherit the policy without a
30-
* driver-local patch.
29+
* This is how a driver that carries no comparand-type policy of its own
30+
* inherits this one without a driver-local patch. The property was argued
31+
* for while `driver-memory` and `driver-mongodb` were frozen (#5499, lifted
32+
* 2026-08-11) and does not depend on that: the door sits upstream of every
33+
* driver, so no driver has to hold a second copy of the rule.
3134
* - `matches` / `compiles` cases: hand `parseFilterAST(filter)` — the
3235
* door-validated, bigint-narrowed condition — to the driver's own execution
3336
* path and assert the row ids (`matches`) or merely that execution succeeds

packages/spec/src/data/filter-comparand-type.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,19 @@
2525
* `driver-mongodb` let the BSON encoder silently EDIT the document —
2626
* `{qty: undefined}` encoded to `{}`, a filter that matches EVERY row (the
2727
* matrix's worst cell: an amplifying, disclosure-shaped wrong answer when a
28-
* tenant or RLS predicate sits in the same object). Both driver families that
29-
* lack a policy are under the #5499 investment freeze, so the policy cannot be
30-
* grown per driver; it is promoted here, to the face the SQL family already
31-
* agrees with, and the frozen drivers inherit it by receiving already-validated
32-
* input (they sit behind the engine's lowering seam — see
28+
* tenant or RLS predicate sits in the same object). Neither driver family that
29+
* lacks a policy has one to grow. This door was first argued from the #5499
30+
* investment freeze — those drivers were frozen, so the policy could not be
31+
* grown per driver — and that premise is gone: the maintainer lifted the freeze
32+
* for `driver-mongodb` and `driver-memory` on 2026-08-11 (recorded in
33+
* `./aggregation-conformance.ts`). The shared face survives losing it on the
34+
* matrix's own terms. A policy grown per driver is one accepted set with an
35+
* implementation per backend, and #7956 measured what that produces: two camps,
36+
* one hole, and a silent-edit cell no reading had found. The #7872 ruling puts
37+
* the definition at this face for that reason, not for the freeze. So the set
38+
* stays promoted here, to the face the SQL family already agrees with, and the
39+
* two drivers that carry no policy of their own inherit it by receiving
40+
* already-validated input (they sit behind the engine's lowering seam — see
3341
* `@objectstack/objectql`'s `lowerWhereFilterArray` — and behind
3442
* {@link parseFilterAST}, which calls this walk on everything it returns).
3543
*
@@ -45,10 +53,10 @@
4553
* `RemoteTransport`'s `Date` → ISO 8601), and refuses one beyond ±2^53 loudly
4654
* rather than letting the precision loss answer silently. This is what makes
4755
* "each of the six accepted types compiles on every driver path" true on the
48-
* memory path too, without touching the frozen driver: after this door, no
49-
* `bigint` reaches mingo at all. Direct driver callers (not going through the
50-
* platform's doors) keep the drivers' native `bigint` binding, which stays
51-
* pinned in `driver-turso`'s own suite.
56+
* memory path too, with no driver-local patch in `driver-memory`: after this
57+
* door, no `bigint` reaches mingo at all. Direct driver callers (not going
58+
* through the platform's doors) keep the drivers' native `bigint` binding,
59+
* which stays pinned in `driver-turso`'s own suite.
5260
*
5361
* ## What is a LITERAL comparand — the positions this door judges
5462
*

0 commit comments

Comments
 (0)