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 fix(driver-sql,driver-memory,driver-mongodb): 越界过滤输入在门口拒收,而不是每个后端各答一个 (#5347, #5348) #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 今天只是被 CLI: add remote API commands for Data API and Metadata API #1058 /fix(studio): use getRequestListener() with extractBody() for Vercel POST support #1066 的比较值守卫偶然 拦下且信封不合规(code=undefined)—— 节点级闸落地后按本闸拒收。顺带 (维护者点名同轮该看):remote-transport.ts:462Unsupported aggregate function 仍是裸 Error,不属过滤器拒收(更像 INVALID_QUERY 一类)—— 按 ADR-0112 标准目录选码同 PR 收尾,或在 PR 里明确说明不做及理由。验收 条件层未知 $ 键在 find / deleteMany / updateMany 三路皆响亮 INVALID_FILTER(不再静默空集/全表写);新用例进已随迁的拒收表;若共享一致性表(FILTER_LOGIC_CASES 一族)已覆盖 remote 面,按共享一致性覆盖条款加轴而非另起独立文件。
Generated by Claude Code
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)上同一个编不出的条件意味着谓词恒假或恒真,取决于落侧 —— 修时一并核并加断言。上下文(全部已就位,本单严格更简单)
SqlDriver的校验遍历(reduceFilterKey,非发射器 —— 发射器会被布尔单位元整段跳过)加闸:节点位置$开头且非逻辑算子 →INVALID_FILTER/ 400。SqliteWasmDriver/ Turso local 继承。RemoteTransport是这条规则唯一剩余面,且方向是反的:local 严、remote 松。remote-transport.ts:235的invalidFilterError()(cloud#1117 落地,INVALID_FILTER/400,取自@objectstack/specStandardErrorCode)。新闸只需return invalidFilterError(...);拒收表测试(remote-transport-comparand-refusal.test.ts等)已随迁本仓,加行即可。FieldOperatorsSchema认识的字段算子($eq/$gt/…)→ 指路「你可能想写{ 字段名: { 算子: 值 } }」;未知$键 → 点名拒收。与matchesFilterCondition对条件层未知$键的 fail-closed 姿态一致。$nor/$elemMatch今天只是被 CLI: add remote API commands for Data API and Metadata API #1058/fix(studio): use getRequestListener() with extractBody() for Vercel POST support #1066 的比较值守卫偶然拦下且信封不合规(code=undefined)—— 节点级闸落地后按本闸拒收。remote-transport.ts:462Unsupported aggregate function仍是裸Error,不属过滤器拒收(更像INVALID_QUERY一类)—— 按 ADR-0112 标准目录选码同 PR 收尾,或在 PR 里明确说明不做及理由。验收
条件层未知
$键在 find / deleteMany / updateMany 三路皆响亮INVALID_FILTER(不再静默空集/全表写);新用例进已随迁的拒收表;若共享一致性表(FILTER_LOGIC_CASES 一族)已覆盖 remote 面,按共享一致性覆盖条款加轴而非另起独立文件。Generated by Claude Code