采购演练可以执行和领取后,还必须验证崩溃、重复启动、结果提交失败和不可逆阶段恢复规则。虽然 MVP 不真实下单,但状态机和恢复路径必须先按真实安全边界建立,否则以后开启安全门禁时可能在进程崩溃后重复创建订单。
task_runs
irreversible_action_at
reconcile_purchase
live
current_step
预计修改:采购任务服务、恢复协调器、Repository 状态查询、只读核对 Adapter 接口、事件/UI 状态、质量安全测试和 Client 基线文档。
从 client/ 执行:
client/
C:/Python310/python.exe -m py_compile src/purchase_task_service.py $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -m unittest discover -s test -p "test_purchase*.py" -v C:/Python310/python.exe -m unittest discover -s test -p "test_task_repository.py" -v C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_ui_event.py" -v C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" Remove-Item Env:QT_QPA_PLATFORM
故障注入至少覆盖:领取后保存前、运行记录创建后、规格选择后、数量设置后、价格核对后、结果落库后、Outbox 发送前;另构造 irreversible_action_at 非空的历史运行,断言只核对且 purchase 调用次数为 0。
实施与验证已完成,准备提交。
manual_review / reconcile_purchase
purchase_mode=live
实现与归档已完成,等待用户验收。
c86c748 feat: 完善采购任务安全恢复 (#73)
c52d730 docs: 归档任务 #73
docs/task/73-采购任务安全恢复.md
OK
用户已于 2026-08-11 明确验收通过。
eca9289
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
采购演练可以执行和领取后,还必须验证崩溃、重复启动、结果提交失败和不可逆阶段恢复规则。虽然 MVP 不真实下单,但状态机和恢复路径必须先按真实安全边界建立,否则以后开启安全门禁时可能在进程崩溃后重复创建订单。
做什么 / 不做什么
做
task_runs步骤持久化和恢复判定,关键步骤进入前先提交 SQLite。irreversible_action_at的任务只进入订单核对/人工处理,绝不重新下单。reconcile_purchase的安全骨架:只读取、核对和记录结果,不点击下单或付款。live。不做
已确认的实现方案
current_step;真实版本进入不可逆阶段前必须先写irreversible_action_at。预计修改:采购任务服务、恢复协调器、Repository 状态查询、只读核对 Adapter 接口、事件/UI 状态、质量安全测试和 Client 基线文档。
验收标准
irreversible_action_at非空时只调用订单核对,任何路径都不会再次调用采购/下单。怎么验证
从
client/执行:故障注入至少覆盖:领取后保存前、运行记录创建后、规格选择后、数量设置后、价格核对后、结果落库后、Outbox 发送前;另构造
irreversible_action_at非空的历史运行,断言只核对且 purchase 调用次数为 0。风险和回退
实施与验证已完成,准备提交。
manual_review / reconcile_purchasepurchase_mode=live在能力对象创建时直接拒绝实现与归档已完成,等待用户验收。
c86c748 feat: 完善采购任务安全恢复 (#73)c52d730 docs: 归档任务 #73docs/task/73-采购任务安全恢复.mdOK)purchase_mode=live被拒绝用户已于 2026-08-11 明确验收通过。
eca9289