You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] $exists with a non-boolean comparand ("yes", 1) is accepted at every door and inverted on driver-memory: it returns the rows with NO value; the spec declares $exists: z.boolean(), and its $null twin is refused #20897
Filing gate: ① a defect with a named landing site. Finding class (b). reach: measured at the public engine.find door on the in-memory driver by #20822 group 1's dev (os-dev-report 5915148713 on #20822, out_of_scope_findings[0]).
Filed by the domain:engine execution seat 1 (session_01DEvba2nBuD4tWzfq8r8NFY, os-support-ai). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
What happens
The object px has a text field name. Row a has name = "won", and row b has name = null.
where
driver-memory
right answer
{ name: { $exists: true } }
[a]
[a]
{ name: { $exists: "yes" } }
[b], the no-value row
refused, as $null is
{ name: { $exists: 1 } }
[b]
refused
The spec declares $exists: z.boolean() in FieldOperatorsSchema (packages/spec/src/data/filter.zod.ts, about :1590 and :1670). Yet parseFilterAST accepts a non-boolean, and no door refuses it.
driver-memory lowers val === true to $ne null and anything else to $eq null, so a truthy flag inverts.
Seam: spec:FieldOperatorsSchema.$exists (boolean) → runtime:objectql engine filter doors (no refusal) → driver-memorynormalizeFieldOperators$exists arm. Measure the other drivers.
Scope for whoever takes it (⛔ not a ruling)
A non-boolean $exists is refused at the engine's comparand doors, in the $null refusal's words, on every driver. The spec already declares the boolean.
Pins: "yes", 1 and "false" refused on memory and SQLite, plus a true / false control.
Dedupe
mcp__github__search_issues, repo-scoped, open and closed, in the act that filed this card:
Filing gate: ① a defect with a named landing site. Finding class (b).
reach:measured at the publicengine.finddoor on the in-memory driver by #20822 group 1's dev (os-dev-report5915148713 on #20822,out_of_scope_findings[0]).Filed by the
domain:engineexecution seat 1 (session_01DEvba2nBuD4tWzfq8r8NFY,os-support-ai). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.What happens
The object
pxhas a text fieldname. Rowahasname="won", and rowbhasname= null.where{ name: { $exists: true } }[a][a]{ name: { $exists: "yes" } }[b], the no-value row$nullis{ name: { $exists: 1 } }[b]$exists: z.boolean()inFieldOperatorsSchema(packages/spec/src/data/filter.zod.ts, about:1590and:1670). YetparseFilterASTaccepts a non-boolean, and no door refuses it.driver-memorylowersval === trueto$ne nulland anything else to$eq null, so a truthy flag inverts.$nullrefuses a non-boolean on every driver ($null的比较值不是布尔时,driver-sql 与 driver-memory 给出**完全相反**的答案(一个 IS NULL,一个 IS NOT NULL)—— 实测 #5347; the refusal is worded in PR fix(driver-turso,driver-sql): refusals and log lines state each decision in words instead of a tracker number (stage 4) #20877).$existsby truthiness. PR refactor(driver-memory): retire the reference matcher and the cube face's own whole-day bound (#5930 step 4, group 1: F4 + F5; F3 stopped) #20895 (#5930 step 4 (domain:engine): the engine-fed faces delete their hand-copied filter meaning (driver-sql, turso remote, memory query, mongodb, formula,having); the memory reference matcher retires (D6) #20822 group 1) pins the live path's answer, the divergence named inmemory-null-comparand-refusal.test.ts.Seam:
spec:FieldOperatorsSchema.$exists(boolean) →runtime:objectqlengine filter doors (no refusal) →driver-memorynormalizeFieldOperators$existsarm. Measure the other drivers.Scope for whoever takes it (⛔ not a ruling)
$existsis refused at the engine's comparand doors, in the$nullrefusal's words, on every driver. The spec already declares the boolean."yes",1and"false"refused on memory and SQLite, plus atrue/falsecontrol.Dedupe
mcp__github__search_issues, repo-scoped, open and closed, in the act that filed this card:$containson a stored array by substring per element (u1matches a row storingu10), where the SQL drivers answer membership; the spec docblock records the gap against a card that answers 404 #20874 (open) is$containson a stored array. [finding] driver-memory's matcher answers a NULL comparand inconsistently across the two readings of "no value" —$in:[null]/$nin:[null]disagree while$null/$ne:nullagree #13357, driver-memory's reference matcher puts a NULL-VALUED row inside$gt/$gte/$lt/$lteon a NUMERIC column —nullcoerces to0, and the live mingo path excludes it #13553 and driver-memory's reference matcher matches a NULL-VALUED row against a well-formed bounded$between— the live mingo path excludes it, so one package answers one filter two ways #13549 (closed) are reference-matcher null divergences. [finding] a no-operator object under a lookup, master_detail or json field answers per driver: the declared nested-relation filter returns no rows on memory and a 400 on SQL, and a json object comparand deep-equals on memory and is refused on SQL #20745, driver-sql on PostgreSQL answers 500 for a boolean or Date compared against a number field (where { amount: { $gt: true } }), while memory answers no rows and SQLite every row: the non-string half #20336 / #20351 left out #20502, RLS: a policy's compiled filter skips the shared comparand-shape faces, so a null list member or null ordering bound reaches driver-sql, and the read and the write check disagree (the read hides a row its own check admits) #20212, [finding]$newith an array comparand splits across backends: driver-sql and driver-memory refuse (400), driver-mongodb answers, formula matches every row — and both shared faces pass it #19886 and [finding] driver-memory's own reference matcher has no$fieldarm — a cross-field comparand (bare or withaddDays) reaching it is presumably compared as a literal object rather than resolved or refused (grep reading, to be measured) #15104 (closed) are other comparand shapes. None is a non-boolean$exists.Dedupe words:
exists non-boolean comparand refused·$exists truthy string inverted driver-memory·5347 null twin existsGenerated by Claude Code