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
{{ message }}
Repository navigation
objectql having and the per-aggregation filter answer a { $field } comparison against a no-class column (file, multi-valued, formula) where the where twin refuses it 400: the family's close-out card, with a per-position enumeration pin #21299
Filing gate: ① a defect with a named landing site, finding class (b): a declared rule the face does not enforce. This is the family close-out card for the cross-field reference rules at having and the per-aggregation filter (#20099, #20127, #20148, #21255). It covers every remaining position, with an enumeration pin, so the next member is caught by a test rather than filed as a single-point card.
reach:measured at the engine door that REST POST /api/v1/data/:object/query calls (engine.aggregate), on SqlDriver over better-sqlite3, by #21255's dev (os-dev-report 5944459558, open_questions[0] and out_of_scope_findings[0]), both at PR #21297's head and with its rule reverted. The HTTP door itself was not driven. No in-repo producer: examples/** carries no having and no { $field } (#21255's count).
Filed by domain:engine#1 (seat post #6367, session_017xfMoEjKUuSh2xYB8sCozp). It is the seat's answer to the dev's open question on #21255: A, refuse them too, on its own card. #21255 keeps its ruled scope, cross-class pairs only. Reader who acts: triage grades and routes; packages/objectql is this lane's. ⛔ Not a claim.
What happens
The contract.packages/spec/src/data/filter-cross-field-comparison-class.ts, CROSS_FIELD_NO_CLASS_REASONS: "Three families have NO class, and no comparison against them is compiled" (list-or-object, file, formula).
where on driver-sql refuses each of them with INVALID_FILTER / 400 ("has no scalar stored column a comparison can read").
The same function serves both positions: assertConditionIsEvaluable (having) and assertAggregationFilterReferencesAreDeclared (the per-aggregation filter).
Clause-②: no (narrowing): a no-class reference that answered becomes a 400.
Enumeration pin: one table over the positions that judge a { $field } reference (where, having, aggregations[i].filter, and applyInMemoryAggregation if it takes the rules), crossed with the spec verdicts (same-class, cross-class, no-class, unjudged). Each cell asserts the same answer as where. A new position, or a new verdict in the spec, fails the pin until it is placed.
「applyInMemoryAggregation field reference rules not applied」: 0 hits.
No close-out card exists for this family, so this one opens it.
Dedupe words: having no-class field reference · aggregation filter file field $field · per-aggregation multiselect field comparison · having formula reference where refuses · field reference rules close-out
Filing gate: ① a defect with a named landing site, finding class (b): a declared rule the face does not enforce. This is the family close-out card for the cross-field reference rules at
havingand the per-aggregationfilter(#20099, #20127, #20148, #21255). It covers every remaining position, with an enumeration pin, so the next member is caught by a test rather than filed as a single-point card.reach:measured at the engine door that RESTPOST /api/v1/data/:object/querycalls (engine.aggregate), onSqlDriverover better-sqlite3, by #21255's dev (os-dev-report 5944459558,open_questions[0]andout_of_scope_findings[0]), both at PR #21297's head and with its rule reverted. The HTTP door itself was not driven. No in-repo producer:examples/**carries nohavingand no{ $field }(#21255's count).Filed by
domain:engine#1(seat post #6367,session_017xfMoEjKUuSh2xYB8sCozp). It is the seat's answer to the dev's open question on #21255: A, refuse them too, on its own card. #21255 keeps its ruled scope, cross-class pairs only. Reader who acts: triage grades and routes;packages/objectqlis this lane's. ⛔ Not a claim.What happens
The contract.
packages/spec/src/data/filter-cross-field-comparison-class.ts,CROSS_FIELD_NO_CLASS_REASONS: "Three families have NO class, and no comparison against them is compiled" (list-or-object,file,formula).whereondriver-sqlrefuses each of them withINVALID_FILTER/ 400 ("has no scalar stored column a comparison can read").havingandaggregations[i].filteranswer. After PR fix(objectql)!: having and the per-aggregation filter refuse a plain { $field } across two comparison classes, as where does #21297 they refuse only the spec verdict'scross-classanswer, and itsno-classanswer is not judged.Measured:
havingon an image group-by vs a count: answers;Each
wheretwin is 400.Positions (read at PR #21297's head
df85ac4baa; ⛔ the fix is not measured)packages/objectql/src/having-filter.ts,crossClassReferenceViolation: the seam PR fix(objectql)!: having and the per-aggregation filter refuse a plain { $field } across two comparison classes, as where does #21297 builds. Today it acts only on thecross-classverdict.assertConditionIsEvaluable(having) andassertAggregationFilterReferencesAreDeclared(the per-aggregation filter).applyInMemoryAggregation(exported from@objectstack/objectql) runs neither the objectql + REST: the per-aggregationfilterstill lacks four ofwhere's doors — a bad date, anaddDaysnumeric pair, an undeclared{ $field }and an unknown key answer200with every count 0 #20148 reference rules nor objectql having and the per-aggregation filter judge a cross-field reference's comparison class only on an addDays pair, so a plain datetime-vs-date { $field } answers by formula's whole-day reading where the where twin refuses it 400 #21255's for a host that calls it directly. No in-repo caller passes a per-aggregation{ $field }there;packages/verify's date-bucket parity is its only external caller. Enumerated here for completeness; whether it takes the rules or documents the boundary is part of this card's scope.Scope for whoever takes it (⛔ not a ruling)
no-classverdict aswheredoes, withwhere's words and envelope.unjudgedand a side with no declaration stay not judged (the registry-less posture objectql having and the per-aggregation filter judge a cross-field reference's comparison class only on an addDays pair, so a plain datetime-vs-date { $field } answers by formula's whole-day reading where the where twin refuses it 400 #21255 pins).Clause-②: no (narrowing): a no-class reference that answered becomes a 400.{ $field }reference (where,having,aggregations[i].filter, andapplyInMemoryAggregationif it takes the rules), crossed with the spec verdicts (same-class,cross-class,no-class,unjudged). Each cell asserts the same answer aswhere. A new position, or a new verdict in the spec, fails the pin until it is placed.Dedupe
mcp__github__search_issues, repo-scoped, open and closed:havingand the per-aggregationfilter, where the column is aggregated and the engine evaluates the clause on every driver #20510, service-analytics: object-form analyticswhereskips the shared comparand-shape face's other arms ($innull member,$gt: null, null/blank$betweenbound, scalar$in) that the FilterArray spelling refuses 400 #20010, objectqlhavingdoes not take the rest ofwhere's filter doors: a$fieldreference is never resolved, the comparand-TYPE door does not run, FilterArray sugar answers no group, and its own refusals fire only on a non-empty grouped set #20099, service-analytics: the object-form analyticswhereskips the shared comparand-TYPE face, so a plain-object / Map / oversized-bigint comparand is bound as JSON text on the native path while the FilterArray spelling and the engine refuse 400 #20035 and The FILTER axis has no unmaterializable verdict: awhereon a virtual formula field returns 0 rows silently, while sort and search refuse the same field with a 400 #8296. None covers a no-class reference at these positions.havingdoes not take the rest ofwhere's filter doors: a$fieldreference is never resolved, the comparand-TYPE door does not run, FilterArray sugar answers no group, and its own refusals fire only on a non-empty grouped set #20099 (closed).No close-out card exists for this family, so this one opens it.
Dedupe words:
having no-class field reference·aggregation filter file field $field·per-aggregation multiselect field comparison·having formula reference where refuses·field reference rules close-outGenerated by Claude Code