fix: preserve unknown semantics for json path predicates (#50702)
commit e05e50e ↗ · milvus-io/milvus · · committed Jun 26, 2026 · +358−293 · base 4bfdd7f3e52e
Agent prompt
what a new run launched now would send
JSON path filter predicates currently treat parent JSON null, missing nested paths, incompatible path types, and invalid array paths inconsistently: some operators (especially inequality / `!=` and related `NOT` forms) treat those cases as a definite boolean, and raw evaluation, stats/index/cached bitmap paths, and `NOT` composition can disagree.
Reproduce by querying/filtering on nested JSON paths that are missing, JSON-null, or the wrong type (including under `!=` / `!~` and under `NOT`), and compare indexed/stats results vs brute-force/raw evaluation. Rows in those UNKNOWN cases must not count as definite matches, and inequality must not behave as “always true” when the path is absent or incomparable.
Align behavior with SQL-style three-valued logic so those cases preserve UNKNOWN consistently across the JSON predicate evaluation paths (including JSON contains/term/range-style predicates and `NOT`). When returning cached stats/index bitmap results, preserve validity bitmaps accordingly. Fix any parser rewrite that currently assumes scalar JSON missing-path `!=` is a definite true, and update tests that encoded the old definite-true/false expectations.
Work only inside this repository checkout. Make the code change the task
describes, keeping the diff focused — no drive-by refactors.
When you are done, leave your changes committed or in the working tree;
they are collected automatically.
Stay on this snapshot checkout (`task/ycb_milvus_ce05e50e144a2`). Never checkout, pull, or rebase onto `main`. That branch is a README-only orphan.
Stay on this HEAD. Do not fetch another default branch. Push only on the Cursor-created `crazy-cursor/…` side branch from this HEAD.
Some past runs of this task were launched with a different prompt (the prompt template changed since, or those runs predate this benchmark's stored prompt). Each run persists the exact prompt it sent at launch — that per-launch record is the audit trail; this page shows only the current one.
Reference diff
The task commit's diff against its first parent — the judge's comparison target.