Define authoritative reconciliation acknowledgements
Local review candidate only. Explicitly selected inherited prerequisites and prior repair patches; unrelated WIP and independent MQ fixes are excluded. No push or deployment authorized.
This commit is contained in:
@@ -316,3 +316,27 @@ svc-hall:普通消费保留 `AnswerProjectionStore.applySnapshot(SnapshotEnvel
|
||||
`svc-hall/server/sql/fc_projection_and_apply_intent.sql`、
|
||||
`flow-center/service/src/main/resources/sql/add_flw_apply_request_identity.sql`)
|
||||
都是**非幂等**脚本,生产需人工执行;`ddl-auto=update` 的开发库会自动追加,两侧不能长期分叉。
|
||||
|
||||
|
||||
## 11. R3/R4 对账结果回执裁决(2026-10-23 收口)
|
||||
|
||||
本节是对账 `submitResult` 协议,不修改 MQ publisher confirm/return 或投递状态机(B-09 另案)。
|
||||
回执新增 `decision`、`reportAttempt`(本次回报轮次)、`resultState`(本轮已接受的结论);
|
||||
既有 `attempt` 继续表示中心当前派发轮次,`taskState` 表示中心任务状态,不能单凭它推断本次旧回报被采纳。
|
||||
旧回报永不推进中心新轮。终态权威必须由 `CENTER_TERMINAL` 显式声明,不以 stale=true 附带的诊断状态冒充。
|
||||
|
||||
| 条件 | decision | FC 写入 | SH 处置 |
|
||||
|---|---|---|---|
|
||||
| 当前 attempt 首次合法结果 | CURRENT_ACCEPTED | 持久结果;RUNNING 续租,终态按已有规则收敛 | 按 resultState 回填;RUNNING 保留租约,失败不能变成功 |
|
||||
| 当前 attempt 重复已终结结果 | CURRENT_DUPLICATE | 不覆盖首次结果、不重复计数 | 使用首次 resultState;不采信重报自己宣称的新结果 |
|
||||
| 旧 attempt,中心尚非终态 | STALE_RETRY | 仅归档;已有终结结果不覆盖;不续新轮租约、不推进任务 | 清本地租约,QUEUED 等重派/重试;不把诊断 taskState 当本轮成功 |
|
||||
| 中心已终态(包括旧 attempt 回报) | CENTER_TERMINAL | 不改中心终态与新轮结果 | 身份、轮次回声验证通过后镜像中心真实终态;FAILED/PARTIAL/CANCELLED 不伪装 COMPLETED |
|
||||
| 回报超出已派发 attempt | HTTP 业务拒绝 | 零结果/状态变更 | 保留可重试/人工诊断,不记成功 |
|
||||
| 发送异常、不可达、拒绝、空或不匹配回执 | 无有效确认 | 不推定已成功 | QUEUED + pendingReportState,仅重报;有界退避,耗尽 FAILED |
|
||||
| 缺新 decision 的旧中心回执且 stale=true | 保守兼容 | — | 保持 QUEUED,不信任附带终态;下一次完整回执再收敛 |
|
||||
|
||||
当前/重复成功回执必须匹配 taskId,reportAttempt 若提供必须等于本地发送 attempt。
|
||||
新协议 current 决策不得确认其他轮次;CENTER_TERMINAL 的中心 attempt 不得低于本地执行轮。
|
||||
乱序旧回执在本地持久化时仍受 work_version 乐观锁保护,不覆盖重派或新执行轮。
|
||||
有效租约 RUNNING 的重派不改变执行 attempt、租约、检查点或 work_version;过期(含相等)后才能重新排队。
|
||||
接收与领取均用同一任务行的悲观锁;领取时重新核对状态和退避时刻,陈旧扫描候选不能双领。
|
||||
|
||||
@@ -362,3 +362,15 @@ Worker 每轮从**同一水位**读两侧一页(中心清单 + `AnswerProjecti
|
||||
|---|---|---|
|
||||
| 2026-10-21 | v1 落地:任务坐标到表单为止(全量=按订阅裂变)、清单不可变物化 + `completed` 唯一结束判据、双流锁步水位、缺席证明六前置、`RepairResult` 四分支与整笔回滚后事务外重读、派发 2xx 与终态严格分离、调度与派发双闸默认关 | 任务书 TASK_3 改动点 1–8 与 `TASK_2_PREFIX_CHECK.md` 接入清单 |
|
||||
| 2026-10-21 | 明确不接触 `application.yml`:全部键以 `@ConfigurationProperties`/`@Value` 默认值交付,env 注入生效 | 约束「配置在本任务独立 `@Configuration` 中,不争用 TASK_2 配置」 |
|
||||
|
||||
|
||||
## 2026-10-23 R3/R4 收口
|
||||
|
||||
`ResultAck.decision` 采用 CURRENT_ACCEPTED / CURRENT_DUPLICATE / STALE_RETRY / CENTER_TERMINAL。
|
||||
`reportAttempt` 回声本次回报,既有 `attempt` 为中心派发轮次;`resultState` 表示被采纳或首次保存的结果。
|
||||
旧轮不推进新轮;只有显式 CENTER_TERMINAL 可以在 stale=true 时令 SH 镜像中心终态并停止重试。
|
||||
缺少有效确认、身份/轮次不匹配、网络/不可路由保持重报,不得记成功。
|
||||
完整状态矩阵以 [answer-delivery-v2 §11](answer-delivery-v2.md#11-r3r4-对账结果回执裁决2026-10-23-收口) 为准。
|
||||
MQ publisher confirm/return 与 B-09 仍是独立投递状态机,本批没有修改。
|
||||
有效租约中的 SH RUNNING 行保留执行 attempt 与 work_version;过期或终态再接纳重派。
|
||||
行锁领取、领取时二次到期判定、work_version 过期执行者保护共同防止旧执行清除新租约。
|
||||
|
||||
Reference in New Issue
Block a user