#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 侧按行契约(#5038)同口径对表。 4. 与 #5748 同写 **bulk-write ADR 附录**(裁决指定)。 ## 流程与下游 - 按裁决:PM 复核、维护者否决窗口。 - **engine 实现半边(engine-core 席)Blocked-by 本单**,spec 定形落地后由该席派发;届时与同接缝卡 #5846(单 id 三读前置行,其 (a) 方向 = 前置读移到 beforeUpdate 之前并绑定)统一编排,避免同一时序被改两次。 - 下游解锁:hotcrm#779(Blocked-by #5574)。 Refs:#5574(裁决与实测证据)、#4800 / #4862(after 侧既有裁决)、#5038(after 侧交付)、#5748(ADR 附录同伴)、#5846(同接缝编排)。
#5574 的维护者裁决(2026-08-06 两级批复:裁决评论 + 全舰队决策箱「同意」)选定方案 B —— 把「批量写按行语义为平台契约」(#4800/#4862 既有裁决,after 侧已由 #5038 交付)延伸到 before 型 hook,并明确 contract-first 拆分:spec 契约子单先行,engine 实现随后。本单即该 spec 半边,由 engine-core 席按裁决的拆分指令代立;domain 标签交分诊落(预期
domain:spec)。本单要定形的(裁决必答项映射)
multi: true批量更新逐行派发beforeUpdate时,每行 hook 拿到 per-rowctx.previous与该行载荷 —— 需定:hook 改写载荷的合法面(哪些改写生效、作用域是否仅限本行)、N 行各自改写后与「一份谓词 payload」原形的关系(分叉合并规则)、ctx.result形状、与单行路径的等价性声明。assertBulkPerRowHookBudget先例的 spec 级表述(上限、超限行为);engine 侧复用已取的priorRows、⛔ 不二次取数(裁决原文)。packages/spec,与 after 侧按行契约([17.x] 批量写按行语义实现:hook 按行触发 + record-change trigger 按行绑定 previous/record(#4800/#4862 拍板 A) #5038)同口径对表。data.id不做标量测试 —— 载荷里的算子对象被当成主键绑定,且盖过显式options.multi: true#5748 同写 bulk-write ADR 附录(裁决指定)。流程与下游
Refs:#5574(裁决与实测证据)、#4800 / #4862(after 侧既有裁决)、#5038(after 侧交付)、#5748(ADR 附录同伴)、#5846(同接缝编排)。