docs(recovery): record host112 agent closure

This commit is contained in:
ogt
2026-07-11 20:17:24 +08:00
parent 55f075f176
commit 244bad7259
6 changed files with 161 additions and 56 deletions

View File

@@ -54699,3 +54699,15 @@ production browser smoke:
**剩餘驗收**
- 112 runtime scope 已恢復並驗證;全主機 program 仍保留歷史 10 分鐘逾時,不以事後綠燈覆蓋。下一次真實全主機 reboot 必須在同一 600 秒 window 重新通過 VMX、112 Console/Wazuh/timer、七主機、服務、資料、備份與 public fallback。
## 2026-07-11 - P0-008 Agent99/Prometheus production closure
**Runtime evidence**
- Agent99 原子部署 revision `d0e364bfa42947190cf1e88d1d85623e23f84858`manifest `14/14` matched、mismatch `0`deploy receipt `C:\Wooo\Agent99\evidence\agent99-deploy-20260711-200939.json`rollback backup `C:\Wooo\Agent99\deploy\backup-20260711-200939`
- production-principal `Recover` receipt `C:\Wooo\Agent99\evidence\agent99-Recover-20260711-200320.json`:七個 phases 全部 `ok``host112_guest_readiness` before/after ready`applyAttempted=false`transport direct/serializedcoordinator verifiedelapsed `44.6s``rebootSloClaimed=false`
- 最新 110 scorecard `/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260711-200338` 的 host112 blocker 為 `0`。Prometheus 五項 host112 gauges 均為 `1``Host112GuestReadbackMissing``Host112GuestNotReady` 均 health `ok`、state `inactive`source/canonical/active/runtime rule SHA 均為 `86fd0e56cb7633da2a5a09960b8bf2dd61ee917c55072b5a16ba68577e8379cc`
**Verification**
- Agent99 SRE routing self-test `17/17`Telegram ingest self-test `16/16`,不寫 alert、不送 Telegram。
- Agent99 tests `49 passed`reboot-recovery suite `142 passed`Windows staging contract/synthetic、JSON/YAML parse 通過。
- 112 runtime scope 已關閉。全主機 program 尚未關閉:只剩 fresh all-host reboot window 的三項歷史 blocker必須由下一次真實 600 秒 drill 驗證,不能以事後綠燈清除。

View File

@@ -1,7 +1,7 @@
{
"schema_version": "agent99_enterprise_ai_automation_work_items_v1",
"generated_at": "2026-07-11T17:40:00+08:00",
"status": "in_progress_p0_reboot_slo_breached_recovered_late_l1_l2_integrated_l0_required",
"generated_at": "2026-07-11T20:14:33+08:00",
"status": "in_progress_p0_agent99_false_green_and_lifecycle_closure",
"scope_complete": false,
"north_star": "Make Windows host 192.168.0.99 the policy-controlled on-prem AI execution node for all hosts, VMs, services, products, sites, tools, packages, alerts and recovery workflows, with external monitoring when host 99 is unavailable.",
"canonical_sources": {
@@ -17,11 +17,11 @@
"runtime_reboot_slo_readback": "https://awoooi.wooo.work/api/v1/agents/reboot-auto-recovery-slo-scorecard"
},
"current_p0": {
"id": "AG99-P0-007",
"title": "Agent99-coordinated all-host ten-minute reboot recovery state machine",
"reason": "The approved drill breached T+10 and later recovered. Live Windows boot evidence corrected the observer false negative: host 99 booted before the deadline, but VMware startup was delayed, Agent99 was killed by its PT10M task limit, the reboot event was consumed early and dependent PostgreSQL/K3s services recovered late. Agent99 L1 and 110 L2 are now integrated in production; external L0 observation, out-of-band power and external maintenance remain required before the next 600-second drill can close.",
"implementation_status": "slo_breached_recovered_late_agent99_l1_vmware_and_110_l2_runtime_verified_external_l0_missing",
"next_action": "Deploy the external L0 supervisor outside the local failure domain, bind verified OOB power, maintenance and Agent99 resume callbacks, then repeat one incident-correlated full reboot drill and require zero blockers within 600 seconds."
"id": "AG99-P0-001",
"title": "Agent99 runtime truth, false-green prevention and visible lifecycle receipt",
"reason": "The 2026-07-11 live audit proved that Agent99 runs real recovery work, but the operator cannot reliably see the closure: required inbox evidence can fail safe-summary parsing while preflight remains green, a successful Recover produces zero Telegram attempts because info lifecycle events are filtered out, and dedupe suppression leaves no explicit delivery receipt. Runtime truth and one-run lifecycle visibility must be corrected before adding more automation breadth.",
"implementation_status": "regression_reopened_source_fix_in_progress_runtime_deploy_and_recover_verifier_pending",
"next_action": "Deploy the parse-aware preflight and recovery lifecycle card to Windows 99, run one production-principal Recover, and require one explicit Telegram sent-or-dedupe receipt plus a parse-clean live preflight."
},
"current_runtime_truth": {
"observed_at": "2026-07-11T17:37:00+08:00",
@@ -272,12 +272,12 @@
"id": "AG99-P0-001",
"order": 1,
"priority": "P0",
"status": "complete",
"title": "Agent outcome truth and source-runtime reconciliation",
"status": "in_progress",
"title": "Agent outcome truth, source-runtime reconciliation and false-green prevention",
"owner_lane": "agent99_control_plane",
"dependencies": [],
"scope_refs": ["host:99", "platform:Agent99", "platform:AWOOOI", "platform:AwoooP"],
"problem": "Command exit success is counted as resolved and deployed Windows scripts can drift from Gitea source.",
"problem": "Command exit success can be counted as resolved, deployed Windows scripts can drift from source, and evidence freshness can be reported green even when the safe summary cannot be parsed.",
"trigger": "Any Agent99 command completion or source/runtime manifest mismatch.",
"ai_role": "Outcome evaluator and runtime provenance verifier",
"action_mode": "controlled_apply",
@@ -310,7 +310,9 @@
"C:\\Wooo\\Agent99\\evidence\\agent99-ControlTick-20260710-161919.json"
]
},
"next_action": "Keep runtime-manifest drift and verified-resolution counters under SelfCheck; continue with AG99-P0-002."
"regression_reopened_at": "2026-07-11T20:02:00+08:00",
"regression_evidence": ["Windows 99 live preflight returned green while latest SreAlertInbox and TelegramInbox safe summaries reported RuntimeException", "latest production-principal Recover was verifier-green but telegramAttemptCount=0", "dedupe suppression returned without a Telegram attempt receipt"],
"next_action": "Deploy the parse-aware evidence gate, explicit lifecycle info alert and dedupe receipt; rerun production-principal Recover and keep this item open until runtime readback is parse-clean and notification-visible."
},
{
"id": "AG99-P0-002",
@@ -414,10 +416,10 @@
"id": "AG99-P0-006",
"order": 6,
"priority": "P0",
"status": "planned",
"status": "in_progress",
"title": "Agent99 completion callback and incident closure",
"owner_lane": "agent99_awoooi_awooop_integration",
"dependencies": ["AG99-P0-001", "AG99-P0-005"],
"dependencies": ["AG99-P0-001", "AG99-P0-002"],
"scope_refs": ["platform:AWOOOI", "platform:AwoooP", "platform:IWOOOS", "surface:Telegram"],
"problem": "AWOOOI-to-Agent99 dispatch is not matched by a canonical Agent99-to-AWOOOI completion path.",
"trigger": "Any Agent99 run changes state or produces a verifier result.",
@@ -430,7 +432,8 @@
"verifier": "Read back identical trace, final state and verifier evidence from AWOOOI and AwoooP.",
"callback": "This work item creates the canonical callback contract.",
"acceptance": "One trace is visible from alert receipt through final verifier, notification and recurrence counters.",
"next_action": "Define callback schema and idempotent authenticated endpoint."
"implementation_progress": "The first closure slice is being implemented in Agent99 runtime: Recover now has a dedicated Traditional-Chinese lifecycle summary, a phase timeline image, a successful info-event delivery policy and an explicit dedupe receipt. Canonical authenticated AWOOOI/AwoooP/IWOOOS writeback remains open.",
"next_action": "Verify the Windows 99 recovery lifecycle receipt, then define the canonical callback schema and idempotent authenticated AWOOOI/AwoooP/IWOOOS endpoint."
},
{
"id": "AG99-P0-007",
@@ -476,9 +479,9 @@
"verifier": "All required VMX paths exist; guests report running and reachable; host 112 returns systemd running, graphical target, LightDM, Xorg, VMware Tools, Wazuh stack and recovery timer green through a forced-command readback; tasks survive reboot; update policy drift is zero.",
"callback": "Update reboot SLO VMware and Windows policy gates.",
"acceptance": "99 startup automatically launches VMware guests 110/188/112/120/121 in order; physical host 111 is verified separately; 112 must pass Console-ready and Wazuh service gates rather than only Ping or SSH; no exclusive-lock failure occurs; Windows Update cannot surprise-reboot the host.",
"implementation_progress": "The controlled VMware apply remains green with five running VMX processes. The 112 follow-up restored graphical.target, LightDM and Wazuh Indexer, deployed a bounded guest recovery timer, restricted 110 forced-command readback, exact-command sudo executor and durable rollback installer. The 110 scorecard now reads systemd running plus Console/Wazuh/timer/guest 1/1/1/1, all five host112 Prometheus gauges are 1, host112 blockers are zero, both dedicated alert rules are healthy/inactive, and Windows99 records the SYSTEM session VMX as runtime_running_gui_session_isolated. Reboot-recovery tests pass 142/142.",
"evidence_refs": ["C:\\Wooo\\Agent99\\evidence\\windows99-vmware-autostart-apply-20260711-173505.json", "C:\\Wooo\\Agent99\\deploy\\vmware-autostart-backup-20260711-173505", "/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260711-194901", "/var/lib/awoooi-host112-recovery/backups/host112-guest-recovery-20260711T195449+0800-43505", "docs/operations/host112-guest-recovery-20260711.snapshot.json", "reboot-recovery suite 142 passed"],
"next_action": "Keep guest power unchanged, route any host112 state change to Agent99 controlled apply and lifecycle callback, then prove the same Console/Wazuh/timer gates inside the next real all-host 600-second drill."
"implementation_progress": "The controlled VMware apply remains green with five running VMX processes. The 112 follow-up restored graphical.target, LightDM and Wazuh Indexer, deployed a bounded guest recovery timer, restricted 110 forced-command readback, exact-command sudo executor and durable rollback installer. The 110 scorecard reads systemd running plus Console/Wazuh/timer/guest 1/1/1/1, all five host112 Prometheus gauges are 1, host112 blockers are zero, both dedicated alert rules are healthy/inactive, and Windows99 records the SYSTEM session VMX as runtime_running_gui_session_isolated. Agent99 revision d0e364bfa42947190cf1e88d1d85623e23f84858 is live with 14/14 manifest parity; production-principal Recover includes host112_guest_readiness, verified ready before and after without unnecessary apply, completed all seven phases in 44.6 seconds, and correctly did not claim a fresh reboot SLO. SRE routing is 17/17 and Telegram ingest is 16/16 in no-send validation. Agent99 tests pass 49/49 and reboot-recovery tests pass 142/142.",
"evidence_refs": ["C:\\Wooo\\Agent99\\evidence\\windows99-vmware-autostart-apply-20260711-173505.json", "C:\\Wooo\\Agent99\\deploy\\vmware-autostart-backup-20260711-173505", "C:\\Wooo\\Agent99\\evidence\\agent99-deploy-20260711-200939.json", "C:\\Wooo\\Agent99\\evidence\\agent99-Recover-20260711-200320.json", "/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260711-200338", "/var/lib/awoooi-host112-recovery/backups/host112-guest-recovery-20260711T195449+0800-43505", "/home/wooo/monitoring/alerts-unified.canonical.yml.host112-v2.bak.20260711200617", "docs/operations/host112-guest-recovery-20260711.snapshot.json", "Agent99 suite 49 passed", "reboot-recovery suite 142 passed"],
"next_action": "Keep guest power unchanged and retain the closed host112 controlled-recovery route. The remaining program verifier is one fresh all-host 600-second drill; the separate VMware UI must also stop presenting the SYSTEM-owned running VMX as an actionable powered-off state."
},
{
"id": "AG99-P0-009",
@@ -787,24 +790,25 @@
"p0_count": 14,
"p1_count": 8,
"p2_count": 3,
"in_progress_count": 7,
"in_progress_count": 9,
"in_progress_blocked_count": 0,
"planned_count": 16,
"complete_count": 2,
"planned_count": 15,
"complete_count": 1,
"current_p0_count": 1
},
"next_execution_order": [
"AG99-P0-007",
"AG99-P0-008",
"AG99-P0-009",
"AG99-P0-010",
"AG99-P0-001",
"AG99-P0-006",
"AG99-P0-003",
"AG99-P0-004",
"AG99-P0-005",
"AG99-P0-006",
"AG99-P0-011",
"AG99-P0-012",
"AG99-P0-007",
"AG99-P0-008",
"AG99-P0-009",
"AG99-P0-013",
"AG99-P0-014"
"AG99-P0-012",
"AG99-P0-014",
"AG99-P0-010",
"AG99-P0-011"
]
}

View File

@@ -1,6 +1,6 @@
{
"schema_version": "host112_guest_recovery_receipt_v1",
"generated_at": "2026-07-11T19:52:31+08:00",
"generated_at": "2026-07-11T20:10:00+08:00",
"work_item_id": "AG99-P0-008",
"trace_id": "host112-guest-recovery-20260711T193137+0800-35698",
"incident_fingerprint": "host112_vmware_ui_false_powered_off_guest_headless_wazuh_boot_timeout",
@@ -48,6 +48,10 @@
"scripts/reboot-recovery/reboot-auto-recovery-host-probe.sh",
"scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py",
"scripts/reboot-recovery/reboot-auto-recovery-slo-exporter.sh",
"agent99-control-plane.ps1",
"agent99-sre-alert-inbox.ps1",
"agent99-telegram-inbox.ps1",
"apps/api/src/services/agent99_sre_bridge.py",
"ops/monitoring/alerts-unified.yml",
"docs/runbooks/REBOOT-RECOVERY-SOP.md"
],
@@ -58,7 +62,11 @@
"host_probe": "31dce6f90dc89e2fd38bcde91049aa79711b3e5e11a1ae2d1053e27bbbc1f01f",
"scorecard": "835abf7bf6cf587d40467351974f5eba2b84f731c78c2e6c7aaa254f0eaaf33d",
"exporter": "85f16a3d190cdca866ad44f03c4c3e4decfbdf0d3af873c8e4af4d66780d5214",
"alert_rules": "2f606acd9d35b3708f57f313fcfe1f75c7b274316de0b27f494636a132e8ba4d"
"agent99_control_plane": "c17ac79cf59b793db885ea85e17663915cab7644e7428762c312d4ac1b7eb002",
"agent99_sre_alert_inbox": "d4ce271c763eae3d52347a71a22e4b76ce66b87ceb33fe928a6aaf1b37ba7088",
"agent99_telegram_inbox": "7607967de29aa0d8c4f22f170068da4ef63a1b889fb6eb927a01dd3d1bdd525c",
"agent99_sre_bridge": "fd7b5c6f77b55d0598f50d757dd8ba3234e16f8833600637ea827d7fcae85160",
"alert_rules": "86fd0e56cb7633da2a5a09960b8bf2dd61ee917c55072b5a16ba68577e8379cc"
}
},
"decision": {
@@ -77,6 +85,8 @@
"staged_source_hashes_matched": true,
"control_public_key_fingerprint_verified": true,
"focused_contract_tests": "31 passed",
"agent99_tests": "49 passed",
"windows99_staged_contract_and_synthetic_validation": "passed",
"json_yaml_parse": "passed"
},
"execution_receipt": {
@@ -91,6 +101,11 @@
"timer_active": true,
"restricted_control_key_installed": true,
"sudo_exact_command_installed": true,
"agent99_runtime_revision": "d0e364bfa42947190cf1e88d1d85623e23f84858",
"agent99_runtime_manifest": "14/14 matched, mismatch 0",
"agent99_deploy_evidence": "C:\\Wooo\\Agent99\\evidence\\agent99-deploy-20260711-200939.json",
"agent99_deploy_backup": "C:\\Wooo\\Agent99\\deploy\\backup-20260711-200939",
"prometheus_rule_backup": "/home/wooo/monitoring/alerts-unified.canonical.yml.host112-v2.bak.20260711200617",
"host_reboot_performed": false,
"vm_power_change_performed": false,
"secret_read": false
@@ -110,12 +125,24 @@
"host112_filebeat": "active",
"forced_command_from_110": "passed",
"sudo_n_controlled_apply": "passed_no_action_needed",
"scorecard_artifact": "/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260711-194901",
"scorecard_artifact": "/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260711-200338",
"host112_active_blocker_count": 0,
"prometheus_host112_metrics_green": "5/5",
"prometheus_rule_health": "2/2 ok inactive",
"prometheus_rule_sha_source_canonical_runtime_matched": true,
"prometheus_rule_drift_guard_repaired": false,
"agent99_recover_evidence": "C:\\Wooo\\Agent99\\evidence\\agent99-Recover-20260711-200320.json",
"agent99_host112_phase": "ok",
"agent99_host112_before_ready": true,
"agent99_host112_apply_attempted": false,
"agent99_host112_after_ready": true,
"agent99_host112_transport": "direct_serialized",
"agent99_recovery_completed": true,
"agent99_recovery_coordinator_verified": true,
"agent99_reboot_slo_claimed": false,
"agent99_recovery_elapsed_seconds": 44.6,
"agent99_sre_route_selftest": "17/17 passed",
"agent99_telegram_ingest_selftest": "16/16 passed, no alert write, no Telegram send",
"windows99_vmware_verify_ready": true,
"windows99_operator_power_truth": "trust_vmx_process_and_guest_readiness_not_interactive_vmware_ui",
"reboot_recovery_tests": "142 passed"
@@ -133,7 +160,7 @@
"fresh_all_host_reboot_event_missing",
"host_boot_observation_older_than_target_window"
],
"telegram_receipt": "not_sent_healthy_state_no_duplicate_notification",
"telegram_receipt": "healthy_state_not_sent; host112 routing and ingest verified by no-send selftests",
"km_writeback": "docs/runbooks/REBOOT-RECOVERY-SOP.md",
"work_item_writeback": "docs/operations/agent99-enterprise-ai-automation-work-items.snapshot.json"
}

View File

@@ -1,6 +1,6 @@
# AWOOOI 重開機恢復 SOP
> **版本**: v5.30
> **版本**: v5.31
> **最後更新**: 2026-07-11 (台北時間)
> **更新者**: Codex
> **觸發事件**: 2026-07-11 真實全主機 reboot drill、late recovery 與 Agent99/VMware/runtime 閉環
@@ -65,7 +65,7 @@ L0 source contract 是 `scripts/reboot-recovery/external-l0-recovery-supervisor.
部署前 gate 是PowerShell parse、Agent99 contract、synthetic fresh/blocked fixture、runtime staging hash部署後 gate 是:`scripts/reboot-recovery/agent99-live-preflight.ps1``9/9` tasks、relay listener、queue zero、required evidence fresh、runtime manifest matched再由 production S4U principal 觸發 `Recover`。Administrator 直接跑 launcher 不能取代 production-principal verifier。
2026-07-11 17:35 final runtime receiptAgent99 已原子 promote 為 `442b319bb80e009291ced7afa4f704cbe3b64886`deploy evidence `C:\Wooo\Agent99\evidence\agent99-deploy-20260711-173023.json`runtime manifest `14/14`、mismatch `0`、九個 task 存在、SRE relay 監聽、Startup-Recovery limit 為 `PT20M``0a4ddb133` 讓 reboot event 保持 `pendingRecovery` 直到 terminal、支援 `slo_breached_recovery_pending/recovered_late/recovered_within_slo`,並修正 observer TCP probe`442b319bb` 讓 scorecard 接受 principal-aware VM power provenance。production-principal evidence `C:\Wooo\Agent99\evidence\agent99-Recover-20260711-173543.json` 顯示 `scope=service_recovery`completed/verified true、elapsed `10.3s``rebootSloClaimed=false`
2026-07-11 20:09 final runtime receiptAgent99 已原子 promote 為 `d0e364bfa42947190cf1e88d1d85623e23f84858`deploy evidence `C:\Wooo\Agent99\evidence\agent99-deploy-20260711-200939.json`、rollback backup `C:\Wooo\Agent99\deploy\backup-20260711-200939`runtime manifest `14/14`、mismatch `0`。production-principal evidence `C:\Wooo\Agent99\evidence\agent99-Recover-20260711-200320.json` 顯示七個 phases 全部 `ok`,新增必要 phase `host112_guest_readiness`before/after verifier 均為 ready、`applyAttempted=false`transport 為 direct serializedrecovery completed、coordinator verifiedelapsed `44.6s`,且正確維持 `scope=service_recovery``rebootSloClaimed=false`。SRE routing self-test `17/17`、Telegram ingest self-test `16/16`,後者不寫 alert、不送 Telegram。這是 service recovery closure不覆蓋原始 T+10 breach
Windows 99 VMware task 已經由 `scripts/reboot-recovery/windows99-vmware-autostart-controlled-apply.ps1` 正式受控套用DryRun、Apply、Verify 同一 receipttask XML、舊 startup script、Windows Update policy 與 service start modes 都有 rollback。Evidence `C:\Wooo\Agent99\evidence\windows99-vmware-autostart-apply-20260711-173505.json` 回報 pre/post VMX process 都是 `5`、running guest rows `5`、process-aware duplicate-start guard true、沒有 host reboot、沒有 VM power change、沒有 secret read。這才是 Agent99 與重啟 SOP 的 runtime 整合證據;仍不取代下一次 600 秒 E2E drill。
@@ -77,7 +77,7 @@ Windows 99 VMware task 已經由 `scripts/reboot-recovery/windows99-vmware-autos
110 到 112 使用來源限制、`restrict` 與 forced command 的既有公鑰,只能執行 `/usr/local/sbin/awoooi-host112-guest-readiness --check`,不能取得 shell 或 forwarding。Host probe 必須輸出 `console_ready=1``services_ready=1``recovery_timer_ready=1``guest_ready=1`;任何一項缺失都建立具名 `host112_*` blocker阻止 full-host recovery 與 maintenance withdrawal。Prometheus 固定輸出 `awoooi_host112_guest_readback_present``awoooi_host112_console_ready``awoooi_host112_services_ready``awoooi_host112_recovery_timer_ready``awoooi_host112_guest_ready`Agent99 收到狀態變更後執行受控修復並以同一 incident 回報 verifier 結果。
2026-07-11 runtime closureinstaller runs `host112-guest-recovery-20260711T193137+0800-35698``host112-guest-recovery-20260711T195449+0800-43505` 已完成備份、受限公鑰、exact-command sudo、timer 與 durable rollback installer未 reboot、未改 VM power、未讀 secret。110 artifact `/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260711-194901` 讀回 112 `systemd=running`、Console/Wazuh/timer/guest `1/1/1/1`、五項 Prometheus gauges `5/5``host112_* blocker=0`。兩條 112 告警規則 health `2/2 ok` 且 healthy state 為 inactivesource/canonical/container SHA 一致drift guard `repaired=0`。Windows99 verifier 同輪讀到 `VM_PROCESS alias=112 process_id=22288 session_id=0 owner=NT_AUTHORITY\SYSTEM ui_truth=runtime_running_gui_session_isolated`,因此 operator power truth 固定信任 VMX process + guest readiness不信任跨 principal 的互動式 VMware UI。完整 receipt 見 `docs/operations/host112-guest-recovery-20260711.snapshot.json`reboot-recovery tests `142 passed`下一個未關閉驗收只剩下一次真實全主機 600 秒 drill,不能用這次事後恢復覆蓋歷史逾時
2026-07-11 runtime closureinstaller runs `host112-guest-recovery-20260711T193137+0800-35698``host112-guest-recovery-20260711T195449+0800-43505` 已完成備份、受限公鑰、exact-command sudo、timer 與 durable rollback installer未 reboot、未改 VM power、未讀 secret。110 artifact `/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260711-200338` 讀回 112 `systemd=running`、Console/Wazuh/timer/guest `1/1/1/1`、五項 Prometheus gauges `5/5``host112_* blocker=0`。兩條 112 告警規則 health `2/2 ok` 且 healthy state 為 inactivesource/canonical/active/runtime rule SHA 均為 `86fd0e56cb7633da2a5a09960b8bf2dd61ee917c55072b5a16ba68577e8379cc`。Windows99 verifier 同輪讀到 `VM_PROCESS alias=112 process_id=22288 session_id=0 owner=NT_AUTHORITY\SYSTEM ui_truth=runtime_running_gui_session_isolated`,因此 operator power truth 固定信任 VMX process + guest readiness不信任跨 principal 的互動式 VMware UI。Agent99 `Recover` 也已把 112 納入必要 phase 並完成 production-principal verifier完整 receipt 見 `docs/operations/host112-guest-recovery-20260711.snapshot.json`。Agent99 tests `49 passed`reboot-recovery tests `142 passed`目前 scorecard 僅保留 `all_required_hosts_not_in_10_minute_reboot_window``fresh_all_host_reboot_event_missing``host_boot_observation_older_than_target_window`;它們只能由下一次真實全主機 600 秒 drill 關閉
### 2026-07-10 P0 Agent99 Transport / Verified Remediation 覆蓋