Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .changeset/freeze-prose-past-tense-5499.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
---
"@objectstack/spec": patch
---

Restate the dissolved #5499 investment freeze in the past tense at the migration-registry sites that still asserted it as live.

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 five sentences in the ADR-0087 migration registry still asserted it in the present tense — three of them citing the freeze as the standing reason a known divergence is not being fixed. Those sentences ship: they are carried by the published `spec-changes.json` and by the generated `docs/protocol-upgrade-guide.md`, so a reader of either was told a premise that expired 18 days earlier.

Each site is re-dated so it records what was true when the ruling was taken, keeping the #5499 anchor rather than deleting it. No ruling is re-argued and no divergence is dispositioned — the rationales all survive losing the freeze premise, and the debts the thaw makes due are left explicitly open for triage.
10 changes: 5 additions & 5 deletions docs/protocol-upgrade-guide.md

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion packages/services/service-analytics/src/read-scope-sql.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -177,7 +177,12 @@ import {
* value as a THIRD semantics ("the key is absent from the record") and is
* deliberately left alone — deciding it here would settle #5299's
* key-missing-vs-value-null question as a side effect — and `driver-memory` /
* `driver-mongodb` stay pin-only under the #5499 freeze.
* `driver-mongodb` were pin-only under the #5499 freeze when #6125 scoped this,
* so this compiler and those two answer the cell differently on purpose — a debt
* #6125 recorded as owed AT THAW. The thaw has arrived: the freeze dissolved
* 2026-08-11 (head note of `@objectstack/spec`'s `aggregation-conformance.ts`),
* so that debt is now DUE rather than deferred, and nothing has been triaged
* against it yet.
*
* The eleventh message was measured against `looksLikeInternalErrorLeak` before
* being added, because the section above turns on that predicate answering FALSE
Expand Down
12 changes: 6 additions & 6 deletions packages/spec/spec-changes.json

Large diffs are not rendered by default.

Original file line numberDiff line numberDiff line change
Expand Up@@ -29,7 +29,8 @@ export const entry: SemanticMigration = {
+ 'fed the values into a Set (dedupe-then-Set is Set), and dedupe does not move '
+ '`min`/`max`. ENFORCE was weighed and rejected (maintainer ruling 2026-08-09): '
+ '`count_distinct` already covers the only spelling anyone has measured demand for, '
+ 'and lowering `SUM(DISTINCT …)` across five faces — two of them frozen under #5499 — '
+ 'and lowering `SUM(DISTINCT …)` across five faces — two of them then frozen under '
+ '#5499, a freeze lifted 2026-08-11, after this ruling — '
+ 'buys a shape that is near-universally a modelling mistake. A REQUEST surface — '
+ '`QueryAST` is the client SDK builder\'s output and the `POST /data/:object/query` '
+ 'body, never stored in stack metadata — so there is no source for the chain to '
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,8 +41,9 @@ export const entry: SemanticMigration = {
+ 'valid filter — one constraining columns named `object` and `where` — and so is a '
+ 'FilterArray. Both reach `distinct` type-checked and are refused at run time, '
+ 'loudly, with INVALID_FILTER / 400. `driver-memory`\'s opposite half — where the '
+ 'BARE spelling returns the unfiltered set in silence — stays open under the #5499 '
+ 'freeze (#6320). ADR-0087, #6320.',
+ 'BARE spelling returns the unfiltered set in silence — stayed open under the #5499 '
+ 'freeze, which was lifted on 2026-08-11; it is still open, now unexcused rather than '
+ 'deferred (#6320). ADR-0087, #6320.',
acceptanceCriteria:
'No caller passes a non-object to `distinct()`\'s third argument. A scalar there is '
+ 'now a compile error (`TS2345: Argument of type \'string\' is not assignable to '
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,7 +21,8 @@ export const entry: SemanticMigration = {
+ 'run on `driver-mongodb` and on the engine\'s in-memory fallback, which is what makes '
+ 'this the one narrowing in the batch that removes reachable behaviour: an aggregation '
+ 'that worked on one backend and failed on another is exactly the unpredictability the '
+ 'ruling ended, and #5499 has both of those backends frozen. `count_distinct` was '
+ 'ruling ended, and #5499 had both of those backends frozen at the time (that freeze '
+ 'was lifted on 2026-08-11). `count_distinct` was '
+ 'deliberately NOT retired with them (maintainer, 2026-08-07) — it takes ADR-0049\'s '
+ 'enforce leg, and its SQL lowering is a separate drivers-side card. ADR-0049, #6188.',
acceptanceCriteria:
Expand Down
21 changes: 13 additions & 8 deletions packages/spec/src/migrations/registry.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1249,8 +1249,9 @@ const step17: MigrationStep = {
'with a notice each. Nothing is lost: `compileDataset` refused both by name already, so ',
'such a measure never produced a number. `QueryAST.aggregations[].function` is a request ',
'surface with no stored source — one semantic TODO below. The mongodb and in-memory ',
'backends that implemented these two are inside the #5499 freeze and are untouched; their ',
'code is simply no longer reachable through a spec-valid request.\n\n',
'backends that implemented these two were inside the #5499 freeze when this was decided ',
'(it was lifted on 2026-08-11) and are untouched; their code is simply no longer reachable ',
'through a spec-valid request.\n\n',
'The same aggregation node loses one more member, and it is the sharper class of the two: ',
'`aggregations[].distinct` is removed (#6815, ADR-0049, maintainer ruling 2026-08-09). ',
'The functions above were declared and UNLOWERED — a caller on a SQL datasource got a ',
Expand All@@ -1270,8 +1271,9 @@ const step17: MigrationStep = {
'per the ruling: `count_distinct` (which just took the enforce leg above, and whose SQL ',
'lowering #6409 landed) already covers the only deduplicating spelling with measured ',
'demand, while `SUM(DISTINCT …)` / `AVG(DISTINCT …)` are near-universally a modelling ',
'mistake and would have to be lowered across five faces, two of them frozen under #5499, ',
'to buy it. The blast radius inside the fallback is narrower than the key suggests and was ',
'mistake and would have to be lowered across five faces, two of them then frozen under ',
'#5499 (lifted 2026-08-11, after this ruling), to buy it. The blast radius inside the ',
'fallback is narrower than the key suggests and was ',
'measured rather than assumed: only `sum` and `avg` ever changed answer — `count` returned ',
'from its own branch before reaching the dedupe, `count_distinct` fed a Set, and dedupe ',
'does not move `min`/`max`. `AggregationNodeSchema` is non-strict, so the key is ',
Expand DownExpand Up@@ -1693,7 +1695,8 @@ const step17: MigrationStep = {
+ 'fed the values into a Set (dedupe-then-Set is Set), and dedupe does not move '
+ '`min`/`max`. ENFORCE was weighed and rejected (maintainer ruling 2026-08-09): '
+ '`count_distinct` already covers the only spelling anyone has measured demand for, '
+ 'and lowering `SUM(DISTINCT …)` across five faces — two of them frozen under #5499 — '
+ 'and lowering `SUM(DISTINCT …)` across five faces — two of them then frozen under '
+ '#5499, a freeze lifted 2026-08-11, after this ruling — '
+ 'buys a shape that is near-universally a modelling mistake. A REQUEST surface — '
+ '`QueryAST` is the client SDK builder\'s output and the `POST /data/:object/query` '
+ 'body, never stored in stack metadata — so there is no source for the chain to '
Expand DownExpand Up@@ -2794,8 +2797,9 @@ const step17: MigrationStep = {
+ 'valid filter — one constraining columns named `object` and `where` — and so is a '
+ 'FilterArray. Both reach `distinct` type-checked and are refused at run time, '
+ 'loudly, with INVALID_FILTER / 400. `driver-memory`\'s opposite half — where the '
+ 'BARE spelling returns the unfiltered set in silence — stays open under the #5499 '
+ 'freeze (#6320). ADR-0087, #6320.',
+ 'BARE spelling returns the unfiltered set in silence — stayed open under the #5499 '
+ 'freeze, which was lifted on 2026-08-11; it is still open, now unexcused rather than '
+ 'deferred (#6320). ADR-0087, #6320.',
acceptanceCriteria:
'No caller passes a non-object to `distinct()`\'s third argument. A scalar there is '
+ 'now a compile error (`TS2345: Argument of type \'string\' is not assignable to '
Expand DownExpand Up@@ -4046,7 +4050,8 @@ const step17: MigrationStep = {
+ 'run on `driver-mongodb` and on the engine\'s in-memory fallback, which is what makes '
+ 'this the one narrowing in the batch that removes reachable behaviour: an aggregation '
+ 'that worked on one backend and failed on another is exactly the unpredictability the '
+ 'ruling ended, and #5499 has both of those backends frozen. `count_distinct` was '
+ 'ruling ended, and #5499 had both of those backends frozen at the time (that freeze '
+ 'was lifted on 2026-08-11). `count_distinct` was '
+ 'deliberately NOT retired with them (maintainer, 2026-08-07) — it takes ADR-0049\'s '
+ 'enforce leg, and its SQL lowering is a separate drivers-side card. ADR-0049, #6188.',
acceptanceCriteria:
Expand Down
Loading