diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json
index 07f227c0..a862f9dd 100644
--- a/apps/web/messages/en.json
+++ b/apps/web/messages/en.json
@@ -986,7 +986,10 @@
"subtitle": "專業建議是不移除。這個頁面保留既有安全監控與合規統計,作為前台使用者熟悉的入口;IwoooS 則成為資安網的總覽與唯一姿態來源,避免安全合規與 IwoooS 變成兩套敘事。",
"openIwooos": "查看 IwoooS 總覽",
"boundaryTitle": "低摩擦整合邊界",
- "boundaryIntro": "這裡只做前台整合與導流,不新增掃描、修復、批准、部署或 blocking control。",
+ "boundaryIntro": "這裡只做前台整合與導流,不新增掃描、修復、批准、部署或硬性阻擋控制。",
+ "routeRoleTitle": "前台入口角色對照",
+ "routeRoleSubtitle": "從安全合規進來時,也能直接看懂每個資安入口該負責什麼;這些入口只導覽與說明,不提供執行按鈕。",
+ "routeLabel": "入口",
"items": {
"routePreserved": {
"label": "路由策略",
@@ -1004,6 +1007,28 @@
"label": "執行控制",
"detail": "不新增掃描、修復、批准或部署按鈕。"
}
+ },
+ "routeRoles": {
+ "iwooosOverview": {
+ "title": "IwoooS 看總覽",
+ "body": "閱讀資安網進度、主機範圍、版本來源、負責人回覆與執行期邊界。"
+ },
+ "securityComplianceHub": {
+ "title": "安全合規看熟悉入口",
+ "body": "保留既有安全監控與合規統計,讓前台使用者不用改變原本路徑。"
+ },
+ "securityMonitor": {
+ "title": "安全看事件訊號",
+ "body": "查看錯誤、議題與安全事件類訊號;仍只做資料呈現。"
+ },
+ "complianceStats": {
+ "title": "合規看統計",
+ "body": "查看事件摘要、處置劇本與自動修復統計,不把統計視為批准。"
+ },
+ "awooopApprovals": {
+ "title": "AwoooP 看人控等待",
+ "body": "查看審批與負責人回覆等待狀態;仍不代表資安執行期閘門已開。"
+ }
}
}
},
diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json
index 2573a083..268b8ac1 100644
--- a/apps/web/messages/zh-TW.json
+++ b/apps/web/messages/zh-TW.json
@@ -987,7 +987,10 @@
"subtitle": "專業建議是不移除。這個頁面保留既有安全監控與合規統計,作為前台使用者熟悉的入口;IwoooS 則成為資安網的總覽與唯一姿態來源,避免安全合規與 IwoooS 變成兩套敘事。",
"openIwooos": "查看 IwoooS 總覽",
"boundaryTitle": "低摩擦整合邊界",
- "boundaryIntro": "這裡只做前台整合與導流,不新增掃描、修復、批准、部署或 blocking control。",
+ "boundaryIntro": "這裡只做前台整合與導流,不新增掃描、修復、批准、部署或硬性阻擋控制。",
+ "routeRoleTitle": "前台入口角色對照",
+ "routeRoleSubtitle": "從安全合規進來時,也能直接看懂每個資安入口該負責什麼;這些入口只導覽與說明,不提供執行按鈕。",
+ "routeLabel": "入口",
"items": {
"routePreserved": {
"label": "路由策略",
@@ -1005,6 +1008,28 @@
"label": "執行控制",
"detail": "不新增掃描、修復、批准或部署按鈕。"
}
+ },
+ "routeRoles": {
+ "iwooosOverview": {
+ "title": "IwoooS 看總覽",
+ "body": "閱讀資安網進度、主機範圍、版本來源、負責人回覆與執行期邊界。"
+ },
+ "securityComplianceHub": {
+ "title": "安全合規看熟悉入口",
+ "body": "保留既有安全監控與合規統計,讓前台使用者不用改變原本路徑。"
+ },
+ "securityMonitor": {
+ "title": "安全看事件訊號",
+ "body": "查看錯誤、議題與安全事件類訊號;仍只做資料呈現。"
+ },
+ "complianceStats": {
+ "title": "合規看統計",
+ "body": "查看事件摘要、處置劇本與自動修復統計,不把統計視為批准。"
+ },
+ "awooopApprovals": {
+ "title": "AwoooP 看人控等待",
+ "body": "查看審批與負責人回覆等待狀態;仍不代表資安執行期閘門已開。"
+ }
}
}
},
diff --git a/apps/web/src/app/[locale]/security-compliance/page.tsx b/apps/web/src/app/[locale]/security-compliance/page.tsx
index a885aeaf..0b95e641 100644
--- a/apps/web/src/app/[locale]/security-compliance/page.tsx
+++ b/apps/web/src/app/[locale]/security-compliance/page.tsx
@@ -8,7 +8,7 @@
import { useTranslations } from 'next-intl'
import Link from 'next/link'
-import { ArrowRight, CheckCircle2, GitBranch, Lock, ShieldCheck } from 'lucide-react'
+import { Activity, ArrowRight, CheckCircle2, ClipboardCheck, GitBranch, Lock, Radar, ShieldCheck } from 'lucide-react'
import { AppLayout } from '@/components/layout'
import { PageTabs, type TabConfig } from '@/components/layout/page-tabs'
import { SecurityPanel } from '@/components/panels/SecurityPanel'
@@ -25,6 +25,10 @@ const integrationBoundaries = [
'security_compliance_route_preserved=true',
'security_compliance_removed=false',
'security_compliance_integration_mode=iwooos_frontstage_bridge',
+ 'security_compliance_frontstage_route_role_count=5',
+ 'security_compliance_frontstage_primary_source=iwooos',
+ 'security_compliance_frontstage_execution_entry_count=0',
+ 'security_compliance_frontstage_links_read_only=true',
'iwooos_authoritative_security_entry=true',
'runtime_execution_authorized=false',
'active_runtime_gate_count=0',
@@ -32,7 +36,15 @@ const integrationBoundaries = [
'not_authorization=true',
] as const
-function SecurityComplianceFrontStage() {
+const routeRoleItems = [
+ { key: 'iwooosOverview', href: '/iwooos', route: 'IwoooS', icon: ShieldCheck, color: '#1f7a4d' },
+ { key: 'securityComplianceHub', href: '/security-compliance', route: '安全合規', icon: Radar, color: '#d97757' },
+ { key: 'securityMonitor', href: '/security', route: '安全', icon: Activity, color: '#d97757' },
+ { key: 'complianceStats', href: '/compliance', route: '合規', icon: ClipboardCheck, color: '#1f7a4d' },
+ { key: 'awooopApprovals', href: '/awooop/approvals', route: 'AwoooP', icon: Lock, color: '#6f6d66' },
+] as const
+
+function SecurityComplianceFrontStage({ locale }: { locale: string }) {
const t = useTranslations('securityCompliance.frontStage')
const textWrap = { overflowWrap: 'anywhere' as const, wordBreak: 'break-word' as const }
@@ -102,6 +114,59 @@ function SecurityComplianceFrontStage() {
)
})}
+
+
+
{t('routeRoleTitle')}
+
+ {t('routeRoleSubtitle')}
+
+
+
+ {routeRoleItems.map(item => {
+ const Icon = item.icon
+ return (
+
+
+ {t('routeLabel')} {item.route}
+
+
+
+ {t(`routeRoles.${item.key}.title` as never)}
+
+
+ {t(`routeRoles.${item.key}.body` as never)}
+
+
+ )
+ })}
+
+
-
+
)
diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md
index 29a3a472..d3090040 100644
--- a/docs/LOGBOOK.md
+++ b/docs/LOGBOOK.md
@@ -1,3 +1,17 @@
+## 2026-05-24 | 資安供應鏈 S2.109:安全合規前台入口角色對照
+
+**背景**:S2.108 已在 IwoooS 說清楚五個資安入口角色;本階段把同一個前台理解模型補到 `/security-compliance`,讓使用者從熟悉入口進來時也能立即理解 IwoooS、事件、合規統計與 AwoooP 人控等待的差異。
+
+**完成**:
+- `/security-compliance` 新增「前台入口角色對照」,列出 IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals` 五個入口角色。
+- 安全合規頁新增 `security_compliance_frontstage_route_role_count=5`、`security_compliance_frontstage_primary_source=iwooos`、`security_compliance_frontstage_execution_entry_count=0`、`security_compliance_frontstage_links_read_only=true`,並維持 `runtime_execution_authorized=false`、`active_runtime_gate_count=0`、`action_buttons_allowed=false`、`not_authorization=true`。
+- `security_mirror_status_rollup_v1` 新增 `s2_109_security_compliance_frontstage_route_role_map` 與 `show_security_compliance_frontstage_route_role_map`。
+- `security-mirror-progress-guard.py` 已納入安全合規入口角色對照看板、i18n 鍵、五個入口與 false 邊界檢查。
+
+**仍禁止**:
+- S2.109 只做 `/security-compliance` 前台導覽與理解成本收斂,不代表 runtime 授權、人工審批、掃描、修復、部署、硬性阻擋控制、專案庫建立、refs sync、workflow / secret 修改、GitHub primary 切換、Gitea 停用、Kali / SSH / 主機更新。
+- 整體資安網百分比仍是 58%;這是 framework detail 可見進展,不是 runtime landing。
+
## 2026-05-24 | 資安供應鏈 S2.108:IwoooS 前台資安入口角色分流
**背景**:S2.107 已決定「安全合規」保留並整合到 IwoooS;本階段補上更專業的入口角色分流,避免使用者看到多個資安相關入口時不知道該從哪裡理解。
@@ -9,7 +23,7 @@
- `security-mirror-progress-guard.py` 已納入前台入口角色分流看板、i18n 鍵、五個入口與 false 邊界檢查。
**仍禁止**:
-- S2.108 只做前台導覽與理解成本收斂,不代表 runtime 授權、人工審批、掃描、修復、部署、blocking control、專案庫建立、refs sync、workflow / secret 修改、GitHub primary 切換、Gitea 停用、Kali / SSH / 主機更新。
+- S2.108 只做前台導覽與理解成本收斂,不代表 runtime 授權、人工審批、掃描、修復、部署、硬性阻擋控制、專案庫建立、refs sync、workflow / secret 修改、GitHub primary 切換、Gitea 停用、Kali / SSH / 主機更新。
- 整體資安網百分比仍是 58%;這是 framework detail 可見進展,不是 runtime landing。
## 2026-05-24 | 資安供應鏈 S2.107:前台安全合規 IwoooS 整合入口
@@ -24,7 +38,7 @@
- `security-mirror-progress-guard.py` 已納入前台安全合規橋接頁、IwoooS 看板、i18n 鍵與 false 邊界檢查。
**仍禁止**:
-- S2.107 只做前台資訊架構整合與只讀導流,不代表 runtime 授權、人工審批、掃描、修復、部署、blocking control、專案庫建立、refs sync、workflow / secret 修改、GitHub primary 切換、Gitea 停用、Kali / SSH / 主機更新。
+- S2.107 只做前台資訊架構整合與只讀導流,不代表 runtime 授權、人工審批、掃描、修復、部署、硬性阻擋控制、專案庫建立、refs sync、workflow / secret 修改、GitHub primary 切換、Gitea 停用、Kali / SSH / 主機更新。
- 整體資安網百分比仍是 58%;這是 framework detail 可見進展,不是 runtime landing。
## 2026-05-24 | 資安供應鏈 S2.106:IwoooS S4.9 負責人回覆送件鏈路摘要
diff --git a/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md b/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md
index 8e78c8b2..3aa49248 100644
--- a/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md
+++ b/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md
@@ -52,6 +52,7 @@
| IwoooS S4.9 送件鏈路摘要 | S2.106 已在 `/iwooos` 顯示 S4.9 負責人回覆送件鏈路摘要;鏈路步驟=6、目前焦點=request draft、已送出=0、已接受=0;`s4_9_owner_response_dispatch_flow_step_count=6`、`s4_9_owner_response_dispatch_flow_current_step=request_draft`、`s4_9_owner_response_dispatch_flow_completed_count=0`、`s4_9_owner_response_request_sent=false`、`s4_9_owner_response_request_dispatch_authorized=false`、`runtime_execution_authorized=false`、`active_runtime_gate_count=0`、`action_buttons_allowed=false`、`not_authorization=true`,仍不代表 request sent、owner response received / accepted、audit event emitted、人工批准、GitHub 主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
| 前台安全合規 IwoooS 整合入口 | S2.107 已保留 `/security-compliance` 並把它整合成 IwoooS 前台友善入口;`security_compliance_route_preserved=true`、`security_compliance_removed=false`、`security_compliance_integration_mode=iwooos_frontstage_bridge`、`iwooos_authoritative_security_entry=true`、`runtime_execution_authorized=false`、`active_runtime_gate_count=0`、`action_buttons_allowed=false`、`not_authorization=true`,仍不代表 runtime 授權、審批、掃描、修復、部署、GitHub 主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
| 前台資安入口角色分流 | S2.108 已在 `/iwooos` 顯示 IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals` 五個入口角色;`frontstage_security_entry_role_count=5`、`frontstage_security_primary_entry=iwooos`、`frontstage_security_familiar_entry=security_compliance`、`frontstage_security_execution_entry_count=0`、`frontstage_security_action_buttons_allowed=false`、`runtime_execution_authorized=false`、`active_runtime_gate_count=0`、`not_authorization=true`,仍不代表 runtime 授權、審批、掃描、修復、部署、GitHub 主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
+| 安全合規前台入口角色對照 | S2.109 已在 `/security-compliance` 顯示 IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals` 五個入口角色對照;`security_compliance_frontstage_route_role_count=5`、`security_compliance_frontstage_primary_source=iwooos`、`security_compliance_frontstage_execution_entry_count=0`、`security_compliance_frontstage_links_read_only=true`、`runtime_execution_authorized=false`、`active_runtime_gate_count=0`、`not_authorization=true`,仍不代表 runtime 授權、審批、掃描、修復、部署、GitHub 主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
| AwoooP approvals IwoooS owner response focus | S2.55 已把 S4.9-S4.12 owner response 下一個人工收件焦點放進 `/awooop/approvals` 只讀面板;received=0、accepted=0、active runtime gates=0、headline=58%、approval_record_created=false;仍不新增 approve、execute、deploy、primary switch、refs action 或 runtime gate |
| AwoooP contracts IwoooS security contract candidate | S2.56 已把四個 security mirror contract refs 放進 `/awooop/contracts` 只讀面板;total contracts=36、ready=33、partial=2、active runtime gates=0、contract_publish_authorized=false;仍不發布 contract revision、不改 lifecycle、不寫 platform contracts API、不新增 action button |
| AwoooP tenants IwoooS tenant scope candidate | S2.57 已把 AWOOOI first tenant、IwoooS security mirror、Kali 112 / Dev 168 / Dev 111 與 S4.9-S4.12 owner response waiting 放進 `/awooop/tenants` 只讀面板;host coverage=3、tenant policy changes=0、tenant_migration_mode_changed=false;仍不改 migration mode、不改 tenant policy、不寫 platform tenants API、不新增 action button |
@@ -243,8 +244,9 @@
| S2.104 IwoooS S4.9 負責人回覆封套送件前結果分流 | framework detail | 0 | 只在 `/iwooos` 顯示 S4.9 負責人回覆封套送件前結果分流,呈現維持封套等待、要求補齊欄位、要求修正判定、隔離敏感證據、要求修正範圍、拒收變更要求、維持後續負責人等待七條分流;s4_9_owner_response_envelope_preflight_outcome_lane_count=7、s4_9_owner_response_envelope_preflight_ready_for_intake_count=0、s4_9_owner_response_envelope_preflight_quarantined_count=0、s4_9_owner_response_envelope_preflight_rejected_count=0、s4_9_owner_response_envelope_submitted_count=0、s4_9_owner_response_envelope_accepted_count=0、s4_9_owner_response_request_sent=false、s4_9_owner_response_received_count=0、s4_9_owner_response_accepted_count=0、owner_response_acceptance_gate_open=false、audit_events_emitted=0、progress_review_authorized=false、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false、not_authorization=true,不把送件前結果分流當 request sent、owner response submitted / received / accepted、audit event emitted、人工批准、審批紀錄、專案庫建立、分支 / 標籤參照同步、工作流程 / 機密設定修改、主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
| S2.105 IwoooS S4.9 負責人回覆送件請求草稿 | framework detail | 0 | 只在 `/iwooos` 顯示 S4.9 負責人回覆送件請求草稿,呈現收件範圍對應草稿、負責人收件對象草稿、脫敏證據參照草稿、禁止變更條款草稿、稽核事件範本草稿與人工送件閘門草稿六個草稿項;s4_9_owner_response_request_draft_item_count=6、s4_9_owner_response_request_draft_ready_count=0、s4_9_owner_response_request_dispatch_authorized=false、s4_9_owner_response_request_sent=false、s4_9_owner_response_request_sent_count=0、s4_9_owner_response_request_recipients_confirmed_count=0、s4_9_owner_response_request_audit_events_emitted=0、s4_9_owner_response_received_count=0、s4_9_owner_response_accepted_count=0、owner_response_acceptance_gate_open=false、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false、not_authorization=true,不把送件請求草稿當 request sent、owner response received / accepted、audit event emitted、人工批准、審批紀錄、專案庫建立、分支 / 標籤參照同步、工作流程 / 機密設定修改、主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
| S2.106 IwoooS S4.9 負責人回覆送件鏈路摘要 | framework detail | 0 | 只在 `/iwooos` 顯示 S4.9 負責人回覆送件鏈路摘要,將人工收件工作單、回覆封套欄位、送件前檢查、結果分流、送件請求草稿與人工送件閘門整理成六段專業只讀流程;s4_9_owner_response_dispatch_flow_step_count=6、s4_9_owner_response_dispatch_flow_current_step=request_draft、s4_9_owner_response_dispatch_flow_completed_count=0、s4_9_owner_response_dispatch_flow_blocked_count=0、s4_9_owner_response_request_sent=false、s4_9_owner_response_request_dispatch_authorized=false、s4_9_owner_response_received_count=0、s4_9_owner_response_accepted_count=0、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false、not_authorization=true,不把送件鏈路摘要當 request sent、owner response received / accepted、audit event emitted、人工批准、審批紀錄、專案庫建立、分支 / 標籤參照同步、工作流程 / 機密設定修改、主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
-| S2.107 前台安全合規 IwoooS 整合入口 | framework detail | 0 | 只保留 `/security-compliance` 並把它整合成 IwoooS 前台友善入口,讓前台使用者仍從安全合規看到既有安全監控與合規統計,IwoooS 則成為資安網總覽與唯一姿態來源;security_compliance_route_preserved=true、security_compliance_removed=false、security_compliance_integration_mode=iwooos_frontstage_bridge、iwooos_authoritative_security_entry=true、security_compliance_runtime_execution_authorized=false、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false、not_authorization=true,不把前台入口整合當 runtime 授權、審批、掃描、修復、部署、blocking control、專案庫建立、分支 / 標籤參照同步、工作流程 / 機密設定修改、主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
-| S2.108 IwoooS 前台資安入口角色分流 | framework detail | 0 | 只在 `/iwooos` 顯示前台資安入口角色分流,將 IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals` 五個入口的使用情境與邊界說清楚;frontstage_security_entry_role_count=5、frontstage_security_primary_entry=iwooos、frontstage_security_familiar_entry=security_compliance、frontstage_security_execution_entry_count=0、frontstage_security_links_read_only=true、frontstage_security_action_buttons_allowed=false、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false、not_authorization=true,不把入口角色分流當 runtime 授權、審批、掃描、修復、部署、blocking control、專案庫建立、分支 / 標籤參照同步、工作流程 / 機密設定修改、主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
+| S2.107 前台安全合規 IwoooS 整合入口 | framework detail | 0 | 只保留 `/security-compliance` 並把它整合成 IwoooS 前台友善入口,讓前台使用者仍從安全合規看到既有安全監控與合規統計,IwoooS 則成為資安網總覽與唯一姿態來源;security_compliance_route_preserved=true、security_compliance_removed=false、security_compliance_integration_mode=iwooos_frontstage_bridge、iwooos_authoritative_security_entry=true、security_compliance_runtime_execution_authorized=false、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false、not_authorization=true,不把前台入口整合當 runtime 授權、審批、掃描、修復、部署、硬性阻擋控制、專案庫建立、分支 / 標籤參照同步、工作流程 / 機密設定修改、主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
+| S2.108 IwoooS 前台資安入口角色分流 | framework detail | 0 | 只在 `/iwooos` 顯示前台資安入口角色分流,將 IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals` 五個入口的使用情境與邊界說清楚;frontstage_security_entry_role_count=5、frontstage_security_primary_entry=iwooos、frontstage_security_familiar_entry=security_compliance、frontstage_security_execution_entry_count=0、frontstage_security_links_read_only=true、frontstage_security_action_buttons_allowed=false、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false、not_authorization=true,不把入口角色分流當 runtime 授權、審批、掃描、修復、部署、硬性阻擋控制、專案庫建立、分支 / 標籤參照同步、工作流程 / 機密設定修改、主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
+| S2.109 安全合規前台入口角色對照 | framework detail | 0 | 只在 `/security-compliance` 顯示前台入口角色對照,讓熟悉安全合規入口的使用者也能看懂 IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals` 五個入口用途;security_compliance_frontstage_route_role_count=5、security_compliance_frontstage_primary_source=iwooos、security_compliance_frontstage_execution_entry_count=0、security_compliance_frontstage_links_read_only=true、runtime_execution_authorized=false、active_runtime_gate_count=0、action_buttons_allowed=false、not_authorization=true,不把入口角色對照當 runtime 授權、審批、掃描、修復、部署、硬性阻擋控制、專案庫建立、分支 / 標籤參照同步、工作流程 / 機密設定修改、主要來源切換、Gitea 停用、Kali / SSH / 主機更新或執行期授權 |
headline 進度要再往上,至少需要下列任一高層 gate 有實質 evidence:
diff --git a/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md b/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md
index a0978cf1..c592b9e4 100644
--- a/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md
+++ b/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md
@@ -28,7 +28,7 @@ python3 scripts/security/security-mirror-progress-guard.py
### 0.2 Headline 58% 不代表停滯
-近期 S4.10 請求包、範本狀態台帳、稽核事件範本、脫敏範例、收件檢查、收件預檢,S4.11 請求包 / 範本狀態台帳 / 稽核事件範本 / 脫敏範例 / 收件檢查 / 收件預檢,S4.12 請求包 / 範本狀態台帳 / 稽核事件範本 / 脫敏範例 / 收件檢查 / 收件預檢,S4.13 證據路由規則 / 顯示區塊 / 狀態轉移規則 / 審查清單 / 審查結果分流 / 審查稽核事件範本 / 審查稽核顯示區塊 / 審查稽核收件檢查 / 審查稽核脫敏範例 / 審查稽核保留規則 / 審查稽核保留檢查 / 審查稽核交接包 / 交接檢查 / 平行 Session 同步檢查 / 衝突分流 / 復原檢查 / 復原結果分流,S1.3 低摩擦非阻擋升級分流、S2.8 IwoooS 前端態勢入口,以及 S2.9-S2.108 IwoooS / AwoooP 資安投影契約都是有效進展,但它們是框架細節,不是負責人回覆、執行期閘門、生產匯入或 GitHub 主要來源就緒。因此整體百分比仍維持 58%,避免把只讀框架誤算成已落地執行。
+近期 S4.10 請求包、範本狀態台帳、稽核事件範本、脫敏範例、收件檢查、收件預檢,S4.11 請求包 / 範本狀態台帳 / 稽核事件範本 / 脫敏範例 / 收件檢查 / 收件預檢,S4.12 請求包 / 範本狀態台帳 / 稽核事件範本 / 脫敏範例 / 收件檢查 / 收件預檢,S4.13 證據路由規則 / 顯示區塊 / 狀態轉移規則 / 審查清單 / 審查結果分流 / 審查稽核事件範本 / 審查稽核顯示區塊 / 審查稽核收件檢查 / 審查稽核脫敏範例 / 審查稽核保留規則 / 審查稽核保留檢查 / 審查稽核交接包 / 交接檢查 / 平行 Session 同步檢查 / 衝突分流 / 復原檢查 / 復原結果分流,S1.3 低摩擦非阻擋升級分流、S2.8 IwoooS 前端態勢入口,以及 S2.9-S2.109 IwoooS / AwoooP 資安投影契約都是有效進展,但它們是框架細節,不是負責人回覆、執行期閘門、生產匯入或 GitHub 主要來源就緒。因此整體百分比仍維持 58%,避免把只讀框架誤算成已落地執行。
S2.50 也把「為什麼 58% 還不動」拆成五個可見 gate:owner response accepted、redacted payload ingestion、active runtime gate、GitHub primary ready、AwoooP read-only landing。這五個 gate 目前仍全部是 0 / false,所以 headline 不應被灌水提高。
@@ -171,6 +171,7 @@ S2.50 也把「為什麼 58% 還不動」拆成五個可見 gate:owner respons
| S2.106 IwoooS S4.9 負責人回覆送件鏈路摘要 | 已完成草案,在 `/iwooos` 以專業摘要帶顯示工作單、封套、送件前檢查、結果分流、請求草稿、人工送件閘門六段鏈路,目前焦點=request draft、已送出=0、已接受=0;仍不把送件鏈路摘要當成 request sent、owner response received / accepted、audit event emitted、人工批准、主要來源切換或執行期閘門 | 0 |
| S2.107 前台安全合規 IwoooS 整合入口 | 已完成草案,保留 `/security-compliance` 並新增前台整合說明;`/iwooos` 同步顯示「前台安全合規整合判定」,確認安全合規整合、不移除、runtime gate 0、action button 0;仍不把前台入口整合當成 runtime 授權、審批、掃描、修復、部署、主要來源切換或執行期閘門 | 0 |
| S2.108 IwoooS 前台資安入口角色分流 | 已完成草案,在 `/iwooos` 顯示五個前台資安入口角色:IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals`;仍不把入口分流當成 runtime 授權、審批、掃描、修復、部署、主要來源切換或執行期閘門 | 0 |
+| S2.109 安全合規前台入口角色對照 | 已完成草案,在 `/security-compliance` 顯示五個前台資安入口角色對照:IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals`;仍不把入口對照當成 runtime 授權、審批、掃描、修復、部署、主要來源切換或執行期閘門 | 0 |
headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner response 收到並通過脫敏驗收,或人工批准後出現 active runtime gate、redacted payload ingestion、GitHub primary readiness 這類落地 evidence。
@@ -298,6 +299,7 @@ headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner respons
| S2.106 IwoooS S4.9 負責人回覆送件鏈路摘要 | 完成草案 | `/iwooos` 新增 S4.9 負責人回覆送件鏈路摘要帶,以六段流程顯示人工收件工作單、回覆封套欄位、送件前檢查、結果分流、送件請求草稿、人工送件閘門,並把目前焦點固定為 request draft | 使用者與另一個 AwoooP Session 能用更專業的視覺摘要理解 S4.9 不是卡住,而是仍停在只讀送件前準備;送件鏈路摘要仍不是 request sent、owner response received / accepted、audit event emitted、人工批准、主要來源切換或執行期閘門 |
| S2.107 前台安全合規 IwoooS 整合入口 | 完成草案 | `/security-compliance` 保留既有 SecurityPanel / CompliancePanel 頁籤並新增 IwoooS 前台整合說明;`/iwooos` 新增前台安全合規整合判定看板 | 專業判定是整合而非移除:安全合規維持前台熟悉入口,IwoooS 統一資安總覽與姿態來源;此整合仍不是 runtime 授權、審批、掃描、修復、部署、主要來源切換或執行期閘門 |
| S2.108 IwoooS 前台資安入口角色分流 | 完成草案 | `/iwooos` 新增前台資安入口角色分流看板,列出 IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals` 五個入口 | 使用者能快速理解每個資安入口該看什麼:總覽、熟悉入口、事件、合規統計、人控等待;此分流仍不是 runtime 授權、審批、掃描、修復、部署、主要來源切換或執行期閘門 |
+| S2.109 安全合規前台入口角色對照 | 完成草案 | `/security-compliance` 新增前台入口角色對照,列出 IwoooS、`/security-compliance`、`/security`、`/compliance`、`/awooop/approvals` 五個入口 | 使用者從熟悉的安全合規入口進來時,也能快速理解哪裡看總覽、哪裡看事件、哪裡看統計、哪裡看人控等待;此對照仍不是 runtime 授權、審批、掃描、修復、部署、主要來源切換或執行期閘門 |
| S3 approval gate | 進行中 | `security_approval_gate_v1` 已建立 8 個人工 gate items:7 pending、1 block candidate、0 approved | 不得繞過人工批准;批准後仍需 follow-up runtime gate |
| S3.0 人工批准 Gate 契約 | 完成草案 | 定義批准範圍、決策選項、required reviewers、still forbidden 與 follow-up runtime gate | AwoooP 可記錄決策,不可執行 gate item |
| S3.1 人工決策紀錄契約 | 完成草案 | `security_approval_decision_record_v1` 已建立;目前 0 筆 decision records、0 個 runtime action 授權 | AwoooP 可稽核決策,不可把決策當執行 |
diff --git a/docs/security/security-mirror-status-rollup.snapshot.json b/docs/security/security-mirror-status-rollup.snapshot.json
index cf28be06..f4332201 100644
--- a/docs/security/security-mirror-status-rollup.snapshot.json
+++ b/docs/security/security-mirror-status-rollup.snapshot.json
@@ -1766,6 +1766,18 @@
"runtime_delta": false,
"execution_authorized": false,
"not_authorization": true
+ },
+ {
+ "delta_id": "s2_109_security_compliance_frontstage_route_role_map",
+ "display_order": 138,
+ "completed_stage": "S2.109 安全合規前台入口角色對照",
+ "progress_axis": "framework_detail",
+ "headline_percent_delta": 0,
+ "framework_delta_visible": true,
+ "why_headline_unchanged": "安全合規只新增前台入口角色對照,讓使用者從 /security-compliance 也能看懂 IwoooS、/security-compliance、/security、/compliance、/awooop/approvals 五個入口各自用途;security_compliance_frontstage_route_role_count=5、security_compliance_frontstage_primary_source=iwooos、security_compliance_frontstage_execution_entry_count=0、security_compliance_frontstage_links_read_only=true、runtime_execution_authorized=false、active_runtime_gate_count=0,不把入口對照當 runtime 授權、審批、掃描、修復、部署、專案庫建立、refs sync、workflow 修改、GitHub primary 切換或 Gitea 停用。",
+ "runtime_delta": false,
+ "execution_authorized": false,
+ "not_authorization": true
}
],
"next_safe_actions": [
@@ -2650,6 +2662,22 @@
"從前台入口角色分流呼叫 Kali、開 SSH、更新主機、切 GitHub 主要來源、停用 Gitea 或收機密明文值"
]
},
+ {
+ "action_id": "show_security_compliance_frontstage_route_role_map",
+ "title": "安全合規顯示前台入口角色對照",
+ "mode": "observe",
+ "source_contract": "iwooos_posture_projection_v1",
+ "allowed_processing": [
+ "在 /security-compliance 顯示 S2.109 前台入口角色對照",
+ "讓使用者從安全合規頁直接理解 IwoooS、/security-compliance、/security、/compliance、/awooop/approvals 五個入口各自用途",
+ "固定安全合規入口只做只讀導覽與理解成本收斂,security_compliance_frontstage_execution_entry_count=0、action_buttons_allowed=false、runtime_execution_authorized=false"
+ ],
+ "blocked_processing": [
+ "把安全合規入口角色對照當成 runtime 授權、審批、掃描、修復、部署或硬性阻擋控制",
+ "從安全合規入口角色對照建立專案庫、改可見性、同步 / 刪除 / 強制推送 refs,或修改工作流程 / 機密設定",
+ "從安全合規入口角色對照呼叫 Kali、開 SSH、更新主機、切 GitHub 主要來源、停用 Gitea 或收機密明文值"
+ ]
+ },
{
"action_id": "enforce_traditional_chinese_security_surface_wording",
"title": "IwoooS / AwoooP 資安可視區塊維持繁體中文呈現",
diff --git a/scripts/security/security-mirror-progress-guard.py b/scripts/security/security-mirror-progress-guard.py
index 798f9a05..ad1fcee3 100755
--- a/scripts/security/security-mirror-progress-guard.py
+++ b/scripts/security/security-mirror-progress-guard.py
@@ -360,6 +360,7 @@ def validate(root: Path) -> None:
"s2_106_iwooos_s49_owner_response_dispatch_flow_board",
"s2_107_security_compliance_iwooos_frontstage_bridge",
"s2_108_iwooos_frontstage_security_entry_roles",
+ "s2_109_security_compliance_frontstage_route_role_map",
]
assert_equal(
"progress_delta_ledger.delta_ids",
@@ -624,6 +625,11 @@ def validate(root: Path) -> None:
[item["action_id"] for item in rollup["next_safe_actions"] if isinstance(item, dict)],
"show_iwooos_frontstage_security_entry_roles",
)
+ assert_contains(
+ "rollup.next_safe_actions.action_ids",
+ [item["action_id"] for item in rollup["next_safe_actions"] if isinstance(item, dict)],
+ "show_security_compliance_frontstage_route_role_map",
+ )
assert_contains(
"rollup.next_safe_actions.action_ids",
[item["action_id"] for item in rollup["next_safe_actions"] if isinstance(item, dict)],
@@ -7998,6 +8004,11 @@ def validate(root: Path) -> None:
security_compliance_page,
"SecurityComplianceFrontStage",
)
+ assert_text_contains(
+ "security_compliance_page.frontstage_route_role_map_testid",
+ security_compliance_page,
+ 'data-testid="security-compliance-frontstage-route-role-map"',
+ )
assert_text_contains(
"iwooos_page.security_compliance_frontstage_testid",
iwooos_projection_page,
@@ -8028,6 +8039,17 @@ def validate(root: Path) -> None:
iwooos_projection_page,
text,
)
+ for text in [
+ "security_compliance_frontstage_route_role_count=5",
+ "security_compliance_frontstage_primary_source=iwooos",
+ "security_compliance_frontstage_execution_entry_count=0",
+ "security_compliance_frontstage_links_read_only=true",
+ ]:
+ assert_text_contains(
+ "security_compliance_page.frontstage_route_role_boundary",
+ security_compliance_page,
+ text,
+ )
for text in [
"secret_value_collection_allowed=false",
"repo_creation_authorized=false",
@@ -8051,7 +8073,19 @@ def validate(root: Path) -> None:
list(web_messages_en.keys()),
"securityCompliance",
)
- for key in ["eyebrow", "title", "subtitle", "openIwooos", "boundaryTitle", "boundaryIntro", "items"]:
+ for key in [
+ "eyebrow",
+ "title",
+ "subtitle",
+ "openIwooos",
+ "boundaryTitle",
+ "boundaryIntro",
+ "routeRoleTitle",
+ "routeRoleSubtitle",
+ "routeLabel",
+ "items",
+ "routeRoles",
+ ]:
assert_contains(
"web_messages.zh-TW.securityCompliance.frontStage.keys",
list(web_messages_zh["securityCompliance"]["frontStage"].keys()),
@@ -8073,6 +8107,23 @@ def validate(root: Path) -> None:
list(web_messages_en["securityCompliance"]["frontStage"]["items"].keys()),
key,
)
+ for key in [
+ "iwooosOverview",
+ "securityComplianceHub",
+ "securityMonitor",
+ "complianceStats",
+ "awooopApprovals",
+ ]:
+ assert_contains(
+ "web_messages.zh-TW.securityCompliance.frontStage.routeRoles",
+ list(web_messages_zh["securityCompliance"]["frontStage"]["routeRoles"].keys()),
+ key,
+ )
+ assert_contains(
+ "web_messages.en.securityCompliance.frontStage.routeRoles",
+ list(web_messages_en["securityCompliance"]["frontStage"]["routeRoles"].keys()),
+ key,
+ )
assert_contains(
"web_messages.zh-TW.iwooos.securityComplianceFrontStage",
list(web_messages_zh["iwooos"].keys()),