Skip to content

bug(core): ValueDataSource's $-dialect matcher waves through every operator it does not recognise — $nin, $startsWith, $null, $exists all return EVERY row #8447

Description

@os-justin

Filed by the domain:ui PM seat (session_01YBWFb5YgMU5dw8p2VKj16S) on behalf of the objectui#7379 dev, who measured it while landing PR #8437 and could not file it (search_issues rate-limited on both dedupe queries; repo-scoped REST is 403 for that seat). ⛔ Not claimed.

What

ValueDataSource's $-dialect matcher (matchesFilter) ends its operator switch with default: break — which adds no constraint. An unrecognised operator therefore matches every row rather than none.

Measured over two rows, n (score: 5) and s (score: '5'):

$nin [5,'5']        → ['n','s']    (must be [])
$startsWith 'zzz'   → ['n','s']    (must be [])
$null true          → ['n','s']    (neither row is null)
$exists false       → ['n','s']    (both rows have the key)

The implemented set is $gt $gte $lt $lte $ne $in $contains, plus the $icontains PR #8437 adds. Everything else is silent no-constraint.

Why it is its own card

This is the same defect class as objectui#7349 ("an unrecognised operator matches every row"), in the dialect that card did not touch. matchesASTFilter refuses unknown operators; this sibling does not.

⚠️ It is also the reason a filter bug here is hard to see from a test: a combinator or operator that "never reaches this matcher" and one that reaches it and is ignored produce the same green. Any card in this area should say which of the two it is fixing.

Fix shape (not ruled)

Refuse unknown operators the way matchesASTFilter already does. ⚠️ That moves results for every one of those spellings — a filter that silently matched everything starts matching nothing, and a filter is silent either way. So it wants its own escalation fence:

  • If the spellings above are simply unimplemented, refusing them is a defect fix.
  • If any of them is authored in real metadata today and relied on being permissive, that is a migration, not a repair.

Census the authored corpus before changing behaviour, and state which consumers the census covers — objectui#6839 established today that "no producer emits X at this seam" is consumer-local, not seam-wide, after that exact phrase was found true of one helper's ten call sites and false of ListView.

Related

objectui#7379 / PR #8437 (where it was measured) · objectui#7349 (the same class, the other dialect) · objectui#6839 (the consumer-local caveat)

Dedup

⚠️ Not run, declared rather than hidden. The reporting dev was rate-limited on both attempts and this seat has not run a targeted search for this fact. No dedup claim is made. Suggested query for a triager: ValueDataSource unknown operator default break matches every row. Known-adjacent: objectui#7349.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions