feat(web): add IwoooS intelligence deck
Some checks failed
CD Pipeline / tests (push) Successful in 1m31s
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / build-and-deploy (push) Successful in 4m15s
CD Pipeline / post-deploy-checks (push) Has been cancelled

This commit is contained in:
Your Name
2026-06-01 12:32:22 +08:00
parent 7ff0c53b58
commit f5141f4f42
7 changed files with 642 additions and 8 deletions

View File

@@ -615,6 +615,7 @@ def validate(root: Path) -> None:
"s2_148_iwooos_professional_topology_atlas",
"s2_149_iwooos_topology_node_drilldown",
"s2_150_iwooos_topology_path_explorer",
"s2_151_iwooos_topology_intelligence_deck",
]
assert_equal(
"progress_delta_ledger.delta_ids",
@@ -1610,6 +1611,20 @@ def validate(root: Path) -> None:
"iwooos_projection.summary.topology_path_explorer_interactive_path_allowed",
iwooos_projection["summary"]["topology_path_explorer_interactive_path_allowed"],
)
assert_equal(
"iwooos_projection.summary.topology_intelligence_deck_count",
iwooos_projection["summary"]["topology_intelligence_deck_count"],
4,
)
assert_equal(
"iwooos_projection.summary.topology_intelligence_default_item",
iwooos_projection["summary"]["topology_intelligence_default_item"],
"assetContext",
)
assert_true(
"iwooos_projection.summary.topology_intelligence_interactive_item_allowed",
iwooos_projection["summary"]["topology_intelligence_interactive_item_allowed"],
)
assert_equal(
"iwooos_projection.summary.topology_atlas_layer_count",
iwooos_projection["summary"]["topology_atlas_layer_count"],
@@ -1643,6 +1658,11 @@ def validate(root: Path) -> None:
iwooos_projection["summary"]["topology_path_explorer_runtime_gate_count"],
0,
)
assert_equal(
"iwooos_projection.summary.topology_intelligence_runtime_gate_count",
iwooos_projection["summary"]["topology_intelligence_runtime_gate_count"],
0,
)
assert_true(
"iwooos_projection.summary.gate_radar_first_layer",
iwooos_projection["summary"]["gate_radar_first_layer"],
@@ -12043,6 +12063,10 @@ def validate(root: Path) -> None:
'data-testid="iwooos-topology-atlas-path-explorer-selector"',
'data-testid="iwooos-topology-atlas-path-explorer-sequence"',
'data-testid="iwooos-topology-atlas-path-explorer-summary"',
'data-testid="iwooos-topology-atlas-intelligence-deck"',
'data-testid="iwooos-topology-atlas-intelligence-selector"',
'data-testid="iwooos-topology-atlas-intelligence-trail"',
'data-testid="iwooos-topology-atlas-blast-rings"',
'data-testid="iwooos-topology-atlas-node-drilldown"',
'data-testid="iwooos-topology-atlas-node-drilldown-metrics"',
'data-testid="iwooos-topology-atlas-node-drilldown-selector"',
@@ -12051,13 +12075,16 @@ def validate(root: Path) -> None:
"IwoooSTopologyAtlasBoard",
"IwoooSTopologyAtlasMode",
"IwoooSTopologyPathKey",
"IwoooSTopologyInsightKey",
"IwoooSTopologyNodeKey",
"IwoooSTopologyDrilldownNode",
"IwoooSTopologyPathExplorerPath",
"IwoooSTopologyInsightItem",
"iwooosTopologyAtlasLenses",
"iwooosTopologyAtlasNodes",
"iwooosTopologyDrilldownNodes",
"iwooosTopologyPathExplorerPaths",
"iwooosTopologyInsightDeck",
"iwooosTopologyAtlasLayers",
"iwooosTopologyAtlasCharts",
"iwooosTopologyAtlasBoundaries",
@@ -12096,15 +12123,20 @@ def validate(root: Path) -> None:
"iwooos_topology_path_explorer_path_count=4",
"iwooos_topology_path_explorer_default_path=externalToGate",
"iwooos_topology_path_explorer_interactive_path_allowed=true",
"iwooos_topology_intelligence_deck_count=4",
"iwooos_topology_intelligence_default_item=assetContext",
"iwooos_topology_intelligence_interactive_item_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_path_explorer_execution_action_buttons_allowed=false",
"iwooos_topology_intelligence_execution_action_buttons_allowed=false",
"iwooos_topology_atlas_runtime_gate_count=0",
"iwooos_topology_drilldown_runtime_gate_count=0",
"iwooos_topology_path_explorer_runtime_gate_count=0",
"iwooos_topology_intelligence_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",
@@ -12114,6 +12146,9 @@ def validate(root: Path) -> None:
"iwooos_topology_path_explorer_scan_authorized=false",
"iwooos_topology_path_explorer_host_change_authorized=false",
"iwooos_topology_path_explorer_source_control_mutation_authorized=false",
"iwooos_topology_intelligence_scan_authorized=false",
"iwooos_topology_intelligence_host_change_authorized=false",
"iwooos_topology_intelligence_source_control_mutation_authorized=false",
"runtime_execution_authorized=false",
"active_runtime_gate_count=0",
"action_buttons_allowed=false",
@@ -12659,6 +12694,73 @@ def validate(root: Path) -> None:
f"iwooos_projection.topology_path_explorer_paths.{path_id}.not_authorization",
item["not_authorization"],
)
expected_topology_intelligence_deck_ids = [
"assetContext",
"attackPath",
"blastRadius",
"evidenceTimeline",
]
expected_topology_intelligence_sequences = {
"assetContext": ["productSurface", "sourceControl", "monitoring"],
"attackPath": ["sourceControl", "kali", "devHosts", "runtimeGate"],
"blastRadius": ["kali", "devHosts", "runtimeGate"],
"evidenceTimeline": ["monitoring", "awooopTruth", "runtimeGate"],
}
topology_intelligence_deck = iwooos_projection["topology_intelligence_deck"]
assert_equal(
"iwooos_projection.topology_intelligence_deck.ids",
[item["insight_id"] for item in topology_intelligence_deck],
expected_topology_intelligence_deck_ids,
)
assert_equal(
"iwooos_projection.topology_intelligence_deck.display_order",
[item["display_order"] for item in topology_intelligence_deck],
list(range(1, len(expected_topology_intelligence_deck_ids) + 1)),
)
for item in topology_intelligence_deck:
insight_id = item["insight_id"]
assert_equal(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.display_mode",
item["display_mode"],
"professional_graph_intelligence_deck",
)
assert_equal(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.node_sequence",
item["node_sequence"],
expected_topology_intelligence_sequences[insight_id],
)
assert_true(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.interactive_item_allowed",
item["interactive_item_allowed"],
)
assert_false(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.execution_action_button_allowed",
item["execution_action_button_allowed"],
)
assert_false(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.scan_authorized",
item["scan_authorized"],
)
assert_false(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.host_change_authorized",
item["host_change_authorized"],
)
assert_false(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.source_control_mutation_authorized",
item["source_control_mutation_authorized"],
)
assert_false(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.runtime_gate_opened",
item["runtime_gate_opened"],
)
assert_false(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.runtime_execution_authorized",
item["runtime_execution_authorized"],
)
assert_true(
f"iwooos_projection.topology_intelligence_deck.{insight_id}.not_authorization",
item["not_authorization"],
)
expected_gate_radar_lane_ids = [
"visible",
"blocker",
@@ -13066,6 +13168,50 @@ def validate(root: Path) -> None:
list(web_messages_en["iwooos"]["topologyAtlas"]["pathExplorer"]["paths"][key].keys()),
field,
)
for key in ["eyebrow", "title", "subtitle", "selectorLabel", "ringLabel", "fields", "items"]:
assert_contains(
"web_messages.zh-TW.iwooos.topologyAtlas.intelligenceDeck.keys",
list(web_messages_zh["iwooos"]["topologyAtlas"]["intelligenceDeck"].keys()),
key,
)
assert_contains(
"web_messages.en.iwooos.topologyAtlas.intelligenceDeck.keys",
list(web_messages_en["iwooos"]["topologyAtlas"]["intelligenceDeck"].keys()),
key,
)
for key in ["signal", "interpretation", "next"]:
assert_contains(
"web_messages.zh-TW.iwooos.topologyAtlas.intelligenceDeck.fields",
list(web_messages_zh["iwooos"]["topologyAtlas"]["intelligenceDeck"]["fields"].keys()),
key,
)
assert_contains(
"web_messages.en.iwooos.topologyAtlas.intelligenceDeck.fields",
list(web_messages_en["iwooos"]["topologyAtlas"]["intelligenceDeck"]["fields"].keys()),
key,
)
for key in ["assetContext", "attackPath", "blastRadius", "evidenceTimeline"]:
assert_contains(
"web_messages.zh-TW.iwooos.topologyAtlas.intelligenceDeck.items",
list(web_messages_zh["iwooos"]["topologyAtlas"]["intelligenceDeck"]["items"].keys()),
key,
)
assert_contains(
"web_messages.en.iwooos.topologyAtlas.intelligenceDeck.items",
list(web_messages_en["iwooos"]["topologyAtlas"]["intelligenceDeck"]["items"].keys()),
key,
)
for field in ["title", "signal", "interpretation", "next", "ring"]:
assert_contains(
f"web_messages.zh-TW.iwooos.topologyAtlas.intelligenceDeck.items.{key}",
list(web_messages_zh["iwooos"]["topologyAtlas"]["intelligenceDeck"]["items"][key].keys()),
field,
)
assert_contains(
f"web_messages.en.iwooos.topologyAtlas.intelligenceDeck.items.{key}",
list(web_messages_en["iwooos"]["topologyAtlas"]["intelligenceDeck"]["items"][key].keys()),
field,
)
for key in ["eyebrow", "selectorLabel", "fields", "nodes"]:
assert_contains(
"web_messages.zh-TW.iwooos.topologyAtlas.nodeDrilldown.keys",