Skip to content

docs(spec,formula,driver-memory): the 2026-08-10 EXCLUDE ruling was withdrawn — record include as re-affirmed (#7406) - #7419

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-7406-family4-record-rewrite
Aug 10, 2026
Merged

docs(spec,formula,driver-memory): the 2026-08-10 EXCLUDE ruling was withdrawn — record include as re-affirmed (#7406)#7419
os-zhuang merged 1 commit into
mainfrom
claude/issue-7406-family4-record-rewrite

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

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 / $notContains MATCH 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 / it titles move. Every expect(...) line is byte-identical — verified by filtering the diff to non-comment lines, which yields six describe/it title changes and nothing else. driver-memory is 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.ts

  • The family-4 note is rewritten as what it now is: a reversal that was ruled, measured, and withdrawn the same day. It moves out from under the "RULED but not yet enrolled" heading — it is not a pending family and nothing waits on a backend — into its own section, and that heading's singular wording ("the one family left", "the one that remains") is restored.
  • The eleven-surface measurement table stays. It is the record of why the reversal was declined: a cross-backend programme (flip formula and read-scope-sql together — they are security-coupled — rewrite four copies of nullValueSatisfiesOperator, 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.
  • The enrolled $ne / $not d-column rows now state the affirmed direction rather than a superseded one.
  • One table cell that judged driver-memory's reference matcher "already ruled-correct" on $notContains is corrected to DIVERGENT — under the withdrawal that answer is the outlier again.
  • The residual $exists enrolment 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-side check, read-scope-sql the 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: $notContains is DIVERGENT again rather than canonical, $nin is half-converged (null value matches as required; missing key still does not), $exists is 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 $nin and $notContains. The 07:33Z ruling would have made reference the target on all three.

.changeset/filter-null-semantics-ruled-target.md is left alone — it describes what PR #7391 did at the time and is historical.

Changeset

No changeset; this PR takes the skip-changeset label. Read from scripts/check-empty-changeset.mjs's own prescription: "It releases nothing (… tests-only, and the like) → delete the changeset and apply the skip-changeset label (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: success

Byte-identity bar: check:driver-conformance output captured before and after (baseline taken by restoring the four files to origin/main in-tree, never git stash), then diffed: identical, both OK — 36 covered cell(s), 4 in the DEBT ledger, 0 exempt.

Suites:

suite result
@objectstack/spec 366 files / 9557 tests passed
@objectstack/formula 24 files / 623 tests passed
@objectstack/driver-memory 19 files / 560 tests passed

The 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 — all completed: 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, and tsc --noEmit on packages/spec.


Generated by Claude Code

…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>
@os-zhuang os-zhuang added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 10, 2026 — with Claude
@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 10, 2026 10:40am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/permissions/system-context.mdx (via packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

7 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang marked this pull request as ready for review August 10, 2026 11:29
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 10, 2026
Merged via the queue into main with commit 9813278 Aug 10, 2026
30 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-7406-family4-record-rewrite branch August 10, 2026 12:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

protocol:data size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Rewrite the family-4 record in filter-logic-conformance.ts: the 2026-08-10 exclude ruling was withdrawn — include re-affirmed

2 participants