docs(spec,formula,driver-memory): the 2026-08-10 EXCLUDE ruling was withdrawn — record include as re-affirmed (#7406) - #7419
Conversation
…ithdrawn — record include as re-affirmed (#7406) PR #7391 (`5f7669e0c`) landed minutes before the maintainer withdrew cells 1 and 3 of the 2026-08-10 07:33Z ruling on #5299 and re-affirmed #5298's include direction as the platform semantics. The tree was left proclaiming a withdrawn target in `filter-logic-conformance.ts` — the one file whose job is to be the single source of truth — plus matching "ruled target / superseded direction" annotations in the formula and driver-memory pins. This rewrites that record. Nothing executes differently: only comments and `describe`/`it` titles move, and every `expect(...)` line is byte-identical. - The family-4 header note now reads as what it is: a reversal that was ruled, measured, and WITHDRAWN the same day. It moves out from under "RULED but not yet enrolled" — it is not a pending family and nothing waits on a backend — into its own section, and the singular wording of that heading is restored. The eleven-surface measurement table stays: it is the record of WHY the reversal was declined (a cross-backend programme buying silent absence in place of visible surplus, with no business pull), and the reason the null semantics are settled rather than merely unchallenged. - `$exists` = has-value (cell 2) was never in conflict and had already shipped in PR #5962. It stands, and is called out as the leg that survived. - The enrolled `$ne` / `$not` `d`-column rows state the affirmed direction instead of a superseded one. - The formula pin's section becomes "the affirmed direction"; the security coupling it documents (`formula` is the RLS write-side `check`, `read-scope-sql` the read-side lowering, converged by PR #5962) is kept as the tripwire for anyone re-proposing a reversal. - The two driver-memory pins are re-annotated against the affirmed direction: the matcher's `$notContains` answer is DIVERGENT again rather than canonical, `$nin` is half-converged, and on the live-vs-reference pin neither column is wholly right — reference is correct on `$exists`, live is correct on `$nin` and `$notContains`. Behaviour untouched per the #5499 freeze. One measurement-table cell that judged `driver-memory`'s reference matcher "already ruled-correct" on `$notContains` is corrected to DIVERGENT for the same reason. `.changeset/filter-null-semantics-ruled-target.md` is left alone: it describes what PR #7391 did at the time, and is historical. Refs #7406 #5299 #5298 #5146 #5962 #5499, PR #7391 (`5f7669e0c`) Co-Authored-By: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckThis PR changes 1 package(s): 106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
⛔ 7 release-owned page(s) also reference the affected code. These are read-only:
|
Closes #7406. Refs #5299, #5298, #5146, #5962, #5499, PR #7391 (
5f7669e0c).Why
PR #7391 landed minutes before the maintainer withdrew cells 1 and 3 of the 2026-08-10 07:33Z ruling on #5299 and re-affirmed #5298's include direction as the platform semantics (
$ne/$nin/$notContainsMATCH no-value rows).$exists= has-value — cell 2, shipped in PR #5962 — was never in conflict and stands.That left the tree proclaiming a withdrawn target in
filter-logic-conformance.ts, the one file whose job is to be the single source of truth, plus matching "ruled target / superseded direction" annotations in the formula and driver-memory pins. This rewrites that record.⛔ Zero behaviour
Only comments and
describe/ittitles move. Everyexpect(...)line is byte-identical — verified by filtering the diff to non-comment lines, which yields sixdescribe/ittitle changes and nothing else.driver-memoryis inside the #5499 freeze; annotation-only edits are the sanctioned exception here and no live path is touched.What changed
packages/spec/src/data/filter-logic-conformance.tsformulaandread-scope-sqltogether — they are security-coupled — rewrite four copies ofnullValueSatisfiesOperator, re-rule two enrolled rows, touch two frozen backends' live paths) buying a worse failure mode, silent absence in place of visible surplus, with no business pull.$ne/$notd-column rows now state the affirmed direction rather than a superseded one.driver-memory's reference matcher "already ruled-correct" on$notContainsis corrected to DIVERGENT — under the withdrawal that answer is the outlier again.$existsenrolment blocker (the DEBT ledger is per driver × case-set, not per case; two of five scored drivers are frozen) is kept, re-pointed at the cell it actually still blocks.packages/formula/src/matches-filter-not-null-safe.test.ts— the section becomes "the affirmed direction". The security coupling it documents (this evaluator is the RLS write-sidecheck,read-scope-sqlthe read-side lowering, converged by PR #5962) is kept as the tripwire for anyone re-proposing a reversal.packages/drivers/driver-memory/src/memory-matcher-not-null-safe.test.ts— re-annotated against the affirmed direction:$notContainsis DIVERGENT again rather than canonical,$ninis half-converged (null value matches as required; missing key still does not),$existsis CONVERGED and unchanged.packages/drivers/driver-memory/src/memory-driver-document-not.test.ts— the live-vs-reference pin now records that neither column is wholly right: reference is correct on$exists, live is correct on$ninand$notContains. The 07:33Z ruling would have made reference the target on all three..changeset/filter-null-semantics-ruled-target.mdis left alone — it describes what PR #7391 did at the time and is historical.Changeset
No changeset; this PR takes the
skip-changesetlabel. Read fromscripts/check-empty-changeset.mjs's own prescription: "It releases nothing (… tests-only, and the like) → delete the changeset and apply theskip-changesetlabel (route 2)." This PR ships comments and test titles only — no runtime behaviour, no API, no type change. An empty changeset is explicitly rejected by that gate (#4898 / #4551), so the label is the route.Verification — all
completed: successByte-identity bar:
check:driver-conformanceoutput captured before and after (baseline taken by restoring the four files toorigin/mainin-tree, nevergit stash), thendiffed: identical, bothOK — 36 covered cell(s), 4 in the DEBT ledger, 0 exempt.Suites:
@objectstack/spec@objectstack/formula@objectstack/driver-memoryThe 9 spec gates, individually:
check:generated --reconcile-only,check:skill-docs,check:spec-changes,check:upgrade-guide,check:export-origins,check:authorable-surface,check:docs,check:skill-refs,check:react-blocks— allcompleted: success.Also green:
check:template-manifests,check:skill-examples,check:exported-any,check:dual-source-exports,check:api-surface,check:driver-conformance,check:driver-memory-census,check:spec-parsed-alias,check:empty-changeset, andtsc --noEmitonpackages/spec.Generated by Claude Code