裁决依据:#5298 「四项确认落档」评论(维护者 2026-08-06)——实施面①裁定全扩分批,本单是第二批;方向④:非否定路径 $ne/$nin/$notContains 包含 NULL 行 。第一批(PR #5962 :driver-sql 五出口 + read-scope-sql + formula $exists)已 MERGED。
任务
先实测 :packages/services/service-analytics/src/strategies/filter-normalizer.ts 的 notEquals/notIn/notContains 降级路径(约 :267-275,极性表副本约 :710-719)对 NULL 行的既有行为 ——非否定路径上的 $ne / $nin / $notContains:driver-sql 排除 NULL 行,driver-memory / formula 返回它们(#5146 只裁定了 $not) #5298 成本清单明记此面未测(容器无 Cube 实例);用其真实消费端(native-sql 一致性 harness / MemoryAnalyticsService 路径)驱动实测,别静态读码下结论。
与裁决方向分叉的,改写对齐(参照 PR fix(drivers,analytics,formula): $ne / $nin / $notContains 在 $not 之外也 NULL-safe (#5298) #5962 中 read-scope-sql 的形态:OR 展开、复用极性判定);已一致则记录证据、一行不改 。
N1 入表判定 :FILTER_LOGIC_CASES 的 N1($ne 含 NULL 行)按「后落地者入表」规则(非否定路径上的 $ne / $nin / $notContains:driver-sql 排除 NULL 行,driver-memory / formula 返回它们(#5146 只裁定了 $not) #5298 PM 裁定评论)——若 drivers(turso): remote 模式没有继承 #5146 的 $not NULL-safe —— 同一个 TursoDriver,local 返回 NULL 行、remote 不返回(实测,origin/main) #5903 (turso remote)届时已 MERGED,本 PR 补 N1 入表(spec 表文档 RULED-but-not-yet-enrolled 小节有现成行,复制即可);未落地则如实留给 drivers(turso): remote 模式没有继承 #5146 的 $not NULL-safe —— 同一个 TursoDriver,local 返回 NULL 行、remote 不返回(实测,origin/main) #5903 ,报告说明。
反向验证方向预判:若第 2 步有改写,native-sql harness 的 N1 格(现红,见 PR fix(drivers,analytics,formula): $ne / $nin / $notContains 在 $not 之外也 NULL-safe (#5298) #5962 表文档小节)应转绿。
边界(⛔)
验收
filter-normalizer 对三算子的 NULL 行为与裁决一致(实测证据,非推断);service-analytics 全绿 + 相关 conformance harness 全绿;若有行为改写 → changeset。
裁决依据:#5298「四项确认落档」评论(维护者 2026-08-06)——实施面①裁定全扩分批,本单是第二批;方向④:非否定路径
$ne/$nin/$notContains包含 NULL 行。第一批(PR #5962:driver-sql 五出口 + read-scope-sql + formula $exists)已 MERGED。任务
packages/services/service-analytics/src/strategies/filter-normalizer.ts的 notEquals/notIn/notContains 降级路径(约 :267-275,极性表副本约 :710-719)对 NULL 行的既有行为——非否定路径上的$ne/$nin/$notContains:driver-sql 排除 NULL 行,driver-memory / formula 返回它们(#5146 只裁定了$not) #5298 成本清单明记此面未测(容器无 Cube 实例);用其真实消费端(native-sql 一致性 harness / MemoryAnalyticsService 路径)驱动实测,别静态读码下结论。$ne含 NULL 行)按「后落地者入表」规则(非否定路径上的$ne/$nin/$notContains:driver-sql 排除 NULL 行,driver-memory / formula 返回它们(#5146 只裁定了$not) #5298 PM 裁定评论)——若 drivers(turso): remote 模式没有继承 #5146 的$notNULL-safe —— 同一个 TursoDriver,local 返回 NULL 行、remote 不返回(实测,origin/main) #5903(turso remote)届时已 MERGED,本 PR 补 N1 入表(spec 表文档 RULED-but-not-yet-enrolled 小节有现成行,复制即可);未落地则如实留给 drivers(turso): remote 模式没有继承 #5146 的$notNULL-safe —— 同一个 TursoDriver,local 返回 NULL 行、remote 不返回(实测,origin/main) #5903,报告说明。边界(⛔)
like-pattern.ts/strategies/objectql-strategy.ts(driver-sql:两类无意义比较对象仍编译成「静默空谓词」——$in/$nin的非$field对象成员,与 LIKE 族的对象比较值(String 成[object Object]) #5234 在飞,同包不同文件,后落地者 rebase);$notNULL-safe —— 同一个 TursoDriver,local 返回 NULL 行、remote 不返回(实测,origin/main) #5903);验收