# Round 67 状态:审批迁移 Fail-Closed 与 Grant Digest 归一化(R67-B1) 日期:2026-08-20 关联:`docs/round-67-approval-migration-work-plan.md`、`docs/round-67-approval-migration-parallel-implementation-plan.md` ## 1. 结论 R67-B1 九项目标全部在本地 SQLite 闭环,最终状态 **DONE (local)**。真实跨主机停写编排与 MySQL 多主机仍属部署验收,不在本地冒充完成。 | 目标 | 状态 | 证据 | |---|---|---| | 1. grant 只存 `token_digest(raw)` | Done | `test_db_persists_only_digests`、`test_migrated_p3_grant_consumable_once` | | 2. 损坏 JSON/schema/记录 fail-closed | Done | `test_corrupt_json_fails_closed`、`test_invalid_schema_and_records_fail_closed`;文件缺失空源语义保持(`test_migrate_missing_file_empty_source`) | | 3. 规范化预检 + 终态 APPROVED request 重建 | Done | `test_migrated_p3_grant_consumable_once`(`rebuilt=1`、`migratedTerminalRequest=True`) | | 4. 单 Session 事务 flush/commit,后段异常整体回滚 | Done | `test_late_failure_rolls_back_all`(故障注入后三表零写入) | | 5. 不可变身份 + 单调状态幂等 | Done | `test_identity_conflict_fails_closed`、`test_monotonic_status_no_regression`、`test_source_ahead_advances_db` | | 6. expected digest 预检、legacy raw-token 原子修复/冲突、禁二次哈希 | Done | `test_legacy_raw_token_row_repaired`、`test_legacy_raw_token_row_conflict_fails_closed`、`test_known_digest_key_never_rehashed` | | 7. history 完整 canonical event digest 去重 | Done | `test_history_canonical_digest_preserves_near_duplicates`(近似事件保留、完全重复去重、重跑幂等) | | 8. `APS_APPROVAL_MIGRATION_QUIESCED=1` + 同源 `.lock` + 源 SHA-256 复核 | Done | `test_migrate_requires_quiesced`、`test_source_drift_rolls_back` | | 9. 迁移后 active P3 grant 消费一次、重放失败 | Done | `test_migrated_p3_grant_consumable_once`(第一次 True、第二次 False) | ## 2. 验证记录 - focused:`tests/golden/test_approval_migration.py` **19 passed**(原 5 项适配 quiesced 前置 + 新增 14 项)。 - 审批相关套件:migration / database_store / store / delegate / transfer / role_policies / gov_api / harness_p3 合计 **88 passed**。 - 全量黄金(154 文件分三批):**1065 passed / 1 failed**;唯一失败 `test_preference_features.py::test_extract_features_from_world` 为 DXF-01 轮已记录的既有失败(偏好特征口径,与本轮零交集)。 - ruff:本轮两文件全绿(import 排序已 `--fix`);`git diff --check` passed。 ## 3. 影响分析 GitNexus MCP 工具本运行环境不可用;采用工作计划既有门禁结论(`load_file_store` LOW、`migrate_file_to_db` MEDIUM)+ 人工复核:两函数仅被迁移自身与测试调用,无网关/生产端接线;`ApprovalStore`、`DatabaseApprovalStore`、`harness` 零改动。爆炸半径 LOW。 ## 4. 数据保护 全部测试使用 `tmp_path` 临时审批文件与临时 SQLite;fixture 显式 `APS_APPROVAL_MIGRATION_QUIESCED=1`。验收后 `git status -- server/data .env` 干净,现场 `approvals.json` / `master.db` 未读取后写回。 ## 5. 遗留 / 边界 - R67-B2:数据库权威时钟、TTL/CAS 跨主机语义。 - 真实 MySQL 多主机、断连/死锁故障注入。 - SAP outbound P3 evidence envelope、folder.schedule TOCTOU、Automation G4 payload 绑定(下一 P0:全量 P2/P3 evidence 封套)。 - 真实跨主机停写编排属部署验收,需现场运维流程配合。 ## 6. 发布动作 本地 commit(用户授权);无 push / merge / publish。