Skip to content

filter-logic-conformance.ts now records three FALSE cells, and the $exists row it says cannot be enrolled yet has become enrollable — the backends moved in #13195 #13531

Description

@claude

Follow-up to #13195, which aligned the last three exits to $exists = has a value. That card's dispatch FENCED packages/spec/**, so its PR deliberately left this file untouched and reported the consequence instead of quietly editing a governed surface. This is that consequence, filed so it is not lost.

No gate is red. check-driver-conformance.mjs strips comments before scoring and no $exists row is enrolled, so everything below lives in a docblock that nothing machine-checks — pnpm check:driver-conformance reports "OK — 50 covered cell(s), 0 in the DEBT ledger, 0 exempt" both before and after. That is exactly why it needs a card rather than a gate to catch it.

What is now false in packages/spec/src/data/filter-logic-conformance.ts

In the reversal-measurement table under "Why the reversal was declined", the $exists: true on a null value column:

row recorded actual, as of PR #13529
driver-memory live mingo path MATCH — reads KEY-PRESENCE no — has-value
driver-memory analytics face MATCH — reads KEY-PRESENCE no — has-value
driver-mongodb translateFilter MATCH — mongo $exists IS key-presence no — has-value

And the warning paragraph beneath it, which still reads:

  • "Still reading key-presence: driver-memory's live mingo path and driver-mongodb" — no longer true of either, and it never named the analytics face, which was a third divergent exit measured in PR Measure the $exists has-value cell on every driver-memory exit and on driver-mongodb #13420;
  • "the gap is now unexcused rather than deferred — but it is still a gap" — the gap is closed;
  • "so a $exists row cannot be enrolled here yet" — the stated blocker was that the backends had to move first, and they have.

The table's own header warns that a row read off the code is a hypothesis; that applies to these three cells now in the opposite direction from usual — they are not optimistic, they are simply stale.

The enrolment this unblocks

#13195's body, step 4: "Only after the backends agree, enrol an $exists row in FILTER_LOGIC_CASES." All five scored drivers now answer has-value on both readings of no value, so the precondition holds. Worth carrying into that work:

  1. The DEBT ledger in scripts/check-driver-conformance.mjs is per (driver x case-set), not per case — there is no spelling for "this driver fails one row of thirty-six". Enrol only when every scored driver passes, or the result is the known-red gate drivers(turso): remote 模式没有继承 #5146 的 $not NULL-safe —— 同一个 TursoDriver,local 返回 NULL 行、remote 不返回(实测,origin/main) #5903 warns teaches agents to discount CI's colour.
  2. Enrol both directions. $exists: false was the harm the maintainer's ruling called the hardest live one, and it was invisible for as long as only $exists: true was recorded. A single-direction row would rebuild that blind spot.
  3. The two readings of no value are NOT interchangeable here. Every cell that diverged was on the stored-null reading; the key-absent reading already agreed on all four exits, before and after. A case whose fixture spells no value as an absent key measures none of this.
  4. packages/spec/** is a fenced surface for AI seats under the dispatch that produced $exists still reads KEY-PRESENCE rather than has-value on driver-memory's live mingo path and driver-mongodb — the #5499 freeze that excused it dissolved, #13166 explicitly excludes it, so it is now unexcused AND untracked #13195; whoever picks this up should confirm the current fencing rather than assume it.

Related

#13195 (the alignment), PR #13529 (its implementation, which names this staleness in its own body), PR #13420 (the measurement whose pins were inverted), #13492 (the $exists consumer census, a different question — vocabulary, not conformance).


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions