Filed unassigned from the objectstack #15442 / #15449 consumer census (PM session session_01M59rPZZFzqhfMUPFqqZTkf, os-dev seat, 2026-09-05). Measured at the pin a472b07.
Measured
content/docs/guide/objectos-integration.mdx:275-286 (fenced example, comment "ObjectQL filter syntax"):
type: 'object-grid',
filter: {
and: [
{ field: 'status', operator: 'eq', value: 'active' },
{ field: 'created_date', operator: 'gte', value: '2024-01-01' }
]
},
None of the three shapes the read path lowers is this one (packages/core/src/utils/filter-converter.ts:285-305: a ViewFilterRule[], an AST node array, or a MongoDB-style record). Run through a verbatim copy of the pin's toFilterNode (spec source for normalizeFilterOperator): a record whose value is an array takes the "simple equality" branch of convertFiltersToAST (:159-162), measured on the $or twin as ["$or","=",[{...},{...}]] — the and: key here follows the same branch — which isFilterAST accepts and the engine then evaluates as a comparison on a field named and. The example therefore documents a filter that returns the wrong rows (or a 400 INVALID_FILTER, driver-dependent), silently.
Prescription
The grid's own registry entry documents the array form (packages/plugin-grid/src/index.tsx:218, "Filter criteria in JSON-rules form"; README.md:468, :528 show [{ field, operator, value }]). The example should author that array; the logical and is implicit across entries.
Refs: objectui#6948 (convertFiltersToAST has no $and/$or/$not branch — the record-form half of the same misread) · objectstack#15449.
Generated by Claude Code
Filed unassigned from the objectstack #15442 / #15449 consumer census (PM session
session_01M59rPZZFzqhfMUPFqqZTkf, os-dev seat, 2026-09-05). Measured at the pina472b07.Measured
content/docs/guide/objectos-integration.mdx:275-286(fenced example, comment "ObjectQL filter syntax"):None of the three shapes the read path lowers is this one (
packages/core/src/utils/filter-converter.ts:285-305: aViewFilterRule[], an AST node array, or a MongoDB-style record). Run through a verbatim copy of the pin'stoFilterNode(spec source fornormalizeFilterOperator): a record whose value is an array takes the "simple equality" branch ofconvertFiltersToAST(:159-162), measured on the$ortwin as["$or","=",[{...},{...}]]— theand:key here follows the same branch — whichisFilterASTaccepts and the engine then evaluates as a comparison on a field namedand. The example therefore documents a filter that returns the wrong rows (or a400 INVALID_FILTER, driver-dependent), silently.Prescription
The grid's own registry entry documents the array form (
packages/plugin-grid/src/index.tsx:218, "Filter criteria in JSON-rules form";README.md:468,:528show[{ field, operator, value }]). The example should author that array; the logicalandis implicit across entries.Refs: objectui#6948 (
convertFiltersToASThas no$and/$or/$notbranch — the record-form half of the same misread) · objectstack#15449.Generated by Claude Code