docs(M09-A): 回填事务收口与V5.6游标

This commit is contained in:
Codex
2026-08-10 14:58:50 +08:00
parent 9b2f055ecd
commit b71b48b3d0
9 changed files with 6795 additions and 34 deletions
@@ -644,6 +644,18 @@ M08-B 可独立工程内容已完成,并新增可追溯的多次现场执行
- 最近工程提交:`90e230c` / `M08-B现场执行记录追溯`
- 上次远端校验:`90e230c153fce98c4c32fcae9f130074a89cc200`
## 2026-08-10 M09-A-RECOVERY 事务与并发收口
- `ENGINEERING_DELTA=YES`,工程提交 `9b2f055` 已推送并验证 `HEAD == origin/main`
- `claim``assign``submit``reject``complete` 与通用状态迁移统一使用数据库事务;状态、负责人、未结算成员和事件同提交或同回滚。完成验收时的负责人补全也已移入同一事务。
- claim 使用 `SELECT ... FOR UPDATE` 串行化同一任务的竞争;两个真实并发连接只有一个成功,失败方返回 `CLEANING_TASK_NOT_CLAIMABLE`
- 重指派覆盖 WAITING、CLAIMED、REJECTED 三种入口,进入 CLAIMED 时重建负责人关系并清空旧照片、驳回原因以及 started/submitted/completed/settled/cancelled 等过期字段。
- 超时回收使用 `LIMIT <夹取整数> FOR UPDATE SKIP LOCKED`;真实 MySQL 测试以独立事务占用最老任务行,证明回收器会跳过已锁行、只返回实际批次 ID,并清理未结算成员而不修改已结算任务/成员。
- 事件写入不再静默忽略冲突;测试预置相同 trace 事件制造插入失败,确认任务状态、负责人和成员整体回滚。相同 complete trace 重试不会增加事件,也不会把 COMPLETED 退回。
- 订单 FINISHED 场景在同一事务内重复调用自动建任务,仍只有一个 WAITING 任务和一个 AUTO_CREATE 事件。
- 验证:`npm test``backend/`)退出码 0;WSL 原生临时副本、MySQL 8.4.10 完成 `up → verify → down → up → verify`144 条 up、124 条 verify、140 条 down,临时数据库和账号由脚本自动清理。
- 阶段结论:`UNIT_CONTRACT_TEST=PASS``MYSQL_8_4_CONCURRENCY=PASS``MIGRATION_ROUNDTRIP=PASS``GIT_PUSH_VERIFIED=PASS``M09-A-RECOVERY=DONE`,下一游标为 `M06-C-R1`