fix(reboot): expose windows99 autostart task run state
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 1m0s
CD Pipeline / build-and-deploy (push) Failing after 1m1s
CD Pipeline / post-deploy-checks (push) Has been skipped

This commit is contained in:
Your Name
2026-07-03 16:11:33 +08:00
parent 344862b71a
commit 37dda358a3
11 changed files with 447 additions and 9 deletions

View File

@@ -1,3 +1,26 @@
## 2026-07-03 — 15:57 Windows99 VMware autostart task run-state 上卷
**完成內容**
- `windows99-vmware-autostart.ps1 -Mode Verify` 新增 `VMWARE_AUTOSTART_TASK_DETAIL``VMWARE_AUTOSTART_TASK_ACTION`,把 scheduled task principal、run level、logon type、target script present、last run time、last task result、next run time 與 action command 納入 no-secret readback。
- CLI scorecard 新增 `windows99_vmware_autostart_task_never_ran`:當 `last_task_result=267011` / `0x41303``last_run_time=1999-11-30...` 且 powered-off aliases 非空時,主動列為 active blocker。
- 110 textfile exporter 新增 `awoooi_windows99_vmware_autostart_task_start_script_present``awoooi_windows99_vmware_autostart_task_last_result``awoooi_windows99_vmware_autostart_task_never_ran` metricsAPI Prometheus overlay 會讀回 task run-state 到 `windows99_vmware_autostart.scheduled_task`、readback 與 rollups。
- CLI / API action matrix 已把 `windows99_vmware_autostart_task_never_ran` 指到 `run_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_then_rerun_no_secret_collector_no_vm_power_change`,不再退回泛用收集 verify。
- Live no-secret via-110 artifact `/tmp/awoooi-windows99-autostart-detail-20260703-155710` 顯示 task present/enabled/Ready`last_run_time=1999-11-30T00:00:00``last_task_result=267011`,且 `110 / 188 / 120 / 121 / 112` 全部 `running=0`
- `FULL-STACK-COLD-START-SOP` 更新至 v1.125`REBOOT-RECOVERY-SOP` 更新至 v5.17P0 workplan 的 P0-4 改為 `BLOCKED_WINDOWS99_TASK_NOT_TRIGGERED`
**已跑驗證**
- `python3.11 -m pytest scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py scripts/reboot-recovery/tests/test_reboot_p0_operational_contract.py scripts/reboot-recovery/tests/test_windows99_vmware_verify_collector.py scripts/reboot-recovery/tests/test_windows99_console_verify_artifact_validator.py -q -p no:cacheprovider``40 passed`
- `DATABASE_URL=postgresql+asyncpg://test:test@localhost/test PYTHONPATH=apps/api python3.11 -m pytest apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py apps/api/tests/test_windows99_vmware_autostart_check_mode_package_api.py -q -p no:cacheprovider``25 passed`
- `python3.11 -m py_compile scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py apps/api/src/services/reboot_auto_recovery_slo_scorecard.py scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py scripts/reboot-recovery/tests/test_reboot_p0_operational_contract.py apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py`:通過。
- `bash -n scripts/reboot-recovery/reboot-auto-recovery-slo-exporter.sh scripts/reboot-recovery/collect-windows99-vmware-verify.sh`:通過。
**仍維持**
- 這不代表 10 分鐘重啟自動恢復 SLO 完成目前只是把「task 存在但沒有跑」轉成可觀測、可告警、可路由的真 blocker。
- 沒有讀 secret / token / `.env` / raw sessions / SQLite / auth沒有使用 GitHub / gh沒有啟動或關閉 VM沒有重啟 Windows host / VMware service沒有 Docker / Nginx / K3s / DB / firewall restart / reload沒有 DROP / TRUNCATE / restore / prune / delete / force push。
**下一步**
- commit / push 到 Gitea mainCD deploy 後讀回 production SLO 與 110 textfile確認 task run-state metrics 與 `windows99_vmware_autostart_task_never_ran` active blocker 上線。
## 2026-07-03 — 15:35 Public maintenance edge API overlay 修正
**完成內容**

View File

@@ -1,6 +1,6 @@
# AWOOOI 全棧冷啟動與主機重啟 SOP
> Version: v1.124
> Version: v1.125
> Last updated: 2026-07-03 Asia/Taipei
> Scope: 99 / 110 / 111 / 112 / 120 / 121 / 188 全棧重啟恢復。112 仍是 Kali / VM guest 訊號,但 2026-06-30 全主機重啟後已納入 10 分鐘 SLO 的必要 boot / power signal此納入不代表授權任何破壞性 runtime apply。
@@ -80,6 +80,8 @@ v1.123 SLO installer edge-source packaging rule110 SLO installer payload 必
v1.124 public maintenance route / edge blocker split ruleproduction API overlay 不得把 route fallback ready 與 edge Nginx fallback ready 視為同一件事。`public_maintenance_fallback.runtime_readback_present=true` 只能清除 `public_maintenance_fallback_runtime_readback_missing`route 0 raw 5xx / 0 unreachable 只能清除 route-level blockers只有 `edge_fallback_runtime_readback_present=true``edge_fallback_ready=true` 才能清除 `edge_public_maintenance_live_config_drift`。若 Prometheus textfile active label 已有 edge drift但 public route probe 是 200 / ready 且缺 edge readback`/api/v1/agents/reboot-auto-recovery-slo-scorecard` 必須保留 edge drift否則會把下次 reboot / deploy raw 502 風險誤報成正常。此規則只修 scorecard/API readback不授權 Nginx reload、app restart、Docker / host restart 或讀密碼。
v1.125 Windows99 autostart task run-state rule`windows99-vmware-autostart.ps1 -Mode Verify` 必須在既有 `VMWARE_AUTOSTART_TASK ... ok=...` 之外輸出 `VMWARE_AUTOSTART_TASK_DETAIL``VMWARE_AUTOSTART_TASK_ACTION`,至少包含 principal、run level、logon type、target script present、last run time、last task result、next run time、action execute / argument。`last_task_result=267011` / `0x41303``last_run_time=1999-11-30T00:00:00` 代表 task exists/enabled 但尚未跑過,若同時 `powered_off_aliases` 非空scorecard 必須新增 active blocker `windows99_vmware_autostart_task_never_ran`textfile exporter 必須輸出 `awoooi_windows99_vmware_autostart_task_*` metricsAPI overlay / action matrix 必須把 next action 指到 `run_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_then_rerun_no_secret_collector_no_vm_power_change`。2026-07-03 live no-secret via-110 readback 證明 `AWOOOI-Start-VMware-VMs` present/enabled/Ready`last_task_result=267011``last_run_time=1999-11-30T00:00:00`,且 `110 / 188 / 120 / 121 / 112` 全部 `running=0`;因此 P0-4 不是「缺 task」而是「task 未觸發 / 未跑」。此規則只授權 readback、metrics、alert routing 與 check-mode package不得直接啟動 VM、重啟 Windows host / VMware service、改 scheduled task、改 registry 或讀密碼 / secret。
2026-07-02 110 control-path / Harbor recovery receipt rule若 Gitea Harbor repair queue 仍保留 `harbor_110_remote_ssh_publickey_auth_stalled`、remote-control unavailable、jobs stale 或 historical failure但同一輪本地證據同時證明 `wooo` command path ready、110 local Harbor `/v2/` ready、public/internal registry `/v2/``401`,則該 Gitea Harbor repair 失敗只能列為 historical queue metadata不得再當成 current SSH blocker。必須用 `/api/v1/agents/harbor-registry-controlled-recovery-receipt` 或同等 validator 合併 `diagnose-110-ssh-publickey-auth.sh``recover-110-control-path-and-harbor-local.sh --check`、public Gitea queue readback 與 registry `/v2/` verifier並把機器可讀結果寫入 `docs/operations/harbor-110-control-path-recovery-readback-2026-07-02.snapshot.json` 類型的 snapshot。2026-07-02 live receipt 顯示public/internal registry `/v2/` 均為 `401`、latest visible CD `#4335``Success`、Gitea Harbor repair failure 已是 `historical_after_latest_cd_success=true`active blockers 收斂為 110 controlled CD lane config / binary / registration / service guardrail、active action container pressure以及 Gitea CD jobs head-SHA / stale readback mismatch。若 local-console output 只有 `AWOOOI_110_CONTROLLED_CD_LANE_READY` markernon110 runner parser 不得從 110 `BLOCKER` 行推導 non110 blockernon110 只有看到 `AWOOOI_NON110_RUNNER_READY` marker 才能列入 active blocker。
2026-07-02 110 controlled CD lane fail-closed enforcer staging rule110 runner 壓力事故後legacy / generic runner 仍必須 fail-closed`awoooi-cd-lane-drain.service` 的非 secret staging artifact 不得再被 enforcer 無差別封回 stub。`scripts/reboot-recovery/enforce-110-runner-failclosed.sh` 只有在 `config.yaml` 符合 `capacity <= 1`、只含 `awoooi-host:host``awoooi-ubuntu:docker://192.168.0.110:5000/awoooi/ci-runner:act-22.04`、binary 是 executable ELF、systemd unit 具備 `ConditionPathExists=/home/wooo/awoooi-cd-lane-drain/data/.runner``CPUAccounting` / `MemoryAccounting` / `TasksAccounting` / `NoNewPrivileges` 等 guardrail且 service `inactive``MainPID=0`、未 enabled / 未 masked 時,才可保留 drain config / binary / unit並輸出 `CONTROLLED_DRAIN_STAGING_ALLOWED=1` 與 textfile metric。此 staging 規則不得讀 token、不得讀 `.runner` 內容、不得註冊 runner、不得啟動 service若 registration 缺失readiness verifier 仍必須只留下 `controlled_cd_lane_registration_missing` / `controlled_cd_lane_service_not_active` 類 blocker。若 `CONTROLLED_DRAIN_STAGING_ALLOWED=0` 且 config / binary 又被搬走,優先修 source enforcer / unit guardrail不要手工反覆補同一組 artifact。

View File

@@ -1,9 +1,9 @@
# AWOOOI 重開機恢復 SOP
> **版本**: v5.16
> **版本**: v5.17
> **最後更新**: 2026-07-03 (台北時間)
> **更新者**: Codex
> **觸發事件**: 2026-07-03 15:35 production API overlay 分離 route ready 與 edge ready避免清掉 `edge_public_maintenance_live_config_drift`
> **觸發事件**: 2026-07-03 15:57 Windows99 VMware autostart task exists/enabled 但 `0x41303` 顯示未觸發,五台 VM guest 仍 powered off
---
@@ -21,6 +21,12 @@
## 架構概覽與依賴圖
### 2026-07-03 15:57 P0-4 Windows99 Task Run-State 覆蓋
Windows99 no-secret via-110 collector 已讀回 `AWOOOI-Start-VMware-VMs` scheduled task`present=1``enabled=1``state=Ready``trigger_count=1``action_count=1`VMware service 與 Windows Update no-auto-reboot policy 也為 ready但新增 task detail 顯示 `last_run_time=1999-11-30T00:00:00``last_task_result=267011`,等價於 `0x41303`,表示 task 尚未跑過 / 未在本輪 boot 觸發。五台 guest `110 / 188 / 120 / 121 / 112` 仍全部 `running=0`,因此目前 P0-4 真 blocker 是 `windows99_vmware_guest_power_not_ready``windows99_vmware_autostart_task_never_ran`
SOP v5.17 起,`windows99-vmware-autostart.ps1 -Mode Verify` 必須輸出 `VMWARE_AUTOSTART_TASK_DETAIL``VMWARE_AUTOSTART_TASK_ACTION`110 textfile exporter 必須輸出 `awoooi_windows99_vmware_autostart_task_start_script_present``awoooi_windows99_vmware_autostart_task_last_result``awoooi_windows99_vmware_autostart_task_never_ran`production scorecard / API 必須把 `windows99_vmware_autostart_task_never_ran` 放進 active blockers 與 action matrix。固定下一步是執行已建立的 Windows99 VMware autostart check-mode package然後 rerun no-secret collector 與 reboot SLO scorecard不得直接 power on VM、重啟 Windows host / VMware service、修改 scheduled task、修改 registry、讀 Windows 密碼或讀 secret。
### 2026-07-03 15:35 P0-2 API Readback 覆蓋
110 textfile / Prometheus 已有 `awoooi_public_maintenance_edge_fallback_ready{scope="public_routes"} 0` 與 active blocker `edge_public_maintenance_live_config_drift`production API 必須把此 blocker 合併進 `active_blockers`。route probe 200 / route fallback ready 不能替代 edge Nginx fallback ready只有 `edge_fallback_runtime_readback_present=true``edge_fallback_ready=true` 才能清掉 edge drift。

View File

@@ -19,13 +19,13 @@
| 優先 | 狀態 | 工作項 | 最新證據 | 下一步 / 完成條件 |
|------|------|--------|----------|-------------------|
| P0-1 | BLOCKED_HOST_WINDOWS | 全主機 reboot auto-detection / auto-trigger / 10 分鐘恢復 SLO | 2026-07-03 10:44 production scorecard`status=blocked_reboot_auto_recovery_slo_not_ready``active_blocker_count=10``readiness_percent=60`、active blockers 仍含 reboot event / host unreachable / 99+111+Windows99 VMX / guest power且新增 `windows99_vmware_autostart_config_not_ready``windows99_update_no_auto_reboot_policy_not_ready`。no-write artifact `/tmp/awoooi-reboot-continue-20260703-085205`111 socket probe 仍 timeout / unreachable99 RDP / VMConnect reachable 但 uptime unknown188 socket probe reachable前次 host probe 仍為 `systemd_state=degraded` / `startup_active=failed` | 先收斂 99 / Windows99 / VMware 與 111恢復 no-secret management channel 或取得 validator 可接受的完整 console Verify stdout讀回 VMX / VM power / host uptime再 rerun host probe + reboot-event detector;不得 reboot、不得 VM power change、不得讀 Windows 密碼,不得用 RDP clipboard 片段當完成證據。 |
| P0-2 | API_OVERLAY_FIX_PENDING_DEPLOY_READBACK | Deploy / reboot 期間 public 502 維護頁與外部 fallback | 2026-07-03 15:35 source fix 已production API overlay 的 public maintenance blockers 拆成 route-level 與 edge-levelroute probe 200 / ready 只能清 route blockers不能清 `edge_public_maintenance_live_config_drift`;只有 `edge_fallback_runtime_readback_present=true` `edge_fallback_ready=true` 才能清 edge drift。110 SLO artifact `/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260703-151219`Prometheus/textfile 證明 edge 未 ready`awoooi_public_maintenance_edge_fallback_ready{scope="public_routes"} 0``awoooi_reboot_auto_recovery_slo_blocker_count=8`active blocker `edge_public_maintenance_live_config_drift`本地 regressionroute ready + edge metric blocker 時 API active list 必須保留 edge22 個 scorecard API 測試通過。 | commit / push 後等待 Gitea CD deploy marker matchedproduction `/api/v1/agents/reboot-auto-recovery-slo-scorecard` 必須讀回 `active_blockers``edge_public_maintenance_live_config_drift``runtime_metric_active_blocker_count=8`。後續才進 privileged edge apply 或 L1 cloud/CDN fallback decision不得讀密碼、不得用 app / Docker / host restart 掩蓋 edge fallback drift。 |
| P0-1 | BLOCKED_REBOOT_EVENT_AND_HOST_REACHABILITY | 全主機 reboot auto-detection / auto-trigger / 10 分鐘恢復 SLO | 2026-07-03 15:49 verify-only artifact `/tmp/awoooi-reboot-event-verify-20260703-154907``reboot_detected=false``all_required_hosts_observed=false``all_required_hosts_in_reboot_window=false``recovery_deadline_status=target_window_elapsed``unreachable_hosts=["111"]`、99 reachable 但 `uptime_seconds=unknown`188 reachable 但 `systemd_state=degraded` / `startup_active=failed`production SLO 仍為 `blocked_reboot_auto_recovery_slo_not_ready`,不能宣稱 10 分鐘自動恢復。 | 固定先 rerun host probe + reboot-event detector verify-only並收斂 111 reachability、99 uptime / VMware readback、188 degraded/startup failed;不得 reboot、不得 VM power change、不得讀 Windows 密碼,不得用 ping-only 或舊 boot evidence 當完成證據。 |
| P0-2 | DEPLOYED_RUNTIME_EDGE_DRIFT_BLOCKED | Deploy / reboot 期間 public 502 維護頁與外部 fallback | 2026-07-03 15:35 source fix 已部署讀回:production `/api/v1/agents/reboot-auto-recovery-slo-scorecard` 保留 `edge_public_maintenance_live_config_drift``runtime_metric_active_blocker_count=8`route fallback ready 不再清掉 edge Nginx drift。110 SLO artifact `/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260703-151219` 與 textfile 證明 edge 未 ready`awoooi_public_maintenance_edge_fallback_ready{scope="public_routes"} 0`、active blocker `edge_public_maintenance_live_config_drift` | 後續才進 privileged edge apply 或 L1 cloud/CDN fallback decision完成條件是 edge fallback live config / maintenance file / `nginx -t` / reload / public header verifier 或外部 L1 fallback 全綠。不得讀密碼、不得用 app / Docker / host restart 掩蓋 edge fallback drift。 |
| P0-3 | PARTIAL_GREEN_DEPLOYED_SOURCE | 所有產品 / 網站版本與資料最新性 | Gitea `main=bc8d3af3f chore(cd): deploy dacdd90 [skip ci]`CD `#4558` log 顯示 API/Web build/push wrapper 全部 `rc=0`、deploy marker `dacdd90`、production deploy readback matched。Production SLO route 已讀回最新 API 行為:`runtime_metric_runtime_readback_added_blockers=["windows99_vmware_autostart_config_not_ready","windows99_update_no_auto_reboot_policy_not_ready"]``windows99_update_no_auto_reboot_ready=false`。Stock freshness 仍為 `status=ok``latest_trading_date=2026-07-02`、blockers `[]`。 | 版本層已補到 AWOOOI production完成整體 P0 仍需收斂 Windows99 VMX / service / policy / power 與 host reboot-event blockers。後續每個 public product 仍要維持 source SHA、deploy marker、runtime endpoint、public route watch、freshness 四層一致。 |
| P0-4 | BLOCKED_WINDOWS99_AUTOSTART | 192.168.0.99 VMware 自動啟動與 VM guest 111 / 188 / 120 / 121 / 112 | 10:44 production readback 已把 nested Windows99 evidence 上卷到 active blockers`windows99_vmware_vmx_missing``windows99_vmware_guest_power_not_ready``windows99_vmware_autostart_config_not_ready``windows99_update_no_auto_reboot_policy_not_ready``runtime_metric_runtime_readback_added_blockers` 含 config / policy 兩項,`windows99_update_no_auto_reboot_ready=false`。09:53 no-secret management probe99 reachable、RDP / Hyper-V VMConnect reachableWinRM timeoutMac vantage collector 仍為 `ssh_batchmode_auth_ready=0` / `blocked_ssh_publickey_auth_missing`completion 仍取決於 VMX / service / policy / power 全綠。 | 先修 111 VMX source 與 VMware service / policy readback使 check-mode package 能解釋 powered-off aliases不得從 scorecard 直接重啟 Windows service、改 registry、啟動 / 關閉 VM 或 host reboot。完成條件是 VMX config ready、guest power ready、99 uptime known、all required host reachable且 active blocker matrix 顯示 service / policy / VMX / power 分開收斂。 |
| P0-4 | BLOCKED_WINDOWS99_TASK_NOT_TRIGGERED | 192.168.0.99 VMware 自動啟動與 VM guest 110 / 188 / 120 / 121 / 112 | 2026-07-03 15:57 no-secret via-110 collector artifact `/tmp/awoooi-windows99-autostart-detail-20260703-155710`VMX `110 / 188 / 120 / 121 / 112` 全存在VMware services okWindows Update no-auto-reboot readyscheduled task `AWOOOI-Start-VMware-VMs` present/enabled/Ready`VMWARE_AUTOSTART_TASK_DETAIL last_run_time=1999-11-30T00:00:00 last_task_result=267011` (`0x41303`) 且五台 `VM_POWER running=0`。 | 將 `windows99_vmware_autostart_task_never_ran` 納入 active blocker / metrics / Telegram routing執行已建立的 autostart check-mode package再 rerun no-secret collector + SLO scorecard。不得從 scorecard 直接 power on VM、重啟 Windows host / VMware service、改 scheduled task / registry 或讀 Windows 密碼。 |
| P0-5 | RUNTIME_READY_BACKUP_RECEIPT_GAP | Gitea / 主機 / DB / 網站 / 服務 / 套件 / 工具 / log 備份監控告警 | Gitea repo bundle readback readyexpected `12`、rows `12`、missing `0`、failed `0`、sample restore dry-run okbackup core green。2026-07-03 source / runtime 已部署 `awoooi_backup_alert_receipt_*` 指標與 Prometheus rules110 exporter 讀回 88 個 stage requirement、188 讀回 12 個 stage requirement`BackupAlertReceiptMetricMissing*` inactive`BackupAlertReceiptStageMissing` 已修成每 `host / receipt_channel` 聚合 pending110 一條、188 一條。 | 補 `/backup/alert-receipts/*.last_success` 脫敏 marker下一層仍要補 Gitea full dump、DB/settings/issues/packages/LFS、所有工具與 log 全量備份監控。 |
| P0-6 | RUNTIME_READY_ALERT_RECEIPT_GAP | 主機關機 / 重啟 / SLO miss / backup failure Telegram 告警 | Reboot per-blocker alert 與 backup receipt alert rules 已 deploy/readbackbackup receipt 缺段不再產生 100 條 stage 噪音,現在聚合成 110 / 188 兩條 host-level pending。scorecard 目前有 10 個 reboot active blockers其中 Windows99 config / policy blocker 已可供 per-blocker alert routing 使用;尚未完成 shutdown / reboot / backup alert 的 production 脫敏 delivery receipt 全矩陣。 | 補 alert receipt readbackhost down、host up、SLO miss、Windows99 blocker、backup stale/failed、deploy 502、freshness stale完成條件是每類告警都有 sent / received / dedup / escalation evidence。 |
| P0-7 | SOURCE_READY_SLA_AUTOMATION | 固定排查順序、ETA / wait reason、自動化判斷與修復 | Scorecard 已固定 `current_phase=host_boot_detection_blocked``eta_or_wait_reason=reboot_event_readback_missing_eta_unavailable``primary_blocker=reboot_event_required_host_unreachable`、fixed triage order 與 next safe action08:23 artifact 固定下一步為 no-secret Windows99 verify / host probe rerun。09:22 `active_blocker_action_matrix` 已能把 unreliable console artifact 指向 `windows99_console_or_no_secret_management_channel` 與固定 next safe action。10:30 `read-public-gitea-actions-queue.py` 已能把 `BLOCKER cd_docker_step_timeout` 上卷成 `blocked_cd_docker_step_timeout` / `latest_visible_cd_docker_step_timeout*` / fixed safe-next-action10 分鐘內自動恢復仍未達標。 | 把每個 blocker 的 next_safe_action、post_verifier、forbidden_actions 接到自動 work item / Telegram / scorecard完成條件是重啟後自動判斷、主動告警、主動 rerun verifier不再人工臨場猜流程。 |
| P0-7 | SOURCE_READY_SLA_AUTOMATION | 固定排查順序、ETA / wait reason、自動化判斷與修復 | Scorecard 已固定 `current_phase``eta_or_wait_reason``primary_blocker`、fixed triage order 與 action matrix2026-07-03 新增 `windows99_vmware_autostart_task_never_ran`,其 next action 固定為 `run_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_then_rerun_no_secret_collector_no_vm_power_change`,不再退回泛用「再收一次 verify」。 | 把每個 blocker 的 next_safe_action、post_verifier、forbidden_actions 接到自動 work item / Telegram / scorecard完成條件是重啟後自動判斷、主動告警、主動 rerun verifier不再人工臨場猜流程。 |
| P0-8 | BLOCKED_POLICY_READBACK | Windows99 禁止 Windows Update 無預警重啟 | 10:44 production readback 已 fail-closed`windows99_update_no_auto_reboot_ready=false`active blockers 含 `windows99_update_no_auto_reboot_policy_not_ready`,來源是 nested verifier 的 `policy_blockers=["windows_update_policy_readback_missing"]`。 | 保留 no-secret verifier補週期性 policy readback 與 Telegram drift alert完成條件是 Windows Update policy drift / missing readback 會自動告警且不需讀 secret不得從 scorecard 直接 apply registry。 |
| 優先 | 狀態 | 工作項 | 2026-06-30 證據 | 下一步 / 完成條件 |
@@ -48,6 +48,7 @@
- 2026-06-30 實測證明source 上有 reboot detector / alert / VMware autostart / maintenance fallback 並不等於 runtime 已達標;必須同時讀回 all-host probe、SLO metric、public `/v2`、Stock freshness、backup-status、Telegram delivery。
- 2026-07-03 實測證明host probe 本身若沒有 bounded TCP fallback會從 verifier 層製造 partial evidence讓 10 分鐘 SLO 無法判斷。`reboot-auto-recovery-host-probe.sh``nc -z` 必須由 `run_with_timeout` 包住partial probe / missing host rows 一律 fail-closed不可宣稱 all-host observed。
- 2026-07-03 08:59 實測證明RDP console 可見不等於 console artifact 可自動收集。若 Mac / RDP clipboard 只貼入 Windows 端舊內容,必須標記 `windows99_console_clipboard_unreliable` 類 blocker回到 no-secret management channel 或人工 console stdout capture不可用截斷 / 非 Verify marker 的畫面輸出餵 scorecard。
- 2026-07-03 15:57 實測證明Windows scheduled task present/enabled/Ready 不等於 VMware guest 會自動啟動。`last_task_result=267011` / `0x41303``1999-11-30` placeholder 必須列為 `windows99_vmware_autostart_task_never_ran`,並與 powered-off aliases 一起進 alert / action matrix下一步只能走 check-mode package + no-secret collector rerun不得直接 power on VM 或改 Windows task。
| Area | Status | Completion | Evidence |
|------|--------|------------|----------|