aps-agent/docs/round-67-approval-migration...

42 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Round 67 审批迁移可恢复状态快照
更新日期:2026-08-03
- 状态:R67-B1 本地完成,最终独立复审 `AUDIT: PASS`。
- 分支:`main`,未提交、未推送、未合并、未发布。
- 服务:8003 PID `21576`、5173 PID `9808`,均 healthy。
## 已完成
- 文件审批源缺失保持空源语义;文件存在但 JSON、schema、record、交叉引用损坏明确 fail-closed。
- 迁移 grant 统一保存 `token_digest(raw token)`,原 token 不落数据库;迁移后可消费一次,重放失败。
- grant 已离开 pending 时,依据 grant + terminal history 重建 APPROVED request,满足数据库外键。
- 迁移使用与 `ApprovalStore` 同一 `.lock`,要求 `APS_APPROVAL_MIGRATION_QUIESCED=1`,持锁完成读取、单事务 flush、source hash 复核与 commit。
- request/grant 不可变列与 payload 身份同时校验;目标状态只允许单调前进,不覆盖回退。
- 兼容旧错误迁移:同时检查 expected digest、raw-token 主键和 confirm_id;一致 legacy 行原子修复,不一致整体回滚。
- history 用完整 canonical payload digest 去重;同秒同状态但 payload 不同的合法事件保留。
- 任一预检、事件构造、flush、source drift 或 payload 冲突均使三张审批表整体回滚。
## 验收
- migration focused:29 passed。
- approval 相关 suites:74 passed / 1 warning。
- 全量黄金:1053 passed / 2 warnings(328.10 秒)。
- Ruff、compile、git diff check:通过。
- 真实临时 SQLite:P3 grant 迁移后 request=APPROVED;stored hash 等于 SHA-256;raw token 主键不存在;consume=true/false;损坏 JSON 明确报错且 DB 不变。
- 最终独立审计:`AUDIT: PASS`。
- 本轮无 JS 变更,未重复 Round 66 已完成的 Node 60 与 Web build;8003/5173 真实 HTTP 健康。
## 数据保护
- `server/data/approvals.json` SHA-256:`AC4AFF96C309FCDA0ADF38400074DF9BE4AF04364538CBA0B7519CB77733D1AE`,验收前后不变。
- `world.json`:`C6E7FF090719DB505AF5C3B0D8ADD376CBA7843D6E6982A68C1BA02C342052FA`,不变。
- MOM world:`6B64ADF6F29A43A518D89718610EE71FAD60E86D3F38CD5CFF26F1740CC53F7D`,不变。
- `server/data/**` 与 `.env` 无 Git 状态变化;所有迁移运行使用临时目录/SQLite。
## 剩余边界
- R67-B2:TTL/expiry/CAS 改用数据库权威时钟,并做双节点时钟偏移测试。
- 下一 P0 evidence:`sap.sync.outbound` 升为 P3 并绑定双人审批、before snapshot、payload digest、world fingerprint;随后处理 `folder.schedule` TOCTOU 与 Automation G4 payload 绑定。
- 真实 MySQL 多主机、旧节点停写编排、网络断连/死锁恢复仍需外部部署环境验收。