From 97923fdec8f9cf0af3e382458694bbb9045400f3 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 6 Sep 2026 00:46:45 +0000 Subject: [PATCH] docs(driver-memory): the `$eq` exemption's note says the null-list cells were RULED, not held (#15480) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `$eq`-only exemption above the no-value guard justified its operator-shaped spelling by naming the cells it declined to move — `$in: [null]` / `$nin: [null]` — as "#13357's cells, `needs-user-decision`, held for the maintainer". That sentence stopped being true on 2026-08-31, when the maintainer ruled them (option C) and the shapes became REFUSED at the contract's validation entrance (`assertListComparandShapes`), with the negative pin `memory-null-list-member-unreachable.test.ts`. This is not wording polish. `needs-user-decision` is a live protocol state with a named reader — the maintainer's inbox. A source comment asserting a cell sits in that state, when the door two packages over refuses the shape by ruling, invites the next author to re-escalate a settled question into the most expensive queue in this repo. The same package already stated it correctly, twice: the `$gte: null` note 34 lines below in this file ("the 2026-08-31 ruling had refused the three siblings"), and the sibling header in `memory-matcher-null-value-and-comparand.test.ts` ("They were `needs-user-decision` when #13494/#13495/#13549 landed"). So the package stated the decision state two ways, and the stale one is the one an author reading this guard arrives at first. The exemption's REASONING is deliberately unchanged: writing it over the OPERATOR rather than over "the comparand is null" is still right, because a rule spelled over the VALUE would still reach arms whose no-value answer is ruled elsewhere. Only the cells' state moved — refused at the door, rather than held. The note now says so, and says explicitly that the ruling is not a licence to re-spell the exemption. Comment-only. No arm, no guard condition, no behaviour: every added and removed line in the diff is a `//` comment. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01ARYe3yQTQCUFm5qPYNgKaJ --- .../driver-memory/src/memory-matcher.ts | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/drivers/driver-memory/src/memory-matcher.ts b/packages/drivers/driver-memory/src/memory-matcher.ts index 2644c3bbd0..4abcecf2d4 100644 --- a/packages/drivers/driver-memory/src/memory-matcher.ts +++ b/packages/drivers/driver-memory/src/memory-matcher.ts @@ -309,8 +309,24 @@ function checkCondition(value: any, condition: any): boolean { // ⚠️ `$eq` ONLY, deliberately. The exemption is written over the // OPERATOR and not over "the comparand is null", because the latter // spelling would have moved `$in: [null]` / `$nin: [null]` with it — - // and those are #13357's cells, `needs-user-decision`, held for the - // maintainer. They are measured byte-identical across this change. + // and those were #13357's cells, `needs-user-decision`, held for the + // maintainer when this landed. They are measured byte-identical + // across this change. + // + // ⛔ They are NOT held any more, and a reader arriving here must not + // escalate them a second time: the maintainer ruled them on 2026-08-31 + // (option C, #13357) and the shapes are REFUSED at the contract's + // validation entrance (`assertListComparandShapes`) — the same door the + // `$gte: null` note below records for the ordering position — with the + // negative pin `memory-null-list-member-unreachable.test.ts`, and the + // sibling header in `memory-matcher-null-value-and-comparand.test.ts` + // already says so in the past tense. + // + // ⛔ That ruling is NOT a reason to re-spell this exemption over "the + // comparand is null". The reason above is unchanged: a rule written + // over the VALUE would still reach arms whose no-value answer is ruled + // elsewhere. Only the cells' STATE moved — refused at the door, rather + // than held for a ruling. if (value === undefined && op !== '$exists' && op !== '$null' && op !== '$eq' && !noValueSatisfiesNegation(op)) { return false;