feat(web): add IwoooS topology drilldown
All checks were successful
CD Pipeline / tests (push) Successful in 1m23s
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / build-and-deploy (push) Successful in 4m40s
CD Pipeline / post-deploy-checks (push) Successful in 1m53s

This commit is contained in:
Your Name
2026-06-01 10:51:23 +08:00
parent 39569cc72b
commit f9b3585a00
7 changed files with 607 additions and 57 deletions

View File

@@ -613,6 +613,7 @@ def validate(root: Path) -> None:
"s2_146_iwooos_immediate_visual_mesh",
"s2_147_iwooos_gate_radar_first_layer",
"s2_148_iwooos_professional_topology_atlas",
"s2_149_iwooos_topology_node_drilldown",
]
assert_equal(
"progress_delta_ledger.delta_ids",
@@ -1580,6 +1581,20 @@ def validate(root: Path) -> None:
iwooos_projection["summary"]["topology_atlas_node_count"],
7,
)
assert_equal(
"iwooos_projection.summary.topology_drilldown_node_count",
iwooos_projection["summary"]["topology_drilldown_node_count"],
7,
)
assert_equal(
"iwooos_projection.summary.topology_drilldown_default_node",
iwooos_projection["summary"]["topology_drilldown_default_node"],
"productSurface",
)
assert_true(
"iwooos_projection.summary.topology_drilldown_interactive_node_allowed",
iwooos_projection["summary"]["topology_drilldown_interactive_node_allowed"],
)
assert_equal(
"iwooos_projection.summary.topology_atlas_layer_count",
iwooos_projection["summary"]["topology_atlas_layer_count"],
@@ -1603,6 +1618,11 @@ def validate(root: Path) -> None:
iwooos_projection["summary"]["topology_atlas_runtime_gate_count"],
0,
)
assert_equal(
"iwooos_projection.summary.topology_drilldown_runtime_gate_count",
iwooos_projection["summary"]["topology_drilldown_runtime_gate_count"],
0,
)
assert_true(
"iwooos_projection.summary.gate_radar_first_layer",
iwooos_projection["summary"]["gate_radar_first_layer"],
@@ -11999,12 +12019,18 @@ def validate(root: Path) -> None:
'data-testid="iwooos-topology-atlas-board"',
'data-testid="iwooos-topology-atlas-canvas"',
'data-testid="iwooos-topology-atlas-active-panel"',
'data-testid="iwooos-topology-atlas-node-drilldown"',
'data-testid="iwooos-topology-atlas-node-drilldown-metrics"',
'data-testid="iwooos-topology-atlas-node-drilldown-selector"',
'data-testid="iwooos-topology-atlas-technical-charts"',
'data-testid="iwooos-topology-atlas-boundaries"',
"IwoooSTopologyAtlasBoard",
"IwoooSTopologyAtlasMode",
"IwoooSTopologyNodeKey",
"IwoooSTopologyDrilldownNode",
"iwooosTopologyAtlasLenses",
"iwooosTopologyAtlasNodes",
"iwooosTopologyDrilldownNodes",
"iwooosTopologyAtlasLayers",
"iwooosTopologyAtlasCharts",
"iwooosTopologyAtlasBoundaries",
@@ -12037,14 +12063,22 @@ def validate(root: Path) -> None:
"iwooos_topology_atlas_first_layer=true",
"iwooos_topology_atlas_lens_count=4",
"iwooos_topology_atlas_node_count=7",
"iwooos_topology_drilldown_node_count=7",
"iwooos_topology_drilldown_default_node=productSurface",
"iwooos_topology_drilldown_interactive_node_allowed=true",
"iwooos_topology_atlas_layer_count=5",
"iwooos_topology_atlas_technical_chart_count=3",
"iwooos_topology_atlas_interactive_lens_allowed=true",
"iwooos_topology_atlas_execution_action_buttons_allowed=false",
"iwooos_topology_drilldown_execution_action_buttons_allowed=false",
"iwooos_topology_atlas_runtime_gate_count=0",
"iwooos_topology_drilldown_runtime_gate_count=0",
"iwooos_topology_atlas_scan_authorized=false",
"iwooos_topology_atlas_host_change_authorized=false",
"iwooos_topology_atlas_source_control_mutation_authorized=false",
"iwooos_topology_drilldown_scan_authorized=false",
"iwooos_topology_drilldown_host_change_authorized=false",
"iwooos_topology_drilldown_source_control_mutation_authorized=false",
"runtime_execution_authorized=false",
"active_runtime_gate_count=0",
"action_buttons_allowed=false",
@@ -12475,6 +12509,59 @@ def validate(root: Path) -> None:
"iwooos_projection.topology_atlas_technical_charts.blastRadius.blast_radius_verified",
blast_radius_chart["blast_radius_verified"],
)
expected_topology_drilldown_node_ids = [
"productSurface",
"sourceControl",
"kali",
"devHosts",
"monitoring",
"awooopTruth",
"runtimeGate",
]
topology_drilldown_nodes = iwooos_projection["topology_drilldown_nodes"]
assert_equal(
"iwooos_projection.topology_drilldown_nodes.ids",
[item["node_id"] for item in topology_drilldown_nodes],
expected_topology_drilldown_node_ids,
)
assert_equal(
"iwooos_projection.topology_drilldown_nodes.display_order",
[item["display_order"] for item in topology_drilldown_nodes],
list(range(1, len(expected_topology_drilldown_node_ids) + 1)),
)
for item in topology_drilldown_nodes:
assert_true(
f"iwooos_projection.topology_drilldown_nodes.{item['node_id']}.interactive_node_allowed",
item["interactive_node_allowed"],
)
assert_false(
f"iwooos_projection.topology_drilldown_nodes.{item['node_id']}.execution_action_button_allowed",
item["execution_action_button_allowed"],
)
assert_false(
f"iwooos_projection.topology_drilldown_nodes.{item['node_id']}.scan_authorized",
item["scan_authorized"],
)
assert_false(
f"iwooos_projection.topology_drilldown_nodes.{item['node_id']}.host_change_authorized",
item["host_change_authorized"],
)
assert_false(
f"iwooos_projection.topology_drilldown_nodes.{item['node_id']}.source_control_mutation_authorized",
item["source_control_mutation_authorized"],
)
assert_false(
f"iwooos_projection.topology_drilldown_nodes.{item['node_id']}.runtime_gate_opened",
item["runtime_gate_opened"],
)
assert_false(
f"iwooos_projection.topology_drilldown_nodes.{item['node_id']}.runtime_execution_authorized",
item["runtime_execution_authorized"],
)
assert_true(
f"iwooos_projection.topology_drilldown_nodes.{item['node_id']}.not_authorization",
item["not_authorization"],
)
expected_gate_radar_lane_ids = [
"visible",
"blocker",
@@ -12808,6 +12895,7 @@ def validate(root: Path) -> None:
"tabsLabel",
"mapLabel",
"panelLabels",
"nodeDrilldown",
"lenses",
"nodes",
"layers",
@@ -12836,6 +12924,49 @@ def validate(root: Path) -> None:
list(web_messages_en["iwooos"]["topologyAtlas"]["panelLabels"].keys()),
key,
)
for key in ["eyebrow", "selectorLabel", "fields", "nodes"]:
assert_contains(
"web_messages.zh-TW.iwooos.topologyAtlas.nodeDrilldown.keys",
list(web_messages_zh["iwooos"]["topologyAtlas"]["nodeDrilldown"].keys()),
key,
)
assert_contains(
"web_messages.en.iwooos.topologyAtlas.nodeDrilldown.keys",
list(web_messages_en["iwooos"]["topologyAtlas"]["nodeDrilldown"].keys()),
key,
)
for key in ["relation", "evidence", "next", "boundary"]:
assert_contains(
"web_messages.zh-TW.iwooos.topologyAtlas.nodeDrilldown.fields",
list(web_messages_zh["iwooos"]["topologyAtlas"]["nodeDrilldown"]["fields"].keys()),
key,
)
assert_contains(
"web_messages.en.iwooos.topologyAtlas.nodeDrilldown.fields",
list(web_messages_en["iwooos"]["topologyAtlas"]["nodeDrilldown"]["fields"].keys()),
key,
)
for key in ["productSurface", "sourceControl", "kali", "devHosts", "monitoring", "awooopTruth", "runtimeGate"]:
assert_contains(
"web_messages.zh-TW.iwooos.topologyAtlas.nodeDrilldown.nodes",
list(web_messages_zh["iwooos"]["topologyAtlas"]["nodeDrilldown"]["nodes"].keys()),
key,
)
assert_contains(
"web_messages.en.iwooos.topologyAtlas.nodeDrilldown.nodes",
list(web_messages_en["iwooos"]["topologyAtlas"]["nodeDrilldown"]["nodes"].keys()),
key,
)
assert_contains(
f"web_messages.zh-TW.iwooos.topologyAtlas.nodeDrilldown.nodes.{key}",
list(web_messages_zh["iwooos"]["topologyAtlas"]["nodeDrilldown"]["nodes"][key].keys()),
"body",
)
assert_contains(
f"web_messages.en.iwooos.topologyAtlas.nodeDrilldown.nodes.{key}",
list(web_messages_en["iwooos"]["topologyAtlas"]["nodeDrilldown"]["nodes"][key].keys()),
"body",
)
for key in ["architecture", "topology", "attackSurface", "evidenceFlow"]:
assert_contains(
"web_messages.zh-TW.iwooos.topologyAtlas.lenses",