Skip to content

spec 契约:multi:true 批量更新上 beforeUpdate 的 per-row 载荷可变语义(#5574 裁决 B 的 contract-first 前置) #6462

Description

@baozhoutao

#5574 的维护者裁决(2026-08-06 两级批复:裁决评论 + 全舰队决策箱「同意」)选定方案 B —— 把「批量写按行语义为平台契约」(#4800/#4862 既有裁决,after 侧已由 #5038 交付)延伸到 before 型 hook,并明确 contract-first 拆分:spec 契约子单先行,engine 实现随后。本单即该 spec 半边,由 engine-core 席按裁决的拆分指令代立;domain 标签交分诊落(预期 domain:spec)。

本单要定形的(裁决必答项映射)

  1. per-row 载荷可改写语义:multi: true 批量更新逐行派发 beforeUpdate 时,每行 hook 拿到 per-row ctx.previous 与该行载荷 —— 需定:hook 改写载荷的合法面(哪些改写生效、作用域是否仅限本行)、N 行各自改写后与「一份谓词 payload」原形的关系(分叉合并规则)、ctx.result 形状、与单行路径的等价性声明。
  2. 预算护栏的契约面:assertBulkPerRowHookBudget 先例的 spec 级表述(上限、超限行为);engine 侧复用已取的 priorRows、⛔ 不二次取数(裁决原文)。
  3. pin 测试packages/spec,与 after 侧按行契约([17.x] 批量写按行语义实现:hook 按行触发 + record-change trigger 按行绑定 previous/record(#4800/#4862 拍板 A) #5038)同口径对表。
  4. ObjectQL.update 的 data.id 不做标量测试 —— 载荷里的算子对象被当成主键绑定,且盖过显式 options.multi: true #5748 同写 bulk-write ADR 附录(裁决指定)。

流程与下游

Refs:#5574(裁决与实测证据)、#4800 / #4862(after 侧既有裁决)、#5038(after 侧交付)、#5748(ADR 附录同伴)、#5846(同接缝编排)。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions