fix(reboot): surface windows99 console artifact blockers
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 2m13s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled

This commit is contained in:
Your Name
2026-07-03 09:25:20 +08:00
parent 43620a977f
commit e28ebd5b3e
10 changed files with 374 additions and 9 deletions

View File

@@ -1471,6 +1471,7 @@ def _build_payload(scorecard: dict[str, Any], path: Path) -> dict[str, Any]:
active_blockers = _unique_strings(
_strings(scorecard.get("active_blockers"))
+ _strings(public_maintenance.get("blockers"))
+ _strings(windows99_management.get("console_artifact_blockers"))
)
required_checks = {
"source_controls_present": all(source_controls.values()),
@@ -1701,6 +1702,18 @@ def _build_payload(scorecard: dict[str, Any], path: Path) -> dict[str, Any]:
"windows99_available_collection_channels": _strings(
windows99_verify_collection.get("available_collection_channels")
),
"windows99_console_artifact_status": str(
windows99_verify_collection.get("console_artifact_status") or "unknown"
),
"windows99_console_artifact_reliable": (
windows99_verify_collection.get("console_artifact_reliable") is True
),
"windows99_console_artifact_blockers": _strings(
windows99_verify_collection.get("console_artifact_blockers")
),
"windows99_console_artifact_safe_next_step": str(
windows99_verify_collection.get("console_artifact_safe_next_step") or ""
),
"windows99_host99_reachable": (
windows99_verify_collection["host99_reachable"] is True
),
@@ -1864,6 +1877,18 @@ def _build_payload(scorecard: dict[str, Any], path: Path) -> dict[str, Any]:
"windows99_available_collection_channels": rollups[
"windows99_available_collection_channels"
],
"windows99_console_artifact_status": rollups[
"windows99_console_artifact_status"
],
"windows99_console_artifact_reliable": rollups[
"windows99_console_artifact_reliable"
],
"windows99_console_artifact_blockers": rollups[
"windows99_console_artifact_blockers"
],
"windows99_console_artifact_safe_next_step": rollups[
"windows99_console_artifact_safe_next_step"
],
"windows99_remote_execution_channel_ready": rollups[
"windows99_remote_execution_channel_ready"
],
@@ -2089,6 +2114,15 @@ def _build_windows99_verify_collection_packet(
windows99_management.get("local_console_channel_reachable") is True
)
console_channels = _strings(windows99_management.get("console_collection_channels"))
console_artifact_status = str(
windows99_management.get("console_artifact_status") or "unknown"
)
console_artifact_reliable = (
windows99_management.get("console_artifact_reliable") is True
)
console_artifact_blockers = _strings(
windows99_management.get("console_artifact_blockers")
)
collector_present = windows99_collector.get("readback_present") is True
collector_status = str(windows99_collector.get("status") or "unknown")
collector_ssh_ready = (
@@ -2106,6 +2140,9 @@ def _build_windows99_verify_collection_packet(
for blocker in _strings(windows99_collector.get("blockers")):
if blocker not in collection_blockers:
collection_blockers.append(blocker)
for blocker in console_artifact_blockers:
if blocker not in collection_blockers:
collection_blockers.append(blocker)
if not host99_uptime_known:
collection_blockers.append("windows99_uptime_unknown")
available_channels: list[str] = []
@@ -2144,6 +2181,12 @@ def _build_windows99_verify_collection_packet(
)
),
"available_collection_channels": available_channels,
"console_artifact_status": console_artifact_status,
"console_artifact_reliable": console_artifact_reliable,
"console_artifact_blockers": console_artifact_blockers,
"console_artifact_safe_next_step": str(
windows99_management.get("console_artifact_safe_next_step") or ""
),
"no_secret_collector_readback_present": collector_present,
"no_secret_collector_status": collector_status,
"no_secret_collector_safe_next_step": str(
@@ -2278,6 +2321,9 @@ def _reboot_sop_current_phase(active_blockers: list[str], can_claim_slo: bool) -
"windows99_vmware_autostart_config_not_ready",
"windows99_vmware_guest_power_not_ready",
"windows99_update_no_auto_reboot_policy_not_ready",
"windows99_console_clipboard_unreliable",
"windows99_console_focus_unreliable",
"windows99_console_verify_output_truncated",
}
if any(blocker in host_boot_blockers for blocker in active_blockers):
return "host_boot_detection_blocked"
@@ -2329,6 +2375,9 @@ def _reboot_sop_primary_blocker(active_blockers: list[str]) -> str:
"windows99_vmware_autostart_config_not_ready",
"windows99_vmware_guest_power_not_ready",
"windows99_update_no_auto_reboot_policy_not_ready",
"windows99_console_clipboard_unreliable",
"windows99_console_focus_unreliable",
"windows99_console_verify_output_truncated",
"public_route_raw_5xx_without_maintenance_fallback",
"public_route_unreachable_without_external_l1_fallback",
"public_maintenance_fallback_runtime_readback_missing",
@@ -2450,6 +2499,15 @@ def _active_blocker_action_row(
"restore_windows99_no_secret_management_channel_or_collect_local_"
"console_verify_readback_then_rerun_reboot_scorecard_no_reboot"
)
elif blocker in {
"windows99_console_clipboard_unreliable",
"windows99_console_focus_unreliable",
"windows99_console_verify_output_truncated",
}:
next_safe_action = (
"stop_unreliable_rdp_clipboard_path_and_use_authorized_no_secret_"
"management_channel_or_validated_console_stdout_artifact"
)
post_verifier = (
"bash scripts/reboot-recovery/collect-windows99-vmware-verify.sh "
"--check && rerun_reboot_auto_recovery_slo_scorecard"