From 342e946dba923cebfdc709e85b8fd91587c4dc1f Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 12 Jun 2026 11:54:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E9=A1=AF=E7=A4=BA=20IwoooS=20?= =?UTF-8?q?=E5=AF=A9=E6=9F=A5=E5=BE=8C=E4=BF=AE=E6=AD=A3=E5=80=99=E9=81=B8?= =?UTF-8?q?=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/messages/en.json | 4 ++++ apps/web/messages/zh-TW.json | 4 ++++ apps/web/src/app/[locale]/iwooos/page.tsx | 5 ++++- .../iwooos-posture-projection.snapshot.json | 16 +++++++++++++++- ...ecurity-mirror-status-rollup.snapshot.json | 2 +- .../security-mirror-progress-guard.py | 19 ++++++++++++++++++- 6 files changed, 46 insertions(+), 4 deletions(-) diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 4aee7d65d..af5e88657 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -7516,6 +7516,10 @@ "title": "待補關鍵證據", "body": "整體百分比要前進,需要 S4.9 負責人回覆、脫敏證據與審查接受。" }, + "reviewFixCandidate": { + "title": "審查後修正候選", + "body": "程式碼審查與資安審查可先列出人工批准後才處理的修正候選;目前候選=0,不自動改程式碼、不自動部署。" + }, "runtimeLock": { "title": "執行邊界鎖定", "body": "掃描、SSH、主機更新、修復、部署與版本來源變更都維持閘門 0。" diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index 4aee7d65d..af5e88657 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -7516,6 +7516,10 @@ "title": "待補關鍵證據", "body": "整體百分比要前進,需要 S4.9 負責人回覆、脫敏證據與審查接受。" }, + "reviewFixCandidate": { + "title": "審查後修正候選", + "body": "程式碼審查與資安審查可先列出人工批准後才處理的修正候選;目前候選=0,不自動改程式碼、不自動部署。" + }, "runtimeLock": { "title": "執行邊界鎖定", "body": "掃描、SSH、主機更新、修復、部署與版本來源變更都維持閘門 0。" diff --git a/apps/web/src/app/[locale]/iwooos/page.tsx b/apps/web/src/app/[locale]/iwooos/page.tsx index 97ae3230b..2b2627077 100644 --- a/apps/web/src/app/[locale]/iwooos/page.tsx +++ b/apps/web/src/app/[locale]/iwooos/page.tsx @@ -3121,6 +3121,7 @@ const iwooosExecutiveSnapshotCards: IwoooSExecutiveSnapshotCard[] = [ { key: 'visibleWork', metric: '7區', icon: CheckCircle2, tone: 'steady' }, { key: 'assetMesh', metric: '8+3', icon: Network, tone: 'steady' }, { key: 'nextBlocker', metric: 'S4.9', icon: FileWarning, tone: 'warn' }, + { key: 'reviewFixCandidate', metric: '候選 0', icon: ClipboardCheck, tone: 'warn' }, { key: 'runtimeLock', metric: '閘門 0', icon: Lock, tone: 'locked' }, ] @@ -3132,10 +3133,12 @@ const iwooosExecutiveSnapshotAxes: IwoooSExecutiveSnapshotAxis[] = [ const iwooosExecutiveSnapshotBoundaries = [ 'iwooos_executive_snapshot_first_layer=true', - 'iwooos_executive_snapshot_card_count=4', + 'iwooos_executive_snapshot_card_count=5', 'iwooos_executive_snapshot_axis_count=3', 'iwooos_executive_snapshot_above_focus_deck=true', 'iwooos_executive_snapshot_explains_done_next_blocked=true', + 'iwooos_executive_snapshot_review_fix_candidate_count=0', + 'iwooos_executive_snapshot_review_fix_candidate_execution_allowed=false', 'iwooos_executive_snapshot_execution_action_buttons_allowed=false', 'iwooos_executive_snapshot_runtime_gate_count=0', 'iwooos_executive_snapshot_owner_response_received_count=0', diff --git a/docs/security/iwooos-posture-projection.snapshot.json b/docs/security/iwooos-posture-projection.snapshot.json index a977cee8f..58465182f 100644 --- a/docs/security/iwooos-posture-projection.snapshot.json +++ b/docs/security/iwooos-posture-projection.snapshot.json @@ -597,9 +597,23 @@ "not_authorization": true }, { - "card_id": "runtimeLock", + "card_id": "reviewFixCandidate", "display_order": 4, "display_mode": "first_screen_executive_snapshot", + "metric": "候選 0", + "summarizes_review_fix_candidate": true, + "review_fix_candidate_count": 0, + "automatic_code_change_authorized": false, + "automatic_deploy_authorized": false, + "execution_action_button_allowed": false, + "runtime_gate_opened": false, + "runtime_execution_authorized": false, + "not_authorization": true + }, + { + "card_id": "runtimeLock", + "display_order": 5, + "display_mode": "first_screen_executive_snapshot", "metric": "Gate 0", "summarizes_forbidden_runtime_actions": true, "execution_action_button_allowed": false, diff --git a/docs/security/security-mirror-status-rollup.snapshot.json b/docs/security/security-mirror-status-rollup.snapshot.json index f28be49ca..23cfcd0ae 100644 --- a/docs/security/security-mirror-status-rollup.snapshot.json +++ b/docs/security/security-mirror-status-rollup.snapshot.json @@ -2314,7 +2314,7 @@ "progress_axis": "framework_detail", "headline_percent_delta": 0, "framework_delta_visible": true, - "why_headline_unchanged": "IwoooS 只新增第一屏高層快照層,把已完成可見工作、8+3 資產與主機納管、S4.9 下一卡點與 Gate 0 禁止動作壓成四張摘要卡與三條狀態軸;iwooos_executive_snapshot_card_count=4、iwooos_executive_snapshot_axis_count=3、iwooos_executive_snapshot_above_focus_deck=true、iwooos_executive_snapshot_execution_action_buttons_allowed=false、iwooos_executive_snapshot_runtime_gate_count=0、runtime_execution_authorized=false、active_runtime_gate_count=0,不把高層快照當掃描、修復、部署、主機更新、source-control mutation、GitHub primary 切換、Gitea 停用或 runtime gate。", + "why_headline_unchanged": "IwoooS 第一屏高層快照層目前把已完成可見工作、8+3 資產與主機納管、S4.9 下一卡點、審查後修正候選與 Gate 0 禁止動作壓成五張摘要卡與三條狀態軸;iwooos_executive_snapshot_card_count=5、iwooos_executive_snapshot_review_fix_candidate_count=0、iwooos_executive_snapshot_axis_count=3、iwooos_executive_snapshot_above_focus_deck=true、iwooos_executive_snapshot_execution_action_buttons_allowed=false、iwooos_executive_snapshot_runtime_gate_count=0、runtime_execution_authorized=false、active_runtime_gate_count=0,不把高層快照當掃描、修復、部署、主機更新、source-control mutation、GitHub primary 切換、Gitea 停用、自動改碼、自動部署或 runtime gate。", "runtime_delta": false, "execution_authorized": false, "not_authorization": true diff --git a/scripts/security/security-mirror-progress-guard.py b/scripts/security/security-mirror-progress-guard.py index 9cf32771b..406b14551 100755 --- a/scripts/security/security-mirror-progress-guard.py +++ b/scripts/security/security-mirror-progress-guard.py @@ -14890,6 +14890,7 @@ def validate(root: Path) -> None: "visibleWork", "assetMesh", "nextBlocker", + "reviewFixCandidate", "runtimeLock", ] executive_snapshot_cards = iwooos_projection["executive_snapshot_cards"] @@ -14939,6 +14940,20 @@ def validate(root: Path) -> None: next_blocker_card[count_key], 0, ) + review_fix_candidate_card = next( + item for item in executive_snapshot_cards if item["card_id"] == "reviewFixCandidate" + ) + for count_key in ["review_fix_candidate_count"]: + assert_equal( + f"iwooos_projection.executive_snapshot_cards.reviewFixCandidate.{count_key}", + review_fix_candidate_card[count_key], + 0, + ) + for flag in ["automatic_code_change_authorized", "automatic_deploy_authorized"]: + assert_false( + f"iwooos_projection.executive_snapshot_cards.reviewFixCandidate.{flag}", + review_fix_candidate_card[flag], + ) expected_executive_snapshot_axis_ids = [ "framework", "evidence", @@ -15013,10 +15028,12 @@ def validate(root: Path) -> None: ) for text in [ "iwooos_executive_snapshot_first_layer=true", - "iwooos_executive_snapshot_card_count=4", + "iwooos_executive_snapshot_card_count=5", "iwooos_executive_snapshot_axis_count=3", "iwooos_executive_snapshot_above_focus_deck=true", "iwooos_executive_snapshot_explains_done_next_blocked=true", + "iwooos_executive_snapshot_review_fix_candidate_count=0", + "iwooos_executive_snapshot_review_fix_candidate_execution_allowed=false", "iwooos_executive_snapshot_execution_action_buttons_allowed=false", "iwooos_executive_snapshot_runtime_gate_count=0", "iwooos_executive_snapshot_owner_response_received_count=0",