Part of objectstack-ai/cloud#1077(原单在 cloud;随 #4645 Phase A/B 驱动迁移,`driver-turso` 已迁回本仓,落点现为 `packages/drivers/driver-turso/src/remote-transport.ts`。cloud 侧已无该代码面,原单关闭移交,完整实测证据见其正文与维护者两条评论)。 ## 缺陷 `buildWhereSQL` 条件层只识别 `$and` / `$or` / `$not`;其余任何 `$` 开头的键落**字段路径**,双引号标识符被 SQLite 按向后兼容规则当**字符串字面量** → **静默空结果集**(维护者实测更正:不是 `no such column`;`where {"$eq":"won"}` → `SELECT … WHERE "$eq" = ?` → `RESOLVED []`)。写路径(`deleteMany` / `updateMany`)上同一个编不出的条件意味着谓词恒假或恒真,取决于落侧 —— 修时一并核并加断言。 ## 上下文(全部已就位,本单严格更简单) - **framework 侧同款缺口已修**:objectstack#5348 裁定拒收,PR #5368 在 `SqlDriver` 的**校验遍历**(`reduceFilterKey`,非发射器 —— 发射器会被布尔单位元整段跳过)加闸:节点位置 `$` 开头且非逻辑算子 → `INVALID_FILTER` / 400。`SqliteWasmDriver` / Turso **local** 继承。`RemoteTransport` 是这条规则**唯一剩余面**,且方向是反的:local 严、remote 松。 - **信封半边已随迁**:`remote-transport.ts:235` 的 `invalidFilterError()`(cloud#1117 落地,`INVALID_FILTER`/400,取自 `@objectstack/spec` StandardErrorCode)。新闸只需 `return invalidFilterError(...)`;拒收表测试(`remote-transport-comparand-refusal.test.ts` 等)已随迁本仓,加行即可。 - **消息分两种**(cloud#1077 正文建议):是 `FieldOperatorsSchema` 认识的字段算子(`$eq`/`$gt`/…)→ 指路「你可能想写 `{ 字段名: { 算子: 值 } }`」;未知 `$` 键 → 点名拒收。与 `matchesFilterCondition` 对条件层未知 `$` 键的 fail-closed 姿态一致。 - **`$nor` / `$elemMatch`** 今天只是被 #1058/#1066 的比较值守卫**偶然**拦下且信封不合规(`code=undefined`)—— 节点级闸落地后按本闸拒收。 - **顺带**(维护者点名同轮该看):`remote-transport.ts:462` `Unsupported aggregate function` 仍是裸 `Error`,不属过滤器拒收(更像 `INVALID_QUERY` 一类)—— 按 ADR-0112 标准目录选码同 PR 收尾,或在 PR 里明确说明不做及理由。 ## 验收 条件层未知 `$` 键在 find / deleteMany / updateMany 三路皆响亮 `INVALID_FILTER`(不再静默空集/全表写);新用例进已随迁的拒收表;若共享一致性表(FILTER_LOGIC_CASES 一族)已覆盖 remote 面,按共享一致性覆盖条款加轴而非另起独立文件。 --- _Generated by [Claude Code](https://claude.ai/code)_
Activity
os-zhuang commentedon Aug 6, 2026
认领:PM 循环第 9 轮(drivers 车道,维护者 2026-08-06「加速开发」指令,三路并行批次之一)
会话:
session_01WyvqvKMG6asi9aXjKE6xtx分支:
claude/issue-5769-turso-remote-operator-key-refusalWorktree:
objectstack-issue-5769域:
domain:drivers(cloud#1077 跨仓移交,标题明示 drivers(turso),分诊 domain 标欠账,认领时申报;turso 不在 #5499 冻结范围)文件面:
packages/drivers/driver-turso/src/remote-transport.ts(条件层闸 + :462 信封顺带)+ 既有拒收表测试加行(comparand-refusal 族、turso-remote-filter-logic-conformance)定向在飞检查:全仓 18 张 pm:dispatched 实测无 turso 面;同包 #5770(backfill)串行排本单之后,本单⛔不触 backfill/DDL 路径。
Generated by Claude Code
os-zhuang commentedon Aug 6, 2026
复核:ACCEPT → PR #5921(PM 实测复核;dev 报告未回,不影响——复核纪律以 GitHub 实测为准):
$or: [{}, {畸形}]经布尔单位元吸收后整句丢 WHERE,updateMany 实测全表改写——此格已被闸覆盖并入拒收表;MISPLACED_FIELD_OPERATORS只决定措辞、永不决定判决(spec:$regex按 ADR-0049 退役 +$icontains入算子词表与 FILTER_LOGIC_CASES(#4706 裁决 B 案 · 契约半边,先行) #5701「运行时 allowlist 非词表」的告诫落实);非数组$and/$or同族缺口一并闸掉,local/remote 一致性 describe 块钉死;:462顺带项处置正确:实测推翻「remote 单面」前提(driver-sql :6753 同款裸 Error),按 PD#10 拆 drivers(sql,turso):Unsupported aggregate function两面都是裸Error(code/status 皆 undefined),且三个 spec 已声明的聚合函数无任何 SQL 后端编译 #5907 而非单面修;转 ready 入队;MERGED 后放 #5770(同文件串行棒)。
Generated by Claude Code