Files
aios/docs/aios-v2/AIOS-V2R1-HARDENING-GATE-A-REPORT.md
T

6.5 KiB
Raw Blame History

AIOS V2R1 Hermes 生命周期最终验证报告

  • 报告版本:V2R1-hermes-lifecycle-20260721.3
  • 日期:2026-07-21
  • 分支:patch/chatgpt/AIOS-V2R1-HERMES-LIFECYCLE-20260721
  • 固定验证 OID:95d2e52cb55c7b913e89bc6bed2bcdacf67512d4
  • 总体状态:PARTIAL / BLOCKED_GLOBAL_WORKTREE_CLEANLINESS
  • 发布决策:STOP_PREPRODUCTION
  • 生产发布:NOT_APPROVED

1. 执行结论

BLK-LIVE-HERMES-FULL-LIFECYCLE-EVIDENCE-MISSING 的 Hermes 功能与证据子条件已在固定 OID 上全部通过。候选实现复用现有 Hermes Adapter、Queue、Lease、Task 与 Orchestrator 状态机,新增持久 SQLite Store 和默认关闭的受保护内部生命周期接口。Hermes 完整生命周期 17/17、候选测试 49/49、Gate A、Gate B 10/10、离线 Acceptance 8/0/1、真实 OpenClaw HTTP、重启恢复、双向回滚和最终健康检查均通过。

但 Owner 指令规定只有全部 Acceptance 条件同时满足时才允许正式解除该 Blocker。由于“所有 Worktree clean”失败,本报告不得把它标记为正式 RESOLVED;准确状态是 EVIDENCE_COMPLETE / FORMAL_CLOSURE_BLOCKED。

最终发布门禁仍失败:权威 Bare Repo 登记的 88 个 worktree 中有 10 个脏 worktree。候选 worktree 和活动 Controller worktree 均 clean,且无 locked/prunable;但 Owner 的验收条件要求所有 worktree clean,因此不得准备 RC、不得发起 Tag Approval Request、不得进入预生产评审。

2. 关键实现

  • SQLiteHermesStore 持久保存 Job、Result、Idempotency 与 Worker Heartbeat。
  • 现有 HermesAdapter 保持唯一 Queue/Lease 状态机,支持指定 Job claim、租约到期 requeue、重启恢复与严格终态冲突。
  • 生命周期身份绑定覆盖 tenant、task、trace、principal、provenance、run、dispatch、job、cell、profile。
  • start/heartbeat/complete/fail 强制 Lease Owner;complete/fail/cancel 通过 ExecutionOrchestrator.reconcile_hermes 更新 Task 与 Dispatch。
  • cancel 仅允许同时具备 runtime 与 platform_admin 的 AIOS Control Plane,要求 cancellation_source=aios-control-plane,并拒绝携带 worker_id,Worker 只能观察取消。
  • 所有成功生命周期操作写入 Audit/Event/Execution Evidence;接口由 AIOS_HERMES_LIFECYCLE_API_ENABLED 控制,默认关闭。

3. 固定 OID 验证

项目 结果
Python syntax/import PASS
全部 candidate tests 49/49
Grant isolation 11/11
Dispatch recovery 1/1
Hermes lifecycle 17/17
Docs code gate / Gate A 0 errors / 0 warnings
Secret scan 547 tracked files / 0 violations
SQLite quick_check 2/2 ok
Gate B 10/10
Offline Acceptance 8 passed / 0 failed / 1 expected warning
OpenClaw real HTTP COMPLETED
Hermes full live rerun 17/17
Restart recovery 2/2
Previous → Current rollback/forward PASS
State preservation STATE_PRESERVED_EXACTLY=PASS
Corrected final health (16R) PASS,三服务 active

原 16.log 由非服务用户执行健康脚本,打印 state-dir 权限失败后被外层脚本错误覆盖为退出码 0,因此不作为通过证据。纠错后的 16R.log 使用受控 sudo env,子 shell 保留失败码,所有健康项实际 PASS 且 EXIT_CODE=0。原文件保留用于审计。

回滚日志中的短暂 connection-refused 发生于 systemd 重启窗口内,受 AIOS_V2_ROLLBACK_HEALTH_RETRIES=30 与 1 秒间隔限制;前后两次均在界限内达到健康、输出 ROLLBACK_COMPLETE,并完成状态文件精确哈希对账。

4. Evidence

  • 根目录:/var/lib/aios-gitops/acceptance/aios-v2r1-hermes-lifecycle-20260721T054205Z
  • steps.tsv SHA256:b2ad20585ba7f576e85657827a0b1db6f252887bbd73bcd718df38623e9d95cf
  • final-live-gate.log SHA256:82040c674759dacf587658c5e936c313a1f50e8e2425be48ad891927befdf4fa
  • 16R.log SHA256:641246927a372ebaa9e6dde8b018b88275b2ba15a442473759b23fb1f215d9cf
  • 15.log SHA256:b0a474e2a74164f560c4f7572091911f32011c75faccd37a3c7315046275011e
  • 13.log SHA256:b9f637cca6e97ed893bf38530e05cd33b78e324c5e8865d4c602dfeac22a7710
  • 12R2.log SHA256:0c431f5f5f1c1b17acda160c917b08c7f4036485016c23e1236b9b6f4a78de67

证据只记录身份、状态、命令、时间、退出码与 Hash,不记录 Secret 值。

5. Git 与运行态门禁

门禁 当前值 结果
Bare/Gitea/Candidate OID 全部 95d2e52cb55c7b913e89bc6bed2bcdacf67512d4 PASS
Candidate worktree clean PASS
Active Controller 6188da26453505dacde9d6d298191437164c8d27,detached、clean PASS
Locked worktree 0 PASS
Prunable worktree 0 PASS
全局 worktree clean 10 dirty / 88 total FAIL
当前隔离 Release b158041b8633e658c34ce182f3c8aa97b4bf5f9a 已恢复
AIOS/OpenClaw/Controller services active PASS

10 个脏 worktree 均不属于本任务允许清理的范围:

  1. chatgpt/TASK-V2R1-PERSONAL-WEIXIN-GOLDEN-CONTRACT-R2-20260715(36)
  2. chatgpt/TASK-V2R1-PERSONAL-WEIXIN-PORTAL-ADAPTER-20260715(2)
  3. chatgpt/TASK-WORKTREE-CONCURRENCY-CHATGPT-20260715T055106UTC8(2)
  4. codex(56)
  5. codex/TASK-CODEX-AIOS-SPARK-RUNNER-PROVISIONING-20260717T103500UTC8(6)
  6. controller(11)
  7. openclaw(5)
  8. openclaw/TASK-OPENCLAW-V2R1-PERSONAL-WEIXIN-B3-EVIDENCE-HARDEN-20260716T133000UTC8(3)
  9. openclaw/TASK-V2R1-OPENCLAW-WEIXIN-WEB-LOGIN-CONTRACT-20260715(20)
  10. openclaw/TASK-WORKTREE-CONCURRENCY-OPENCLAW-20260715T055106UTC8(3)

6. Reviewer

独立 Spark Reviewer 首先发现 cancel 权限边界不够明确;该问题已在 95d2e52 修复并新增三条 HTTP 断言。纠错后 Reviewer 确认代码安全边界、16 步证据与有界回滚均 PASS。对发布门禁的最终布尔复核为:DIRTY_WORKTREE_COUNT=10 且 GLOBAL_WORKTREE_CLEAN=false,所以全局门禁 FAIL,不能进入预生产评审。

7. Blocker 与发布决策

  • 功能与证据子条件通过、正式关闭受阻:BLK-LIVE-HERMES-FULL-LIFECYCLE-EVIDENCE-MISSING
  • 直接阻断条件:BLK-GLOBAL-WORKTREE-CLEANLINESS
  • 状态:BLOCKED_EVIDENCE_REQUIRED
  • 决策:STOP_PREPRODUCTION

本轮未修改 main、未创建 Tag、未 Force Push、未切换生产流量、未部署新 RC、未输出 Secret。

下一步唯一允许动作:由各 worktree Owner 审查并提交、归档或可信清理上述 10 个脏 worktree,然后重新执行全局 Git 门禁。只有全局 dirty 数量降为 0 后,才允许准备 RC 与 Tag Approval Request。