From 388a3f407b79f562ab0011ff96aad1fc26d3d748 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 3 Jul 2026 15:14:01 +0800 Subject: [PATCH] fix(reboot): advance windows99 autostart next action --- .../reboot_auto_recovery_slo_scorecard.py | 2 +- ..._reboot_auto_recovery_slo_scorecard_api.py | 2 +- ...vmware_autostart_check_mode_package_api.py | 2 +- docs/LOGBOOK.md | 19 +++++++++++++++++++ .../reboot-auto-recovery-slo-scorecard.py | 4 ++-- ...test_reboot_auto_recovery_slo_scorecard.py | 2 +- ...est_windows99_vmx_source_repair_package.py | 2 +- 7 files changed, 26 insertions(+), 7 deletions(-) diff --git a/apps/api/src/services/reboot_auto_recovery_slo_scorecard.py b/apps/api/src/services/reboot_auto_recovery_slo_scorecard.py index 12386a756..85b40b58d 100644 --- a/apps/api/src/services/reboot_auto_recovery_slo_scorecard.py +++ b/apps/api/src/services/reboot_auto_recovery_slo_scorecard.py @@ -113,7 +113,7 @@ _WINDOWS99_MISSING_VMX_NEXT_SAFE_ACTION = ( "collector_and_scorecard_no_vm_power_change" ) _WINDOWS99_POWERED_OFF_NEXT_SAFE_ACTION = ( - "build_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_" + "run_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_" "then_rerun_no_secret_collector_no_vm_power_change" ) _WINDOWS99_REQUIRED_VM_ALIASES = ["110", "188", "120", "121", "112"] diff --git a/apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py b/apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py index 4d8ea78e1..404a51c5b 100644 --- a/apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py +++ b/apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py @@ -47,7 +47,7 @@ EXPECTED_WINDOWS99_MISSING_VMX_NEXT_STEP = ( "collector_and_scorecard_no_vm_power_change" ) EXPECTED_WINDOWS99_POWERED_OFF_NEXT_STEP = ( - "build_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_" + "run_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_" "then_rerun_no_secret_collector_no_vm_power_change" ) diff --git a/apps/api/tests/test_windows99_vmware_autostart_check_mode_package_api.py b/apps/api/tests/test_windows99_vmware_autostart_check_mode_package_api.py index 44841139e..7b5374c32 100644 --- a/apps/api/tests/test_windows99_vmware_autostart_check_mode_package_api.py +++ b/apps/api/tests/test_windows99_vmware_autostart_check_mode_package_api.py @@ -66,7 +66,7 @@ def test_windows99_vmware_autostart_check_mode_package_builder_is_no_power_write assert payload["powered_off_aliases"] == ["110", "112", "120", "121", "188"] assert payload["powered_off_count"] == 5 assert payload["safe_next_step"] == ( - "build_windows99_vmware_autostart_check_mode_package_for_powered_" + "run_windows99_vmware_autostart_check_mode_package_for_powered_" "off_aliases_then_rerun_no_secret_collector_no_vm_power_change" ) assert payload["controlled_apply_mode"] == ( diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index c6c733e93..e110b5658 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -20,6 +20,25 @@ **下一步**: - 等最新 CD marker readback matched 後,讀 production `/api/v1/agents/reboot-auto-recovery-slo-scorecard` 是否上卷 `edge_public_maintenance_live_config_drift`;若 production API 尚未上卷,先處理 deploy/readback,而不是重跑新的支線。 +## 2026-07-03 — P0-006 Windows99 autostart next-action 推進 + +**完成內容**: +- `windows99_vmware_guest_power_not_ready` 的 next safe action 已從「build Windows99 VMware autostart check-mode package」推進為「run Windows99 VMware autostart check-mode package then rerun no-secret collector」;原因是 production 已讀回 `windows99_vmware_autostart_check_mode_package_v1` 且 `package_ready=true`,不能再把已完成的 package build 當作下一步。 +- API scorecard 與 CLI scorecard 使用同一個新 next-action:`run_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_then_rerun_no_secret_collector_no_vm_power_change`。 +- VMX source repair power-only package 的 safe next step 同步改為 run/check-mode 語意,避免 powered-off lane 再被誤導回 VMX source repair 或 package build 階段。 + +**已跑驗證**: +- `DATABASE_URL=postgresql+asyncpg://test:test@localhost/test PYTHONPATH=apps/api python3.11 -m pytest apps/api/tests/test_windows99_vmware_autostart_check_mode_package_api.py apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py apps/api/tests/test_awoooi_priority_work_order_readback_api.py scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py scripts/reboot-recovery/tests/test_windows99_vmx_source_repair_package.py -q -p no:cacheprovider`:`62 passed`。 +- `python3.11 -m py_compile apps/api/src/services/reboot_auto_recovery_slo_scorecard.py scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py apps/api/tests/test_windows99_vmware_autostart_check_mode_package_api.py scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py scripts/reboot-recovery/tests/test_windows99_vmx_source_repair_package.py`:通過。 +- `git diff --check`:通過。 + +**仍維持**: +- 本輪只改 next-action/readback contract,不啟動或關閉 VM、不改 Windows registry / scheduled task、不重啟 host / service、不碰 Docker / Nginx / K3s / DB / firewall;未讀 secret / token / `.env` / raw sessions / SQLite / auth;未使用 GitHub / gh;未 workflow_dispatch;未 DROP / TRUNCATE / restore / prune / delete / force push。 +- Gitea CD `#4599` 仍 Running,safe reason 為 `host_web_build_pressure_waiting`;本地 commit 可以先準備,push 必須等 CD idle/success,避免取消目前 main CD。 + +**下一步**: +- 等最新 Gitea CD idle / success 後 normal push,不 force;部署後讀回 production SLO / autostart package / priority readback,目標是 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 — P0-006 Windows99 VMware autostart check-mode package **完成內容**: diff --git a/scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py b/scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py index 50c445351..a0e8031f4 100755 --- a/scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py +++ b/scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py @@ -1326,7 +1326,7 @@ def choose_safe_next_step( ) if collector_collected and powered_off_aliases: return ( - "build_windows99_vmware_autostart_check_mode_package_for_powered_" + "run_windows99_vmware_autostart_check_mode_package_for_powered_" "off_aliases_then_rerun_no_secret_collector_no_vm_power_change" ) return ( @@ -1673,7 +1673,7 @@ def active_blocker_action_row( ) elif blocker == "windows99_vmware_guest_power_not_ready": next_safe_action = ( - "build_windows99_vmware_autostart_check_mode_package_for_powered_" + "run_windows99_vmware_autostart_check_mode_package_for_powered_" "off_aliases_then_rerun_no_secret_collector_no_vm_power_change" ) elif blocker in { diff --git a/scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py b/scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py index cd61b1f54..2fde4a549 100644 --- a/scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py +++ b/scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py @@ -864,7 +864,7 @@ def test_collected_windows99_verifier_routes_to_vmx_source_repair( "no_secret_collector_and_scorecard_no_vm_power_change" ) assert action_by_blocker["windows99_vmware_guest_power_not_ready"] == ( - "build_windows99_vmware_autostart_check_mode_package_for_powered_" + "run_windows99_vmware_autostart_check_mode_package_for_powered_" "off_aliases_then_rerun_no_secret_collector_no_vm_power_change" ) diff --git a/scripts/reboot-recovery/tests/test_windows99_vmx_source_repair_package.py b/scripts/reboot-recovery/tests/test_windows99_vmx_source_repair_package.py index 6c8e24e1b..7ae760286 100644 --- a/scripts/reboot-recovery/tests/test_windows99_vmx_source_repair_package.py +++ b/scripts/reboot-recovery/tests/test_windows99_vmx_source_repair_package.py @@ -141,7 +141,7 @@ def test_package_routes_power_only_to_autostart_check_mode() -> None: "check_mode_package_ready_windows99_power_check_required" ) assert payload["safe_next_step"] == ( - "build_windows99_vmware_autostart_check_mode_package_for_powered_off_" + "run_windows99_vmware_autostart_check_mode_package_for_powered_off_" "aliases_then_rerun_no_secret_collector_no_vm_power_change" ) assert payload["vm_rows"][0]["powered_off"] is True