6.5 KiB
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.tsvSHA256:b2ad20585ba7f576e85657827a0b1db6f252887bbd73bcd718df38623e9d95cffinal-live-gate.logSHA256:82040c674759dacf587658c5e936c313a1f50e8e2425be48ad891927befdf4fa16R.logSHA256:641246927a372ebaa9e6dde8b018b88275b2ba15a442473759b23fb1f215d9cf15.logSHA256:b0a474e2a74164f560c4f7572091911f32011c75faccd37a3c7315046275011e13.logSHA256:b9f637cca6e97ed893bf38530e05cd33b78e324c5e8865d4c602dfeac22a771012R2.logSHA256: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 均不属于本任务允许清理的范围:
chatgpt/TASK-V2R1-PERSONAL-WEIXIN-GOLDEN-CONTRACT-R2-20260715(36)chatgpt/TASK-V2R1-PERSONAL-WEIXIN-PORTAL-ADAPTER-20260715(2)chatgpt/TASK-WORKTREE-CONCURRENCY-CHATGPT-20260715T055106UTC8(2)codex(56)codex/TASK-CODEX-AIOS-SPARK-RUNNER-PROVISIONING-20260717T103500UTC8(6)controller(11)openclaw(5)openclaw/TASK-OPENCLAW-V2R1-PERSONAL-WEIXIN-B3-EVIDENCE-HARDEN-20260716T133000UTC8(3)openclaw/TASK-V2R1-OPENCLAW-WEIXIN-WEB-LOGIN-CONTRACT-20260715(20)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。