Observation-class finding, recorded from the objectui#4041 implementation (PR #4081) so it is not rediscovered. Unassigned, and no pm:queue — I did not measure a live producer, so I am not claiming a user hits this today. Filed plainly; let triage grade it.
The fact
packages/plugin-grid/src/ObjectGrid.tsx, the query assembly, after PR #4081:
if (schemaFilter !== undefined) {
params.$filter = schemaFilter; // lowered through toFilterNode at the read point
} else if (schema.defaultFilters) {
// Legacy support
params.$filter = schema.defaultFilters; // byte-for-byte, no lowering
}
objectui#4041 converged the declared filter key onto the repo's single lowering hop (toFilterNode, "the last hop before the wire"). The legacy defaultFilters fallback beside it was deliberately left untouched as out of scope for that card — it is a different key, undeclared in the block's inputs, and widening #4041 to it would have been scope creep on a ruled card.
But the hazard toFilterNode exists to close applies to it verbatim. defaultFilters is the MongoDB-style Record< string, any > shape (plugin-list's buildEffectiveFilter names it as exactly that: "its last fallback is table.defaultFilters, declared Record< string, any >"). isFilterAST is false for a plain object, so such a value sent raw is the 400 INVALID_FILTER shape objectui#3431 measured against a real backend. toFilterNode already handles this case — it routes objects through convertFiltersToAST — so the fix, if wanted, is a one-line reuse of the sink rather than new logic.
Why I am not asserting impact
Two reasons to let triage decide rather than grade it myself:
- No measured producer.
defaultFilters is not in object-grid's registered inputs, so an author writing it gets unknown-prop from the save gate (a warning, not a rejection — sdui-parser/src/validate.ts pushes severity: 'warning'). Whether any host injects it onto an object-grid node was not measured.
- The sibling path already lowers. Where
ObjectView feeds a list, the value goes through buildEffectiveFilter, which does call toFilterNode. So the un-lowered leg may be dormant in practice — which is precisely the "dormant code / unexercised drift" class rather than a live defect.
Severity judged at filing time is unreliable in both directions, so this is recorded as observed rather than argued up or down.
Related
Generated by Claude Code
Observation-class finding, recorded from the objectui#4041 implementation (PR #4081) so it is not rediscovered. Unassigned, and no
pm:queue— I did not measure a live producer, so I am not claiming a user hits this today. Filed plainly; let triage grade it.The fact
packages/plugin-grid/src/ObjectGrid.tsx, the query assembly, after PR #4081:objectui#4041 converged the declared
filterkey onto the repo's single lowering hop (toFilterNode, "the last hop before the wire"). The legacydefaultFiltersfallback beside it was deliberately left untouched as out of scope for that card — it is a different key, undeclared in the block'sinputs, and widening #4041 to it would have been scope creep on a ruled card.But the hazard
toFilterNodeexists to close applies to it verbatim.defaultFiltersis the MongoDB-styleRecord< string, any >shape (plugin-list'sbuildEffectiveFilternames it as exactly that: "its last fallback istable.defaultFilters, declaredRecord< string, any >").isFilterASTis false for a plain object, so such a value sent raw is the400 INVALID_FILTERshape objectui#3431 measured against a real backend.toFilterNodealready handles this case — it routes objects throughconvertFiltersToAST— so the fix, if wanted, is a one-line reuse of the sink rather than new logic.Why I am not asserting impact
Two reasons to let triage decide rather than grade it myself:
defaultFiltersis not inobject-grid's registeredinputs, so an author writing it getsunknown-propfrom the save gate (a warning, not a rejection —sdui-parser/src/validate.tspushesseverity: 'warning'). Whether any host injects it onto anobject-gridnode was not measured.ObjectViewfeeds a list, the value goes throughbuildEffectiveFilter, which does calltoFilterNode. So the un-lowered leg may be dormant in practice — which is precisely the "dormant code / unexercised drift" class rather than a live defect.Severity judged at filing time is unreliable in both directions, so this is recorded as observed rather than argued up or down.
Related
filter, singular (#4041) #4081 — the card that converged the declared key and left this leg alone.400 INVALID_FILTERfor a non-AST$filter.filters→filter); this finding is a narrower runtime fact about a different key and is not covered there.Generated by Claude Code