feat(web): add interactive IwoooS security visuals
All checks were successful
CD Pipeline / tests (push) Successful in 1m29s
Code Review / ai-code-review (push) Successful in 12s
CD Pipeline / build-and-deploy (push) Successful in 3m28s
CD Pipeline / post-deploy-checks (push) Successful in 1m56s

This commit is contained in:
Your Name
2026-05-31 19:31:01 +08:00
parent 6737a3d48b
commit c017fcf954
6 changed files with 732 additions and 0 deletions

View File

@@ -268,6 +268,59 @@ def validate(root: Path) -> None:
list(web_messages_zh["iwooos"]["visualCommandDashboard"]["gates"].keys()),
key,
)
for text in [
"IwoooSProfessionalSecurityExperience",
'data-testid="iwooos-professional-security-experience"',
"IwoooSAttackPathVisual",
"IwoooSAssetHeatVisual",
"IwoooSResponseFlowVisual",
"visualExperienceTabs",
"attackPathNodes",
"assetHeatCells",
"responseFlowSteps",
"role=\"tab\"",
"aria-selected",
]:
assert_text_contains("iwooos_projection_page.professional_security_experience", iwooos_projection_page, text)
for key in [
"eyebrow",
"title",
"subtitle",
"tabsLabel",
"tabs",
"attackPath",
"assetHeat",
"responseFlow",
]:
assert_contains(
"web_messages.zh-TW.iwooos.professionalSecurityExperience",
list(web_messages_zh["iwooos"]["professionalSecurityExperience"].keys()),
key,
)
for key in ["attackPath", "assetHeat", "responseFlow"]:
assert_contains(
"web_messages.zh-TW.iwooos.professionalSecurityExperience.tabs",
list(web_messages_zh["iwooos"]["professionalSecurityExperience"]["tabs"].keys()),
key,
)
for key in ["publicWeb", "apiRuntime", "projectSource", "devHosts", "kali112", "runtimeGate"]:
assert_contains(
"web_messages.zh-TW.iwooos.professionalSecurityExperience.attackPath.nodes",
list(web_messages_zh["iwooos"]["professionalSecurityExperience"]["attackPath"]["nodes"].keys()),
key,
)
for key in ["awoooi", "awooop", "iwooos", "websites", "kali112", "devHosts", "githubPrimary", "runtimeActions"]:
assert_contains(
"web_messages.zh-TW.iwooos.professionalSecurityExperience.assetHeat.cells",
list(web_messages_zh["iwooos"]["professionalSecurityExperience"]["assetHeat"]["cells"].keys()),
key,
)
for key in ["observe", "triage", "evidence", "approval", "runtime"]:
assert_contains(
"web_messages.zh-TW.iwooos.professionalSecurityExperience.responseFlow.steps",
list(web_messages_zh["iwooos"]["professionalSecurityExperience"]["responseFlow"]["steps"].keys()),
key,
)
for key in [
"eyebrow",
"title",
@@ -1700,6 +1753,30 @@ def validate(root: Path) -> None:
"iwooos_projection.summary.visual_command_dashboard_first_layer",
iwooos_projection["summary"]["visual_command_dashboard_first_layer"],
)
assert_true(
"iwooos_projection.summary.professional_security_experience_first_layer",
iwooos_projection["summary"]["professional_security_experience_first_layer"],
)
assert_equal(
"iwooos_projection.summary.professional_security_experience_tab_count",
iwooos_projection["summary"]["professional_security_experience_tab_count"],
3,
)
assert_equal(
"iwooos_projection.summary.professional_security_experience_attack_path_node_count",
iwooos_projection["summary"]["professional_security_experience_attack_path_node_count"],
6,
)
assert_equal(
"iwooos_projection.summary.professional_security_experience_asset_heat_cell_count",
iwooos_projection["summary"]["professional_security_experience_asset_heat_cell_count"],
8,
)
assert_equal(
"iwooos_projection.summary.professional_security_experience_response_flow_step_count",
iwooos_projection["summary"]["professional_security_experience_response_flow_step_count"],
5,
)
assert_true(
"iwooos_projection.summary.long_form_sections_default_collapsed",
iwooos_projection["summary"]["long_form_sections_default_collapsed"],
@@ -5767,6 +5844,7 @@ def validate(root: Path) -> None:
"display_security_posture",
"display_progress_estimate",
"display_visual_command_dashboard",
"display_professional_security_experience",
"display_awooop_read_only_landing_readiness",
"display_awooop_cross_session_handoff_packets",
"display_progress_hold_movement_gates",