#5322 已拍板:运行期空组合子({$and:[]} / {$or:[]} / {$not:{}} / {})统一取布尔单位元归约,service-analytics 两个编译器与五个后端对齐(实施 PR 见 #5322 的分支)。
本单记录拍板时明确保留的可选增强,unassigned,不阻塞任何在途工作:
内容
在 publish/lint 面(生产端)对字面量空组合子响亮拒收:作者在元数据里手写出 {$or: []} 这类形状时,编写期即报错并给出处方(想表达「零行」应写什么、想表达「无过滤」应省略该键),而不是等运行期按单位元静默求值。
为什么不并入 #5322 的实施 PR
拒收落点在 lint/publish 管线(packages/lint 或 spec 授权门),与 analytics 编译器对齐分属不同包与不同风险面;且「字面量 vs 程序化产物」的判定边界(lint 能看到源码字面量,publish 门只看到值)需要单独设计,不该作为 rider 搭车。
验收方向
- lint 面:字面量空组合子 → 报错 + 处方;
- 运行期矩阵(FILTER_LOGIC_CASES 四条)不受影响;
- 拒收信息与 filter-normalizer 曾有的措辞("An empty combinator has no defensible reading…")的历史关系在 docblock 里交代,避免下一个读者以为运行期还在抛错。
关联:#5322(拍板)、#5239(一致性表四条)、#5240(编写期拒收先例)、#5134($or:[] = 零行的 P0 来源)。
#5322 已拍板:运行期空组合子(
{$and:[]}/{$or:[]}/{$not:{}}/{})统一取布尔单位元归约,service-analytics 两个编译器与五个后端对齐(实施 PR 见 #5322 的分支)。本单记录拍板时明确保留的可选增强,unassigned,不阻塞任何在途工作:
内容
在 publish/lint 面(生产端)对字面量空组合子响亮拒收:作者在元数据里手写出
{$or: []}这类形状时,编写期即报错并给出处方(想表达「零行」应写什么、想表达「无过滤」应省略该键),而不是等运行期按单位元静默求值。{ field: {} }(零个操作符的字段约束)在同仓有三个答案:driver-sql 组合子内 TRUE、顶层抛 INVALID_FILTER、formula/driver-memory FALSE #5240({field:{}}编写期拒收)的同向先例;$or:[]= 零行),人类/AI 作者的字面量笔误走编写期爆炸。为什么不并入 #5322 的实施 PR
拒收落点在 lint/publish 管线(
packages/lint或 spec 授权门),与 analytics 编译器对齐分属不同包与不同风险面;且「字面量 vs 程序化产物」的判定边界(lint 能看到源码字面量,publish 门只看到值)需要单独设计,不该作为 rider 搭车。验收方向
关联:#5322(拍板)、#5239(一致性表四条)、#5240(编写期拒收先例)、#5134(
$or:[]= 零行的 P0 来源)。