diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index e0a965e05..e77cdfe39 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -5025,7 +5025,11 @@ }, "websites": { "title": "網站入口", - "caption": "六類產品先只讀套用" + "caption": "七類產品先只讀套用" + }, + "vibeWork": { + "title": "VibeWork", + "caption": "新專案只讀納管" }, "kali112": { "title": "Kali 112", @@ -5087,7 +5091,7 @@ "nodes": { "publicWeb": { "title": "網站入口", - "state": "6/6" + "state": "7/7" }, "apiRuntime": { "title": "API / Runtime", @@ -5146,6 +5150,10 @@ "title": "網站群", "caption": "先只讀套用資安態勢" }, + "vibeWork": { + "title": "VibeWork", + "caption": "新專案先只讀納管" + }, "kali112": { "title": "Kali 112", "caption": "維護窗口待人工確認" @@ -5268,11 +5276,11 @@ "summary": { "scopeCount": { "label": "產品範圍", - "detail": "核心、網站、版本來源、主機、工具、未來產品六類。" + "detail": "核心、網站、版本來源、主機、工具、VibeWork、未來產品七類。" }, "readOnlyScopes": { "label": "只讀已套", - "detail": "六類都先套只讀治理與低摩擦可視化。" + "detail": "七類都先套只讀治理與低摩擦可視化。" }, "runtimeReady": { "label": "runtime 就緒", @@ -5289,6 +5297,7 @@ "waitingEvidence": "待證據", "approvalRequired": "待批准", "readOnlyFirst": "只讀先行", + "newProjectReadOnly": "新專案只讀", "templateReady": "模板就緒" }, "items": { @@ -5312,6 +5321,10 @@ "title": "監控、工具與自動化", "body": "只顯示 僅中繼資料證據、阻塞解除條件與人工 閘門。" }, + "vibeWork": { + "title": "VibeWork 新專案", + "body": "已納入 IwoooS 只讀資安框架、繁中可視化、人工 Gate 與 false runtime flag。" + }, "futureProducts": { "title": "未來新增產品", "body": "預設繼承只讀 governance、繁中可視化與分階段收斂。" @@ -9385,6 +9398,12 @@ "next": "先讓工具輸出 僅中繼資料證據,再接 reviewer 與 執行期閘門。", "boundary": "不得讓工具自動觸發修復、部署、機密 收集或外部付費變更。" }, + "vibeWork": { + "title": "VibeWork 新專案", + "current": "已納入全產品三軸進度、IwoooS 可視化、只讀 governance 與人工 Gate 口徑。", + "next": "先補產品 owner、資料分級、版本來源與部署邊界,再評估後續分階段收嚴。", + "boundary": "不得因新專案納管就自動掃描、部署、改 repo、改 workflow 或套 blocking enforcement。" + }, "futureProducts": { "title": "未來新增專案與產品", "current": "預設繼承三軸進度、繁中可視化、只讀 governance 與低摩擦收斂節奏。", @@ -9395,7 +9414,7 @@ }, "productRolloutWaveLedger": { "title": "全產品分階段套用台帳", - "subtitle": "S2.127 把「所有專案產品都套用」轉成六個 分階段套用 wave:先套只讀可視化與證據欄位,再依 owner evidence、人工審查與 執行期閘門 分段收嚴。這仍是產品套用台帳,不是掃描、修復、部署或主機操作入口。", + "subtitle": "S2.127 把「所有專案產品都套用」轉成七個 分階段套用 wave,並把 VibeWork 新專案納入只讀波次:先套只讀可視化與證據欄位,再依 owner evidence、人工審查與 執行期閘門 分段收嚴。這仍是產品套用台帳,不是掃描、修復、部署或主機操作入口。", "waveLabel": "波次", "allowedLabel": "目前可做", "beforeRuntimeLabel": "進 runtime 前", @@ -9405,7 +9424,7 @@ "summary": { "waves": { "label": "套用波次", - "detail": "六個波次覆蓋核心產品、網站、版本來源、主機、工具與未來產品。" + "detail": "七個波次覆蓋核心產品、網站、版本來源、主機、工具、VibeWork 與未來產品。" }, "current": { "label": "目前波次", @@ -9451,6 +9470,12 @@ "beforeRuntime": "需要工具輸出通過 redaction / retention / reviewer checks,且 owner 接受後才接 執行期閘門。", "forbidden": "不得由工具自動觸發修復、部署、付費 provider 變更、機密 收集或外部送出。" }, + "vibeWorkProject": { + "title": "VibeWork 新專案波次", + "allowed": "先顯示新專案已納入 IwoooS,只讀治理、繁中 UI、owner evidence 欄位與 false runtime flag。", + "beforeRuntime": "需要產品 owner、資料分級、版本來源、部署邊界、回復條件與逐階段審查。", + "forbidden": "不得讓 VibeWork 一納管就觸發掃描、主機操作、repo / refs / workflow 變更或 production deploy。" + }, "futureTemplate": { "title": "未來產品模板波次", "allowed": "新專案預設繼承三軸進度、繁中 UI、只讀 governance、false runtime flag。", @@ -9461,7 +9486,7 @@ }, "productRolloutAcceptanceGates": { "title": "全產品 分階段套用 波次驗收門檻", - "subtitle": "S2.128 把 S2.127 的六個產品波次再補上驗收門檻:每個波次都要先通過只讀證據、owner evidence、脫敏審查、版本來源證明、主機安全窗口與 回復 / disable 條件,才可能被列入後續 runtime 候選。這仍是驗收門檻可視化,不是批准或執行。", + "subtitle": "S2.128 把 S2.127 的七個產品波次再補上六個驗收門檻:每個波次都要先通過只讀證據、owner evidence、脫敏審查、版本來源證明、主機安全窗口與 回復 / disable 條件,才可能被列入後續 runtime 候選。這仍是驗收門檻可視化,不是批准或執行。", "gateLabel": "門檻", "requiredEvidenceLabel": "需要證據", "acceptanceSignalLabel": "驗收訊號", @@ -11328,7 +11353,7 @@ }, "allProducts": { "title": "所有產品先套只讀框架", - "body": "核心產品、公開網站、版本來源、主機、監控工具與未來產品六類都已套用 IwoooS 可視化與人工 Gate 口徑。" + "body": "核心產品、公開網站、版本來源、主機、監控工具、VibeWork 與未來產品七類都已套用 IwoooS 可視化與人工 Gate 口徑。" }, "runtime": { "title": "執行期仍保持關閉", diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index e0a965e05..e77cdfe39 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -5025,7 +5025,11 @@ }, "websites": { "title": "網站入口", - "caption": "六類產品先只讀套用" + "caption": "七類產品先只讀套用" + }, + "vibeWork": { + "title": "VibeWork", + "caption": "新專案只讀納管" }, "kali112": { "title": "Kali 112", @@ -5087,7 +5091,7 @@ "nodes": { "publicWeb": { "title": "網站入口", - "state": "6/6" + "state": "7/7" }, "apiRuntime": { "title": "API / Runtime", @@ -5146,6 +5150,10 @@ "title": "網站群", "caption": "先只讀套用資安態勢" }, + "vibeWork": { + "title": "VibeWork", + "caption": "新專案先只讀納管" + }, "kali112": { "title": "Kali 112", "caption": "維護窗口待人工確認" @@ -5268,11 +5276,11 @@ "summary": { "scopeCount": { "label": "產品範圍", - "detail": "核心、網站、版本來源、主機、工具、未來產品六類。" + "detail": "核心、網站、版本來源、主機、工具、VibeWork、未來產品七類。" }, "readOnlyScopes": { "label": "只讀已套", - "detail": "六類都先套只讀治理與低摩擦可視化。" + "detail": "七類都先套只讀治理與低摩擦可視化。" }, "runtimeReady": { "label": "runtime 就緒", @@ -5289,6 +5297,7 @@ "waitingEvidence": "待證據", "approvalRequired": "待批准", "readOnlyFirst": "只讀先行", + "newProjectReadOnly": "新專案只讀", "templateReady": "模板就緒" }, "items": { @@ -5312,6 +5321,10 @@ "title": "監控、工具與自動化", "body": "只顯示 僅中繼資料證據、阻塞解除條件與人工 閘門。" }, + "vibeWork": { + "title": "VibeWork 新專案", + "body": "已納入 IwoooS 只讀資安框架、繁中可視化、人工 Gate 與 false runtime flag。" + }, "futureProducts": { "title": "未來新增產品", "body": "預設繼承只讀 governance、繁中可視化與分階段收斂。" @@ -9385,6 +9398,12 @@ "next": "先讓工具輸出 僅中繼資料證據,再接 reviewer 與 執行期閘門。", "boundary": "不得讓工具自動觸發修復、部署、機密 收集或外部付費變更。" }, + "vibeWork": { + "title": "VibeWork 新專案", + "current": "已納入全產品三軸進度、IwoooS 可視化、只讀 governance 與人工 Gate 口徑。", + "next": "先補產品 owner、資料分級、版本來源與部署邊界,再評估後續分階段收嚴。", + "boundary": "不得因新專案納管就自動掃描、部署、改 repo、改 workflow 或套 blocking enforcement。" + }, "futureProducts": { "title": "未來新增專案與產品", "current": "預設繼承三軸進度、繁中可視化、只讀 governance 與低摩擦收斂節奏。", @@ -9395,7 +9414,7 @@ }, "productRolloutWaveLedger": { "title": "全產品分階段套用台帳", - "subtitle": "S2.127 把「所有專案產品都套用」轉成六個 分階段套用 wave:先套只讀可視化與證據欄位,再依 owner evidence、人工審查與 執行期閘門 分段收嚴。這仍是產品套用台帳,不是掃描、修復、部署或主機操作入口。", + "subtitle": "S2.127 把「所有專案產品都套用」轉成七個 分階段套用 wave,並把 VibeWork 新專案納入只讀波次:先套只讀可視化與證據欄位,再依 owner evidence、人工審查與 執行期閘門 分段收嚴。這仍是產品套用台帳,不是掃描、修復、部署或主機操作入口。", "waveLabel": "波次", "allowedLabel": "目前可做", "beforeRuntimeLabel": "進 runtime 前", @@ -9405,7 +9424,7 @@ "summary": { "waves": { "label": "套用波次", - "detail": "六個波次覆蓋核心產品、網站、版本來源、主機、工具與未來產品。" + "detail": "七個波次覆蓋核心產品、網站、版本來源、主機、工具、VibeWork 與未來產品。" }, "current": { "label": "目前波次", @@ -9451,6 +9470,12 @@ "beforeRuntime": "需要工具輸出通過 redaction / retention / reviewer checks,且 owner 接受後才接 執行期閘門。", "forbidden": "不得由工具自動觸發修復、部署、付費 provider 變更、機密 收集或外部送出。" }, + "vibeWorkProject": { + "title": "VibeWork 新專案波次", + "allowed": "先顯示新專案已納入 IwoooS,只讀治理、繁中 UI、owner evidence 欄位與 false runtime flag。", + "beforeRuntime": "需要產品 owner、資料分級、版本來源、部署邊界、回復條件與逐階段審查。", + "forbidden": "不得讓 VibeWork 一納管就觸發掃描、主機操作、repo / refs / workflow 變更或 production deploy。" + }, "futureTemplate": { "title": "未來產品模板波次", "allowed": "新專案預設繼承三軸進度、繁中 UI、只讀 governance、false runtime flag。", @@ -9461,7 +9486,7 @@ }, "productRolloutAcceptanceGates": { "title": "全產品 分階段套用 波次驗收門檻", - "subtitle": "S2.128 把 S2.127 的六個產品波次再補上驗收門檻:每個波次都要先通過只讀證據、owner evidence、脫敏審查、版本來源證明、主機安全窗口與 回復 / disable 條件,才可能被列入後續 runtime 候選。這仍是驗收門檻可視化,不是批准或執行。", + "subtitle": "S2.128 把 S2.127 的七個產品波次再補上六個驗收門檻:每個波次都要先通過只讀證據、owner evidence、脫敏審查、版本來源證明、主機安全窗口與 回復 / disable 條件,才可能被列入後續 runtime 候選。這仍是驗收門檻可視化,不是批准或執行。", "gateLabel": "門檻", "requiredEvidenceLabel": "需要證據", "acceptanceSignalLabel": "驗收訊號", @@ -11328,7 +11353,7 @@ }, "allProducts": { "title": "所有產品先套只讀框架", - "body": "核心產品、公開網站、版本來源、主機、監控工具與未來產品六類都已套用 IwoooS 可視化與人工 Gate 口徑。" + "body": "核心產品、公開網站、版本來源、主機、監控工具、VibeWork 與未來產品七類都已套用 IwoooS 可視化與人工 Gate 口徑。" }, "runtime": { "title": "執行期仍保持關閉", diff --git a/apps/web/src/app/[locale]/iwooos/page.tsx b/apps/web/src/app/[locale]/iwooos/page.tsx index 2d0e701fa..5ff62ed75 100644 --- a/apps/web/src/app/[locale]/iwooos/page.tsx +++ b/apps/web/src/app/[locale]/iwooos/page.tsx @@ -695,7 +695,7 @@ const postureMetrics: PostureMetric[] = [ const fastProgressItems: FastProgressItem[] = [ { key: 'done', value: '7 頁', icon: CheckCircle2, tone: 'steady' }, { key: 'kali112', value: '只讀通過', icon: ShieldCheck, tone: 'warn' }, - { key: 'allProducts', value: '6 / 6', icon: Radar, tone: 'steady' }, + { key: 'allProducts', value: '7 / 7', icon: Radar, tone: 'steady' }, { key: 'runtime', value: 'Gate 0', icon: Lock, tone: 'locked' }, ] @@ -707,7 +707,8 @@ const visualDashboardMetrics: VisualDashboardMetric[] = [ const visualDashboardNodes: VisualDashboardNode[] = [ { key: 'awoooiCore', state: 'OK', icon: ShieldCheck, tone: 'steady' }, - { key: 'websites', state: '6/6', icon: Radar, tone: 'steady' }, + { key: 'websites', state: '7/7', icon: Radar, tone: 'steady' }, + { key: 'vibeWork', state: '新專案', icon: FileText, tone: 'warn' }, { key: 'kali112', state: '112', icon: Activity, tone: 'warn' }, { key: 'devHosts', state: '2', icon: ListChecks, tone: 'warn' }, { key: 'githubPrimary', state: '0', icon: GitBranch, tone: 'locked' }, @@ -741,6 +742,7 @@ const assetHeatCells: AssetHeatCell[] = [ { key: 'awooop', level: '低', tone: 'steady' }, { key: 'iwooos', level: '低', tone: 'steady' }, { key: 'websites', level: '中', tone: 'warn' }, + { key: 'vibeWork', level: '待', tone: 'warn' }, { key: 'kali112', level: '中', tone: 'warn' }, { key: 'devHosts', level: '中', tone: 'warn' }, { key: 'githubPrimary', level: '待', tone: 'locked' }, @@ -756,8 +758,8 @@ const responseFlowSteps: ResponseFlowStep[] = [ ] const allProductCoverageSnapshotSummary = [ - { key: 'scopeCount', value: '6', icon: ListChecks, tone: 'steady' }, - { key: 'readOnlyScopes', value: '6', icon: ShieldCheck, tone: 'steady' }, + { key: 'scopeCount', value: '7', icon: ListChecks, tone: 'steady' }, + { key: 'readOnlyScopes', value: '7', icon: ShieldCheck, tone: 'steady' }, { key: 'runtimeReady', value: '0', icon: Lock, tone: 'locked' }, { key: 'nextGate', value: 'S4.9', icon: ClipboardCheck, tone: 'warn' }, ] as const @@ -768,16 +770,19 @@ const allProductCoverageSnapshotItems: AllProductCoverageSnapshotItem[] = [ { key: 'sourceControl', scope: 'P3', stateKey: 'waitingEvidence', icon: GitBranch, tone: 'warn' }, { key: 'hosts', scope: 'P4', stateKey: 'approvalRequired', icon: Activity, tone: 'warn' }, { key: 'toolsMonitoring', scope: 'P5', stateKey: 'readOnlyFirst', icon: Radar, tone: 'steady' }, - { key: 'futureProducts', scope: 'P6', stateKey: 'templateReady', icon: FileText, tone: 'warn' }, + { key: 'vibeWork', scope: 'P6', stateKey: 'newProjectReadOnly', icon: FileText, tone: 'warn' }, + { key: 'futureProducts', scope: 'P7', stateKey: 'templateReady', icon: ListChecks, tone: 'warn' }, ] const allProductCoverageSnapshotBoundaries = [ - 'iwooos_all_product_coverage_snapshot_scope_count=6', - 'iwooos_all_product_coverage_snapshot_read_only_count=6', + 'iwooos_all_product_coverage_snapshot_scope_count=7', + 'iwooos_all_product_coverage_snapshot_read_only_count=7', 'iwooos_all_product_coverage_snapshot_runtime_ready_count=0', 'iwooos_all_product_coverage_snapshot_default_summary_mode=compact_first', 'iwooos_all_product_coverage_snapshot_detail_ledger_collapsed=true', 'iwooos_all_product_coverage_snapshot_next_gate=s4_9_owner_response_accepted', + 'vibework_project_read_only_in_scope=true', + 'vibework_runtime_ready=false', 'runtime_execution_authorized=false', 'active_runtime_gate_count=0', 'action_buttons_allowed=false', @@ -1356,15 +1361,18 @@ const iwooosThreeAxisProductProgressItems = [ { key: 'sourceControl', scope: 'P3', state: '待證據', icon: GitBranch, tone: 'warn' }, { key: 'hosts', scope: 'P4', state: '待授權', icon: Activity, tone: 'warn' }, { key: 'toolsMonitoring', scope: 'P5', state: '只讀先行', icon: Radar, tone: 'steady' }, - { key: 'futureProducts', scope: 'P6', state: '分階段', icon: ListChecks, tone: 'warn' }, + { key: 'vibeWork', scope: 'P6', state: '新專案只讀', icon: FileText, tone: 'warn' }, + { key: 'futureProducts', scope: 'P7', state: '分階段', icon: ListChecks, tone: 'warn' }, ] as const const iwooosThreeAxisProductProgressBoundaries = [ 'iwooos_three_axis_progress_headline_percent=61', 'iwooos_three_axis_progress_framework_percent=86-88', 'iwooos_three_axis_progress_runtime_percent=40-45', - 'iwooos_three_axis_progress_product_scope_count=6', + 'iwooos_three_axis_progress_product_scope_count=7', 'iwooos_three_axis_progress_all_products_read_only=true', + 'iwooos_three_axis_progress_vibework_read_only_in_scope=true', + 'iwooos_three_axis_progress_vibework_runtime_ready=false', 'iwooos_three_axis_progress_runtime_product_rollout_count=0', 'iwooos_three_axis_progress_first_runtime_gate=s4_9_owner_response_accepted', 'iwooos_three_axis_progress_owner_response_accepted_count=0', @@ -1385,7 +1393,7 @@ const iwooosThreeAxisProductProgressBoundaries = [ ] as const const iwooosProductRolloutWaveLedgerSummary = [ - { key: 'waves', value: '6', icon: ListChecks, tone: 'steady' }, + { key: 'waves', value: '7', icon: ListChecks, tone: 'steady' }, { key: 'current', value: '只讀波次', icon: ShieldCheck, tone: 'steady' }, { key: 'runtime', value: '0', icon: Lock, tone: 'locked' }, { key: 'nextGate', value: 'S4.9', icon: ClipboardCheck, tone: 'warn' }, @@ -1397,13 +1405,16 @@ const iwooosProductRolloutWaveLedgerItems = [ { key: 'sourceControl', wave: 'W2', state: '等證據', icon: GitBranch, tone: 'warn' }, { key: 'hostCoverage', wave: 'W3', state: '等授權', icon: Activity, tone: 'warn' }, { key: 'monitoringTools', wave: 'W4', state: '只讀輸出', icon: Radar, tone: 'steady' }, - { key: 'futureTemplate', wave: 'W5', state: '預設套用', icon: FileText, tone: 'warn' }, + { key: 'vibeWorkProject', wave: 'W5', state: '新專案只讀', icon: FileText, tone: 'warn' }, + { key: 'futureTemplate', wave: 'W6', state: '預設套用', icon: ListChecks, tone: 'warn' }, ] as const const iwooosProductRolloutWaveLedgerBoundaries = [ - 'iwooos_product_rollout_wave_count=6', - 'iwooos_product_rollout_all_products_count=6', + 'iwooos_product_rollout_wave_count=7', + 'iwooos_product_rollout_all_products_count=7', 'iwooos_product_rollout_current_wave=read_only_visibility', + 'iwooos_product_rollout_vibework_project_wave=read_only_visibility', + 'iwooos_product_rollout_vibework_runtime_ready=false', 'iwooos_product_rollout_runtime_wave_count=0', 'iwooos_product_rollout_enforcement_wave_count=0', 'iwooos_product_rollout_owner_response_accepted_count=0', diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 3dcadf923..28d9c655b 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,29 @@ +## 2026-05-31|IwoooS 納入 VibeWork 新專案只讀資安範圍 + +**背景**: + +- 使用者新增 `VibeWork` 專案,要求一併納入整體資訊安全機制。 +- 本輪維持 Gate 0 與低摩擦策略:只做前端可視化、snapshot 與 guard 納管,不啟動掃描、主機變更、repo / refs / workflow 變更、部署按鈕或 runtime enforcement。 + +**本次調整**: + +- `/zh-TW/iwooos` 將全產品資安範圍由六類更新為七類,新增 `VibeWork` 新專案。 +- 指揮板新增 VibeWork 節點;專業資安視覺層的資產熱區新增 VibeWork cell,狀態為「待 / 新專案先只讀納管」。 +- 全產品只讀套用快照、三軸產品進度、分階段套用台帳皆新增 VibeWork: + - `iwooos_all_product_coverage_snapshot_scope_count=7` + - `iwooos_all_product_coverage_snapshot_read_only_count=7` + - `vibework_project_read_only_in_scope=true` + - `vibework_runtime_ready=false` + - `iwooos_three_axis_progress_product_scope_count=7` + - `iwooos_product_rollout_wave_count=7` +- `apps/web/messages/en.json` 繼續完整鏡像 `zh-TW.json`,網站內容維持繁體中文。 +- `docs/security/iwooos-posture-projection.snapshot.json` 與 `scripts/security/security-mirror-progress-guard.py` 同步 guard,避免後續又退回六類。 + +**進度邊界**: + +- headline 仍維持 `61%`;這是產品範圍納管與可視化前進,不是 runtime 開閘。 +- VibeWork 目前是只讀納管:沒有掃描、沒有修復、沒有部署、沒有 source-control mutation、沒有主機操作。 + ## 2026-05-31|Tickets 接上 Incident 真相鏈與處理時間線 **背景**: diff --git a/docs/security/iwooos-posture-projection.snapshot.json b/docs/security/iwooos-posture-projection.snapshot.json index b15b20925..7a4987953 100644 --- a/docs/security/iwooos-posture-projection.snapshot.json +++ b/docs/security/iwooos-posture-projection.snapshot.json @@ -32,12 +32,12 @@ "approval_queue_total": 8, "pending_approval_count": 7, "block_candidate_count": 1, - "visual_command_dashboard_widget_count": 13, + "visual_command_dashboard_widget_count": 14, "visual_command_dashboard_first_layer": true, "professional_security_experience_first_layer": true, "professional_security_experience_tab_count": 3, "professional_security_experience_attack_path_node_count": 6, - "professional_security_experience_asset_heat_cell_count": 8, + "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_workstream_count": 6, @@ -47,8 +47,8 @@ "github_primary_ready_count": 0, "source_control_primary_readiness_item_count": 6, "action_buttons_allowed": false, - "all_product_coverage_snapshot_scope_count": 6, - "all_product_coverage_snapshot_read_only_count": 6, + "all_product_coverage_snapshot_scope_count": 7, + "all_product_coverage_snapshot_read_only_count": 7, "all_product_coverage_snapshot_runtime_ready_count": 0, "all_product_coverage_snapshot_default_summary_mode": "compact_first", "all_product_coverage_snapshot_detail_ledger_collapsed": true, diff --git a/scripts/security/security-mirror-progress-guard.py b/scripts/security/security-mirror-progress-guard.py index a269d8fdf..2bdf4afe5 100755 --- a/scripts/security/security-mirror-progress-guard.py +++ b/scripts/security/security-mirror-progress-guard.py @@ -256,7 +256,7 @@ def validate(root: Path) -> None: list(web_messages_zh["iwooos"]["visualCommandDashboard"]["metrics"].keys()), key, ) - for key in ["awoooiCore", "websites", "kali112", "devHosts", "githubPrimary", "runtimeGate"]: + for key in ["awoooiCore", "websites", "vibeWork", "kali112", "devHosts", "githubPrimary", "runtimeGate"]: assert_contains( "web_messages.zh-TW.iwooos.visualCommandDashboard.nodes", list(web_messages_zh["iwooos"]["visualCommandDashboard"]["nodes"].keys()), @@ -309,7 +309,17 @@ def validate(root: Path) -> None: list(web_messages_zh["iwooos"]["professionalSecurityExperience"]["attackPath"]["nodes"].keys()), key, ) - for key in ["awoooi", "awooop", "iwooos", "websites", "kali112", "devHosts", "githubPrimary", "runtimeActions"]: + for key in [ + "awoooi", + "awooop", + "iwooos", + "websites", + "vibeWork", + "kali112", + "devHosts", + "githubPrimary", + "runtimeActions", + ]: assert_contains( "web_messages.zh-TW.iwooos.professionalSecurityExperience.assetHeat.cells", list(web_messages_zh["iwooos"]["professionalSecurityExperience"]["assetHeat"]["cells"].keys()), @@ -1384,12 +1394,12 @@ def validate(root: Path) -> None: assert_equal( "iwooos_projection.summary.all_product_coverage_snapshot_scope_count", iwooos_projection["summary"]["all_product_coverage_snapshot_scope_count"], - 6, + 7, ) assert_equal( "iwooos_projection.summary.all_product_coverage_snapshot_read_only_count", iwooos_projection["summary"]["all_product_coverage_snapshot_read_only_count"], - 6, + 7, ) assert_equal( "iwooos_projection.summary.all_product_coverage_snapshot_runtime_ready_count", @@ -1767,7 +1777,7 @@ def validate(root: Path) -> None: assert_equal( "iwooos_projection.summary.visual_command_dashboard_widget_count", iwooos_projection["summary"]["visual_command_dashboard_widget_count"], - 13, + 14, ) assert_true( "iwooos_projection.summary.visual_command_dashboard_first_layer", @@ -1790,7 +1800,7 @@ def validate(root: Path) -> None: assert_equal( "iwooos_projection.summary.professional_security_experience_asset_heat_cell_count", iwooos_projection["summary"]["professional_security_experience_asset_heat_cell_count"], - 8, + 9, ) assert_equal( "iwooos_projection.summary.professional_security_experience_response_flow_step_count", @@ -9517,12 +9527,14 @@ def validate(root: Path) -> None: "IwoooSAllProductCoverageSnapshotBoard", ) for text in [ - "iwooos_all_product_coverage_snapshot_scope_count=6", - "iwooos_all_product_coverage_snapshot_read_only_count=6", + "iwooos_all_product_coverage_snapshot_scope_count=7", + "iwooos_all_product_coverage_snapshot_read_only_count=7", "iwooos_all_product_coverage_snapshot_runtime_ready_count=0", "iwooos_all_product_coverage_snapshot_default_summary_mode=compact_first", "iwooos_all_product_coverage_snapshot_detail_ledger_collapsed=true", "iwooos_all_product_coverage_snapshot_next_gate=s4_9_owner_response_accepted", + "vibework_project_read_only_in_scope=true", + "vibework_runtime_ready=false", "runtime_execution_authorized=false", "active_runtime_gate_count=0", "action_buttons_allowed=false", @@ -9585,6 +9597,7 @@ def validate(root: Path) -> None: "waitingEvidence", "approvalRequired", "readOnlyFirst", + "newProjectReadOnly", "templateReady", ]: assert_contains( @@ -9603,6 +9616,7 @@ def validate(root: Path) -> None: "sourceControl", "hosts", "toolsMonitoring", + "vibeWork", "futureProducts", ]: assert_contains( @@ -9629,8 +9643,10 @@ def validate(root: Path) -> None: "iwooos_three_axis_progress_headline_percent=61", "iwooos_three_axis_progress_framework_percent=86-88", "iwooos_three_axis_progress_runtime_percent=40-45", - "iwooos_three_axis_progress_product_scope_count=6", + "iwooos_three_axis_progress_product_scope_count=7", "iwooos_three_axis_progress_all_products_read_only=true", + "iwooos_three_axis_progress_vibework_read_only_in_scope=true", + "iwooos_three_axis_progress_vibework_runtime_ready=false", "iwooos_three_axis_progress_runtime_product_rollout_count=0", "iwooos_three_axis_progress_first_runtime_gate=s4_9_owner_response_accepted", "iwooos_three_axis_progress_owner_response_accepted_count=0", @@ -9703,6 +9719,7 @@ def validate(root: Path) -> None: "sourceControl", "hosts", "toolsMonitoring", + "vibeWork", "futureProducts", ]: assert_contains( @@ -9726,9 +9743,11 @@ def validate(root: Path) -> None: "IwoooSProductRolloutWaveLedgerBoard", ) for text in [ - "iwooos_product_rollout_wave_count=6", - "iwooos_product_rollout_all_products_count=6", + "iwooos_product_rollout_wave_count=7", + "iwooos_product_rollout_all_products_count=7", "iwooos_product_rollout_current_wave=read_only_visibility", + "iwooos_product_rollout_vibework_project_wave=read_only_visibility", + "iwooos_product_rollout_vibework_runtime_ready=false", "iwooos_product_rollout_runtime_wave_count=0", "iwooos_product_rollout_enforcement_wave_count=0", "iwooos_product_rollout_owner_response_accepted_count=0", @@ -9803,6 +9822,7 @@ def validate(root: Path) -> None: "sourceControl", "hostCoverage", "monitoringTools", + "vibeWorkProject", "futureTemplate", ]: assert_contains(