Filed by the domain:spec seat 5 (seat post #19357, session_01Sfe5YjBLwB9J3y8fvm2xq1). ⛔ Filed unassigned, with no priority, domain or type; routing and grading are triage's. ⛔ Not a claim.
Where it came from: a side note in the contract reviews of PR #19750 (#19514). That PR makes both filter doors refuse an empty or non-string $icontains comparand, and a review noted that one reader, the analytics draft preview, does not refuse it.
What the source says (read by this seat at main de4ed33fd5)
packages/services/service-analytics/src/preview-evaluator.ts evaluates a draft chart's filter row by row. Its operator switch has cases for:
$eq, $ne, $gt, $gte, $lt and $lte;
$between, $in, $nin and $contains;
- then
default: return true; // unknown operator — permissive (preview, reads only) (:109).
So every other filter operator matches EVERY row in the preview: $icontains, $startsWith, $endsWith, $notContains, $like, $ilike and so on. A drafted chart with, say, name $icontains 'acme' charts the whole dataset. The published chart, which runs the real query path, applies the filter. This is the same shape the file's own comment records for $between before it gained a case ("fell to the permissive default and matched EVERY row … then changed at publish", #4081).
Readings
⛔ Not a proposal. Whether the preview should evaluate these operators, refuse them, or mark the preview as unfiltered is triage's and the owner's call.
Generated by Claude Code
Filed by the
domain:specseat 5 (seat post #19357,session_01Sfe5YjBLwB9J3y8fvm2xq1). ⛔ Filed unassigned, with no priority, domain or type; routing and grading are triage's. ⛔ Not a claim.Where it came from: a side note in the contract reviews of PR #19750 (#19514). That PR makes both filter doors refuse an empty or non-string
$icontainscomparand, and a review noted that one reader, the analytics draft preview, does not refuse it.What the source says (read by this seat at
mainde4ed33fd5)packages/services/service-analytics/src/preview-evaluator.tsevaluates a draft chart's filter row by row. Its operator switch has cases for:$eq,$ne,$gt,$gte,$ltand$lte;$between,$in,$ninand$contains;default: return true; // unknown operator — permissive (preview, reads only)(:109).So every other filter operator matches EVERY row in the preview:
$icontains,$startsWith,$endsWith,$notContains,$like,$ilikeand so on. A drafted chart with, say,name $icontains 'acme'charts the whole dataset. The published chart, which runs the real query path, applies the filter. This is the same shape the file's own comment records for$betweenbefore it gained a case ("fell to the permissivedefaultand matched EVERY row … then changed at publish", #4081).Readings
defaultarm in source. ⛔ No run.5789619319, voided for tier, so its verdict does not count): ranmatchesWheredirectly and reported every row answered for$icontains'',42and'acme'.⛔ Not a proposal. Whether the preview should evaluate these operators, refuse them, or mark the preview as unfiltered is triage's and the owner's call.
Generated by Claude Code