Filing gate: ① a defect with a named landing site: packages/drivers/driver-memory (filter-refusal.ts, the shape gate in front of every memory query face). Finding class (a). reach: engine.find on InMemoryDriver, measured at origin/main d1f8ce865 by #21007's dev (os-dev-report 5924484320 on #21007, out_of_scope_findings[0]). The REST door was not measured on memory, because packages/rest does not depend on driver-memory.
Filed by the domain:engine execution seat 2 (seat post #20966, session_01Ujdtvqs7ree7WyQmEDwEnG, os-litant). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
What happens
The fixture is #21004's: owners is a multiple: true lookup over six rows (d1…d6), and tags is a tags field.
where |
InMemoryDriver |
SqlDriver (SQLite and PostgreSQL 16.14) |
owners $eq 'u1' |
d1, d3 (per element) |
400 INVALID_FILTER |
owners $in ['u1','u9'] |
d1, d3 |
400 |
owners $nin [...] |
d2, d4, d5, d6 |
400 |
owners $gt 'u1' |
d1, d2, d3, d5 |
400 |
tags $gt 'red' |
d3 |
400 |
driver-sql refuses the whole family on a JSON column (JSON_COLUMN_INCOMPATIBLE_OPERATORS, #7398): $eq, $ne, ordering, $between, $in and $nin, every alias. Memory answers each operator per element instead, through mingo's array semantics. One filter gets a refusal on the SQL family and rows on memory. That breaks the conformance invariant "the same rows as find(), or a refusal".
The spec's $contains docblock (filter.zod.ts) names $contains as "the one operator #7398 left working on a JSON column after refusing the equality family there". No declared contract gives the equality family a per-element reading; #21007's dev read SET_MEMBER_DESCRIPTION and FILTER_OPERATORS to confirm it. @objectstack/formula's ORDERING_OPERATORS docblock records the per-element read as declared on #15104. Reconcile that record against this card.
Scope for whoever takes it (⛔ not a ruling)
Dedupe
mcp__github__search_issues, repo-scoped, open and closed, query "driver-memory where multi-value field $in $eq per element membership while driver-sql refuses JSON column equality". It returned 8 hits, none this face:
Filing gate: ① a defect with a named landing site:
packages/drivers/driver-memory(filter-refusal.ts, the shape gate in front of every memory query face). Finding class (a).reach:engine.findonInMemoryDriver, measured atorigin/maind1f8ce865by #21007's dev (os-dev-report5924484320 on #21007,out_of_scope_findings[0]). The REST door was not measured on memory, becausepackages/restdoes not depend ondriver-memory.Filed by the
domain:engineexecution seat 2 (seat post #20966,session_01Ujdtvqs7ree7WyQmEDwEnG,os-litant). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.What happens
The fixture is #21004's:
ownersis amultiple: truelookup over six rows (d1…d6), andtagsis atagsfield.whereowners$eq 'u1'd1,d3(per element)INVALID_FILTERowners$in ['u1','u9']d1,d3owners$nin [...]d2,d4,d5,d6owners$gt 'u1'd1,d2,d3,d5tags$gt 'red'd3driver-sqlrefuses the whole family on a JSON column (JSON_COLUMN_INCOMPATIBLE_OPERATORS, #7398):$eq,$ne, ordering,$between,$inand$nin, every alias. Memory answers each operator per element instead, through mingo's array semantics. One filter gets a refusal on the SQL family and rows on memory. That breaks the conformance invariant "the same rows asfind(), or a refusal".The spec's
$containsdocblock (filter.zod.ts) names$containsas "the one operator #7398 left working on a JSON column after refusing the equality family there". No declared contract gives the equality family a per-element reading; #21007's dev readSET_MEMBER_DESCRIPTIONandFILTER_OPERATORSto confirm it.@objectstack/formula'sORDERING_OPERATORSdocblock records the per-element read as declared on #15104. Reconcile that record against this card.Scope for whoever takes it (⛔ not a ruling)
STRUCTURED_JSON_TYPESorisMultiValueField), with the same code. It reads the refused set from the shared home [finding] a per-aggregationfilter$ninon a multi-valued field counts the rows it was asked to exclude, and$incounts none, where the samewhereis refused 400: the aggregation evaluator has no JSON-column equality gate #21007 is creating in@objectstack/core, if that has landed. ⛔ No third copy.$containscontrol (membership still answers).Dedupe
mcp__github__search_issues, repo-scoped, open and closed, query "driver-memory where multi-value field $in $eq per element membership while driver-sql refuses JSON column equality". It returned 8 hits, none this face:$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 (closed) is$containssubstring on memory.max/minover a JSON-stored field answers per driver at the engine (memory an object, SQLite a string, PostgreSQL 500): the compatibility table refuses them, but the engine aggregate door enforces only itscount_distinctrow #20914 and analytics: on the ObjectQL strategy a$notover a multi-valued lookup ($contains) is refused 400, because the NULL-safe guard reaches driver-sql as$ne: nullon a JSON column, where the engine answers the rows #20918 (open) are aggregate and analytics faces.