feat(web): 視覺化 IwoooS 資安指揮板
All checks were successful
CD Pipeline / tests (push) Successful in 1m35s
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / build-and-deploy (push) Successful in 3m43s
CD Pipeline / post-deploy-checks (push) Successful in 3m10s

This commit is contained in:
Your Name
2026-05-31 18:45:53 +08:00
parent ab780892b6
commit 59b4943bf9
6 changed files with 901 additions and 8 deletions

View File

@@ -225,6 +225,90 @@ def validate(root: Path) -> None:
web_messages_en,
web_messages_zh,
)
for text in [
"IwoooSVisualCommandDashboard",
'data-testid="iwooos-visual-command-dashboard"',
"visualDashboardMetrics",
"visualDashboardNodes",
"visualDashboardGates",
"conic-gradient",
"visualCommandDashboard",
]:
assert_text_contains("iwooos_projection_page.visual_command_dashboard", iwooos_projection_page, text)
for key in [
"eyebrow",
"title",
"subtitle",
"metrics",
"nodes",
"gateMatrix",
"gates",
"drilldown",
]:
assert_contains(
"web_messages.zh-TW.iwooos.visualCommandDashboard",
list(web_messages_zh["iwooos"]["visualCommandDashboard"].keys()),
key,
)
for key in ["overall", "framework", "runtime"]:
assert_contains(
"web_messages.zh-TW.iwooos.visualCommandDashboard.metrics",
list(web_messages_zh["iwooos"]["visualCommandDashboard"]["metrics"].keys()),
key,
)
for key in ["awoooiCore", "websites", "kali112", "devHosts", "githubPrimary", "runtimeGate"]:
assert_contains(
"web_messages.zh-TW.iwooos.visualCommandDashboard.nodes",
list(web_messages_zh["iwooos"]["visualCommandDashboard"]["nodes"].keys()),
key,
)
for key in ["kaliMaintenance", "ownerResponse", "githubPrimary", "runtimeExecution"]:
assert_contains(
"web_messages.zh-TW.iwooos.visualCommandDashboard.gates",
list(web_messages_zh["iwooos"]["visualCommandDashboard"]["gates"].keys()),
key,
)
for key in [
"eyebrow",
"title",
"subtitle",
"maintenanceGateLabel",
"maintenanceGate",
"nextEvidenceLabel",
"nextEvidence",
"boundaryTitle",
"boundaryIntro",
"items",
]:
assert_contains(
"web_messages.zh-TW.iwooos.kaliMaintenanceReadiness",
list(web_messages_zh["iwooos"]["kaliMaintenanceReadiness"].keys()),
key,
)
for key in [
"readOnlySnapshot",
"upgradablePackages",
"failedSystemdUnits",
"runtimeGate",
]:
assert_contains(
"web_messages.zh-TW.iwooos.kaliMaintenanceReadiness.items",
list(web_messages_zh["iwooos"]["kaliMaintenanceReadiness"]["items"].keys()),
key,
)
for text in [
"KaliMaintenanceReadinessBoard",
'data-testid="iwooos-kali-maintenance-readiness-board"',
"kali_112_upgradable_package_count=1994",
"kali_112_failed_systemd_unit_count=1",
"kali_112_full_upgrade_authorized=false",
"kali_112_reboot_authorized=false",
"kali_112_package_update_executed=false",
"kali_112_host_reboot_executed=false",
"kali_112_active_scan_executed=false",
"kali_112_runtime_execution_authorized=false",
]:
assert_text_contains("iwooos_projection_page.kali_maintenance_readiness", iwooos_projection_page, text)
progress = rollup["progress_estimate"]
assert_equal("progress.overall_percent", progress["overall_percent"], 61)
@@ -1305,6 +1389,12 @@ def validate(root: Path) -> None:
"dev_168_development_host",
"dev_111_development_host",
]
expected_iwooos_kali_maintenance_readiness_item_ids = [
"kali_112_read_only_snapshot",
"kali_112_upgradable_package_count",
"kali_112_failed_systemd_unit_count",
"kali_112_full_upgrade_reboot_gate",
]
expected_iwooos_host_action_gate_item_ids = [
"host_active_scan_gate",
"host_credentialed_scan_gate",
@@ -1601,6 +1691,19 @@ def validate(root: Path) -> None:
"host_decision_record_human_record_owner_review_preparation_validation_runtime_gate_separate_check",
"host_decision_record_human_record_owner_review_preparation_no_execution_attestation_present_check",
]
assert_equal(
"iwooos_projection.summary.visual_command_dashboard_widget_count",
iwooos_projection["summary"]["visual_command_dashboard_widget_count"],
13,
)
assert_true(
"iwooos_projection.summary.visual_command_dashboard_first_layer",
iwooos_projection["summary"]["visual_command_dashboard_first_layer"],
)
assert_true(
"iwooos_projection.summary.long_form_sections_default_collapsed",
iwooos_projection["summary"]["long_form_sections_default_collapsed"],
)
assert_equal(
"iwooos_projection.summary.frontend_surface_coverage_group_count",
iwooos_projection["summary"]["frontend_surface_coverage_group_count"],
@@ -1626,6 +1729,11 @@ def validate(root: Path) -> None:
iwooos_projection["summary"]["host_coverage_item_count"],
len(expected_iwooos_host_coverage_item_ids),
)
assert_equal(
"iwooos_projection.summary.kali_maintenance_readiness_item_count",
iwooos_projection["summary"]["kali_maintenance_readiness_item_count"],
len(expected_iwooos_kali_maintenance_readiness_item_ids),
)
assert_equal(
"iwooos_projection.summary.host_action_gate_item_count",
iwooos_projection["summary"]["host_action_gate_item_count"],
@@ -2819,6 +2927,76 @@ def validate(root: Path) -> None:
f"iwooos_projection.host_coverage_items.{item['host_id']}.not_authorization",
item["not_authorization"],
)
iwooos_kali_maintenance_readiness = iwooos_projection["kali_maintenance_readiness_items"]
assert_equal(
"iwooos_projection.kali_maintenance_readiness_items.ids",
[item["item_id"] for item in iwooos_kali_maintenance_readiness],
expected_iwooos_kali_maintenance_readiness_item_ids,
)
assert_equal(
"iwooos_projection.kali_maintenance_readiness_items.display_order",
[item["display_order"] for item in iwooos_kali_maintenance_readiness],
list(range(1, len(expected_iwooos_kali_maintenance_readiness_item_ids) + 1)),
)
assert_equal(
"iwooos_projection.kali_maintenance_readiness_items.upgradable_package_count",
iwooos_kali_maintenance_readiness[1]["metric_value"],
1994,
)
assert_equal(
"iwooos_projection.kali_maintenance_readiness_items.failed_systemd_unit_count",
iwooos_kali_maintenance_readiness[2]["metric_value"],
1,
)
assert_equal(
"iwooos_projection.kali_maintenance_readiness_items.reboot_gate_queue_item",
iwooos_kali_maintenance_readiness[3]["source_queue_item_id"],
"kali-full-upgrade-reboot-approval-20260513",
)
for item in iwooos_kali_maintenance_readiness:
assert_equal(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.display_mode",
item["display_mode"],
"maintenance_readiness_only",
)
assert_false(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.runtime_execution_authorized",
item["runtime_execution_authorized"],
)
if "full_upgrade_authorized" in item:
assert_false(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.full_upgrade_authorized",
item["full_upgrade_authorized"],
)
if "reboot_authorized" in item:
assert_false(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.reboot_authorized",
item["reboot_authorized"],
)
if "package_update_executed" in item:
assert_false(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.package_update_executed",
item["package_update_executed"],
)
if "host_reboot_executed" in item:
assert_false(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.host_reboot_executed",
item["host_reboot_executed"],
)
if "active_scan_executed" in item:
assert_false(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.active_scan_executed",
item["active_scan_executed"],
)
if "action_buttons_allowed" in item:
assert_false(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.action_buttons_allowed",
item["action_buttons_allowed"],
)
assert_true(
f"iwooos_projection.kali_maintenance_readiness_items.{item['item_id']}.not_authorization",
item["not_authorization"],
)
iwooos_host_action_gates = iwooos_projection["host_action_gate_items"]
assert_equal(
"iwooos_projection.host_action_gate_items.ids",
@@ -5588,6 +5766,7 @@ def validate(root: Path) -> None:
for output in [
"display_security_posture",
"display_progress_estimate",
"display_visual_command_dashboard",
"display_awooop_read_only_landing_readiness",
"display_awooop_cross_session_handoff_packets",
"display_progress_hold_movement_gates",
@@ -5603,6 +5782,7 @@ def validate(root: Path) -> None:
"display_operator_journey_steps",
"display_owner_evidence_readiness_board",
"display_host_coverage_view",
"display_kali_maintenance_readiness_board",
"display_host_action_gate_matrix",
"display_host_evidence_readiness_board",
"display_host_evidence_collection_order",