Skip to content

docs: restate the dissolved #5499 freeze prose on surviving grounds (A/B/C, generated registry and #13166's cell untouched) - #13196

Merged
os-elon merged 2 commits into
mainfrom
claude/issue-13168-dissolved-freeze-residue
Aug 29, 2026
Merged

docs: restate the dissolved #5499 freeze prose on surviving grounds (A/B/C, generated registry and #13166's cell untouched)#13196
os-elon merged 2 commits into
mainfrom
claude/issue-13168-dissolved-freeze-residue

Conversation

@os-trump

Copy link
Copy Markdown
Collaborator

Fixes#13168

The maintainer lifted the #5499 investment freeze for driver-mongodb on 2026-08-11 and for driver-memory later the same day (evidence on disk: the head note of packages/spec/src/data/aggregation-conformance.ts). Roughly a dozen in-code sites still asserted that freeze in the present tense, and three of them used it as the REASON for a structural choice.

This PR is prose only. No code path, no schema, no export changes.

The denominator I measured, not the card's

grep -rn 5499 packages --include=*.ts at 39d5d8a60 gives 53 hits; minus the five in the GENERATED packages/spec/src/migrations/registry.ts that leaves 48 across 40 files, all anchored #5499 (no bare-number false positives). The same sweep at the card's own ref 56470d86b also gives 48, so the card's ~13 is an enumeration of a subset rather than a different measurement. Cross-referencing every line-ref the card names accounts for 24 of the 48; the other 24, in 15 files, were untriaged — all in packages the card never opened. They are not touched here (the dispatch pinned this PR's file surface to the card's own sites) and are filed as #13194.

A — present-tense claims, re-dated (9 sites, 1 deliberately skipped)

Each keeps its #5499 anchor and now records what was true when it was written, so the anchor stays findable and no history is lost.

SiteWhat it saidWhat it says now
objectql/src/engine.ts:4465packages/drivers/**is under the freeze, so that work is not this change's to dowas under it when written; freeze lifted 2026-08-11; the remedy is still the driver's, still not done here
objectql/src/engine-autonumber-resync.test.ts:683same claim, in the test that pins the silent duplicatethe surviving reasons lead (uniqueness belongs in the driver, a probe is racy and costs a query per insert); the freeze is a dated parenthesis
objectql/src/temporal-comparand-door.ts:60the driver layer, "under the #5499 investment freeze", is rejected as the seamthe freeze is dated and explicitly not what rules that seam out — the two decisive reasons (the pass-through is a DELIBERATE contract with counter-pins; storageDatetimeValue is shared with the WRITE path and read-repair) already carried it
objectql/src/search-filter.ts:34"the frozendriver-memory / driver-mongodb (#5499)"they got $icontains as a sanctioned one-off while under the freeze, lifted 2026-08-11
objectql/src/filter-comparand-shape.ts:14points readers at "the #5499 freeze argument" in the spec notepoints at the shared-face argument, including the record of the dissolved freeze it was first argued from — i.e. it describes what that note now says
runtime/src/package-service.null-seam.test.ts:20"a package whose investment is frozen (#5499)"was frozen at the time; and the sentence now names what still refuses the driver — check:driver-memory-census, which is #5704/#6664's and outlived the freeze
spec/src/data/index.ts:11"the frozen drivers (#5499) inherit one answer""the two drivers that carry no comparand-type policy of their own", plus a pointer to where the choice is argued
spec/src/data/filter-logic-conformance.ts:202the declined reversal would "touch the live query paths of two backends inside the freeze""that were then inside" it, lifted after this table was decided — the cost item stays on the record, the decision is not re-opened
spec/src/data/filter-logic-conformance.ts:212$exists cannot be enrolled because both backends are "frozen by#5499"they still read key-presence, and the freeze that once explained why is gone — "unexcused rather than deferred, but still a gap"

filter-logic-conformance.ts:179 is deliberately NOT touched

That cell — driver-memory reference matcher | no — DIVERGENT, frozen (#5499) | … — is the table cell for the behavioural divergence #13166 owns. #13166 is open and undecided (pm:queue / domain:engine / bug / priority:p1, verified at implementation time), and its triage forbids exactly this edit, verbatim: 「⛔ 但不要只把它们改成过去时……这两处的措辞随本卡的处置一起定,⛔ 不得先于处置改写」, on the reasoning #13089's triage gave — "Rewriting them to past tense without deciding the divergence would have converted an actionable defect into settled-looking prose." The cell also sits inside a dated measurement block ("Taken on 60f0dd8"), which makes it closer to group C than group A on its own terms. It is left exactly as it stands.

The datasource-autoconnect site was a RETIREMENT claim, and it was mis-attributed

runtime/src/datasource-autoconnect.test.ts:19 said the in-project test surface "is being retired (#5499)". Judged on its own terms as the card asked: the retirement proposition is true, but #5499 is the wrong anchor for it. #5499 was an INVESTMENT freeze; the retirement is #5704's (which migrated the test backends) and #6664's (which replaced the prose census with the ledger check:driver-memory-census enforces), and it carried on after the freeze was lifted. Re-anchored to those, with the distinction spelled out so the next reader is not sent back to a dissolved freeze.

B — the three design rationales: all three survive, each restated on its surviving ground

None of the three was silently deleted, and none was rewritten as if nothing had changed: each now records that the freeze was the premise it was first argued from, that the premise is gone, and what carries the argument instead.

1. spec/src/data/filter-comparand-type.ts:29 — was: "Both driver families that lack a policy are under the #5499 investment freeze, so the policy cannot be grown per driver".

Surviving ground: the #7956 divergence matrix and the #7872 ruling. A policy grown per driver is one accepted set with an implementation per backend, and #7956 measured what that produces — two camps, one hole, and a silent-edit cell no reading had found ({qty: undefined} encoded to {}, a filter matching every row). The #7872 ruling puts the definition at the shared face for that reason, not for the freeze. The set stays promoted here.

2. spec/src/data/filter-comparand-shape.ts:42 — was: "both driver families are under a maintainer investment freeze (#5499), so the policy cannot be grown per driver".

Surviving ground: the divergence table immediately above it, which the paragraph already called "the argument for a shared face: three backends, three answers, one declared contract" — the freeze was the second reason, and the load-bearing one survives untouched. Reinforced by #8234's routing ruling for the sibling comparand-TYPE question ("enforced once at the shared compile face for all five drivers"); this file is that answer for comparand SHAPE.

3. spec/src/data/filter-comparand-type-conformance.ts:29 — was: "This is how the frozen drivers (#5499) inherit the policy without a driver-local patch."

Surviving ground: the door's POSITION, not the drivers' status. It sits upstream of every driver, so a driver that carries no comparand-type policy of its own inherits this one with no driver-local patch — a property that was argued for while the two were frozen and does not depend on it.

Nothing was escalated. Had any of the three failed to survive, the dispatch fence required stopping and reporting rather than re-opening the design decision. All three hold.

C — untouched, on purpose

runtime/src/autonumber-seed-cross-side-parity.integration.test.ts:72,76, runtime/src/sandbox/undeclared-field-write-driver-split.integration.test.ts:87, objectql/src/having-filter.ts:116, and the three ADR-0087 retirement records under spec/src/migrations/entries/semantic/. They are frozen-in-time records, correct as they stand. Also untouched: objectql/src/having-filter.ts:41 and services/service-analytics/src/read-scope-sql.ts:180, which belong to #13089 / #13166.

⛔ The generated artifact

packages/spec/src/migrations/registry.ts carries the same five strings at 1252 / 1273 / 1696 / 2797 / 4049 and is GENERATED from entries/. It is excluded from the sweep above and untouched; check:migration-registry proves it is current.

Verification

Union run after the final commit, at git rev-parse --short HEAD = 768caf3b0. Exit codes captured before any pipe; each verdict below is the gate's own printed line.

  • pnpm --filter @objectstack/spec check:generated — exit 0. ✓ All 14 generated artifacts are up to date. Named individually: ✓ check:migration-registry src/migrations/registry.ts — its generated regions, from src/migrations/entries/, plus ✓ check:authorable-surface, ✓ check:api-surface, ✓ check:docs, ✓ check:export-origins.
  • Gate family derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no hand-fed paths; it takes the change set from the merge base itself). 27 families run locally, all exit 0 — including check:nul-bytes, check:test-source-alias, check:cross-package-test-inputs, check:engine-double-contract, check:where-matcher, check:dispatcher-error-vocabulary, check:type-check-coverage, check:doc-authoring, check:spec-parsed-alias, check:merge-driver, check:keyed-text-bounds, check:variant-docs, and scripts/check-comment-mask-adoption.mjs.
  • pnpm --filter @objectstack/spec --filter @objectstack/objectql --filter @objectstack/runtime typecheck — exit 0. Includes spec's check:test-typecheck: OK — @objectstack/spec's test layer compiles under packages/spec/tsconfig.test.json.
  • Tests, run under the shared verify lock at 3b28eb86c (the commit before the origin/main merge; git diff --stat 3b28eb86c..768caf3b0 -- packages/ is empty, so the merge moved nothing this run covers):
    • pnpm --filter @objectstack/spec test — exit 0. Test Files 443 passed (443) / Tests 11752 passed (11752).
    • pnpm --filter @objectstack/objectql exec vitest run --maxWorkers=2 src/engine-autonumber-resync.test.ts src/engine-comparand-type-door.test.ts — exit 0. Test Files 2 passed (2) / Tests 36 passed (36).
    • pnpm --filter @objectstack/runtime exec vitest run --maxWorkers=2 src/datasource-autoconnect.test.ts src/package-service.null-seam.test.ts — exit 0. Test Files 2 passed (2) / Tests 15 passed (15).
    • scripts/check-test-completeness.mjs was re-run on the merged head and now exits 3, which is its own NOT MEASURED code: "record this gate as NOT MEASURED … ⛔ It is NOT a finding".

NOT MEASURED, stated as such rather than counted green:check:dual-build-cjs-loads and scripts/check-dev-prereqs.mjs both refuse on this worktree — 37 of 67 packages have no dist/ — and say so themselves (PREREQUISITE NOT MET … ⛔ This is NOT a pass: nothing was measured.). scripts/check-test-completeness.mjs needs a turbo test log argument it was not given. None of the three is a red. Also: packages/objectql's tsc --noEmit --listFiles does not include engine-autonumber-resync.test.ts, so the green typecheck says nothing about that file — the targeted vitest run is what covers it.

No changeset — deliberate, with precedent

The diff is 100% comments. Nothing changes in any published type surface: grep -c 5499 and grep -c 2026-08-11 are both 0 in packages/spec/dist/index.d.ts, packages/objectql/dist/index.d.ts and packages/runtime/dist/index.d.ts after a rebuild, and check:api-surface passes. Two comment-only precedents on main, both merged with no changeset, one of them in packages/spec:

  • 9e8adf3f6docs(spec): name the real policy-gate runtime symbols in the publish-gate table (#13046)
  • 635aa6150docs(cli): drop stale family counts from json-stdout-purity docblock (#13047)

skip-changeset is applied to this PR accordingly.

Landing posture

Stays DRAFT. The diff touches packages/spec/src/**, so clause-② PATH leg applies and needs:contract-review is attached; the review is parked for the review chain. Not marked ready, no auto-merge, not enqueued.

Out-of-scope findings filed


Generated by Claude Code

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.
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️8 changed file(s) yielded no anchor (packages/objectql/src/filter-comparand-shape.ts, packages/objectql/src/search-filter.ts, packages/objectql/src/temporal-comparand-door.ts, …), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 2 changed package(s)).

What this run could not see
  • 8 changed file(s) yielded no anchor (packages/objectql/src/filter-comparand-shape.ts, packages/objectql/src/search-filter.ts, packages/objectql/src/temporal-comparand-door.ts, …) — pages documenting those are invisible to this run
  • 1 anchor(s) matched too much of the corpus to be a work list: ObjectQL (symbol, 64 pages)
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 127 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json c25bfb33271b49b2c77e8a25da0ad7f96b9eed49packageMentionDocs.

@os-trumpos-trump added skip-changeset PR has no user-facing published change; bypasses the changeset gate needs:contract-review and removed tests protocol:data labels Aug 29, 2026 — with Claude
@os-elon
os-elon marked this pull request as ready for review August 29, 2026 09:50
@os-elon
os-elon enabled auto-merge August 29, 2026 09:50
@os-elon
os-elon added this pull request to the merge queueAug 29, 2026
Merged via the queue into main with commit bfaada0Aug 29, 2026
50 checks passed
@os-elon
os-elon deleted the claude/issue-13168-dissolved-freeze-residue branch August 29, 2026 10:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants

@os-trump@os-elon@claude