Repository navigation
Commit 49f208b
`buildNode`'s first line was `if (raw === undefined) continue;` — the entry gate
doing the one thing the rest of the module forbids: dropping a key without a
trace, which does not narrow a query, it WIDENS it. Measured on origin/main
(5faa23c), one shape had seven readings; the first three widen:
{d: undefined} -> null (the WHOLE where dropped)
{stage:'won', d: undefined} -> stage equals 'won' (the conjunct vanished)
{$not: {d: undefined}} -> NOT (d set) = d IS NULL (an invented predicate)
{d: {$eq: undefined}} -> d equals [null] (value comparison)
{d: {$gt: undefined}} -> d gt [null]
{d: {$in: [undefined]}} -> d in [null]
{d: {$ne: undefined}} -> d notSet OR d notEquals [null]
Row three is the strangest: #5146's null-safe rewrite splits the leaf into
`{d: {$null: false}} AND {d: undefined}`, the entry gate dropped the second
half, and the surviving guard was negated — so a predicate grew out of a
discarded leaf.
#6050 ruling B (undefined in a comparand position is refused) is pushed down to
this door, in this module's existing envelope: INVALID_FILTER / 400, because
unlike `read-scope-sql`'s platform-compiled artifact this door receives caller
input. `assertDefinedComparands` sweeps the four comparand positions in
`fieldLeaves` — the only leaf producer, so one gate covers all three consumers of
the tree — and deleting the entry line lets each combinator reach the refusal it
already had. The direction is silently wrong RESULTS, not a permission bypass:
read scope is compiled by the other door and never passes through here.
`comparand()` (#5526) and the strict `wrapper[opKey] === null` branch (#5332) are
byte-identical: this refuses an INPUT and reopens neither. The normalisation is
now unreachable from this door, which is recorded rather than acted on.
Claude-Session: https://claude.ai/code/session_015a5qkLzpGXhLL2F5gvJ7dD
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 53068c1 commit 49f208b
6 files changed
Lines changed: 869 additions & 17 deletions
File tree
- .changeset
- packages/services/service-analytics/src
- __tests__
- strategies
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
722 | 722 | | |
723 | 723 | | |
724 | 724 | | |
725 | | - | |
726 | | - | |
727 | | - | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
728 | 753 | | |
729 | 754 | | |
730 | 755 | | |
| |||
0 commit comments