fix(web): 補齊 P2-403H 治理頁翻譯
This commit is contained in:
@@ -3149,7 +3149,8 @@
|
||||
"labels": {
|
||||
"requiredFields": "必填欄位 {count}",
|
||||
"forbiddenFields": "禁止欄位 {count}",
|
||||
"idempotency": "idempotency key: {value}"
|
||||
"idempotency": "idempotency key: {value}",
|
||||
"unassigned": "未指定"
|
||||
},
|
||||
"agents": {
|
||||
"openclaw": "OpenClaw",
|
||||
@@ -3230,13 +3231,47 @@
|
||||
"L3_draft_change_after_gate": "L3 批准後草案"
|
||||
},
|
||||
"approvalGates": {
|
||||
"alert_rule_write_approval_required": "需 alert rule 寫入批准",
|
||||
"cluster_write_blocked": "叢集寫入封鎖",
|
||||
"code_change_required_for_fix": "修復需程式變更",
|
||||
"cost_data_and_route_approval_required": "需費用資料與路由批准",
|
||||
"cost_data_and_sanitized_fixture_approval_required": "需費用資料與脫敏 fixture 批准",
|
||||
"cost_or_runtime_change_approval_required": "需費用或 runtime 變更批准",
|
||||
"read_only_allowed": "只讀允許",
|
||||
"km_write_owner_review_required": "KM 寫入需 owner 審查",
|
||||
"secret_value_handling_forbidden": "機密值處理禁止",
|
||||
"owner_review_required": "需 owner 審查",
|
||||
"owner_response_required": "需 owner 回覆",
|
||||
"human_approval_required": "需人工批准",
|
||||
"runtime_worker_gate_required": "需 runtime worker 關卡",
|
||||
"db_migration_required": "需 DB migration 關卡",
|
||||
"db_migration_approval_required": "需 DB migration 批准",
|
||||
"dependency_approval_required": "需依賴更新批准",
|
||||
"external_scan_and_dependency_approval_required": "需外部掃描與依賴批准",
|
||||
"external_source_approval_required": "需外部來源批准",
|
||||
"host_update_approval_required": "需主機更新批准",
|
||||
"image_pull_build_push_approval_required": "需映像 pull / build / push 批准",
|
||||
"k8s_upgrade_maintenance_window_required": "需 K8s 升級 maintenance window",
|
||||
"legal_owner_review_required": "需法務 owner 審查",
|
||||
"maintenance_window_required": "需 maintenance window",
|
||||
"market_scorecard_and_replay_gate_required": "需市場 scorecard 與 replay 關卡",
|
||||
"market_scorecard_replay_and_cost_data_approval_required": "需市場 scorecard / replay / 費用資料批准",
|
||||
"monitoring_route_receiver_write_blocked": "監控 route / receiver 寫入封鎖",
|
||||
"new_tool_or_secret_approval_required": "需新工具或 secret 批准",
|
||||
"operator_release_window_required": "需 operator release window",
|
||||
"replay_shadow_canary_gate_required": "需 replay / shadow / canary 關卡",
|
||||
"restart_or_endpoint_change_requires_approval": "restart 或 endpoint 變更需批准",
|
||||
"restore_execution_blocked": "restore 執行封鎖",
|
||||
"restore_or_prune_approval_required": "restore 或 prune 需批准",
|
||||
"route_receiver_write_blocked": "route / receiver 寫入封鎖",
|
||||
"ssh_or_host_probe_approval_required": "需 SSH 或主機 probe 批准",
|
||||
"stateful_upgrade_approval_required": "需 stateful 升級批准",
|
||||
"telegram_direct_send_blocked": "Telegram 直接發送封鎖",
|
||||
"telegram_send_or_route_change_requires_approval": "Telegram 發送或路由變更需批准",
|
||||
"tool_install_or_ci_change_approval_required": "工具安裝或 CI 變更需批准",
|
||||
"workflow_and_bot_approval_required": "workflow 與 bot 需批准",
|
||||
"workflow_modification_approval_required": "workflow 修改需批准",
|
||||
"write_requires_human_gate": "寫入需人工關卡",
|
||||
"cost_data_approval_required": "需費用與資料邊界批准"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -3149,7 +3149,8 @@
|
||||
"labels": {
|
||||
"requiredFields": "必填欄位 {count}",
|
||||
"forbiddenFields": "禁止欄位 {count}",
|
||||
"idempotency": "idempotency key: {value}"
|
||||
"idempotency": "idempotency key: {value}",
|
||||
"unassigned": "未指定"
|
||||
},
|
||||
"agents": {
|
||||
"openclaw": "OpenClaw",
|
||||
@@ -3230,13 +3231,47 @@
|
||||
"L3_draft_change_after_gate": "L3 批准後草案"
|
||||
},
|
||||
"approvalGates": {
|
||||
"alert_rule_write_approval_required": "需 alert rule 寫入批准",
|
||||
"cluster_write_blocked": "叢集寫入封鎖",
|
||||
"code_change_required_for_fix": "修復需程式變更",
|
||||
"cost_data_and_route_approval_required": "需費用資料與路由批准",
|
||||
"cost_data_and_sanitized_fixture_approval_required": "需費用資料與脫敏 fixture 批准",
|
||||
"cost_or_runtime_change_approval_required": "需費用或 runtime 變更批准",
|
||||
"read_only_allowed": "只讀允許",
|
||||
"km_write_owner_review_required": "KM 寫入需 owner 審查",
|
||||
"secret_value_handling_forbidden": "機密值處理禁止",
|
||||
"owner_review_required": "需 owner 審查",
|
||||
"owner_response_required": "需 owner 回覆",
|
||||
"human_approval_required": "需人工批准",
|
||||
"runtime_worker_gate_required": "需 runtime worker 關卡",
|
||||
"db_migration_required": "需 DB migration 關卡",
|
||||
"db_migration_approval_required": "需 DB migration 批准",
|
||||
"dependency_approval_required": "需依賴更新批准",
|
||||
"external_scan_and_dependency_approval_required": "需外部掃描與依賴批准",
|
||||
"external_source_approval_required": "需外部來源批准",
|
||||
"host_update_approval_required": "需主機更新批准",
|
||||
"image_pull_build_push_approval_required": "需映像 pull / build / push 批准",
|
||||
"k8s_upgrade_maintenance_window_required": "需 K8s 升級 maintenance window",
|
||||
"legal_owner_review_required": "需法務 owner 審查",
|
||||
"maintenance_window_required": "需 maintenance window",
|
||||
"market_scorecard_and_replay_gate_required": "需市場 scorecard 與 replay 關卡",
|
||||
"market_scorecard_replay_and_cost_data_approval_required": "需市場 scorecard / replay / 費用資料批准",
|
||||
"monitoring_route_receiver_write_blocked": "監控 route / receiver 寫入封鎖",
|
||||
"new_tool_or_secret_approval_required": "需新工具或 secret 批准",
|
||||
"operator_release_window_required": "需 operator release window",
|
||||
"replay_shadow_canary_gate_required": "需 replay / shadow / canary 關卡",
|
||||
"restart_or_endpoint_change_requires_approval": "restart 或 endpoint 變更需批准",
|
||||
"restore_execution_blocked": "restore 執行封鎖",
|
||||
"restore_or_prune_approval_required": "restore 或 prune 需批准",
|
||||
"route_receiver_write_blocked": "route / receiver 寫入封鎖",
|
||||
"ssh_or_host_probe_approval_required": "需 SSH 或主機 probe 批准",
|
||||
"stateful_upgrade_approval_required": "需 stateful 升級批准",
|
||||
"telegram_direct_send_blocked": "Telegram 直接發送封鎖",
|
||||
"telegram_send_or_route_change_requires_approval": "Telegram 發送或路由變更需批准",
|
||||
"tool_install_or_ci_change_approval_required": "工具安裝或 CI 變更需批准",
|
||||
"workflow_and_bot_approval_required": "workflow 與 bot 需批准",
|
||||
"workflow_modification_approval_required": "workflow 修改需批准",
|
||||
"write_requires_human_gate": "寫入需人工關卡",
|
||||
"cost_data_approval_required": "需費用與資料邊界批准"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1322,7 +1322,9 @@ export function AutomationInventoryTab() {
|
||||
}
|
||||
}
|
||||
|
||||
const redisDryRunValueLabel = (group: string, value: string) => {
|
||||
const redisDryRunValueLabel = (group: string, value?: string) => {
|
||||
if (!value) return t('redisDryRunGate.labels.unassigned')
|
||||
|
||||
try {
|
||||
return t(`redisDryRunGate.${group}.${value}` as never)
|
||||
} catch {
|
||||
@@ -1870,11 +1872,12 @@ export function AutomationInventoryTab() {
|
||||
{target.display_name}
|
||||
</span>
|
||||
<span style={{ fontFamily: "'DM Mono', monospace", fontSize: 10, color: '#87867f', lineHeight: 1.45, overflowWrap: 'anywhere' }}>
|
||||
{target.operator_instruction}
|
||||
{target.verifier_check}
|
||||
</span>
|
||||
<div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>
|
||||
<Chip value={redisDryRunValueLabel('agents', target.owner_agent)} muted />
|
||||
<Chip value={target.blocked_runtime_action} muted />
|
||||
<Chip value={target.failure_escalation} muted />
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
@@ -1891,7 +1894,7 @@ export function AutomationInventoryTab() {
|
||||
<Chip value={redisDryRunValueLabel('statuses', item.status)} muted={item.status !== 'approval_required'} />
|
||||
</div>
|
||||
<span style={{ fontFamily: "'DM Mono', monospace", fontSize: 10, color: '#87867f', lineHeight: 1.45, overflowWrap: 'anywhere' }}>
|
||||
{'required_evidence' in item ? item.required_evidence : item.operator_instruction}
|
||||
{'trigger' in item ? item.trigger : item.operator_instruction}
|
||||
</span>
|
||||
<Chip value={item.blocked_runtime_action} muted />
|
||||
</div>
|
||||
|
||||
@@ -1712,18 +1712,17 @@ export interface AiAgentPostWriteVerifierPackageSnapshot {
|
||||
verification_targets: Array<{
|
||||
target_id: string
|
||||
display_name: string
|
||||
target_surface: string
|
||||
status: string
|
||||
owner_agent: 'openclaw' | 'hermes' | 'nemotron'
|
||||
required_readback: string
|
||||
verifier_check: string
|
||||
failure_escalation: string
|
||||
blocked_runtime_action: string
|
||||
operator_instruction: string
|
||||
}>
|
||||
failure_lanes: Array<{
|
||||
lane_id: string
|
||||
display_name: string
|
||||
status: string
|
||||
required_evidence: string
|
||||
trigger: string
|
||||
blocked_runtime_action: string
|
||||
operator_instruction: string
|
||||
}>
|
||||
|
||||
@@ -1,3 +1,30 @@
|
||||
## 2026-06-12|P2-403H Governance UI / i18n 顯示修補
|
||||
|
||||
**背景**:P2-403H Post-write Verifier Package API 已在正式站回傳新快照後,治理頁正式 DOM / console 驗證發現兩個顯示層缺口:`postWriteVerifierPackage.verifier_package.owner_agent` 不存在但前端仍嘗試渲染,造成 `redisDryRunGate.agents.undefined`;P2-402 proactive approval gate 新增多個 gate id,但訊息檔尚未補齊,造成 `MISSING_MESSAGE`。
|
||||
|
||||
**完成**:
|
||||
|
||||
- `AiAgentPostWriteVerifierPackageSnapshot` 已對齊正式 API:`verifier_package` 不再宣告不存在的 `owner_agent` / `package_id` / `display_name` / `status`;`verification_targets` 改用 `verifier_check` 與 `failure_escalation`;`failure_lanes` 改用 `trigger`。
|
||||
- Governance automation inventory 的 P2-403H 區塊不再讀不存在的 owner 欄位,verification target 改顯示 verifier check 與 failure escalation。
|
||||
- `redisDryRunValueLabel` 對空值回傳 `未指定`,避免再組出 `agents.undefined`。
|
||||
- `zh-TW.json` / `en.json` 補齊目前 P2-402 主動營運契約實際出現的 approval gate label,避免正式頁 console 出現 `proactiveOperations.approvalGates.*` missing message。
|
||||
|
||||
**本地驗證**:
|
||||
|
||||
- `python3 -m json.tool apps/web/messages/zh-TW.json` / `apps/web/messages/en.json`:通過。
|
||||
- zh-TW / en message mirror:`True`。
|
||||
- P2-402 committed approval gate 覆蓋:`APPROVAL_GATE_MISSING=[]`。
|
||||
- 靜態 grep:`verifier_package.owner_agent`、`target.operator_instruction`、`agents.undefined` 命中 `0`。
|
||||
- `git diff --check`、`security-mirror-progress-guard.py`、`source-control-owner-response-guard.py`、`doc-secrets-sanity-check.py docs .gitea`:通過。
|
||||
- `pnpm --filter @awoooi/web typecheck`:通過。
|
||||
- `NEXT_PUBLIC_API_URL=https://awoooi.wooo.work NEXT_PRIVATE_BUILD_WORKER_COUNT=1 SENTRY_SUPPRESS_GLOBAL_ERROR_HANDLER_FILE_WARNING=1 pnpm --filter @awoooi/web build`:通過;`92/92` static pages,`/zh-TW/governance` First Load JS `397 kB`。
|
||||
|
||||
**正式站驗證**:待 code commit 觸發 Gitea CD 後補。
|
||||
|
||||
**完成度同步**:P2-403H API / contract 仍為 `97%`;本段只修前端顯示與 i18n,不提高 runtime 自動化完成度。
|
||||
|
||||
**邊界**:本段未讀 canonical target、未寫 rollback work item、未發 Telegram、未寫 KM、未更新 PlayBook trust、未寫 timeline learning、未寫 replay score、未啟動 runtime worker、未讀 secret value、未新增任何前端執行按鈕。
|
||||
|
||||
## 2026-06-12|P2-403H Post-write Verifier Package
|
||||
|
||||
**背景**:統帥指出 Telegram / AwoooP 批准後仍沒有真正自動化,也沒有清楚的人工作業選項。P2-403G 已把 runtime write 前的雙重批准、dry-run hash 與 post-write verifier gate 固定下來;本段把批准後應該執行的 verifier package、rollback lane、failure lane 與人工操作選項補成可審查契約,避免 approval resolved 後仍只得到 no-action 結論。
|
||||
|
||||
Reference in New Issue
Block a user