Skip to content

fix(service-analytics): 空 $and/$or 按布尔单位元归约,两个编译器对齐五后端,四条进一致性表 (#5322) - #5365

Draft
os-zhuang wants to merge 5 commits into
mainfrom
claude/issue-5322-empty-combinator-identity
Draft

fix(service-analytics): 空 $and/$or 按布尔单位元归约,两个编译器对齐五后端,四条进一致性表 (#5322)#5365
os-zhuang wants to merge 5 commits into
mainfrom
claude/issue-5322-empty-combinator-identity

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #5322

拍板依据

2026-08-04 维护者拍板(#5322 评论):采纳主案 取布尔单位元,service-analytics 两处对齐。publish/lint 编写期对字面量空组合子的响亮拒收另立 #5330,⛔ 不在本单范围。按 spec 车道链序,本 PR 排在 #5323(driver-mongodb 归约)之后合入。

前提复核 — 两轮实测矩阵(sql.js 逐行执行,非推断)

issue 正文矩阵是 @ 175d789 的,已过时。实测两轮:

第一轮(base f1cc3a316):read-scope-sql 的后两格已由 #5297/#5326 修复;normalizer 四格全错。

第二轮(#5335 于 00:00Z 合入 main 后重测,base c89d18c16)——#5335 把 normalizer 的后两格也修了:

编译器 @ merged main {$and:[]} {$or:[]} {$or:[{a:'x'},{}]} {$not:{}}
期望(#5134/#5322) 全部行 零行 全部行 零行
read-scope-sql 抛错 抛错 全部行 ✓(#5297/#5326) 零行 ✓
filter-normalizer 抛错 抛错 全部行 ✓(#5335) 零行 ✓(#5335)

结论:前提成立但范围收窄 —— 剩余工作是两个编译器的空数组单位元(第 1、2 格)+ 双侧 pin 翻向 + 四条进表。#5335 的三个重叠文件按「取 main 的 const 节点体系」解决冲突,我此前自研的 {kind:'false'} 方案整体弃用,最终 delta 收敛为 9 文件。

修后矩阵:两编译器 × 四格与期望列逐格一致(全部行/零行/全部行/零行)。

改动

验证(全部在 merged main 态,flock 串行)

@objectstack/service-analytics   45 files / 659 tests 全绿
@objectstack/driver-sql          61 passed | 4 skipped / 798 passed | 44 skipped
@objectstack/driver-memory       12 files / 328 tests 全绿
@objectstack/formula             16 files / 361 tests 全绿
@objectstack/driver-sqlite-wasm  17 files / 241 tests 全绿
@objectstack/driver-mongodb      7 passed | 5 skipped / 143 passed | 125 skipped(见下)
@objectstack/spec                308 files / 7885 tests 全绿;check:generated 9/9 up to date;tsc --noEmit 通过
check:type-check-coverage OK;check:driver-conformance 20 cells OK;check:nul-bytes OK + 改动文件控制字节自扫无命中;eslint 改动文件无告警

反向验证 —— 方向先预测、两轮如实记录

第一轮(pre-#5335 base):预测还原两侧源码后 23 红,实测 23 红/预测逐条命中;其中 read-scope-sql-conformance 四条新行只红 2({} 吸收与 {$not:{}} 在 main 已被 #5297/#5326 修复,保持绿)—— 与派发模板预设的「四条全红」不同,方向如实记录。

第二轮(merged #5335 后重做):预测 19 红(native-sql conformance 从 4 红缩为 2 红,因 #5335 已覆盖后两格),实测 19 红/预测逐条命中,分布逐文件一致

driver-mongodb:「预期红」在本容器不可观测,如实说明

派发词预告本地 driver-mongodb 四条会红(#5323 未合入)。实测本容器全绿,且这不是覆盖达成:translation 侧 suite 用进程内 matcher 把译文 document 桥接到行 id,而该 matcher 建模的是 MongoDB 的文档求值语义($and:[].every = true,$or:[].some = false)——真实服务端对空数组是整条查询拒绝(must be a nonempty array),只有需要真 mongod 的 mongodb-filter-logic-conformance.test.ts 半边能观测到,而本容器取不到 mongod 二进制(125 skipped)。因此:在能取到 mongod 的 CI 上,本 PR 的四条新行会在该 suite 红,解除条件 = #5323 合入(其归约让服务端半边转绿)。这正是 #5323 PR body 第 2 节记录的依赖方向,不在本单修复。

合并次序与 #5323 的文件交叠

#5323 与本 PR 都动 packages/spec/src/data/filter-logic-conformance.ts:#5323头部 docblock 记「三族已裁定未进表」注记,本 PR 在 cases 数组加四行 —— 区域不同,git 可干净合并。#5323 先合后,本 PR 随车道 rebase 时需做两件小事(留给接力方或届时我方处理):

  1. 该注记的「族 1(空组合子)」段落删除(本 PR 已让其过时),族 2/3 保留;
  2. fix(driver-mongodb): 空 $and/$or/$not 归约成布尔单位元,非 filter 节点先响亮拒收 (#5239) #5323filter.zod.ts 写的「Deliberately NOT declared here」段中空组合子一句,可改为正式声明(两端已 enforced,declared ≠ enforced 顾虑解除)—— 属可选跟进,不阻塞。

范围外


🤖 Generated with Claude Code

https://claude.ai/code/session_01ErbEDVAg1No9gdg1pgDAGB


Generated by Claude Code

claude added 5 commits August 4, 2026 23:41
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ErbEDVAg1No9gdg1pgDAGB
…ty-combinator-identity

# Conflicts:
#	packages/services/service-analytics/src/strategies/filter-normalizer.ts
#	packages/services/service-analytics/src/strategies/native-sql-strategy.ts
#	packages/services/service-analytics/src/strategies/objectql-strategy.ts
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 5, 2026 1:24am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:data tests tooling size/m labels Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/service-analytics, @objectstack/spec.

109 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/data-api.mdx (via @objectstack/service-analytics)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/service-analytics, @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:data size/m tests tooling

Projects

None yet

2 participants