From a5cdd8c227e897116c74e2323387acfe278e73f0 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 19 Jun 2026 03:19:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E6=B8=85=E7=90=86=E6=B2=BB?= =?UTF-8?q?=E7=90=86=E9=A0=81=E6=AE=98=E7=95=99=E8=8B=B1=E6=96=87=E7=8B=80?= =?UTF-8?q?=E6=85=8B=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/messages/en.json | 118 +++++++++++++++++------------------ apps/web/messages/zh-TW.json | 118 +++++++++++++++++------------------ docs/LOGBOOK.md | 31 +++++++++ 3 files changed, 149 insertions(+), 118 deletions(-) diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 475994432..098c15bfe 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -3885,51 +3885,51 @@ } }, "receiptOwnerReview": { - "title": "P2-406B Receipt Readback Owner Review", - "subtitle": "{current} → {next};Owner gates {gates};關閉中的 runtime 操作 {blocked}。", + "title": "P2-406B 回執讀回負責人審查", + "subtitle": "{current} → {next};負責人關卡 {gates};關閉中的執行期操作 {blocked}。", "source": "{generated} · {current} → {next}", "badges": { "room": "戰情室 {room}", - "owner": "receipt owner {owner}", - "canary": "canary approved {value}" + "owner": "回執負責人 {owner}", + "canary": "金絲雀批准 {value}" }, "metrics": { "overall": "完成度", "sources": "來源讀回", "cadences": "報告節奏", - "gates": "Owner gates", - "checks": "Receipt checks", + "gates": "負責人關卡", + "checks": "回執檢查", "approvals": "待批准", - "liveWrites": "Live writes" + "liveWrites": "正式寫入" }, "sections": { - "ownerGates": "Owner review gates", - "receiptPlan": "Receipt readback plan", - "boundaries": "仍維持關閉的 live 操作" + "ownerGates": "負責人審查關卡", + "receiptPlan": "回執讀回計畫", + "boundaries": "仍維持關閉的正式操作" }, "labels": { - "owner": "Owner", + "owner": "負責人", "requiredFields": "必填欄位", "acceptance": "驗收", "blockedActions": "阻擋操作", "evidence": "證據", - "arbiter": "arbiter {value}", - "receiptOwner": "receipt {value}", - "replayOwner": "replay {value}", - "env": "env {value}", - "cadenceDetail": "owner {owner} · {state} · confidence {confidence}", + "arbiter": "仲裁者 {value}", + "receiptOwner": "回執 {value}", + "replayOwner": "重放 {value}", + "env": "環境 {value}", + "cadenceDetail": "負責人 {owner} · {state} · 信心 {confidence}", "boundaryClosed": "保持 false / 0", "boundaryOpen": "異常開啟", - "truthBlockers": "truth blockers {count}", - "driftCandidates": "drift candidates {count}" + "truthBlockers": "真相阻擋 {count}", + "driftCandidates": "漂移候選 {count}" }, "boundaries": { - "gateway": "Gateway queue write", - "telegram": "Telegram 發送", + "gateway": "Gateway 佇列寫入", + "telegram": "Telegram 實發", "botApi": "Bot API 呼叫", - "receipt": "Receipt 正式寫入", + "receipt": "回執正式寫入", "production": "正式寫入", - "secret": "Secret / 付費 / 主機 / kubectl" + "secret": "機密 / 付費 / 主機 / kubectl" }, "riskTiers": { "low": "低風險", @@ -3940,7 +3940,7 @@ }, "reportNoWriteAnalysis": { "title": "P2-407 AI 報表 無寫入 分析", - "subtitle": "{current} → {next};分析建議 {recommendations};阻擋中的 runtime 操作 {blocked}。", + "subtitle": "{current} → {next};分析建議 {recommendations};阻擋中的執行期操作 {blocked}。", "badges": { "mode": "已提交快照", "room": "戰情室 {room}", @@ -3966,7 +3966,7 @@ "labels": { "score": "分數 {score}", "approvalRequired": "批准 {value}", - "gateDetail": "owner {owner} · 欄位 {fields} · 驗收 {checks}", + "gateDetail": "負責人 {owner} · 欄位 {fields} · 驗收 {checks}", "generated": "產生於 {generated}", "env": "環境 {value}", "redaction": "脫敏 {value}" @@ -3980,7 +3980,7 @@ }, "lowMediumWhitelist": { "title": "P2-408 中 / 低風險白名單", - "subtitle": "{current} → {next};候選 {candidates};阻擋中的 runtime 操作 {blocked}。", + "subtitle": "{current} → {next};候選 {candidates};阻擋中的執行期操作 {blocked}。", "badges": { "mode": "無正式執行白名單", "room": "戰情室 {room}", @@ -4000,13 +4000,13 @@ "sections": { "candidates": "中 / 低風險候選", "ownerGates": "負責人關卡", - "verifiers": "Dry-run 驗證器", + "verifiers": "乾跑驗證器", "truth": "白名單真相" }, "labels": { "verifier": "驗證器 {value}", "rollback": "回滾 {value}", - "gateDetail": "owner {owner} · 欄位 {fields} · 驗收 {checks}", + "gateDetail": "負責人 {owner} · 欄位 {fields} · 驗收 {checks}", "generated": "產生於 {generated}", "env": "環境 {value}", "redaction": "脫敏 {value}" @@ -4023,13 +4023,13 @@ }, "statuses": { "candidate_only_no_live_execution": "僅候選", - "dry_run_ready_no_live_execution": "dry-run 就緒", + "dry_run_ready_no_live_execution": "乾跑就緒", "owner_review_required_no_live_execution": "需負責人審查" } }, "highRiskOwnerQueue": { - "title": "P2-409 高風險 Owner Review Queue", - "subtitle": "{current} → {next};佇列 {queue};阻擋中的 runtime 操作 {blocked}。", + "title": "P2-409 高風險負責人審查佇列", + "subtitle": "{current} → {next};佇列 {queue};阻擋中的執行期操作 {blocked}。", "badges": { "mode": "高風險暫停", "room": "戰情室 {room}", @@ -4054,10 +4054,10 @@ }, "labels": { "packet": "封包 {value}", - "fields": "owner 欄位 {count}", + "fields": "負責人欄位 {count}", "highRoute": "高風險路由", "criticalRoute": "關鍵路由", - "ownerRequired": "需要 owner {value}", + "ownerRequired": "需要負責人 {value}", "verbalApproval": "口頭批准 {value}", "telegram": "Telegram 政策", "telegramDetail": "正式動作 {count}", @@ -4085,7 +4085,7 @@ }, "actionAuditLedger": { "title": "P2-410 AI Agent 行動審計帳本", - "subtitle": "{current} → {next};audit event {events};阻擋中的 runtime 操作 {blocked}。", + "subtitle": "{current} → {next};審計事件 {events};阻擋中的執行期操作 {blocked}。", "badges": { "mode": "不可變無寫入帳本", "immutable": "事件模板 {count}", @@ -4110,14 +4110,14 @@ "truth": "帳本真相" }, "labels": { - "fields": "audit 欄位 {count}", + "fields": "審計欄位 {count}", "sideEffects": "副作用 {count}", "auditDb": "Audit DB 寫入", "timelineKm": "Timeline / KM 寫入", "telegram": "Telegram 發送", "writeTotal": "正式寫入總數 {count}", "playbook": "PlayBook trust {value}", - "queueBot": "queue {queue} / bot {bot}", + "queueBot": "佇列 {queue} / Bot {bot}", "generated": "產生於 {generated}", "redaction": "脫敏 {value}", "ownerAccepted": "負責人已接受 {count}" @@ -4131,20 +4131,20 @@ "devops": "DevOps" }, "riskTiers": { - "low": "low", - "medium": "medium", - "high": "high", - "critical": "critical" + "low": "低風險", + "medium": "中風險", + "high": "高風險", + "critical": "關鍵風險" }, "stages": { - "candidate_classification": "candidate classification", - "dry_run_hold": "dry-run hold", - "owner_queue_pause": "owner queue pause", - "runtime_action_rejection": "runtime rejection", - "work_item_owner_review": "work item review", - "no_send_preview": "無發送 preview", - "notification_egress_guard": "egress guard", - "writeback_blocked": "writeback blocked" + "candidate_classification": "候選分類", + "dry_run_hold": "乾跑暫停", + "owner_queue_pause": "負責人佇列暫停", + "runtime_action_rejection": "執行期拒收", + "work_item_owner_review": "工作項負責人審查", + "no_send_preview": "無發送預覽", + "notification_egress_guard": "通知出口防護", + "writeback_blocked": "回寫已阻擋" } }, "actionOwnerEventBus": { @@ -4219,34 +4219,34 @@ }, "hostRunawayAiops": { "title": "P3-009 Host Runaway AIOps 閉環", - "subtitle": "{current} → {next};閉環階段 {stages};阻擋 runtime 操作 {blocked}。", + "subtitle": "{current} → {next};閉環階段 {stages};阻擋執行期操作 {blocked}。", "source": "{generated} · {current} → {next}", "badges": { - "host": "host {host}", - "deploy": "deploy {marker}", - "runtime": "runtime writes {value}" + "host": "主機 {host}", + "deploy": "部署標記 {marker}", + "runtime": "執行期寫入 {value}" }, "metrics": { "overall": "完成度", "stages": "閉環階段", - "alertLanes": "告警 lane", + "alertLanes": "告警分流", "assets": "資產回寫", - "liveWrites": "Live writes", - "orphans": "Orphan groups" + "liveWrites": "正式寫入", + "orphans": "孤兒群組" }, "sections": { "loopStages": "Monitor / Alert / PlayBook / KM 閉環", - "alertLanes": "告警分流 lane", - "boundaries": "仍維持關閉的 runtime 操作" + "alertLanes": "告警分流", + "boundaries": "仍維持關閉的執行期操作" }, "labels": { - "owner": "Owner", + "owner": "負責人", "evidence": "證據", "blockedActions": "阻擋操作", "boundaryClosed": "保持 false / 0", "boundaryOpen": "異常開啟", - "monitorUp": "monitor_up={value}", - "ciContainers": "CI containers={count}" + "monitorUp": "監控狀態={value}", + "ciContainers": "CI 容器={count}" }, "boundaries": { "runtime": "Runtime remediation", diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index 475994432..098c15bfe 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -3885,51 +3885,51 @@ } }, "receiptOwnerReview": { - "title": "P2-406B Receipt Readback Owner Review", - "subtitle": "{current} → {next};Owner gates {gates};關閉中的 runtime 操作 {blocked}。", + "title": "P2-406B 回執讀回負責人審查", + "subtitle": "{current} → {next};負責人關卡 {gates};關閉中的執行期操作 {blocked}。", "source": "{generated} · {current} → {next}", "badges": { "room": "戰情室 {room}", - "owner": "receipt owner {owner}", - "canary": "canary approved {value}" + "owner": "回執負責人 {owner}", + "canary": "金絲雀批准 {value}" }, "metrics": { "overall": "完成度", "sources": "來源讀回", "cadences": "報告節奏", - "gates": "Owner gates", - "checks": "Receipt checks", + "gates": "負責人關卡", + "checks": "回執檢查", "approvals": "待批准", - "liveWrites": "Live writes" + "liveWrites": "正式寫入" }, "sections": { - "ownerGates": "Owner review gates", - "receiptPlan": "Receipt readback plan", - "boundaries": "仍維持關閉的 live 操作" + "ownerGates": "負責人審查關卡", + "receiptPlan": "回執讀回計畫", + "boundaries": "仍維持關閉的正式操作" }, "labels": { - "owner": "Owner", + "owner": "負責人", "requiredFields": "必填欄位", "acceptance": "驗收", "blockedActions": "阻擋操作", "evidence": "證據", - "arbiter": "arbiter {value}", - "receiptOwner": "receipt {value}", - "replayOwner": "replay {value}", - "env": "env {value}", - "cadenceDetail": "owner {owner} · {state} · confidence {confidence}", + "arbiter": "仲裁者 {value}", + "receiptOwner": "回執 {value}", + "replayOwner": "重放 {value}", + "env": "環境 {value}", + "cadenceDetail": "負責人 {owner} · {state} · 信心 {confidence}", "boundaryClosed": "保持 false / 0", "boundaryOpen": "異常開啟", - "truthBlockers": "truth blockers {count}", - "driftCandidates": "drift candidates {count}" + "truthBlockers": "真相阻擋 {count}", + "driftCandidates": "漂移候選 {count}" }, "boundaries": { - "gateway": "Gateway queue write", - "telegram": "Telegram 發送", + "gateway": "Gateway 佇列寫入", + "telegram": "Telegram 實發", "botApi": "Bot API 呼叫", - "receipt": "Receipt 正式寫入", + "receipt": "回執正式寫入", "production": "正式寫入", - "secret": "Secret / 付費 / 主機 / kubectl" + "secret": "機密 / 付費 / 主機 / kubectl" }, "riskTiers": { "low": "低風險", @@ -3940,7 +3940,7 @@ }, "reportNoWriteAnalysis": { "title": "P2-407 AI 報表 無寫入 分析", - "subtitle": "{current} → {next};分析建議 {recommendations};阻擋中的 runtime 操作 {blocked}。", + "subtitle": "{current} → {next};分析建議 {recommendations};阻擋中的執行期操作 {blocked}。", "badges": { "mode": "已提交快照", "room": "戰情室 {room}", @@ -3966,7 +3966,7 @@ "labels": { "score": "分數 {score}", "approvalRequired": "批准 {value}", - "gateDetail": "owner {owner} · 欄位 {fields} · 驗收 {checks}", + "gateDetail": "負責人 {owner} · 欄位 {fields} · 驗收 {checks}", "generated": "產生於 {generated}", "env": "環境 {value}", "redaction": "脫敏 {value}" @@ -3980,7 +3980,7 @@ }, "lowMediumWhitelist": { "title": "P2-408 中 / 低風險白名單", - "subtitle": "{current} → {next};候選 {candidates};阻擋中的 runtime 操作 {blocked}。", + "subtitle": "{current} → {next};候選 {candidates};阻擋中的執行期操作 {blocked}。", "badges": { "mode": "無正式執行白名單", "room": "戰情室 {room}", @@ -4000,13 +4000,13 @@ "sections": { "candidates": "中 / 低風險候選", "ownerGates": "負責人關卡", - "verifiers": "Dry-run 驗證器", + "verifiers": "乾跑驗證器", "truth": "白名單真相" }, "labels": { "verifier": "驗證器 {value}", "rollback": "回滾 {value}", - "gateDetail": "owner {owner} · 欄位 {fields} · 驗收 {checks}", + "gateDetail": "負責人 {owner} · 欄位 {fields} · 驗收 {checks}", "generated": "產生於 {generated}", "env": "環境 {value}", "redaction": "脫敏 {value}" @@ -4023,13 +4023,13 @@ }, "statuses": { "candidate_only_no_live_execution": "僅候選", - "dry_run_ready_no_live_execution": "dry-run 就緒", + "dry_run_ready_no_live_execution": "乾跑就緒", "owner_review_required_no_live_execution": "需負責人審查" } }, "highRiskOwnerQueue": { - "title": "P2-409 高風險 Owner Review Queue", - "subtitle": "{current} → {next};佇列 {queue};阻擋中的 runtime 操作 {blocked}。", + "title": "P2-409 高風險負責人審查佇列", + "subtitle": "{current} → {next};佇列 {queue};阻擋中的執行期操作 {blocked}。", "badges": { "mode": "高風險暫停", "room": "戰情室 {room}", @@ -4054,10 +4054,10 @@ }, "labels": { "packet": "封包 {value}", - "fields": "owner 欄位 {count}", + "fields": "負責人欄位 {count}", "highRoute": "高風險路由", "criticalRoute": "關鍵路由", - "ownerRequired": "需要 owner {value}", + "ownerRequired": "需要負責人 {value}", "verbalApproval": "口頭批准 {value}", "telegram": "Telegram 政策", "telegramDetail": "正式動作 {count}", @@ -4085,7 +4085,7 @@ }, "actionAuditLedger": { "title": "P2-410 AI Agent 行動審計帳本", - "subtitle": "{current} → {next};audit event {events};阻擋中的 runtime 操作 {blocked}。", + "subtitle": "{current} → {next};審計事件 {events};阻擋中的執行期操作 {blocked}。", "badges": { "mode": "不可變無寫入帳本", "immutable": "事件模板 {count}", @@ -4110,14 +4110,14 @@ "truth": "帳本真相" }, "labels": { - "fields": "audit 欄位 {count}", + "fields": "審計欄位 {count}", "sideEffects": "副作用 {count}", "auditDb": "Audit DB 寫入", "timelineKm": "Timeline / KM 寫入", "telegram": "Telegram 發送", "writeTotal": "正式寫入總數 {count}", "playbook": "PlayBook trust {value}", - "queueBot": "queue {queue} / bot {bot}", + "queueBot": "佇列 {queue} / Bot {bot}", "generated": "產生於 {generated}", "redaction": "脫敏 {value}", "ownerAccepted": "負責人已接受 {count}" @@ -4131,20 +4131,20 @@ "devops": "DevOps" }, "riskTiers": { - "low": "low", - "medium": "medium", - "high": "high", - "critical": "critical" + "low": "低風險", + "medium": "中風險", + "high": "高風險", + "critical": "關鍵風險" }, "stages": { - "candidate_classification": "candidate classification", - "dry_run_hold": "dry-run hold", - "owner_queue_pause": "owner queue pause", - "runtime_action_rejection": "runtime rejection", - "work_item_owner_review": "work item review", - "no_send_preview": "無發送 preview", - "notification_egress_guard": "egress guard", - "writeback_blocked": "writeback blocked" + "candidate_classification": "候選分類", + "dry_run_hold": "乾跑暫停", + "owner_queue_pause": "負責人佇列暫停", + "runtime_action_rejection": "執行期拒收", + "work_item_owner_review": "工作項負責人審查", + "no_send_preview": "無發送預覽", + "notification_egress_guard": "通知出口防護", + "writeback_blocked": "回寫已阻擋" } }, "actionOwnerEventBus": { @@ -4219,34 +4219,34 @@ }, "hostRunawayAiops": { "title": "P3-009 Host Runaway AIOps 閉環", - "subtitle": "{current} → {next};閉環階段 {stages};阻擋 runtime 操作 {blocked}。", + "subtitle": "{current} → {next};閉環階段 {stages};阻擋執行期操作 {blocked}。", "source": "{generated} · {current} → {next}", "badges": { - "host": "host {host}", - "deploy": "deploy {marker}", - "runtime": "runtime writes {value}" + "host": "主機 {host}", + "deploy": "部署標記 {marker}", + "runtime": "執行期寫入 {value}" }, "metrics": { "overall": "完成度", "stages": "閉環階段", - "alertLanes": "告警 lane", + "alertLanes": "告警分流", "assets": "資產回寫", - "liveWrites": "Live writes", - "orphans": "Orphan groups" + "liveWrites": "正式寫入", + "orphans": "孤兒群組" }, "sections": { "loopStages": "Monitor / Alert / PlayBook / KM 閉環", - "alertLanes": "告警分流 lane", - "boundaries": "仍維持關閉的 runtime 操作" + "alertLanes": "告警分流", + "boundaries": "仍維持關閉的執行期操作" }, "labels": { - "owner": "Owner", + "owner": "負責人", "evidence": "證據", "blockedActions": "阻擋操作", "boundaryClosed": "保持 false / 0", "boundaryOpen": "異常開啟", - "monitorUp": "monitor_up={value}", - "ciContainers": "CI containers={count}" + "monitorUp": "監控狀態={value}", + "ciContainers": "CI 容器={count}" }, "boundaries": { "runtime": "Runtime remediation", diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index e9557e654..6dfab3555 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,34 @@ +## 2026-06-19|治理頁 P2-406B~P3-009 可見狀態文案再收斂 + +**背景**:正式治理頁在 P2-407~P2-411 可見 smoke 後,仍發現同一段 automation inventory 與相鄰卡片有 `Owner gates`、`Receipt checks`、`Owner Review Queue`、`audit event`、`runtime 操作`、`Dry-run 驗證器`、`Live writes` 等半英文狀態詞。依文件語言鐵律、前台繁中規則與「不要把工作視窗對話內容放上頁面」要求,本輪只收斂使用者會看到的固定文案,不新增任何 runtime 能力。 + +**完成內容**: +- `apps/web/messages/zh-TW.json` 收斂 P2-406B、P2-407、P2-408、P2-409、P2-410、P3-009 的 title、subtitle、badge、metric、section、label、risk tier 與 stage。 +- `apps/web/messages/en.json` 已同步為同一份繁中鏡像,維持目前 `zh-TW` 與 mirror 內容一致。 +- 將 `owner / receipt / runtime / queue / audit / dry-run / live write` 類可見狀態詞改成負責人、回執、執行期、佇列、審計、乾跑、正式寫入等繁中語意。 +- 未修改 API、schema、snapshot、worker、Telegram sender、Bot API、Gateway queue、DB、KM、PlayBook、主機、K8s、Nginx 或 workflow。 + +**本地驗證**: +- `apps/web/messages/zh-TW.json` / `apps/web/messages/en.json` JSON parse 通過。 +- `WEB_MESSAGES_MIRROR_OK`。 +- P2-406B~P3-009 目標段落殘留字串檢查通過:`Owner Review Queue`、`Owner gates`、`Receipt checks`、`Live writes`、`Owner review gates`、`Receipt readback plan`、`Dry-run 驗證器`、`dry-run 就緒`、`audit event`、`runtime 操作` 等皆未命中。 +- `SECURITY_MIRROR_PROGRESS_GUARD_OK`。 +- `TELEGRAM_ALERT_READABILITY_GUARD_OK tests=10 ai_lanes=6 host_lanes=6 runtime_gate=0`。 +- `IWOOOS_CONFIG_CONTROL_GUARD_OK`。 +- `DOC_SECRET_SANITY_OK scanned_files=934`。 +- `git diff --check` 通過。 +- `pnpm --filter @awoooi/web typecheck` 因隔離 worktree 未安裝 `node_modules`,`tsc` 不存在而未執行完成;本段只改 JSON 文案與 LOGBOOK,待 Gitea CD 乾淨環境補驗。 + +**完成度同步**: +- 治理頁 P2-406B~P3-009 可見狀態文案本地收斂:`100%`。 +- 正式部署與 production desktop / mobile readback:`0%`,待本次推版與 CD 完成。 +- IwoooS headline:仍維持 `64%`;active runtime gate 仍 `0`。 +- Owner response accepted、event bus publish、audit DB write、timeline write、KM write、PlayBook trust write、Gateway queue write、Telegram send、Bot API call、worker dispatch、receipt production write、host write、kubectl action、destructive operation:全部仍 `0 / false`。 + +**下一步**:推送 Gitea main,等待 code-review / CD / post-deploy checks,取得 deploy marker 後重跑 `/zh-TW/governance?tab=automation-inventory` desktop / mobile production smoke,確認無水平溢出、無工作視窗片語、P2-407~P2-411 主要區塊可見且目標英文 drift 為 `0`。 + +**邊界**:這是前端可見文案與鏡像同步,不代表 Wazuh、Kali、Nginx drift、Telegram 告警或 AI Agent runtime remediation 已經啟用;任何主機、firewall、Nginx、Docker、K8s、active response 或 active scan 仍需獨立 owner gate、維護窗口、rollback owner 與驗證。 + ## 2026-06-19|P2-411 治理頁可見文案繁中收斂 **背景**:P2-411 正式 API 已可讀回,但 governance automation inventory 桌機 smoke 發現同頁既有卡片仍有 `No-write`、`No-send`、`live total`、`Verifier gates`、`owner accepted` 等舊英文可見文案。依全站繁中鐵律與「不得顯示工作視窗對話內容」要求,本輪把治理頁會露出的固定狀態短語收斂為繁中,保留 `Telegram`、`Bot API`、`runtime`、`Gateway`、`OpenClaw`、`Hermes`、`NemoTron` 等必要技術名詞。