From 81304e354a1dd431c414475baaca6340245ecb5b Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 3 Jul 2026 16:40:06 +0800 Subject: [PATCH] feat(awooop): expose windows99 check-mode receipt --- .../awoooi_priority_work_order_readback.py | 109 +++++++++++++ ...awoooi_priority_work_order_readback_api.py | 38 ++++- apps/web/messages/en.json | 8 + apps/web/messages/zh-TW.json | 8 + .../app/[locale]/awooop/work-items/page.tsx | 144 +++++++++++++----- 5 files changed, 272 insertions(+), 35 deletions(-) diff --git a/apps/api/src/services/awoooi_priority_work_order_readback.py b/apps/api/src/services/awoooi_priority_work_order_readback.py index 6e95b64df..6a104a5f2 100644 --- a/apps/api/src/services/awoooi_priority_work_order_readback.py +++ b/apps/api/src/services/awoooi_priority_work_order_readback.py @@ -3639,6 +3639,36 @@ def _enrich_from_current_readbacks( ) or "" ) + state["windows99_vmware_autostart_check_mode_effective_execution_ready"] = bool( + windows99_vmware_autostart_check_mode_package.get( + "effective_check_mode_execution_ready" + ) + is True + ) + state["windows99_vmware_autostart_check_mode_collector_readback_present"] = bool( + windows99_vmware_autostart_check_mode_package.get( + "collector_readback_present" + ) + is True + ) + state[ + "windows99_vmware_autostart_check_mode_local_console_channel_reachable" + ] = bool( + windows99_vmware_autostart_check_mode_package.get( + "local_console_channel_reachable" + ) + is True + ) + state["windows99_vmware_autostart_check_mode_public_display_only"] = bool( + windows99_vmware_autostart_check_mode_package.get("public_display_only") + is True + ) + state["windows99_vmware_autostart_check_mode_endpoint_execution_authorized"] = bool( + windows99_vmware_autostart_check_mode_package.get( + "check_mode_package_execution_authorized_by_this_endpoint" + ) + is True + ) state["windows99_vmx_source_locator_status"] = str( windows99_vmx_source_locator_readback.get("status") or "unknown" ) @@ -4228,6 +4258,29 @@ def _enrich_from_current_readbacks( ] = state[ "windows99_vmware_autostart_check_mode_playbook_trust_writeback_ref" ] + evidence[ + "windows99_vmware_autostart_check_mode_effective_execution_ready" + ] = state[ + "windows99_vmware_autostart_check_mode_effective_execution_ready" + ] + evidence[ + "windows99_vmware_autostart_check_mode_collector_readback_present" + ] = state[ + "windows99_vmware_autostart_check_mode_collector_readback_present" + ] + evidence[ + "windows99_vmware_autostart_check_mode_local_console_channel_reachable" + ] = state[ + "windows99_vmware_autostart_check_mode_local_console_channel_reachable" + ] + evidence["windows99_vmware_autostart_check_mode_public_display_only"] = ( + state["windows99_vmware_autostart_check_mode_public_display_only"] + ) + evidence[ + "windows99_vmware_autostart_check_mode_endpoint_execution_authorized" + ] = state[ + "windows99_vmware_autostart_check_mode_endpoint_execution_authorized" + ] evidence["windows99_vmx_source_locator_status"] = state[ "windows99_vmx_source_locator_status" ] @@ -5015,6 +5068,34 @@ def _set_rollups_and_summary( "windows99_vmware_autostart_check_mode_package_ready": ( state.get("windows99_vmware_autostart_check_mode_package_ready") is True ), + "windows99_vmware_autostart_check_mode_effective_execution_ready": ( + state.get( + "windows99_vmware_autostart_check_mode_effective_execution_ready" + ) + is True + ), + "windows99_vmware_autostart_check_mode_collector_readback_present": ( + state.get( + "windows99_vmware_autostart_check_mode_collector_readback_present" + ) + is True + ), + "windows99_vmware_autostart_check_mode_local_console_channel_reachable": ( + state.get( + "windows99_vmware_autostart_check_mode_local_console_channel_reachable" + ) + is True + ), + "windows99_vmware_autostart_check_mode_public_display_only": ( + state.get("windows99_vmware_autostart_check_mode_public_display_only") + is True + ), + "windows99_vmware_autostart_check_mode_endpoint_execution_authorized": ( + state.get( + "windows99_vmware_autostart_check_mode_endpoint_execution_authorized" + ) + is True + ), "windows99_vmware_autostart_check_mode_powered_off_count": _int( state.get("windows99_vmware_autostart_check_mode_powered_off_count") ), @@ -5422,6 +5503,34 @@ def _set_rollups_and_summary( "windows99_vmware_autostart_check_mode_package_ready": ( state.get("windows99_vmware_autostart_check_mode_package_ready") is True ), + "windows99_vmware_autostart_check_mode_effective_execution_ready": ( + state.get( + "windows99_vmware_autostart_check_mode_effective_execution_ready" + ) + is True + ), + "windows99_vmware_autostart_check_mode_collector_readback_present": ( + state.get( + "windows99_vmware_autostart_check_mode_collector_readback_present" + ) + is True + ), + "windows99_vmware_autostart_check_mode_local_console_channel_reachable": ( + state.get( + "windows99_vmware_autostart_check_mode_local_console_channel_reachable" + ) + is True + ), + "windows99_vmware_autostart_check_mode_public_display_only": ( + state.get("windows99_vmware_autostart_check_mode_public_display_only") + is True + ), + "windows99_vmware_autostart_check_mode_endpoint_execution_authorized": ( + state.get( + "windows99_vmware_autostart_check_mode_endpoint_execution_authorized" + ) + is True + ), "windows99_vmware_autostart_check_mode_powered_off_aliases": _strings( state.get("windows99_vmware_autostart_check_mode_powered_off_aliases") ), diff --git a/apps/api/tests/test_awoooi_priority_work_order_readback_api.py b/apps/api/tests/test_awoooi_priority_work_order_readback_api.py index 5e830ffbd..8ae41f987 100644 --- a/apps/api/tests/test_awoooi_priority_work_order_readback_api.py +++ b/apps/api/tests/test_awoooi_priority_work_order_readback_api.py @@ -648,7 +648,15 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a "windows99_verify_collection_can_collect_no_secret": True, } ) - payload["readback"]["active_blocker_count"] = len(active_blockers) + payload["readback"].update( + { + "active_blocker_count": len(active_blockers), + "windows99_no_secret_collector_readback_present": True, + "windows99_no_secret_collector_status": ( + "collected_windows99_vmware_verify_stdout" + ), + } + ) return payload monkeypatch.setattr( @@ -784,6 +792,25 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a assert state[ "windows99_vmware_autostart_check_mode_playbook_trust_writeback_ref" ].startswith("playbook://awoooi/windows99-vmware-autostart/") + assert ( + state["windows99_vmware_autostart_check_mode_effective_execution_ready"] + is True + ) + assert ( + state["windows99_vmware_autostart_check_mode_collector_readback_present"] + is True + ) + assert ( + state[ + "windows99_vmware_autostart_check_mode_local_console_channel_reachable" + ] + is True + ) + assert state["windows99_vmware_autostart_check_mode_public_display_only"] is True + assert ( + state["windows99_vmware_autostart_check_mode_endpoint_execution_authorized"] + is False + ) assert state["windows99_vmx_source_locator_status"] == ( "collector_readback_verified_source_required_before_relink_dry_run" ) @@ -933,6 +960,15 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a assert payload["summary"][ "windows99_vmware_autostart_check_mode_next_executable_step" ] == "build_vmware_autostart_power_readback_check_mode" + assert payload["summary"][ + "windows99_vmware_autostart_check_mode_effective_execution_ready" + ] is True + assert payload["summary"][ + "windows99_vmware_autostart_check_mode_public_display_only" + ] is True + assert payload["summary"][ + "windows99_vmware_autostart_check_mode_endpoint_execution_authorized" + ] is False assert payload["rollups"][ "windows99_vmware_autostart_check_mode_apply_allowed_by_this_package" ] is False diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 5f10809a2..7c10fc4c3 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -9386,6 +9386,14 @@ "nextVerify": "rerun verifier", "checkReady": "check ready", "checkWaiting": "check wait", + "receiptReady": "receipt ready", + "receiptWaiting": "receipt wait", + "endpointClosed": "endpoint 0", + "endpointOpen": "endpoint run", + "publicOnly": "public read-only", + "internalOnly": "internal execution", + "consoleReady": "console ready", + "consoleWaiting": "console wait", "rollbackSet": "rollback set", "rollbackMissing": "rollback missing", "noPower": "no VM power", diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index e1b2fa7c2..a6cb516fb 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -9386,6 +9386,14 @@ "nextVerify": "重跑驗證", "checkReady": "check 就緒", "checkWaiting": "check wait", + "receiptReady": "已收件", + "receiptWaiting": "待收件", + "endpointClosed": "端點不執行", + "endpointOpen": "端點執行", + "publicOnly": "公開只讀", + "internalOnly": "內部執行", + "consoleReady": "console 可收", + "consoleWaiting": "console 待收", "rollbackSet": "rollback set", "rollbackMissing": "rollback missing", "noPower": "不動 VM power", diff --git a/apps/web/src/app/[locale]/awooop/work-items/page.tsx b/apps/web/src/app/[locale]/awooop/work-items/page.tsx index f3fda524f..4ca4e1382 100644 --- a/apps/web/src/app/[locale]/awooop/work-items/page.tsx +++ b/apps/web/src/app/[locale]/awooop/work-items/page.tsx @@ -1190,6 +1190,11 @@ type PriorityWorkOrderResponse = { windows99_vmware_autostart_check_mode_safe_next_step?: string | null; windows99_vmware_autostart_check_mode_controlled_apply_mode?: string | null; windows99_vmware_autostart_check_mode_apply_allowed_by_this_package?: boolean | null; + windows99_vmware_autostart_check_mode_effective_execution_ready?: boolean | null; + windows99_vmware_autostart_check_mode_collector_readback_present?: boolean | null; + windows99_vmware_autostart_check_mode_local_console_channel_reachable?: boolean | null; + windows99_vmware_autostart_check_mode_public_display_only?: boolean | null; + windows99_vmware_autostart_check_mode_endpoint_execution_authorized?: boolean | null; windows99_vmware_autostart_check_mode_work_order_id?: string | null; windows99_vmware_autostart_check_mode_action_stage?: string | null; windows99_vmware_autostart_check_mode_next_executable_step?: string | null; @@ -1310,6 +1315,11 @@ type PriorityWorkOrderResponse = { windows99_vmware_autostart_check_mode_safe_next_step?: string | null; windows99_vmware_autostart_check_mode_controlled_apply_mode?: string | null; windows99_vmware_autostart_check_mode_apply_allowed_by_this_package?: boolean | null; + windows99_vmware_autostart_check_mode_effective_execution_ready?: boolean | null; + windows99_vmware_autostart_check_mode_collector_readback_present?: boolean | null; + windows99_vmware_autostart_check_mode_local_console_channel_reachable?: boolean | null; + windows99_vmware_autostart_check_mode_public_display_only?: boolean | null; + windows99_vmware_autostart_check_mode_endpoint_execution_authorized?: boolean | null; windows99_vmware_autostart_check_mode_work_order_id?: string | null; windows99_vmware_autostart_check_mode_action_stage?: string | null; windows99_vmware_autostart_check_mode_next_executable_step?: string | null; @@ -1463,6 +1473,11 @@ const COMMANDER_INSERTED_REQUIREMENT_FALLBACK: PriorityWorkOrderResponse = { windows99_vmware_autostart_check_mode_powered_off_count: 5, windows99_vmware_autostart_check_mode_safe_next_step: "build_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_then_rerun_no_secret_collector_no_vm_power_change", + windows99_vmware_autostart_check_mode_effective_execution_ready: true, + windows99_vmware_autostart_check_mode_collector_readback_present: true, + windows99_vmware_autostart_check_mode_local_console_channel_reachable: true, + windows99_vmware_autostart_check_mode_public_display_only: true, + windows99_vmware_autostart_check_mode_endpoint_execution_authorized: false, windows99_vmware_autostart_check_mode_work_order_id: "windows99-vmware-autostart-check-mode-112", windows99_vmware_autostart_check_mode_action_stage: @@ -1609,6 +1624,11 @@ const COMMANDER_INSERTED_REQUIREMENT_FALLBACK: PriorityWorkOrderResponse = { windows99_vmware_autostart_check_mode_powered_off_count: 5, windows99_vmware_autostart_check_mode_safe_next_step: "build_windows99_vmware_autostart_check_mode_package_for_powered_off_aliases_then_rerun_no_secret_collector_no_vm_power_change", + windows99_vmware_autostart_check_mode_effective_execution_ready: true, + windows99_vmware_autostart_check_mode_collector_readback_present: true, + windows99_vmware_autostart_check_mode_local_console_channel_reachable: true, + windows99_vmware_autostart_check_mode_public_display_only: true, + windows99_vmware_autostart_check_mode_endpoint_execution_authorized: false, windows99_vmware_autostart_check_mode_work_order_id: "windows99-vmware-autostart-check-mode-112", windows99_vmware_autostart_check_mode_action_stage: @@ -9412,6 +9432,26 @@ function ManagerSituationBoard({ summary?.windows99_vmware_autostart_check_mode_package_ready ?? evidence?.windows99_vmware_autostart_check_mode_package_ready ?? vmxRepairPackageReady; + const autostartCheckModeExecutionReady = + summary?.windows99_vmware_autostart_check_mode_effective_execution_ready ?? + evidence?.windows99_vmware_autostart_check_mode_effective_execution_ready ?? + false; + const autostartCheckModeCollectorReadbackPresent = + summary?.windows99_vmware_autostart_check_mode_collector_readback_present ?? + evidence?.windows99_vmware_autostart_check_mode_collector_readback_present ?? + false; + const autostartCheckModeLocalConsoleReachable = + summary?.windows99_vmware_autostart_check_mode_local_console_channel_reachable ?? + evidence?.windows99_vmware_autostart_check_mode_local_console_channel_reachable ?? + false; + const autostartCheckModePublicDisplayOnly = + summary?.windows99_vmware_autostart_check_mode_public_display_only ?? + evidence?.windows99_vmware_autostart_check_mode_public_display_only ?? + true; + const autostartCheckModeEndpointExecutionAuthorized = + summary?.windows99_vmware_autostart_check_mode_endpoint_execution_authorized ?? + evidence?.windows99_vmware_autostart_check_mode_endpoint_execution_authorized ?? + false; const autostartCheckModePoweredOffCount = summary?.windows99_vmware_autostart_check_mode_powered_off_count ?? evidence?.windows99_vmware_autostart_check_mode_powered_off_count ?? @@ -9543,6 +9583,8 @@ function ManagerSituationBoard({ const autostartCheckModePowerBlocked = autostartCheckModePoweredOffCount > 0; const autostartCheckModeCheckReady = autostartCheckModePackageReady && autostartCheckModeCheckModeAllowed; + const autostartCheckModeReceiptReady = + autostartCheckModeExecutionReady || autostartCheckModeCollectorReadbackPresent; const showSourceLocatorReceipt = vmxSourceLocatorRequired || vmxSourceLocatorConfirmationRequired || @@ -9848,43 +9890,77 @@ function ManagerSituationBoard({ {autostartCheckModeNextLabel} - - {autostartCheckModeCheckModeAllowed - ? t("vmxRepair.checkReady") - : t("vmxRepair.checkWaiting")} + + {autostartCheckModeReceiptReady + ? t("vmxRepair.receiptReady") + : t("vmxRepair.receiptWaiting")} - {autostartCheckModeVmPowerAllowed - ? t("vmxRepair.powerOpen") - : t("vmxRepair.noPower")} - - - {autostartCheckModeRemoteWriteAllowed - ? t("vmxRepair.writeOpen") - : t("vmxRepair.noRemoteWrite")} - - - {autostartCheckModeWindowsWriteAllowed - ? t("vmxRepair.windowsWriteOpen") - : t("vmxRepair.noWindowsWrite")} - - - {vmxRepairDestructiveAllowed - ? t("vmxRepair.destructiveOpen") - : t("vmxRepair.noDestructive")} - - - {t("vmxRepair.target", { aliases: autostartCheckModeTargetLabel })} - - - {t("vmxRepair.probes", { count: autostartCheckModeProbeCount })} - - - {t("vmxRepair.verifiers", { count: autostartCheckModeVerifierCount })} - - - {t("vmxRepair.learning", { count: autostartCheckModeWritebackCount })} + {autostartCheckModeEndpointExecutionAuthorized + ? t("vmxRepair.endpointOpen") + : t("vmxRepair.endpointClosed")} +
+ + {t("details")} + +
+ + {autostartCheckModeCheckModeAllowed + ? t("vmxRepair.checkReady") + : t("vmxRepair.checkWaiting")} + + + {autostartCheckModePublicDisplayOnly + ? t("vmxRepair.publicOnly") + : t("vmxRepair.internalOnly")} + + + {autostartCheckModeLocalConsoleReachable + ? t("vmxRepair.consoleReady") + : t("vmxRepair.consoleWaiting")} + + + {autostartCheckModeVmPowerAllowed + ? t("vmxRepair.powerOpen") + : t("vmxRepair.noPower")} + + + {autostartCheckModeRemoteWriteAllowed + ? t("vmxRepair.writeOpen") + : t("vmxRepair.noRemoteWrite")} + + + {autostartCheckModeWindowsWriteAllowed + ? t("vmxRepair.windowsWriteOpen") + : t("vmxRepair.noWindowsWrite")} + + + {vmxRepairDestructiveAllowed + ? t("vmxRepair.destructiveOpen") + : t("vmxRepair.noDestructive")} + + + {t("vmxRepair.target", { aliases: autostartCheckModeTargetLabel })} + + + {t("vmxRepair.probes", { count: autostartCheckModeProbeCount })} + + + {t("vmxRepair.verifiers", { count: autostartCheckModeVerifierCount })} + + + {t("vmxRepair.learning", { count: autostartCheckModeWritebackCount })} + +
+
{showSourceLocatorReceipt ? (