Skip to content

[rc 止血] 批量写上引用 previous 的 hook 条件:泛化失败换成点名批量限制的专门诊断 + ADR 补遗 #5037

Description

@claude

维护者 2026-08-04 拍板(见 #4800 / #4862 的裁定评论):批量写按行语义为契约,本单是 rc 止血半步

任务

  1. 专门诊断:hook 条件引用 previous(hook 的 condition 求不出值时:全局 fail loud —— 抛错并中断该次操作(方案 B 已拍板;Blocked-by #4770) #4775 fail-loud 已落地)撞上 predicate 批量更新(multi: true,无单一前置记录)时,当前抛的是泛化求值失败(形如 No such key: previous),必须换成点名的错误:说明这是批量写、无单一前置记录、当前版本的限制、以及出路(改单记录写入;或等按行语义实现单落地)。错误挂既有错误族,机器可读。
  2. ADR 补遗:把「批量写上 after 型 hook / record-change flow trigger 按行求值、按行触发」的契约决定记入相关 ADR(补遗形式,参照 Parent-scoped readonlyWhen is unenforced server-side — the field lock fails open, so a paid invoice's frozen lines can be rewritten over the API #4889/PR fix(objectql,lint): 服务端补上 parent 作用域 readonlyWhen 的绑定与执行 (#4889) #4972 的 ADR-0058 D5 addendum + anchors 先例),并注明 rc 期以本诊断止血、实现单另行交付。
  3. 回归测试:批量写 + 引用 previous 的 hook 条件 → 收到点名诊断(非泛化错误);单记录写不受影响;不引用 previous 的批量写不受影响。

落点:packages/objectql(hook-wrappers / engine 批量分支)+ docs/adr。⛔ packages/spec/** 零改动;protocol.ts 零改动。

Part of #4800


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions