Merge remote-tracking branch 'gitea/main' into codex/github-redacted-evidence-validator-20260627
Some checks failed
Ansible / Reboot Recovery Contract / validate (push) Waiting to run
CD Pipeline / tests (push) Waiting to run
Code Review / ai-code-review (push) Successful in 23s
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled

# Conflicts:
#	docs/LOGBOOK.md
This commit is contained in:
Your Name
2026-06-28 01:46:02 +08:00
8 changed files with 385 additions and 137 deletions

View File

@@ -1,5 +1,6 @@
from __future__ import annotations
import json
import runpy
from pathlib import Path
@@ -13,3 +14,36 @@ def test_awooop_controlled_automation_copy_guard_blocks_legacy_manual_gate_text(
)
guard["validate"](ROOT)
def test_awooop_controlled_automation_copy_guard_blocks_live_owner_review_copy(tmp_path: Path) -> None:
guard = runpy.run_path(
str(ROOT / "scripts" / "security" / "awooop-controlled-automation-copy-guard.py")
)
messages_path = tmp_path / "apps" / "web" / "messages" / "zh-TW.json"
messages_path.parent.mkdir(parents=True)
messages_path.write_text(
json.dumps({"awooop": {"workItems": {"status": "Owner Review 等待人工"}}}),
encoding="utf-8",
)
violations = guard["_collect_awooop_message_violations"](messages_path, tmp_path)
assert any("Owner Review" in violation for violation in violations)
assert any("等待人工" in violation for violation in violations)
def test_awooop_controlled_automation_copy_guard_allows_legacy_hitl_history(tmp_path: Path) -> None:
guard = runpy.run_path(
str(ROOT / "scripts" / "security" / "awooop-controlled-automation-copy-guard.py")
)
messages_path = tmp_path / "apps" / "web" / "messages" / "zh-TW.json"
messages_path.parent.mkdir(parents=True)
messages_path.write_text(
json.dumps({"awooop": {"approvals": {"legacyHitl": {"title": "既有 HITL 待人工處理"}}}}),
encoding="utf-8",
)
violations = guard["_collect_awooop_message_violations"](messages_path, tmp_path)
assert violations == []

View File

@@ -8505,7 +8505,7 @@
"detail": "來源事件是否回到 Run / Incident"
},
"gate": {
"label": "人工 Gate",
"label": "AI 受控 Gate",
"detail": "待處理工作 {work}"
},
"verify": {
@@ -8569,7 +8569,7 @@
"autoRepairedVerified": "已驗證自動修復",
"executionUnverified": "已執行但未驗證",
"executionFailed": "執行失敗",
"manualRequiredNoAction": "人工介入NO_ACTION",
"manualRequiredNoAction": "AI 受控補齊NO_ACTION",
"approvalRequired": "等待審批",
"observedNotExecuted": "已觀測但未執行",
"receivedOnly": "僅收到告警"
@@ -8730,7 +8730,7 @@
},
"readinessRefs": {
"primaryReadiness": "GitHub 主要來源就緒度閘門仍是候選狀態,不能觸發專案庫建立或可見性變更。",
"ownerValidation": "負責人回覆驗證彙總顯示四包回覆資料都仍等待人工回覆與驗收。",
"ownerValidation": "負責人回覆驗證彙總顯示四包回覆資料都仍等待負責人脫敏回覆與受控驗收。",
"rollbackAdr": "回復架構決策紀錄尚未完成負責人批准的演練,因此不能把 GitHub 切為主要來源。",
"workflowInventory": "工作流程 / 機密名稱清冊只收集名稱與路由,不收機密明文值、不改 GitHub 機密設定。"
}
@@ -8810,7 +8810,7 @@
},
"reviewerChecklist": {
"label": "審查清單",
"detail": "9 個清單項目給人工審查者判讀。"
"detail": "9 個清單項目給受控驗收流程判讀。"
},
"reviewerOutcomes": {
"label": "審查結果",
@@ -8911,7 +8911,7 @@
},
"owner": {
"title": "接手",
"detail": "AI 受控閘門與負責人審查"
"detail": "AI 受控閘門與受控 review"
},
"verifier": {
"title": "驗證",
@@ -8988,7 +8988,7 @@
},
"learning": {
"title": "KM / Trust 回寫",
"detail": "確認 KM、PlayBook trust 與學習責任已沉澱,避免下次重複人工判斷。"
"detail": "確認 KM、PlayBook trust 與學習責任已沉澱,避免下次重複 AI 補齊判斷。"
}
}
},
@@ -9035,7 +9035,7 @@
"items": {
"km": {
"title": "Knowledge Base",
"detail": "Hermes 草稿、陳舊 KM、負責人審查 與 stale ratio 回測。",
"detail": "Hermes 草稿、陳舊 KM、AI 受控 review 與 stale ratio 回測。",
"next": "下一步:把待補 KM 與 Incident / PlayBook / verifier 結果綁定。"
},
"playbook": {
@@ -9061,7 +9061,7 @@
},
"sources": {
"knowledgeBase": "Knowledge Base",
"ownerReview": "Owner review",
"ownerReview": "Controlled review",
"staleRatio": "Stale ratio",
"statusChain": "Status-chain",
"remediationQueue": "補救佇列",
@@ -9078,17 +9078,17 @@
}
},
"reportSourceGapOwnerReview": {
"eyebrow": "報表資料源 負責人審查",
"eyebrow": "報表資料源 AI 受控補齊",
"title": "報表資料源 PlayBook / Verifier 處置板",
"subtitle": "把 report-source-gap 從報表頁接到 Work Items每個缺口都要有 PlayBook 草案、Verifier 計畫、腳本 readback、排程 無發送 與 負責人審查。",
"loading": "正在讀取 report-source-gap 負責人審查 read model。",
"subtitle": "把 report-source-gap 從報表頁接到 Work Items每個缺口都要有 PlayBook 草案、Verifier 計畫、腳本 readback、排程無發送與 AI 受控 review。",
"loading": "正在讀取 report-source-gap AI 受控補齊 read model。",
"unavailable": "報表資料源 read model 尚未回應;不能把報表全 0 或缺資料判定為健康。",
"empty": "目前沒有 report-source-gap 負責人審查 卡。",
"empty": "目前沒有 report-source-gap AI 受控補齊卡。",
"boundaryTitle": "不可誤讀合約",
"boundary": "live Telegram 發送={live}runtime gate={gate}。這裡只做草案與 負責人審查讀回,不發送、不排程、不執行。",
"boundary": "live Telegram 發送={live}runtime gate={gate}。這裡只做草案與 AI 受控 review 讀回,不發送、不排程、不執行。",
"openReports": "回報表總控",
"ownerRequired": "需 負責人審查",
"ownerOptional": "負責人審查 可後補",
"ownerRequired": "需 AI 受控補齊",
"ownerOptional": "AI 受控補齊可後補",
"scheduleBoundary": "排程仍維持 無發送 preview",
"fieldsTitle": "PlayBook 必填欄位",
"checksTitle": "Verifier 檢查",
@@ -9154,7 +9154,7 @@
"title": "AI Provider primary lane 修復工作項"
},
"reportSourceGapOwnerReview": {
"title": "報表資料源 PlayBook / Verifier 負責人審查"
"title": "報表資料源 PlayBook / Verifier AI 受控補齊"
},
"configDriftFsm": {
"title": "Config Drift fingerprint 狀態機"
@@ -9166,7 +9166,7 @@
"title": "Telegram 詳情 / 歷史改為 DB 真相優先"
},
"callbackOwnerReview": {
"title": "Callback 未匹配 KM Owner Review 工作項"
"title": "Callback 未匹配 KM Controlled Review 工作項"
},
"callbackTraceRecoveryBacklog": {
"title": "Callback trace 復原 backlog"
@@ -9204,9 +9204,9 @@
"autoRepair": "必須同時有 auto_repair、verification_result=success與KM 回寫",
"recurrenceWorkItems": "Run 完成無修復、修復失敗與 AI 受控閘門必須進入可追蹤工作項",
"aiRouteRepairWorkItem": "Provider lane 降級時必須顯示 evidence、owner、PlayBook候選與是否可自動修復",
"reportSourceGapOwnerReview": "每個 report-source-gap 必須有 PlayBook 草案、Verifier 計畫、腳本 readback、排程 無發送 與 負責人審查;不得把全 0 當健康或自動執行授權",
"reportSourceGapOwnerReview": "每個 report-source-gap 必須有 PlayBook 草案、Verifier 計畫、腳本 readback、排程無發送與 AI 受控 review;不得把全 0 當健康或自動執行授權",
"configDriftFsm": "同一 drift fingerprint 必須顯示重複、PR、零 diff、交接與下一步",
"remediationQueue": "每筆 degraded / failed / timeout都必須映射到重跑、重驗、Ticket或人工檢查",
"remediationQueue": "每筆 degraded / failed / timeout都必須映射到重跑、重驗、Ticket或 AI 受控檢查",
"telegramCallbacks": "按下詳情與歷史不能再只依賴 Redis TTL或舊快照",
"callbackOwnerReview": "Telegram 詳情 / 歷史若未連到 KM owner-review必須變成可追蹤工作項",
"callbackTraceRecoveryBacklog": "Callback trace 缺口必須顯示復原訊號、24h decay與backlog 下一步",
@@ -9260,7 +9260,7 @@
"driftFingerprintNext": "下一步:{step}",
"driftFingerprintRemediation": "修復:{kind} / {status};驗證 Report{report}",
"driftFingerprintEmpty": "尚無 Config Drift fingerprint 狀態",
"remediationQueue": "補救工作:{total}AI可接手{ready}人工{human}",
"remediationQueue": "補救工作:{total}AI可接手{ready}AI補齊{human}",
"telegramCallbacks": "目前修補 Telegram callback 查詢鏈與歷史摘要",
"telegramCallbacksLive": "只讀 callback toast 400 已非致命;詳情 / 歷史改由 DB 真相鏈 回覆",
"callbackOwnerReview": "Callback owner-review 缺口:{open} 個 opencallback evidence{total}",
@@ -9273,7 +9273,7 @@
"callbackOwnerReviewBlocker": "卡點:{reason}",
"callbackOwnerReviewEmpty": "近期 callback evidence 均已匹配或尚無資料",
"callbackTraceRecoveryBacklog": "Callback trace backlog缺 trace {missing}1h {recent1h}24h {recent24h}gap 後 traced {recovered};復原 {status}",
"callbackTraceRecoveryAction": "接續處理:{action};需要人工={human}",
"callbackTraceRecoveryAction": "接續處理:{action};需AI補齊={human}",
"callbackTraceRecoveryOwner": "主責AwoooP Callback Evidence協作TelegramGateway / 執行時間線",
"callbackTraceRecoveryEvidenceSurface": "查證入口Runs / TG Callback 證據",
"callbackTraceRecoveryClosure": "關閉條件1h=0 且 24h=0目前 1h {recent1h} / 24h {recent24h}",
@@ -9285,7 +9285,7 @@
"governanceUnavailable": "治理事件 API 目前無法回應;待派送:{queued}",
"governanceQueueMissing": "治理 dispatch 表尚未就緒;未解治理告警:{unresolved}",
"knowledgeHealthcheck": "KM healthcheck 派工:{total};目前階段:{stage}",
"knowledgeOwner": "主責:{lead}人工覆核:{human}",
"knowledgeOwner": "主責:{lead}受控覆核:{human}",
"knowledgeNext": "下一步:{action}",
"knowledgeDrafts": "KM 審核草稿:{drafts};重複草稿:{duplicates}",
"knowledgeStaleCandidates": "陳舊 KM 優先清單:{total} 筆;最高 {top} / {tier}",
@@ -9358,7 +9358,7 @@
"investigateActiveGap": "仍有新缺口,檢查新 Telegram reply_markup trace 寫入",
"verifyInstrumentation": "沒有復原訊號,檢查 TelegramGateway / 時間線觀測埋點",
"waitDecay": "等待舊 backlog 24h decay不需 AI 補齊處理",
"observeRecovery": "觀察復原訊號,先不開人工任務"
"observeRecovery": "觀察復原訊號,先不開受控任務"
},
"claim": {
"ready": "完整自動修復聲明:可宣稱",
@@ -9390,7 +9390,7 @@
"stage": "階段:{stage}",
"next": "下一步:{action}",
"lead": "主責:{agent}",
"human": "人工覆核:{owner}",
"human": "受控覆核:{owner}",
"support": "支援:{agents}",
"worker": "Worker 狀態:{status}",
"draft": "KM 草稿:{id}",
@@ -9417,17 +9417,17 @@
"openKnowledge": "開啟 KM",
"queueReview": "排入審核",
"queueingReview": "排入中",
"queueFailed": "排入 負責人審查 失敗;請重新整理後再確認此 KM 是否仍為陳舊候選。",
"queueFailed": "排入 AI 受控 review 失敗;請重新整理後再確認此 KM 是否仍為陳舊候選。",
"queueResult": "審核狀態:{status}Dispatch{dispatch}Event{event}",
"ownerReviewState": "Owner review{status};階段:{stage}Dispatch{dispatch}",
"guardrail": "防護:讀取不寫入={writes}人工覆核={review}",
"ownerReviewState": "Controlled review{status};階段:{stage}Dispatch{dispatch}",
"guardrail": "防護:讀取不寫入={writes}受控覆核={review}",
"queueStatuses": {
"dry_run": "乾跑",
"queued": "已排入 負責人審查",
"already_queued": "已在 負責人審查"
"queued": "已排入 AI 受控 review",
"already_queued": "已在 AI 受控 review"
},
"operationRail": {
"title": "Owner Review 操作軌道",
"title": "Controlled Review 操作軌道",
"subtitle": "把陳舊 KM 從偵測、審核、乾跑、確認、寫回到比例回測收斂成一條可掃描流程。",
"nextAction": "建議下一步",
"guardrailTitle": "寫入防護",
@@ -9451,7 +9451,7 @@
"flow": {
"node": {
"detected": "偵測",
"ownerReview": "Owner Review",
"ownerReview": "Controlled Review",
"dryRun": "乾跑預覽",
"ownerConfirm": "Owner 確認",
"writeback": "寫回 KM",
@@ -9484,12 +9484,12 @@
},
"guardrail": {
"writesOnRead": "讀取即寫入:{value}",
"manualReview": "人工覆核必要:{value}",
"manualReview": "受控覆核必要:{value}",
"batchWrites": "批次寫入允許:{value}"
}
},
"singleItemRail": {
"title": "單筆 Owner Review 處理",
"title": "單筆 Controlled Review 處理",
"subtitle": "先乾跑取得 plan fingerprintOwner 確認後才允許寫 KM、寫 audit 並排比例回測。",
"outcome": "策略:{outcome}",
"writeGate": "確認寫 KM={writes};可確認={confirm}",
@@ -9507,10 +9507,10 @@
"dispatch": "Dispatch {dispatch}",
"dryRunReady": "已取得 fingerprint可進入 owner confirm gate",
"dryRunPending": "按單筆乾跑取得 fingerprint",
"dryRunBlocked": "需先排入 負責人審查",
"dryRunBlocked": "需先排入 AI 受控 review",
"confirmReady": "確認後會寫 KM / audit並排 recheck",
"confirmWaiting": "等待 乾跑 fingerprint",
"confirmDone": "負責人審查 已完成",
"confirmDone": "AI 受控 review 已完成",
"recheckDone": "Recheck {recheck}",
"recheckWaiting": "寫回完成後才會產生 recheck"
},
@@ -9520,7 +9520,7 @@
}
},
"ownerReviewInbox": {
"title": "Owner review 工作台",
"title": "Controlled review 工作台",
"subtitle": "顯示已排入 waiting_owner_review的 P0/P1 KM逐筆乾跑與確認完成。",
"total": "待審 {count}",
"returned": "顯示 {count}",
@@ -9532,7 +9532,7 @@
},
"burnDown": {
"title": "Stale ratio burn-down",
"subtitle": "把 負責人審查、completion audit與recheck snapshot 對齊,確認陳舊比例是否真的下降。",
"subtitle": "把 AI 受控 review、completion audit與recheck snapshot 對齊,確認陳舊比例是否真的下降。",
"statuses": "狀態:{status}",
"status": {
"above_threshold": "仍高於門檻",
@@ -9544,26 +9544,26 @@
"empty": "尚無 負責人批准 completion audit。",
"currentRatio": "目前陳舊比例",
"currentCount": "陳舊 / 總數",
"ownerReviews": "Owner review",
"ownerReviews": "Controlled review",
"ownerReviewCounts": "待審 {pending} / 完成 {completed}",
"latestDelta": "最新變化",
"delta": "陳舊 {stale} / 比例 {ratio}",
"auditTotal": "Completion audit {count}",
"recheckTotal": "Recheck {count}",
"guardrail": "讀取不寫入={writes}人工覆核={review}",
"guardrail": "讀取不寫入={writes}受控覆核={review}",
"itemState": "階段:{stage};結果:{outcome}",
"itemRefs": "來源:{source};複查:{recheck}"
},
"completionQueue": {
"title": "Completion分流佇列",
"subtitle": "把 負責人審查 拆成可乾跑、卡住、已完成、失敗,避免只看到告警卻不知道下一步。",
"subtitle": "把 AI 受控 review 拆成可乾跑、卡住、已完成、失敗,避免只看到告警卻不知道下一步。",
"ready": "可處理 {count}",
"blocked": "卡住 {count}",
"completed": "完成 {count}",
"failed": "失敗 {count}",
"pending": "待處理 dispatch {count}",
"guardrail": "讀取不寫入={writes}人工覆核={review};批次寫入={batch}",
"unavailable": "completion queue API 尚未回應;目前只能從 負責人審查 工作台逐筆確認。",
"guardrail": "讀取不寫入={writes}受控覆核={review};批次寫入={batch}",
"unavailable": "completion queue API 尚未回應;目前只能從 AI 受控 review 工作台逐筆確認。",
"empty": "目前沒有 owner-review completion 工作項。",
"state": "分流:{readiness};階段:{stage}",
"next": "下一步:{action};結果:{outcome}",
@@ -9608,7 +9608,7 @@
"result": "Batch dispatch{batch}Event{event};已排入 {queued};已在審核 {already};略過 {skipped}",
"statuses": {
"dry_run": "批次乾跑完成",
"queued": "批次已排入 負責人審查",
"queued": "批次已排入 AI 受控 review",
"noop_already_queued": "全部已在審核或已處理",
"unknown": "批次狀態待確認"
},
@@ -9625,7 +9625,7 @@
"previewing": "預覽中",
"confirm": "確認完成",
"confirming": "寫入中",
"previewFailed": "乾跑預覽失敗;請重新整理後確認 負責人審查 dispatch仍有效。",
"previewFailed": "乾跑預覽失敗;請重新整理後確認 AI 受控 review dispatch仍有效。",
"confirmFailed": "確認完成失敗;後端可能偵測到 KM或dispatch 狀態已變更。",
"missingDispatch": "缺少 owner-review dispatch請先排入審核。",
"missingPreviewFingerprint": "缺少乾跑 plan fingerprint請先重新執行乾跑預覽。",
@@ -9739,8 +9739,8 @@
"ai_analyzed": "AI 已分析",
"queued_kb_healthcheck": "已排入 KM healthcheck",
"draft_km_updates": "產生 KM 更新草稿",
"batch_owner_review_previewed": "批次 負責人審查 已乾跑",
"batch_owner_review_queued": "批次已排入 負責人審查",
"batch_owner_review_previewed": "批次 AI 受控 review 已乾跑",
"batch_owner_review_queued": "批次已排入 AI 受控 review",
"batch_noop_already_queued": "批次無需重複排入",
"waiting_owner_review": "等待 owner 審核",
"owner_updates_or_archives_km": "Owner 更新或封存 KM",
@@ -9752,7 +9752,7 @@
"km_duplicate_archive_after_owner_approval": "Owner 審核後封存重複草稿",
"km_governance_rechecked": "KM 治理已回測",
"km_governance_close_or_continue": "關閉或繼續治理",
"needs_manual_km_triage": "需要人工整理 KM",
"needs_manual_km_triage": "需要 AI 整理 KM",
"cancelled": "已取消",
"queued_for_review": "等待治理審核",
"dispatched": "已派遣",
@@ -9765,7 +9765,7 @@
},
"driftFingerprint": {
"title": "Config Drift fingerprint 狀態",
"subtitle": "把每小時 drift report 收斂成同一狀態鏈,顯示 PR、零 diff、P0 去重與人工交接",
"subtitle": "把每小時 drift report 收斂成同一狀態鏈,顯示 PR、零 diff、P0 去重與 AI 受控交接",
"unavailable": "drift fingerprint state API 尚未回應,不能判定是否重複、是否已有 PR或是否已交接。",
"occurrences": "12h {count} 次",
"risk": "HIGH {high} / MEDIUM {medium} / INFO {info}",
@@ -9775,8 +9775,8 @@
"p0Dedup": "P0 去重:{enabled};視窗 {hours}h",
"writes": "寫入drift={drift}incident={incident}repair={repair}ticket={ticket}",
"fsmStates": {
"pending_human": "等待人工",
"pending_human_repeated": "重複等待人工",
"pending_human": "等待 AI 受控補齊",
"pending_human_repeated": "AI 受控補齊重試",
"pr_open_zero_diff": "PR 開啟但零 diff",
"pr_open_waiting_review": "PR 等待 review",
"pr_merged_unverified": "PR 已 merge 待驗證",
@@ -9795,7 +9795,7 @@
"close_zero_diff_pr_and_prepare_real_yaml_patch": "關閉零 diff PR準備真實 YAML patch",
"review_pr_then_merge_or_reject": "review PR 後 merge或reject",
"verify_git_baseline_then_mark_adopted": "驗證 Git baseline 後標記採納",
"operator_review_handoff_and_execute_manual_plan": "Operator review交接並執行人工方案",
"operator_review_handoff_and_execute_manual_plan": "Operator review交接並執行受控方案",
"run_verification_scan_then_record_result": "執行驗證掃描並記錄結果",
"open_manual_investigation_with_failed_verification": "建立 AI verifier / rollback 調查並附上失敗驗證",
"verify_k8s_matches_git_baseline": "驗證 K8s與Git baseline 一致",
@@ -9825,7 +9825,7 @@
"git_adopted": "Git 採納",
"git_rollback": "Git 回滾",
"zero_diff_pr_cleanup": "零 diff PR 清理",
"manual_noop": "人工確認無需動作",
"manual_noop": "AI 受控確認無需動作",
"unknown": "未知"
},
"remediationStatuses": {
@@ -9881,7 +9881,7 @@
"repairCandidateDraft": {
"eyebrow": "修復候選草案",
"title": "PlayBook 草案處置板",
"subtitle": "這筆告警已確認不能把通用兜底或診斷型 PlayBook 當成修復命令;下一步是補齊服務專屬修復草案,通過 負責人審查 與風險閘門後才可能進入審批或執行。",
"subtitle": "這筆告警已確認不能把通用兜底或診斷型 PlayBook 當成修復命令;下一步是補齊服務專屬修復草案,通過 AI 受控 review 與風險閘門後才可能進入審批或執行。",
"statusValue": "等待 PlayBook 草案",
"metrics": {
"status": "狀態",
@@ -9923,7 +9923,7 @@
"repair_command_template": "修復模板",
"rollback_command_template": "Rollback",
"verifier_plan": "Verifier",
"owner_review": "Owner review",
"owner_review": "Controlled review",
"maintenance_window": "維護窗口",
"blast_radius": "影響範圍",
"km_writeback_owner": "KM owner",
@@ -9960,7 +9960,7 @@
"detail": "建立服務專屬修復、回滾與 verifier 計畫。"
},
"review": {
"title": "Owner review",
"title": "Controlled review",
"detail": "確認命令安全、適用條件與 PlayBook trust。"
},
"approval": {
@@ -9978,8 +9978,8 @@
"verifier_plan": "修復後如何驗證成功、失敗與是否要升級 AI 補齊或 break-glass。",
"owner_review": "負責人、風險等級、適用條件與批准紀錄。",
"script_or_ansible_ref": "腳本或 Ansible 參照,必須能被安全路由與 reviewer 查到。",
"schedule_or_monitoring_rule_ref": "排程、監控規則或 recurrence 偵測參照,避免同類告警只靠人工記憶或口頭交接。",
"km_update_plan": "KM 更新草稿與 負責人審查 計畫,避免錯知識直接固化。",
"schedule_or_monitoring_rule_ref": "排程、監控規則或 recurrence 偵測參照,避免同類告警只靠個人口頭記憶或交接。",
"km_update_plan": "KM 更新草稿與 AI 受控 review 計畫,避免錯知識直接固化。",
"automation_asset_record": "自動化資產紀錄,包含 asset id、owner、狀態、來源與下一步。"
},
"assetsTitle": "自動化資產沉澱板",
@@ -9987,7 +9987,7 @@
"km": {
"type": "KM",
"owner": "Hermes",
"visibility": "Knowledge Base根因、處置、引用來源與 負責人審查。",
"visibility": "Knowledge Base根因、處置、引用來源與 AI 受控 review。",
"status": "待草稿"
},
"playbook": {
@@ -10020,13 +10020,13 @@
"incident_timeline_stage_update": "Incident timeline 必須標記目前階段、處置包、owner 與下一步。",
"execution_or_manual_handoff_result": "無執行時也要寫入 AI 補齊或 break-glass 結果,不能只留下批准紀錄。",
"verifier_result": "Verifier 要能記錄成功、失敗、降級或尚未執行。",
"km_update_draft": "Hermes 產生 KM 草稿,負責人審查 後才可寫入高影響知識。",
"km_update_draft": "Hermes 產生 KM 草稿,受控 review 後才可寫入高影響知識。",
"playbook_trust_update": "PlayBook 成功 / 失敗 / 未執行都要回寫 trust 與適用條件。",
"automation_asset_inventory_record": "資產清冊要留下 KM、PlayBook、腳本、排程、Verifier 的 ID 與狀態。"
},
"guardrailTitle": "阻擋原因與禁止誤讀",
"blocker": "目前缺少可信修復候選;系統必須建立 AI 補齊草案工作項,不能把 no-action、診斷結果或通用兜底當作已修復。",
"nextStep": "請先補 PlayBook 草案與 MCP evidence再由 負責人審查 決定是否送審批;在此之前不會自動執行、不會寫入成功修復,也不會更新 KM 為已解決。",
"nextStep": "請先補 PlayBook 草案與 MCP evidence再由 AI 受控 review 決定是否送審批;在此之前不會自動執行、不會寫入成功修復,也不會更新 KM 為已解決。",
"chainTitle": "真相鏈對照",
"chain": {
"stage": "目前階段",
@@ -11385,7 +11385,7 @@
"blockedGatesDetail": "有 missing / failed 就不能宣稱完整自動化。",
"readiness": "流程健康度",
"warningGates": "Warning Gate",
"warningGatesDetail": "仍可觀測,但需要補脈絡或人工判斷。"
"warningGatesDetail": "仍可觀測,但需要 AI 補脈絡或受控判讀。"
},
"gates": {
"alert_intake": "告警入庫 / 通知鏡像",
@@ -11431,7 +11431,7 @@
"runRefs": {
"mirrorRunState": "AwoooP 執行監控可以理解資安鏡像,但只能當只讀候選。",
"readOnlyDryRun": "若未來產生試跑證據,也必須維持只讀與 AI 受控閘門語義。",
"ownerResponse": "負責人回覆已收到 / 已接受仍為 0任何執行進一步行動都要等待人工收件。",
"ownerResponse": "負責人回覆已收到 / 已接受仍為 0任何執行進一步行動都要等待負責人脫敏證據收件。",
"activeGates": "主動執行期閘門仍為 0不從執行監控頁開閘門或建立動作按鈕。"
}
},
@@ -11544,7 +11544,7 @@
"statusRollup": "AwoooP / 資安工作線的共同狀態入口,只彙整進度與安全閘門。",
"postureProjection": "IwoooS 前端態勢、主機覆蓋、負責人回覆焦點與禁止動作的投影契約。",
"ownerValidation": "S4.9-S4.12 負責人回覆已收到 / 已接受分離與審查者檢查口徑。",
"rolloutPolicy": "低摩擦、先觀測、封鎖前先由負責人審查的推出政策。"
"rolloutPolicy": "低摩擦、先觀測、封鎖前先由 AI 受控 review 判讀的推出政策。"
}
},
"githubPrimaryReadinessCandidate": {
@@ -11571,7 +11571,7 @@
"contractRefs": {
"primaryReadiness": "GitHub 主要來源一致性、負責人、分支 / 標籤參照、工作流程與回復前置缺口的主就緒度閘門。",
"ownerValidation": "四包負責人回覆的已收到 / 已接受 / 已拒收分離與審查者檢查口徑。",
"rollbackAdr": "9 個範圍內專案庫的回復 ADR 草案、負責人審查與驗證窗口。",
"rollbackAdr": "9 個範圍內專案庫的回復 ADR 草案、AI 受控 review 與驗證窗口。",
"workflowInventory": "工作流程、執行器、部署金鑰、分支保護、CODEOWNERS與機密名稱清冊只收名稱不收明文值。",
"postureProjection": "IwoooS 用來呈現 GitHub就緒度狀態板與禁止動作的前端投影。"
}
@@ -11835,7 +11835,7 @@
},
"securityOwnerResponseGate": {
"title": "IwoooS 負責人回覆只讀審查焦點",
"subtitle": "AwoooP 審批佇列只顯示 S4.9-S4.12 負責人回覆的下一個人工收件焦點;這不是審批紀錄,也不會開執行期閘門。",
"subtitle": "AwoooP 審批佇列只顯示 S4.9-S4.12 負責人回覆的下一個脫敏證據收件焦點;這不是審批紀錄,也不會開執行期閘門。",
"badge": "只讀焦點",
"ownerChecksTitle": "負責人回覆收件順序",
"boundaryLabel": "審批邊界",
@@ -11930,7 +11930,7 @@
"accepted": "已接受",
"acceptedDetail": "目前仍為 0只有脫敏證據通過驗收後才能改變。",
"rejected": "已拒收",
"rejectedDetail": "目前仍為 0未進入人工驗收前不得產生拒收結果。",
"rejectedDetail": "目前仍為 0未進入受控驗收前不得產生拒收結果。",
"displaySections": "顯示區塊",
"displaySectionsDetail": "8 個顯示區塊只用於說明驗收流程、證據路由與邊界。"
},

View File

@@ -8505,7 +8505,7 @@
"detail": "來源事件是否回到 Run / Incident"
},
"gate": {
"label": "人工 Gate",
"label": "AI 受控 Gate",
"detail": "待處理工作 {work}"
},
"verify": {
@@ -8569,7 +8569,7 @@
"autoRepairedVerified": "已驗證自動修復",
"executionUnverified": "已執行但未驗證",
"executionFailed": "執行失敗",
"manualRequiredNoAction": "人工介入NO_ACTION",
"manualRequiredNoAction": "AI 受控補齊NO_ACTION",
"approvalRequired": "等待審批",
"observedNotExecuted": "已觀測但未執行",
"receivedOnly": "僅收到告警"
@@ -8730,7 +8730,7 @@
},
"readinessRefs": {
"primaryReadiness": "GitHub 主要來源就緒度閘門仍是候選狀態,不能觸發專案庫建立或可見性變更。",
"ownerValidation": "負責人回覆驗證彙總顯示四包回覆資料都仍等待人工回覆與驗收。",
"ownerValidation": "負責人回覆驗證彙總顯示四包回覆資料都仍等待負責人脫敏回覆與受控驗收。",
"rollbackAdr": "回復架構決策紀錄尚未完成負責人批准的演練,因此不能把 GitHub 切為主要來源。",
"workflowInventory": "工作流程 / 機密名稱清冊只收集名稱與路由,不收機密明文值、不改 GitHub 機密設定。"
}
@@ -8810,7 +8810,7 @@
},
"reviewerChecklist": {
"label": "審查清單",
"detail": "9 個清單項目給人工審查者判讀。"
"detail": "9 個清單項目給受控驗收流程判讀。"
},
"reviewerOutcomes": {
"label": "審查結果",
@@ -8911,7 +8911,7 @@
},
"owner": {
"title": "接手",
"detail": "AI 受控閘門與負責人審查"
"detail": "AI 受控閘門與受控 review"
},
"verifier": {
"title": "驗證",
@@ -8988,7 +8988,7 @@
},
"learning": {
"title": "KM / Trust 回寫",
"detail": "確認 KM、PlayBook trust 與學習責任已沉澱,避免下次重複人工判斷。"
"detail": "確認 KM、PlayBook trust 與學習責任已沉澱,避免下次重複 AI 補齊判斷。"
}
}
},
@@ -9035,7 +9035,7 @@
"items": {
"km": {
"title": "Knowledge Base",
"detail": "Hermes 草稿、陳舊 KM、負責人審查 與 stale ratio 回測。",
"detail": "Hermes 草稿、陳舊 KM、AI 受控 review 與 stale ratio 回測。",
"next": "下一步:把待補 KM 與 Incident / PlayBook / verifier 結果綁定。"
},
"playbook": {
@@ -9061,7 +9061,7 @@
},
"sources": {
"knowledgeBase": "Knowledge Base",
"ownerReview": "Owner review",
"ownerReview": "Controlled review",
"staleRatio": "Stale ratio",
"statusChain": "Status-chain",
"remediationQueue": "補救佇列",
@@ -9078,17 +9078,17 @@
}
},
"reportSourceGapOwnerReview": {
"eyebrow": "報表資料源 負責人審查",
"eyebrow": "報表資料源 AI 受控補齊",
"title": "報表資料源 PlayBook / Verifier 處置板",
"subtitle": "把 report-source-gap 從報表頁接到 Work Items每個缺口都要有 PlayBook 草案、Verifier 計畫、腳本 readback、排程 無發送 與 負責人審查。",
"loading": "正在讀取 report-source-gap 負責人審查 read model。",
"subtitle": "把 report-source-gap 從報表頁接到 Work Items每個缺口都要有 PlayBook 草案、Verifier 計畫、腳本 readback、排程無發送與 AI 受控 review。",
"loading": "正在讀取 report-source-gap AI 受控補齊 read model。",
"unavailable": "報表資料源 read model 尚未回應;不能把報表全 0 或缺資料判定為健康。",
"empty": "目前沒有 report-source-gap 負責人審查 卡。",
"empty": "目前沒有 report-source-gap AI 受控補齊卡。",
"boundaryTitle": "不可誤讀合約",
"boundary": "live Telegram 發送={live}runtime gate={gate}。這裡只做草案與 負責人審查讀回,不發送、不排程、不執行。",
"boundary": "live Telegram 發送={live}runtime gate={gate}。這裡只做草案與 AI 受控 review 讀回,不發送、不排程、不執行。",
"openReports": "回報表總控",
"ownerRequired": "需 負責人審查",
"ownerOptional": "負責人審查 可後補",
"ownerRequired": "需 AI 受控補齊",
"ownerOptional": "AI 受控補齊可後補",
"scheduleBoundary": "排程仍維持 無發送 preview",
"fieldsTitle": "PlayBook 必填欄位",
"checksTitle": "Verifier 檢查",
@@ -9154,7 +9154,7 @@
"title": "AI Provider primary lane 修復工作項"
},
"reportSourceGapOwnerReview": {
"title": "報表資料源 PlayBook / Verifier 負責人審查"
"title": "報表資料源 PlayBook / Verifier AI 受控補齊"
},
"configDriftFsm": {
"title": "Config Drift fingerprint 狀態機"
@@ -9166,7 +9166,7 @@
"title": "Telegram 詳情 / 歷史改為 DB 真相優先"
},
"callbackOwnerReview": {
"title": "Callback 未匹配 KM Owner Review 工作項"
"title": "Callback 未匹配 KM Controlled Review 工作項"
},
"callbackTraceRecoveryBacklog": {
"title": "Callback trace 復原 backlog"
@@ -9204,9 +9204,9 @@
"autoRepair": "必須同時有 auto_repair、verification_result=success與KM 回寫",
"recurrenceWorkItems": "Run 完成無修復、修復失敗與 AI 受控閘門必須進入可追蹤工作項",
"aiRouteRepairWorkItem": "Provider lane 降級時必須顯示 evidence、owner、PlayBook候選與是否可自動修復",
"reportSourceGapOwnerReview": "每個 report-source-gap 必須有 PlayBook 草案、Verifier 計畫、腳本 readback、排程 無發送 與 負責人審查;不得把全 0 當健康或自動執行授權",
"reportSourceGapOwnerReview": "每個 report-source-gap 必須有 PlayBook 草案、Verifier 計畫、腳本 readback、排程無發送與 AI 受控 review;不得把全 0 當健康或自動執行授權",
"configDriftFsm": "同一 drift fingerprint 必須顯示重複、PR、零 diff、交接與下一步",
"remediationQueue": "每筆 degraded / failed / timeout都必須映射到重跑、重驗、Ticket或人工檢查",
"remediationQueue": "每筆 degraded / failed / timeout都必須映射到重跑、重驗、Ticket或 AI 受控檢查",
"telegramCallbacks": "按下詳情與歷史不能再只依賴 Redis TTL或舊快照",
"callbackOwnerReview": "Telegram 詳情 / 歷史若未連到 KM owner-review必須變成可追蹤工作項",
"callbackTraceRecoveryBacklog": "Callback trace 缺口必須顯示復原訊號、24h decay與backlog 下一步",
@@ -9260,7 +9260,7 @@
"driftFingerprintNext": "下一步:{step}",
"driftFingerprintRemediation": "修復:{kind} / {status};驗證 Report{report}",
"driftFingerprintEmpty": "尚無 Config Drift fingerprint 狀態",
"remediationQueue": "補救工作:{total}AI可接手{ready}人工{human}",
"remediationQueue": "補救工作:{total}AI可接手{ready}AI補齊{human}",
"telegramCallbacks": "目前修補 Telegram callback 查詢鏈與歷史摘要",
"telegramCallbacksLive": "只讀 callback toast 400 已非致命;詳情 / 歷史改由 DB 真相鏈 回覆",
"callbackOwnerReview": "Callback owner-review 缺口:{open} 個 opencallback evidence{total}",
@@ -9273,7 +9273,7 @@
"callbackOwnerReviewBlocker": "卡點:{reason}",
"callbackOwnerReviewEmpty": "近期 callback evidence 均已匹配或尚無資料",
"callbackTraceRecoveryBacklog": "Callback trace backlog缺 trace {missing}1h {recent1h}24h {recent24h}gap 後 traced {recovered};復原 {status}",
"callbackTraceRecoveryAction": "接續處理:{action};需要人工={human}",
"callbackTraceRecoveryAction": "接續處理:{action};需AI補齊={human}",
"callbackTraceRecoveryOwner": "主責AwoooP Callback Evidence協作TelegramGateway / 執行時間線",
"callbackTraceRecoveryEvidenceSurface": "查證入口Runs / TG Callback 證據",
"callbackTraceRecoveryClosure": "關閉條件1h=0 且 24h=0目前 1h {recent1h} / 24h {recent24h}",
@@ -9285,7 +9285,7 @@
"governanceUnavailable": "治理事件 API 目前無法回應;待派送:{queued}",
"governanceQueueMissing": "治理 dispatch 表尚未就緒;未解治理告警:{unresolved}",
"knowledgeHealthcheck": "KM healthcheck 派工:{total};目前階段:{stage}",
"knowledgeOwner": "主責:{lead}人工覆核:{human}",
"knowledgeOwner": "主責:{lead}受控覆核:{human}",
"knowledgeNext": "下一步:{action}",
"knowledgeDrafts": "KM 審核草稿:{drafts};重複草稿:{duplicates}",
"knowledgeStaleCandidates": "陳舊 KM 優先清單:{total} 筆;最高 {top} / {tier}",
@@ -9358,7 +9358,7 @@
"investigateActiveGap": "仍有新缺口,檢查新 Telegram reply_markup trace 寫入",
"verifyInstrumentation": "沒有復原訊號,檢查 TelegramGateway / 時間線觀測埋點",
"waitDecay": "等待舊 backlog 24h decay不需 AI 補齊處理",
"observeRecovery": "觀察復原訊號,先不開人工任務"
"observeRecovery": "觀察復原訊號,先不開受控任務"
},
"claim": {
"ready": "完整自動修復聲明:可宣稱",
@@ -9390,7 +9390,7 @@
"stage": "階段:{stage}",
"next": "下一步:{action}",
"lead": "主責:{agent}",
"human": "人工覆核:{owner}",
"human": "受控覆核:{owner}",
"support": "支援:{agents}",
"worker": "Worker 狀態:{status}",
"draft": "KM 草稿:{id}",
@@ -9417,17 +9417,17 @@
"openKnowledge": "開啟 KM",
"queueReview": "排入審核",
"queueingReview": "排入中",
"queueFailed": "排入 負責人審查 失敗;請重新整理後再確認此 KM 是否仍為陳舊候選。",
"queueFailed": "排入 AI 受控 review 失敗;請重新整理後再確認此 KM 是否仍為陳舊候選。",
"queueResult": "審核狀態:{status}Dispatch{dispatch}Event{event}",
"ownerReviewState": "Owner review{status};階段:{stage}Dispatch{dispatch}",
"guardrail": "防護:讀取不寫入={writes}人工覆核={review}",
"ownerReviewState": "Controlled review{status};階段:{stage}Dispatch{dispatch}",
"guardrail": "防護:讀取不寫入={writes}受控覆核={review}",
"queueStatuses": {
"dry_run": "乾跑",
"queued": "已排入 負責人審查",
"already_queued": "已在 負責人審查"
"queued": "已排入 AI 受控 review",
"already_queued": "已在 AI 受控 review"
},
"operationRail": {
"title": "Owner Review 操作軌道",
"title": "Controlled Review 操作軌道",
"subtitle": "把陳舊 KM 從偵測、審核、乾跑、確認、寫回到比例回測收斂成一條可掃描流程。",
"nextAction": "建議下一步",
"guardrailTitle": "寫入防護",
@@ -9451,7 +9451,7 @@
"flow": {
"node": {
"detected": "偵測",
"ownerReview": "Owner Review",
"ownerReview": "Controlled Review",
"dryRun": "乾跑預覽",
"ownerConfirm": "Owner 確認",
"writeback": "寫回 KM",
@@ -9484,12 +9484,12 @@
},
"guardrail": {
"writesOnRead": "讀取即寫入:{value}",
"manualReview": "人工覆核必要:{value}",
"manualReview": "受控覆核必要:{value}",
"batchWrites": "批次寫入允許:{value}"
}
},
"singleItemRail": {
"title": "單筆 Owner Review 處理",
"title": "單筆 Controlled Review 處理",
"subtitle": "先乾跑取得 plan fingerprintOwner 確認後才允許寫 KM、寫 audit 並排比例回測。",
"outcome": "策略:{outcome}",
"writeGate": "確認寫 KM={writes};可確認={confirm}",
@@ -9507,10 +9507,10 @@
"dispatch": "Dispatch {dispatch}",
"dryRunReady": "已取得 fingerprint可進入 owner confirm gate",
"dryRunPending": "按單筆乾跑取得 fingerprint",
"dryRunBlocked": "需先排入 負責人審查",
"dryRunBlocked": "需先排入 AI 受控 review",
"confirmReady": "確認後會寫 KM / audit並排 recheck",
"confirmWaiting": "等待 乾跑 fingerprint",
"confirmDone": "負責人審查 已完成",
"confirmDone": "AI 受控 review 已完成",
"recheckDone": "Recheck {recheck}",
"recheckWaiting": "寫回完成後才會產生 recheck"
},
@@ -9520,7 +9520,7 @@
}
},
"ownerReviewInbox": {
"title": "Owner review 工作台",
"title": "Controlled review 工作台",
"subtitle": "顯示已排入 waiting_owner_review的 P0/P1 KM逐筆乾跑與確認完成。",
"total": "待審 {count}",
"returned": "顯示 {count}",
@@ -9532,7 +9532,7 @@
},
"burnDown": {
"title": "Stale ratio burn-down",
"subtitle": "把 負責人審查、completion audit與recheck snapshot 對齊,確認陳舊比例是否真的下降。",
"subtitle": "把 AI 受控 review、completion audit與recheck snapshot 對齊,確認陳舊比例是否真的下降。",
"statuses": "狀態:{status}",
"status": {
"above_threshold": "仍高於門檻",
@@ -9544,26 +9544,26 @@
"empty": "尚無 負責人批准 completion audit。",
"currentRatio": "目前陳舊比例",
"currentCount": "陳舊 / 總數",
"ownerReviews": "Owner review",
"ownerReviews": "Controlled review",
"ownerReviewCounts": "待審 {pending} / 完成 {completed}",
"latestDelta": "最新變化",
"delta": "陳舊 {stale} / 比例 {ratio}",
"auditTotal": "Completion audit {count}",
"recheckTotal": "Recheck {count}",
"guardrail": "讀取不寫入={writes}人工覆核={review}",
"guardrail": "讀取不寫入={writes}受控覆核={review}",
"itemState": "階段:{stage};結果:{outcome}",
"itemRefs": "來源:{source};複查:{recheck}"
},
"completionQueue": {
"title": "Completion分流佇列",
"subtitle": "把 負責人審查 拆成可乾跑、卡住、已完成、失敗,避免只看到告警卻不知道下一步。",
"subtitle": "把 AI 受控 review 拆成可乾跑、卡住、已完成、失敗,避免只看到告警卻不知道下一步。",
"ready": "可處理 {count}",
"blocked": "卡住 {count}",
"completed": "完成 {count}",
"failed": "失敗 {count}",
"pending": "待處理 dispatch {count}",
"guardrail": "讀取不寫入={writes}人工覆核={review};批次寫入={batch}",
"unavailable": "completion queue API 尚未回應;目前只能從 負責人審查 工作台逐筆確認。",
"guardrail": "讀取不寫入={writes}受控覆核={review};批次寫入={batch}",
"unavailable": "completion queue API 尚未回應;目前只能從 AI 受控 review 工作台逐筆確認。",
"empty": "目前沒有 owner-review completion 工作項。",
"state": "分流:{readiness};階段:{stage}",
"next": "下一步:{action};結果:{outcome}",
@@ -9608,7 +9608,7 @@
"result": "Batch dispatch{batch}Event{event};已排入 {queued};已在審核 {already};略過 {skipped}",
"statuses": {
"dry_run": "批次乾跑完成",
"queued": "批次已排入 負責人審查",
"queued": "批次已排入 AI 受控 review",
"noop_already_queued": "全部已在審核或已處理",
"unknown": "批次狀態待確認"
},
@@ -9625,7 +9625,7 @@
"previewing": "預覽中",
"confirm": "確認完成",
"confirming": "寫入中",
"previewFailed": "乾跑預覽失敗;請重新整理後確認 負責人審查 dispatch仍有效。",
"previewFailed": "乾跑預覽失敗;請重新整理後確認 AI 受控 review dispatch仍有效。",
"confirmFailed": "確認完成失敗;後端可能偵測到 KM或dispatch 狀態已變更。",
"missingDispatch": "缺少 owner-review dispatch請先排入審核。",
"missingPreviewFingerprint": "缺少乾跑 plan fingerprint請先重新執行乾跑預覽。",
@@ -9739,8 +9739,8 @@
"ai_analyzed": "AI 已分析",
"queued_kb_healthcheck": "已排入 KM healthcheck",
"draft_km_updates": "產生 KM 更新草稿",
"batch_owner_review_previewed": "批次 負責人審查 已乾跑",
"batch_owner_review_queued": "批次已排入 負責人審查",
"batch_owner_review_previewed": "批次 AI 受控 review 已乾跑",
"batch_owner_review_queued": "批次已排入 AI 受控 review",
"batch_noop_already_queued": "批次無需重複排入",
"waiting_owner_review": "等待 owner 審核",
"owner_updates_or_archives_km": "Owner 更新或封存 KM",
@@ -9752,7 +9752,7 @@
"km_duplicate_archive_after_owner_approval": "Owner 審核後封存重複草稿",
"km_governance_rechecked": "KM 治理已回測",
"km_governance_close_or_continue": "關閉或繼續治理",
"needs_manual_km_triage": "需要人工整理 KM",
"needs_manual_km_triage": "需要 AI 整理 KM",
"cancelled": "已取消",
"queued_for_review": "等待治理審核",
"dispatched": "已派遣",
@@ -9765,7 +9765,7 @@
},
"driftFingerprint": {
"title": "Config Drift fingerprint 狀態",
"subtitle": "把每小時 drift report 收斂成同一狀態鏈,顯示 PR、零 diff、P0 去重與人工交接",
"subtitle": "把每小時 drift report 收斂成同一狀態鏈,顯示 PR、零 diff、P0 去重與 AI 受控交接",
"unavailable": "drift fingerprint state API 尚未回應,不能判定是否重複、是否已有 PR或是否已交接。",
"occurrences": "12h {count} 次",
"risk": "HIGH {high} / MEDIUM {medium} / INFO {info}",
@@ -9775,8 +9775,8 @@
"p0Dedup": "P0 去重:{enabled};視窗 {hours}h",
"writes": "寫入drift={drift}incident={incident}repair={repair}ticket={ticket}",
"fsmStates": {
"pending_human": "等待人工",
"pending_human_repeated": "重複等待人工",
"pending_human": "等待 AI 受控補齊",
"pending_human_repeated": "AI 受控補齊重試",
"pr_open_zero_diff": "PR 開啟但零 diff",
"pr_open_waiting_review": "PR 等待 review",
"pr_merged_unverified": "PR 已 merge 待驗證",
@@ -9795,7 +9795,7 @@
"close_zero_diff_pr_and_prepare_real_yaml_patch": "關閉零 diff PR準備真實 YAML patch",
"review_pr_then_merge_or_reject": "review PR 後 merge或reject",
"verify_git_baseline_then_mark_adopted": "驗證 Git baseline 後標記採納",
"operator_review_handoff_and_execute_manual_plan": "Operator review交接並執行人工方案",
"operator_review_handoff_and_execute_manual_plan": "Operator review交接並執行受控方案",
"run_verification_scan_then_record_result": "執行驗證掃描並記錄結果",
"open_manual_investigation_with_failed_verification": "建立 AI verifier / rollback 調查並附上失敗驗證",
"verify_k8s_matches_git_baseline": "驗證 K8s與Git baseline 一致",
@@ -9825,7 +9825,7 @@
"git_adopted": "Git 採納",
"git_rollback": "Git 回滾",
"zero_diff_pr_cleanup": "零 diff PR 清理",
"manual_noop": "人工確認無需動作",
"manual_noop": "AI 受控確認無需動作",
"unknown": "未知"
},
"remediationStatuses": {
@@ -9881,7 +9881,7 @@
"repairCandidateDraft": {
"eyebrow": "修復候選草案",
"title": "PlayBook 草案處置板",
"subtitle": "這筆告警已確認不能把通用兜底或診斷型 PlayBook 當成修復命令;下一步是補齊服務專屬修復草案,通過 負責人審查 與風險閘門後才可能進入審批或執行。",
"subtitle": "這筆告警已確認不能把通用兜底或診斷型 PlayBook 當成修復命令;下一步是補齊服務專屬修復草案,通過 AI 受控 review 與風險閘門後才可能進入審批或執行。",
"statusValue": "等待 PlayBook 草案",
"metrics": {
"status": "狀態",
@@ -9923,7 +9923,7 @@
"repair_command_template": "修復模板",
"rollback_command_template": "Rollback",
"verifier_plan": "Verifier",
"owner_review": "Owner review",
"owner_review": "Controlled review",
"maintenance_window": "維護窗口",
"blast_radius": "影響範圍",
"km_writeback_owner": "KM owner",
@@ -9960,7 +9960,7 @@
"detail": "建立服務專屬修復、回滾與 verifier 計畫。"
},
"review": {
"title": "Owner review",
"title": "Controlled review",
"detail": "確認命令安全、適用條件與 PlayBook trust。"
},
"approval": {
@@ -9978,8 +9978,8 @@
"verifier_plan": "修復後如何驗證成功、失敗與是否要升級 AI 補齊或 break-glass。",
"owner_review": "負責人、風險等級、適用條件與批准紀錄。",
"script_or_ansible_ref": "腳本或 Ansible 參照,必須能被安全路由與 reviewer 查到。",
"schedule_or_monitoring_rule_ref": "排程、監控規則或 recurrence 偵測參照,避免同類告警只靠人工記憶或口頭交接。",
"km_update_plan": "KM 更新草稿與 負責人審查 計畫,避免錯知識直接固化。",
"schedule_or_monitoring_rule_ref": "排程、監控規則或 recurrence 偵測參照,避免同類告警只靠個人口頭記憶或交接。",
"km_update_plan": "KM 更新草稿與 AI 受控 review 計畫,避免錯知識直接固化。",
"automation_asset_record": "自動化資產紀錄,包含 asset id、owner、狀態、來源與下一步。"
},
"assetsTitle": "自動化資產沉澱板",
@@ -9987,7 +9987,7 @@
"km": {
"type": "KM",
"owner": "Hermes",
"visibility": "Knowledge Base根因、處置、引用來源與 負責人審查。",
"visibility": "Knowledge Base根因、處置、引用來源與 AI 受控 review。",
"status": "待草稿"
},
"playbook": {
@@ -10020,13 +10020,13 @@
"incident_timeline_stage_update": "Incident timeline 必須標記目前階段、處置包、owner 與下一步。",
"execution_or_manual_handoff_result": "無執行時也要寫入 AI 補齊或 break-glass 結果,不能只留下批准紀錄。",
"verifier_result": "Verifier 要能記錄成功、失敗、降級或尚未執行。",
"km_update_draft": "Hermes 產生 KM 草稿,負責人審查 後才可寫入高影響知識。",
"km_update_draft": "Hermes 產生 KM 草稿,受控 review 後才可寫入高影響知識。",
"playbook_trust_update": "PlayBook 成功 / 失敗 / 未執行都要回寫 trust 與適用條件。",
"automation_asset_inventory_record": "資產清冊要留下 KM、PlayBook、腳本、排程、Verifier 的 ID 與狀態。"
},
"guardrailTitle": "阻擋原因與禁止誤讀",
"blocker": "目前缺少可信修復候選;系統必須建立 AI 補齊草案工作項,不能把 no-action、診斷結果或通用兜底當作已修復。",
"nextStep": "請先補 PlayBook 草案與 MCP evidence再由 負責人審查 決定是否送審批;在此之前不會自動執行、不會寫入成功修復,也不會更新 KM 為已解決。",
"nextStep": "請先補 PlayBook 草案與 MCP evidence再由 AI 受控 review 決定是否送審批;在此之前不會自動執行、不會寫入成功修復,也不會更新 KM 為已解決。",
"chainTitle": "真相鏈對照",
"chain": {
"stage": "目前階段",
@@ -11385,7 +11385,7 @@
"blockedGatesDetail": "有 missing / failed 就不能宣稱完整自動化。",
"readiness": "流程健康度",
"warningGates": "Warning Gate",
"warningGatesDetail": "仍可觀測,但需要補脈絡或人工判斷。"
"warningGatesDetail": "仍可觀測,但需要 AI 補脈絡或受控判讀。"
},
"gates": {
"alert_intake": "告警入庫 / 通知鏡像",
@@ -11431,7 +11431,7 @@
"runRefs": {
"mirrorRunState": "AwoooP 執行監控可以理解資安鏡像,但只能當只讀候選。",
"readOnlyDryRun": "若未來產生試跑證據,也必須維持只讀與 AI 受控閘門語義。",
"ownerResponse": "負責人回覆已收到 / 已接受仍為 0任何執行進一步行動都要等待人工收件。",
"ownerResponse": "負責人回覆已收到 / 已接受仍為 0任何執行進一步行動都要等待負責人脫敏證據收件。",
"activeGates": "主動執行期閘門仍為 0不從執行監控頁開閘門或建立動作按鈕。"
}
},
@@ -11544,7 +11544,7 @@
"statusRollup": "AwoooP / 資安工作線的共同狀態入口,只彙整進度與安全閘門。",
"postureProjection": "IwoooS 前端態勢、主機覆蓋、負責人回覆焦點與禁止動作的投影契約。",
"ownerValidation": "S4.9-S4.12 負責人回覆已收到 / 已接受分離與審查者檢查口徑。",
"rolloutPolicy": "低摩擦、先觀測、封鎖前先由負責人審查的推出政策。"
"rolloutPolicy": "低摩擦、先觀測、封鎖前先由 AI 受控 review 判讀的推出政策。"
}
},
"githubPrimaryReadinessCandidate": {
@@ -11571,7 +11571,7 @@
"contractRefs": {
"primaryReadiness": "GitHub 主要來源一致性、負責人、分支 / 標籤參照、工作流程與回復前置缺口的主就緒度閘門。",
"ownerValidation": "四包負責人回覆的已收到 / 已接受 / 已拒收分離與審查者檢查口徑。",
"rollbackAdr": "9 個範圍內專案庫的回復 ADR 草案、負責人審查與驗證窗口。",
"rollbackAdr": "9 個範圍內專案庫的回復 ADR 草案、AI 受控 review 與驗證窗口。",
"workflowInventory": "工作流程、執行器、部署金鑰、分支保護、CODEOWNERS與機密名稱清冊只收名稱不收明文值。",
"postureProjection": "IwoooS 用來呈現 GitHub就緒度狀態板與禁止動作的前端投影。"
}
@@ -11835,7 +11835,7 @@
},
"securityOwnerResponseGate": {
"title": "IwoooS 負責人回覆只讀審查焦點",
"subtitle": "AwoooP 審批佇列只顯示 S4.9-S4.12 負責人回覆的下一個人工收件焦點;這不是審批紀錄,也不會開執行期閘門。",
"subtitle": "AwoooP 審批佇列只顯示 S4.9-S4.12 負責人回覆的下一個脫敏證據收件焦點;這不是審批紀錄,也不會開執行期閘門。",
"badge": "只讀焦點",
"ownerChecksTitle": "負責人回覆收件順序",
"boundaryLabel": "審批邊界",
@@ -11930,7 +11930,7 @@
"accepted": "已接受",
"acceptedDetail": "目前仍為 0只有脫敏證據通過驗收後才能改變。",
"rejected": "已拒收",
"rejectedDetail": "目前仍為 0未進入人工驗收前不得產生拒收結果。",
"rejectedDetail": "目前仍為 0未進入受控驗收前不得產生拒收結果。",
"displaySections": "顯示區塊",
"displaySectionsDetail": "8 個顯示區塊只用於說明驗收流程、證據路由與邊界。"
},