Canonical GROQ for display, via groq-js unparse (negation rendered as a
!(...) wrapper). Display-only: unparse collapses ['dotted.key']
access to .dotted.key, so re-parsing this string can change meaning —
the insight machinery evaluates the opaque ConditionAtom.node.
The condition needs this atom NOT to hold (it sat under a !).
The parsed sub-expression — deliberately opaque: the groq-js AST shape is not part of the public contract. Do not rely on its structure.
A leaf predicate after boolean decomposition — the unit "why is this condition failing" reasoning works on.
And/Or/Notstructure is folded into the ConditionClause tree (negation pushed down to the leaves, so!(a && b)decomposes toanyof two negated atoms); everything else is an atom.