Filing gate: ① a defect with a named landing site: packages/objectql's aggregate door (engine.aggregate). Finding class (a). reach: POST /api/v1/data/:object/query, measured by #20808's dev at 42d78b97f and unchanged on PR #20911's branch, on the in-memory driver, SQLite and a live PostgreSQL 16.13 (os-dev-report 5916514958 on #20808, out_of_scope_findings[1]).
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
{ aggregations: [{ function: 'max', field: 'meta', alias: 'n' }] } over a json field meta:
| driver |
answer |
| in-memory |
200 { a: 1 } |
| SQLite |
200 '{"b":1}', a string |
| PostgreSQL 16 |
500 DATABASE_ERROR ("function max(json) does not exist") |
max over a tags field splits the same way.
AGGREGATE_FIELD_TYPE_COMPATIBILITY (@objectstack/spec) already refuses min / max over every JSON-stored type, and the dataset legs enforce it (lint, the analytics compile leg). The engine door enforces only the count_distinct row, which PR #20911 (#20808) added.
Scope for whoever takes it (⛔ not a ruling)
Dedupe
mcp__github__search_issues, repo-scoped, open and closed, in the act that filed this card:
Dedupe words: max json field postgres 500 aggregate · min max structured json engine aggregate · aggregate field type compatibility engine door min max
Generated by Claude Code
Filing gate: ① a defect with a named landing site:
packages/objectql's aggregate door (engine.aggregate). Finding class (a).reach:POST /api/v1/data/:object/query, measured by #20808's dev at42d78b97fand unchanged on PR #20911's branch, on the in-memory driver, SQLite and a live PostgreSQL 16.13 (os-dev-report5916514958 on #20808,out_of_scope_findings[1]).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
{ aggregations: [{ function: 'max', field: 'meta', alias: 'n' }] }over ajsonfieldmeta:{ a: 1 }'{"b":1}', a stringDATABASE_ERROR("function max(json) does not exist")maxover atagsfield splits the same way.AGGREGATE_FIELD_TYPE_COMPATIBILITY(@objectstack/spec) already refusesmin/maxover every JSON-stored type, and the dataset legs enforce it (lint, the analytics compile leg). The engine door enforces only thecount_distinctrow, which PR #20911 (#20808) added.Scope for whoever takes it (⛔ not a ruling)
INVALID_FIELD/ 400 on every driver, before any driver.min/max/sum/avgover a type the table refuses, inexamples/**and the published stacks.AGGREGATE_FIELD_TYPE_COMPATIBILITYrefusesmin/maxover the string classes while 15 shipped end-to-end cases depend on them working — the table or the uses must give #17513 (closed) is the ruling on the table'smin/maxrows over string classes. This card applies the table as ruled; it does not re-rule it.Dedupe
mcp__github__search_issues, repo-scoped, open and closed, in the act that filed this card:AGGREGATE_FIELD_TYPE_COMPATIBILITYrefusesmin/maxover the string classes while 15 shipped end-to-end cases depend on them working — the table or the uses must give #17513 is the table'smin/maxrows over string classes. Neither is the engine door enforcing the table.Dedupe words:
max json field postgres 500 aggregate·min max structured json engine aggregate·aggregate field type compatibility engine door min maxGenerated by Claude Code