fix(web): clarify IwoooS first screen depth
This commit is contained in:
@@ -5521,6 +5521,30 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"firstScreenDepthMap": {
|
||||
"eyebrow": "首屏深度地圖",
|
||||
"title": "哪些內容直接可見,哪些需要下鑽",
|
||||
"subtitle": "把 IwoooS 分成首屏可見、進階圖表、深層台帳與執行期邊界四層;預設呈現態勢,需要查證時再展開細節。",
|
||||
"boundaryTitle": "深度地圖邊界",
|
||||
"layers": {
|
||||
"visible": {
|
||||
"title": "首屏直接可見",
|
||||
"body": "高層快照、焦點導覽、資安網模型與拓樸圖譜固定顯示。"
|
||||
},
|
||||
"advanced": {
|
||||
"title": "進階圖表收合",
|
||||
"body": "決策跑道、執行閘雷達、命令地圖與解鎖路徑需要時再展開。"
|
||||
},
|
||||
"ledger": {
|
||||
"title": "證據台帳下鑽",
|
||||
"body": "產品範圍、主機工具鏈、VibeWork 與交付明細集中在進階證據區。"
|
||||
},
|
||||
"runtime": {
|
||||
"title": "執行期仍鎖定",
|
||||
"body": "掃描、SSH、主機更新、修復、部署與版本來源變更都不是前端操作。"
|
||||
}
|
||||
}
|
||||
},
|
||||
"immediateVisualMesh": {
|
||||
"eyebrow": "首屏資安網視覺模型",
|
||||
"title": "資安關聯視覺模型",
|
||||
|
||||
@@ -5521,6 +5521,30 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"firstScreenDepthMap": {
|
||||
"eyebrow": "首屏深度地圖",
|
||||
"title": "哪些內容直接可見,哪些需要下鑽",
|
||||
"subtitle": "把 IwoooS 分成首屏可見、進階圖表、深層台帳與執行期邊界四層;預設呈現態勢,需要查證時再展開細節。",
|
||||
"boundaryTitle": "深度地圖邊界",
|
||||
"layers": {
|
||||
"visible": {
|
||||
"title": "首屏直接可見",
|
||||
"body": "高層快照、焦點導覽、資安網模型與拓樸圖譜固定顯示。"
|
||||
},
|
||||
"advanced": {
|
||||
"title": "進階圖表收合",
|
||||
"body": "決策跑道、執行閘雷達、命令地圖與解鎖路徑需要時再展開。"
|
||||
},
|
||||
"ledger": {
|
||||
"title": "證據台帳下鑽",
|
||||
"body": "產品範圍、主機工具鏈、VibeWork 與交付明細集中在進階證據區。"
|
||||
},
|
||||
"runtime": {
|
||||
"title": "執行期仍鎖定",
|
||||
"body": "掃描、SSH、主機更新、修復、部署與版本來源變更都不是前端操作。"
|
||||
}
|
||||
}
|
||||
},
|
||||
"immediateVisualMesh": {
|
||||
"eyebrow": "首屏資安網視覺模型",
|
||||
"title": "資安關聯視覺模型",
|
||||
|
||||
@@ -40,6 +40,14 @@ type PostureMetric = {
|
||||
tone: 'steady' | 'warn' | 'locked'
|
||||
}
|
||||
|
||||
type FirstScreenDepthLayer = {
|
||||
key: string
|
||||
value: string
|
||||
icon: typeof ShieldCheck
|
||||
tone: 'steady' | 'warn' | 'locked'
|
||||
href?: string
|
||||
}
|
||||
|
||||
type FastProgressItem = {
|
||||
key: string
|
||||
value: string
|
||||
@@ -880,6 +888,26 @@ const postureMetrics: PostureMetric[] = [
|
||||
{ key: 'activeGates', value: '0', tone: 'locked' },
|
||||
]
|
||||
|
||||
const firstScreenDepthLayers: FirstScreenDepthLayer[] = [
|
||||
{ key: 'visible', value: '4', icon: ShieldCheck, tone: 'steady' },
|
||||
{ key: 'advanced', value: '2', icon: SearchCheck, tone: 'warn', href: '#iwooos-decision-gate-visuals' },
|
||||
{ key: 'ledger', value: '4', icon: ListChecks, tone: 'warn', href: '#iwooos-scope-evidence-visuals' },
|
||||
{ key: 'runtime', value: '0', icon: Lock, tone: 'locked' },
|
||||
]
|
||||
|
||||
const firstScreenDepthBoundaries = [
|
||||
'iwooos_first_screen_depth_map_visible_layer_count=4',
|
||||
'iwooos_first_screen_depth_map_advanced_group_count=2',
|
||||
'iwooos_first_screen_depth_map_ledger_group_count=4',
|
||||
'iwooos_first_screen_depth_map_runtime_gate_count=0',
|
||||
'iwooos_first_screen_depth_map_advanced_default_visible=false',
|
||||
'iwooos_first_screen_depth_map_scope_evidence_default_visible=false',
|
||||
'runtime_execution_authorized=false',
|
||||
'active_runtime_gate_count=0',
|
||||
'action_buttons_allowed=false',
|
||||
'not_authorization=true',
|
||||
]
|
||||
|
||||
const fastProgressItems: FastProgressItem[] = [
|
||||
{ key: 'done', value: '7 頁', icon: CheckCircle2, tone: 'steady' },
|
||||
{ key: 'kali112', value: '只讀通過', icon: ShieldCheck, tone: 'warn' },
|
||||
@@ -9912,6 +9940,159 @@ function IwoooSFocusDeckBoard() {
|
||||
)
|
||||
}
|
||||
|
||||
function IwoooSFirstScreenDepthMapBoard() {
|
||||
const t = useTranslations('iwooos.firstScreenDepthMap')
|
||||
const textWrap = { overflowWrap: 'anywhere' as const, wordBreak: 'break-word' as const }
|
||||
|
||||
return (
|
||||
<section
|
||||
data-testid="iwooos-first-screen-depth-map-board"
|
||||
style={{ marginBottom: 14, maxWidth: '100%', overflow: 'hidden' }}
|
||||
>
|
||||
<div style={{ ...band, padding: 14, background: '#fbfbf7', borderColor: '#ded8c8' }}>
|
||||
<div
|
||||
style={{
|
||||
display: 'grid',
|
||||
gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 250px), 1fr))',
|
||||
gap: 10,
|
||||
alignItems: 'stretch',
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
border: '0.5px solid #d9d2c4',
|
||||
borderRadius: 8,
|
||||
background: '#fff',
|
||||
padding: 13,
|
||||
display: 'grid',
|
||||
alignContent: 'start',
|
||||
gap: 7,
|
||||
minWidth: 0,
|
||||
}}
|
||||
>
|
||||
<div style={{ display: 'flex', alignItems: 'center', gap: 8, color: '#5c543f', fontSize: 12, fontWeight: 700 }}>
|
||||
<Route size={16} color="#b66a2d" />
|
||||
{t('eyebrow')}
|
||||
</div>
|
||||
<h2 style={{ fontSize: 17, lineHeight: 1.25, margin: 0, color: '#141413' }}>{t('title')}</h2>
|
||||
<p style={{ fontSize: 12, lineHeight: 1.55, color: '#6f6d66', margin: 0, ...textWrap }}>
|
||||
{t('subtitle')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div
|
||||
data-testid="iwooos-first-screen-depth-map-layers"
|
||||
style={{
|
||||
display: 'grid',
|
||||
gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 150px), 1fr))',
|
||||
gap: 8,
|
||||
minWidth: 0,
|
||||
}}
|
||||
>
|
||||
{firstScreenDepthLayers.map((item, index) => {
|
||||
const Icon = item.icon
|
||||
const content = (
|
||||
<>
|
||||
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}>
|
||||
<Icon size={16} color={toneColors[item.tone]} />
|
||||
<span style={{ color: toneColors[item.tone], fontSize: 17, fontWeight: 700 }}>{item.value}</span>
|
||||
</div>
|
||||
<div style={{ marginTop: 8, fontSize: 10.5, color: '#8a867c', fontWeight: 700 }}>
|
||||
{String(index + 1).padStart(2, '0')}
|
||||
</div>
|
||||
<h3 style={{ margin: '4px 0 0', fontSize: 13, lineHeight: 1.25, color: '#141413', ...textWrap }}>
|
||||
{t(`layers.${item.key}.title` as never)}
|
||||
</h3>
|
||||
<p style={{ margin: '6px 0 0', fontSize: 11, lineHeight: 1.45, color: '#6f6d66', ...textWrap }}>
|
||||
{t(`layers.${item.key}.body` as never)}
|
||||
</p>
|
||||
</>
|
||||
)
|
||||
const style = {
|
||||
border: `0.5px solid ${item.tone === 'steady' ? '#cfe2d8' : item.tone === 'warn' ? '#e6c8b8' : '#dad7ce'}`,
|
||||
borderRadius: 8,
|
||||
background: '#fff',
|
||||
padding: 11,
|
||||
minHeight: 126,
|
||||
minWidth: 0,
|
||||
color: '#141413',
|
||||
textDecoration: 'none',
|
||||
display: 'block',
|
||||
}
|
||||
|
||||
return item.href ? (
|
||||
<a key={item.key} href={item.href} data-testid={`iwooos-first-screen-depth-map-layer-${item.key}`} style={style}>
|
||||
{content}
|
||||
</a>
|
||||
) : (
|
||||
<div key={item.key} data-testid={`iwooos-first-screen-depth-map-layer-${item.key}`} style={style}>
|
||||
{content}
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
data-testid="iwooos-first-screen-depth-map-flow"
|
||||
style={{
|
||||
marginTop: 10,
|
||||
display: 'grid',
|
||||
gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',
|
||||
gap: 6,
|
||||
}}
|
||||
>
|
||||
{firstScreenDepthLayers.map(item => (
|
||||
<div
|
||||
key={item.key}
|
||||
style={{
|
||||
height: 7,
|
||||
borderRadius: 8,
|
||||
background: toneColors[item.tone],
|
||||
opacity: item.key === 'runtime' ? 0.38 : 0.86,
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<details
|
||||
data-testid="iwooos-first-screen-depth-map-boundaries"
|
||||
style={{
|
||||
marginTop: 10,
|
||||
border: '0.5px solid #e7e1d3',
|
||||
borderRadius: 8,
|
||||
background: '#fff',
|
||||
padding: '7px 10px',
|
||||
}}
|
||||
>
|
||||
<summary style={{ cursor: 'pointer', fontSize: 12, fontWeight: 700, color: '#5c543f' }}>
|
||||
{t('boundaryTitle')}
|
||||
</summary>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(230px, 1fr))', gap: 6, marginTop: 9 }}>
|
||||
{firstScreenDepthBoundaries.map(item => (
|
||||
<code
|
||||
key={item}
|
||||
style={{
|
||||
border: '0.5px solid #ede4d4',
|
||||
borderRadius: 8,
|
||||
padding: '6px 8px',
|
||||
color: '#5c543f',
|
||||
fontSize: 11,
|
||||
lineHeight: 1.4,
|
||||
background: '#fbfbf7',
|
||||
overflowWrap: 'anywhere',
|
||||
}}
|
||||
>
|
||||
{item}
|
||||
</code>
|
||||
))}
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
function IwoooSImmediateVisualMeshBoard() {
|
||||
const t = useTranslations('iwooos.immediateVisualMesh')
|
||||
const textWrap = { overflowWrap: 'anywhere' as const, wordBreak: 'break-word' as const }
|
||||
@@ -16388,6 +16569,7 @@ export default function IwoooSPage({ params }: { params: { locale: string } }) {
|
||||
|
||||
<IwoooSExecutiveSnapshotBoard />
|
||||
<IwoooSFocusDeckBoard />
|
||||
<IwoooSFirstScreenDepthMapBoard />
|
||||
<IwoooSImmediateVisualMeshBoard />
|
||||
<IwoooSTopologyAtlasBoard />
|
||||
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
## 2026-06-01|IwoooS 首屏深度地圖與證據語義校正
|
||||
|
||||
**背景**:
|
||||
|
||||
- 前一階段已把 IwoooS 長內容收進可展開區,但 snapshot 仍有部分歷史欄位以 `first_layer=true` 描述已收合的面板,容易讓人誤解「首屏固定可見」與「首層可下鑽」的差異。
|
||||
- 使用者要求前端呈現要更專業,不只堆文字;本輪把資訊架構邊界直接做成可視化深度地圖。
|
||||
|
||||
**本次調整**:
|
||||
|
||||
- `apps/web/src/app/[locale]/iwooos/page.tsx`:新增 `IwoooSFirstScreenDepthMapBoard`,用四層視覺卡呈現「首屏直接可見」、「進階圖表收合」、「證據台帳下鑽」、「執行期仍鎖定」。
|
||||
- `apps/web/messages/zh-TW.json` / `en.json`:新增首屏深度地圖繁中文案;英文語系維持繁中鏡像。
|
||||
- `docs/security/iwooos-posture-projection.snapshot.json`:新增 `first_screen_depth_map_layers`,並補上多個 `default_visible=false` 欄位,讓收合區不再被誤讀為預設展開。
|
||||
- `scripts/security/security-mirror-progress-guard.py`:新增 S2.156 guard,鎖住深度地圖、四層語義、收合區 default visible 狀態與 runtime gate 0 邊界。
|
||||
- `docs/security/security-mirror-status-rollup.snapshot.json`:新增 `s2_156_iwooos_first_screen_depth_map` 進度台帳。
|
||||
|
||||
**進度邊界**:
|
||||
|
||||
- 整體維持 `61%`;這是 UI/UX 與證據語義校正,不是 Kali SSH、掃描、主機更新、修復、部署或 GitHub primary 切換。
|
||||
|
||||
## 2026-06-01|truth-chain quality summary 納入 AI 自健診 SLO
|
||||
|
||||
**背景**:
|
||||
|
||||
@@ -36,17 +36,28 @@
|
||||
"approval_queue_total": 8,
|
||||
"pending_approval_count": 7,
|
||||
"block_candidate_count": 1,
|
||||
"first_screen_depth_map_first_layer": true,
|
||||
"first_screen_depth_map_layer_count": 4,
|
||||
"first_screen_depth_map_visible_layer_count": 4,
|
||||
"first_screen_depth_map_advanced_group_count": 2,
|
||||
"first_screen_depth_map_ledger_group_count": 4,
|
||||
"first_screen_depth_map_runtime_gate_count": 0,
|
||||
"first_screen_depth_map_advanced_default_visible": false,
|
||||
"first_screen_depth_map_scope_evidence_default_visible": false,
|
||||
"visual_command_dashboard_widget_count": 14,
|
||||
"visual_command_dashboard_first_layer": true,
|
||||
"visual_command_dashboard_default_visible": false,
|
||||
"professional_security_experience_first_layer": true,
|
||||
"professional_security_experience_default_visible": false,
|
||||
"professional_security_experience_tab_count": 3,
|
||||
"professional_security_experience_attack_path_node_count": 6,
|
||||
"professional_security_experience_asset_heat_cell_count": 9,
|
||||
"professional_security_experience_response_flow_step_count": 5,
|
||||
"concrete_work_snapshot_first_layer": true,
|
||||
"concrete_work_snapshot_default_visible": false,
|
||||
"concrete_work_snapshot_workstream_count": 6,
|
||||
"first_progress_unlock_path_first_layer": true,
|
||||
"first_progress_unlock_path_default_visible": true,
|
||||
"first_progress_unlock_path_default_visible": false,
|
||||
"first_progress_unlock_path_above_visual_dashboard": true,
|
||||
"first_progress_unlock_path_step_count": 5,
|
||||
"first_progress_unlock_path_boundary_details_collapsed": true,
|
||||
@@ -54,6 +65,7 @@
|
||||
"first_progress_unlock_path_owner_response_accepted_count": 0,
|
||||
"first_progress_unlock_path_runtime_gate_count": 0,
|
||||
"command_map_first_layer": true,
|
||||
"command_map_default_visible": false,
|
||||
"command_map_mode_count": 6,
|
||||
"command_map_default_mode": "unlock",
|
||||
"command_map_above_first_progress_unlock_path": true,
|
||||
@@ -72,6 +84,7 @@
|
||||
"immediate_visual_mesh_above_command_map": true,
|
||||
"immediate_visual_mesh_runtime_gate_count": 0,
|
||||
"gate_radar_first_layer": true,
|
||||
"gate_radar_default_visible": false,
|
||||
"gate_radar_lane_count": 4,
|
||||
"gate_radar_default_lane": "visible",
|
||||
"gate_radar_above_command_map": true,
|
||||
@@ -97,14 +110,17 @@
|
||||
"all_product_coverage_snapshot_default_summary_mode": "compact_first",
|
||||
"all_product_coverage_snapshot_detail_ledger_collapsed": true,
|
||||
"global_security_mesh_matrix_first_layer": true,
|
||||
"global_security_mesh_matrix_default_visible": false,
|
||||
"global_security_mesh_matrix_asset_count": 8,
|
||||
"global_security_mesh_matrix_read_only_count": 8,
|
||||
"global_security_mesh_matrix_runtime_gate_count": 0,
|
||||
"host_tool_evidence_chain_first_layer": true,
|
||||
"host_tool_evidence_chain_default_visible": false,
|
||||
"host_tool_evidence_chain_host_count": 3,
|
||||
"host_tool_evidence_chain_tool_lane_count": 6,
|
||||
"host_tool_evidence_chain_step_count": 5,
|
||||
"vibework_security_onboarding_first_layer": true,
|
||||
"vibework_security_onboarding_default_visible": false,
|
||||
"vibework_security_onboarding_item_count": 6,
|
||||
"vibework_security_onboarding_runtime_gate_count": 0,
|
||||
"existing_frontend_surface_count": 10,
|
||||
@@ -175,6 +191,7 @@
|
||||
"topology_path_explorer_runtime_gate_count": 0,
|
||||
"topology_intelligence_runtime_gate_count": 0,
|
||||
"decision_runway_first_layer": true,
|
||||
"decision_runway_default_visible": false,
|
||||
"decision_runway_step_count": 5,
|
||||
"decision_runway_default_step": "ownerEvidence",
|
||||
"decision_runway_dependency_count": 6,
|
||||
@@ -278,6 +295,57 @@
|
||||
"not_authorization": true
|
||||
}
|
||||
],
|
||||
"first_screen_depth_map_layers": [
|
||||
{
|
||||
"layer_id": "visible",
|
||||
"display_order": 1,
|
||||
"display_mode": "first_screen_depth_map",
|
||||
"surface_count": 4,
|
||||
"default_visible": true,
|
||||
"runtime_gate_count": 0,
|
||||
"runtime_execution_authorized": false,
|
||||
"action_buttons_allowed": false,
|
||||
"not_authorization": true
|
||||
},
|
||||
{
|
||||
"layer_id": "advanced",
|
||||
"display_order": 2,
|
||||
"display_mode": "first_screen_depth_map",
|
||||
"surface_count": 2,
|
||||
"target_anchor": "#iwooos-decision-gate-visuals",
|
||||
"default_visible": false,
|
||||
"runtime_gate_count": 0,
|
||||
"runtime_execution_authorized": false,
|
||||
"action_buttons_allowed": false,
|
||||
"not_authorization": true
|
||||
},
|
||||
{
|
||||
"layer_id": "ledger",
|
||||
"display_order": 3,
|
||||
"display_mode": "first_screen_depth_map",
|
||||
"surface_count": 4,
|
||||
"target_anchor": "#iwooos-scope-evidence-visuals",
|
||||
"default_visible": false,
|
||||
"runtime_gate_count": 0,
|
||||
"runtime_execution_authorized": false,
|
||||
"action_buttons_allowed": false,
|
||||
"not_authorization": true
|
||||
},
|
||||
{
|
||||
"layer_id": "runtime",
|
||||
"display_order": 4,
|
||||
"display_mode": "first_screen_depth_map",
|
||||
"surface_count": 0,
|
||||
"default_visible": false,
|
||||
"runtime_gate_count": 0,
|
||||
"runtime_execution_authorized": false,
|
||||
"scan_authorized": false,
|
||||
"host_change_authorized": false,
|
||||
"source_control_mutation_authorized": false,
|
||||
"action_buttons_allowed": false,
|
||||
"not_authorization": true
|
||||
}
|
||||
],
|
||||
"first_progress_unlock_path_steps": [
|
||||
{
|
||||
"step_id": "owner_response_scope",
|
||||
@@ -442,7 +510,7 @@
|
||||
{
|
||||
"item_id": "workMap",
|
||||
"display_order": 1,
|
||||
"target_anchor": "#iwooos-command-map-board",
|
||||
"target_anchor": "#iwooos-decision-gate-visuals",
|
||||
"display_mode": "first_layer_focus_deck",
|
||||
"anchor_navigation_allowed": true,
|
||||
"execution_action_button_allowed": false,
|
||||
@@ -453,7 +521,7 @@
|
||||
{
|
||||
"item_id": "unlockPath",
|
||||
"display_order": 2,
|
||||
"target_anchor": "#iwooos-first-progress-unlock-path-board",
|
||||
"target_anchor": "#iwooos-decision-gate-visuals",
|
||||
"display_mode": "first_layer_focus_deck",
|
||||
"anchor_navigation_allowed": true,
|
||||
"execution_action_button_allowed": false,
|
||||
@@ -464,7 +532,7 @@
|
||||
{
|
||||
"item_id": "productScope",
|
||||
"display_order": 3,
|
||||
"target_anchor": "#iwooos-global-security-mesh-matrix-board",
|
||||
"target_anchor": "#iwooos-scope-evidence-visuals",
|
||||
"display_mode": "first_layer_focus_deck",
|
||||
"anchor_navigation_allowed": true,
|
||||
"execution_action_button_allowed": false,
|
||||
@@ -475,7 +543,7 @@
|
||||
{
|
||||
"item_id": "hostTools",
|
||||
"display_order": 4,
|
||||
"target_anchor": "#iwooos-host-tool-evidence-chain-board",
|
||||
"target_anchor": "#iwooos-scope-evidence-visuals",
|
||||
"display_mode": "first_layer_focus_deck",
|
||||
"anchor_navigation_allowed": true,
|
||||
"execution_action_button_allowed": false,
|
||||
@@ -486,7 +554,7 @@
|
||||
{
|
||||
"item_id": "sourceControl",
|
||||
"display_order": 5,
|
||||
"target_anchor": "#iwooos-command-map-source-control",
|
||||
"target_anchor": "#iwooos-decision-gate-visuals",
|
||||
"display_mode": "first_layer_focus_deck",
|
||||
"anchor_navigation_allowed": true,
|
||||
"execution_action_button_allowed": false,
|
||||
|
||||
@@ -2341,6 +2341,18 @@
|
||||
"runtime_delta": false,
|
||||
"execution_authorized": false,
|
||||
"not_authorization": true
|
||||
},
|
||||
{
|
||||
"delta_id": "s2_156_iwooos_first_screen_depth_map",
|
||||
"display_order": 185,
|
||||
"completed_stage": "S2.156 IwoooS 首屏深度地圖與證據語義校正",
|
||||
"progress_axis": "framework_detail",
|
||||
"headline_percent_delta": 0,
|
||||
"framework_delta_visible": true,
|
||||
"why_headline_unchanged": "IwoooS 只新增首屏深度地圖,把首屏可見、進階圖表、證據台帳與執行期邊界拆成四層,並補上 default_visible=false 的證據語義,避免把已收合的決策跑道、命令地圖、主機工具鏈或 VibeWork 區塊誤讀成預設展開;iwooos_first_screen_depth_map_layer_count=4、iwooos_first_screen_depth_map_visible_layer_count=4、iwooos_first_screen_depth_map_advanced_group_count=2、iwooos_first_screen_depth_map_ledger_group_count=4、iwooos_first_screen_depth_map_runtime_gate_count=0、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false,不把深度地圖當掃描、修復、部署、主機更新、版本來源切換、GitHub primary 切換或 Gitea 停用。",
|
||||
"runtime_delta": false,
|
||||
"execution_authorized": false,
|
||||
"not_authorization": true
|
||||
}
|
||||
],
|
||||
"next_safe_actions": [
|
||||
|
||||
@@ -744,6 +744,7 @@ def validate(root: Path) -> None:
|
||||
"s2_153_iwooos_executive_snapshot",
|
||||
"s2_154_iwooos_first_screen_language_polish",
|
||||
"s2_155_iwooos_first_layer_progressive_disclosure",
|
||||
"s2_156_iwooos_first_screen_depth_map",
|
||||
]
|
||||
assert_equal(
|
||||
"progress_delta_ledger.delta_ids",
|
||||
@@ -1613,6 +1614,43 @@ def validate(root: Path) -> None:
|
||||
iwooos_projection["summary"]["all_product_coverage_snapshot_runtime_ready_count"],
|
||||
0,
|
||||
)
|
||||
assert_true(
|
||||
"iwooos_projection.summary.first_screen_depth_map_first_layer",
|
||||
iwooos_projection["summary"]["first_screen_depth_map_first_layer"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.first_screen_depth_map_layer_count",
|
||||
iwooos_projection["summary"]["first_screen_depth_map_layer_count"],
|
||||
4,
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.first_screen_depth_map_visible_layer_count",
|
||||
iwooos_projection["summary"]["first_screen_depth_map_visible_layer_count"],
|
||||
4,
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.first_screen_depth_map_advanced_group_count",
|
||||
iwooos_projection["summary"]["first_screen_depth_map_advanced_group_count"],
|
||||
2,
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.first_screen_depth_map_ledger_group_count",
|
||||
iwooos_projection["summary"]["first_screen_depth_map_ledger_group_count"],
|
||||
4,
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.first_screen_depth_map_runtime_gate_count",
|
||||
iwooos_projection["summary"]["first_screen_depth_map_runtime_gate_count"],
|
||||
0,
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.first_screen_depth_map_advanced_default_visible",
|
||||
iwooos_projection["summary"]["first_screen_depth_map_advanced_default_visible"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.first_screen_depth_map_scope_evidence_default_visible",
|
||||
iwooos_projection["summary"]["first_screen_depth_map_scope_evidence_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.all_product_coverage_snapshot_default_summary_mode",
|
||||
iwooos_projection["summary"]["all_product_coverage_snapshot_default_summary_mode"],
|
||||
@@ -1622,7 +1660,7 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.first_progress_unlock_path_first_layer",
|
||||
iwooos_projection["summary"]["first_progress_unlock_path_first_layer"],
|
||||
)
|
||||
assert_true(
|
||||
assert_false(
|
||||
"iwooos_projection.summary.first_progress_unlock_path_default_visible",
|
||||
iwooos_projection["summary"]["first_progress_unlock_path_default_visible"],
|
||||
)
|
||||
@@ -1658,6 +1696,10 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.command_map_first_layer",
|
||||
iwooos_projection["summary"]["command_map_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.command_map_default_visible",
|
||||
iwooos_projection["summary"]["command_map_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.command_map_mode_count",
|
||||
iwooos_projection["summary"]["command_map_mode_count"],
|
||||
@@ -1832,6 +1874,10 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.decision_runway_first_layer",
|
||||
iwooos_projection["summary"]["decision_runway_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.decision_runway_default_visible",
|
||||
iwooos_projection["summary"]["decision_runway_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.decision_runway_step_count",
|
||||
iwooos_projection["summary"]["decision_runway_step_count"],
|
||||
@@ -1879,6 +1925,10 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.gate_radar_first_layer",
|
||||
iwooos_projection["summary"]["gate_radar_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.gate_radar_default_visible",
|
||||
iwooos_projection["summary"]["gate_radar_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.gate_radar_lane_count",
|
||||
iwooos_projection["summary"]["gate_radar_lane_count"],
|
||||
@@ -1910,6 +1960,10 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.global_security_mesh_matrix_first_layer",
|
||||
iwooos_projection["summary"]["global_security_mesh_matrix_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.global_security_mesh_matrix_default_visible",
|
||||
iwooos_projection["summary"]["global_security_mesh_matrix_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.global_security_mesh_matrix_asset_count",
|
||||
iwooos_projection["summary"]["global_security_mesh_matrix_asset_count"],
|
||||
@@ -1929,6 +1983,10 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.host_tool_evidence_chain_first_layer",
|
||||
iwooos_projection["summary"]["host_tool_evidence_chain_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.host_tool_evidence_chain_default_visible",
|
||||
iwooos_projection["summary"]["host_tool_evidence_chain_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.host_tool_evidence_chain_host_count",
|
||||
iwooos_projection["summary"]["host_tool_evidence_chain_host_count"],
|
||||
@@ -1948,6 +2006,10 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.vibework_security_onboarding_first_layer",
|
||||
iwooos_projection["summary"]["vibework_security_onboarding_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.vibework_security_onboarding_default_visible",
|
||||
iwooos_projection["summary"]["vibework_security_onboarding_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.vibework_security_onboarding_item_count",
|
||||
iwooos_projection["summary"]["vibework_security_onboarding_item_count"],
|
||||
@@ -2326,10 +2388,18 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.visual_command_dashboard_first_layer",
|
||||
iwooos_projection["summary"]["visual_command_dashboard_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.visual_command_dashboard_default_visible",
|
||||
iwooos_projection["summary"]["visual_command_dashboard_default_visible"],
|
||||
)
|
||||
assert_true(
|
||||
"iwooos_projection.summary.professional_security_experience_first_layer",
|
||||
iwooos_projection["summary"]["professional_security_experience_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.professional_security_experience_default_visible",
|
||||
iwooos_projection["summary"]["professional_security_experience_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.professional_security_experience_tab_count",
|
||||
iwooos_projection["summary"]["professional_security_experience_tab_count"],
|
||||
@@ -2354,6 +2424,10 @@ def validate(root: Path) -> None:
|
||||
"iwooos_projection.summary.concrete_work_snapshot_first_layer",
|
||||
iwooos_projection["summary"]["concrete_work_snapshot_first_layer"],
|
||||
)
|
||||
assert_false(
|
||||
"iwooos_projection.summary.concrete_work_snapshot_default_visible",
|
||||
iwooos_projection["summary"]["concrete_work_snapshot_default_visible"],
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.summary.concrete_work_snapshot_workstream_count",
|
||||
iwooos_projection["summary"]["concrete_work_snapshot_workstream_count"],
|
||||
@@ -12329,6 +12403,110 @@ def validate(root: Path) -> None:
|
||||
iwooos_projection_page,
|
||||
text,
|
||||
)
|
||||
expected_first_screen_depth_map_layer_ids = [
|
||||
"visible",
|
||||
"advanced",
|
||||
"ledger",
|
||||
"runtime",
|
||||
]
|
||||
first_screen_depth_map_layers = iwooos_projection["first_screen_depth_map_layers"]
|
||||
assert_equal(
|
||||
"iwooos_projection.first_screen_depth_map_layers.ids",
|
||||
[item["layer_id"] for item in first_screen_depth_map_layers],
|
||||
expected_first_screen_depth_map_layer_ids,
|
||||
)
|
||||
assert_equal(
|
||||
"iwooos_projection.first_screen_depth_map_layers.display_order",
|
||||
[item["display_order"] for item in first_screen_depth_map_layers],
|
||||
list(range(1, len(expected_first_screen_depth_map_layer_ids) + 1)),
|
||||
)
|
||||
first_screen_depth_surface_counts = {
|
||||
item["layer_id"]: item["surface_count"] for item in first_screen_depth_map_layers
|
||||
}
|
||||
assert_equal("iwooos_projection.first_screen_depth_map_layers.visible.surface_count", first_screen_depth_surface_counts["visible"], 4)
|
||||
assert_equal("iwooos_projection.first_screen_depth_map_layers.advanced.surface_count", first_screen_depth_surface_counts["advanced"], 2)
|
||||
assert_equal("iwooos_projection.first_screen_depth_map_layers.ledger.surface_count", first_screen_depth_surface_counts["ledger"], 4)
|
||||
assert_equal("iwooos_projection.first_screen_depth_map_layers.runtime.surface_count", first_screen_depth_surface_counts["runtime"], 0)
|
||||
for item in first_screen_depth_map_layers:
|
||||
layer_id = item["layer_id"]
|
||||
assert_equal(
|
||||
f"iwooos_projection.first_screen_depth_map_layers.{layer_id}.display_mode",
|
||||
item["display_mode"],
|
||||
"first_screen_depth_map",
|
||||
)
|
||||
assert_equal(
|
||||
f"iwooos_projection.first_screen_depth_map_layers.{layer_id}.default_visible",
|
||||
item["default_visible"],
|
||||
layer_id == "visible",
|
||||
)
|
||||
assert_equal(
|
||||
f"iwooos_projection.first_screen_depth_map_layers.{layer_id}.runtime_gate_count",
|
||||
item["runtime_gate_count"],
|
||||
0,
|
||||
)
|
||||
assert_false(
|
||||
f"iwooos_projection.first_screen_depth_map_layers.{layer_id}.runtime_execution_authorized",
|
||||
item["runtime_execution_authorized"],
|
||||
)
|
||||
assert_false(
|
||||
f"iwooos_projection.first_screen_depth_map_layers.{layer_id}.action_buttons_allowed",
|
||||
item["action_buttons_allowed"],
|
||||
)
|
||||
assert_true(
|
||||
f"iwooos_projection.first_screen_depth_map_layers.{layer_id}.not_authorization",
|
||||
item["not_authorization"],
|
||||
)
|
||||
runtime_depth_layer = next(item for item in first_screen_depth_map_layers if item["layer_id"] == "runtime")
|
||||
for flag in ["scan_authorized", "host_change_authorized", "source_control_mutation_authorized"]:
|
||||
assert_false(
|
||||
f"iwooos_projection.first_screen_depth_map_layers.runtime.{flag}",
|
||||
runtime_depth_layer[flag],
|
||||
)
|
||||
for text in [
|
||||
'data-testid="iwooos-first-screen-depth-map-board"',
|
||||
'data-testid="iwooos-first-screen-depth-map-layers"',
|
||||
'data-testid="iwooos-first-screen-depth-map-flow"',
|
||||
'data-testid="iwooos-first-screen-depth-map-boundaries"',
|
||||
"IwoooSFirstScreenDepthMapBoard",
|
||||
"firstScreenDepthLayers",
|
||||
"firstScreenDepthBoundaries",
|
||||
"href: '#iwooos-decision-gate-visuals'",
|
||||
"href: '#iwooos-scope-evidence-visuals'",
|
||||
]:
|
||||
assert_text_contains(
|
||||
"iwooos_page.first_screen_depth_map",
|
||||
iwooos_projection_page,
|
||||
text,
|
||||
)
|
||||
assert_text_before(
|
||||
"iwooos_page.focus_deck_before_first_screen_depth_map",
|
||||
iwooos_projection_page,
|
||||
"<IwoooSFocusDeckBoard />",
|
||||
"<IwoooSFirstScreenDepthMapBoard />",
|
||||
)
|
||||
assert_text_before(
|
||||
"iwooos_page.first_screen_depth_map_before_immediate_visual_mesh",
|
||||
iwooos_projection_page,
|
||||
"<IwoooSFirstScreenDepthMapBoard />",
|
||||
"<IwoooSImmediateVisualMeshBoard />",
|
||||
)
|
||||
for text in [
|
||||
"iwooos_first_screen_depth_map_visible_layer_count=4",
|
||||
"iwooos_first_screen_depth_map_advanced_group_count=2",
|
||||
"iwooos_first_screen_depth_map_ledger_group_count=4",
|
||||
"iwooos_first_screen_depth_map_runtime_gate_count=0",
|
||||
"iwooos_first_screen_depth_map_advanced_default_visible=false",
|
||||
"iwooos_first_screen_depth_map_scope_evidence_default_visible=false",
|
||||
"runtime_execution_authorized=false",
|
||||
"active_runtime_gate_count=0",
|
||||
"action_buttons_allowed=false",
|
||||
"not_authorization=true",
|
||||
]:
|
||||
assert_text_contains(
|
||||
"iwooos_page.first_screen_depth_map_boundary",
|
||||
iwooos_projection_page,
|
||||
text,
|
||||
)
|
||||
assert_text_contains(
|
||||
"iwooos_page.focus_deck_testid",
|
||||
iwooos_projection_page,
|
||||
|
||||
Reference in New Issue
Block a user