diff --git a/apps/web/src/app/[locale]/classic/page.tsx b/apps/web/src/app/[locale]/classic/page.tsx index fd5375b37..a8a3707b7 100644 --- a/apps/web/src/app/[locale]/classic/page.tsx +++ b/apps/web/src/app/[locale]/classic/page.tsx @@ -5,11 +5,11 @@ * ==================================== * Sprint 5: 現有首頁原封保留在 /classic 路由 * 新指令中心在 / 首頁 - * 統帥指示: 保留舊版供對照,確認零功能遺失後再決定移除 + * 既有決策: 保留舊版供對照,確認零功能遺失後再決定移除 * * 2欄佈局(Sidebar 由 AppLayout 提供): Feed + RightPanel * - * 統帥鐵律: 使用真實數據 Hook,禁止假數據! + * 專案鐵律: 使用真實數據 Hook,禁止假數據! * * @updated 2026-04-02 Claude Code — Metrics Strip 7指標視覺強化 * @updated 2026-04-03 Claude Code — 監控工具區塊 (Grafana/Prometheus/SigNoz/Gitea) diff --git a/apps/web/src/app/[locale]/demo/page.tsx b/apps/web/src/app/[locale]/demo/page.tsx index 893604f75..4b7f772af 100644 --- a/apps/web/src/app/[locale]/demo/page.tsx +++ b/apps/web/src/app/[locale]/demo/page.tsx @@ -18,7 +18,7 @@ import { LiveDashboard } from '@/components/dashboard/live-dashboard' import { HITLSection } from '@/components/ai' // ============================================================================= -// API Configuration (統帥鐵律: 禁止任何 Fallback IP) +// API Configuration (專案鐵律: 禁止任何 Fallback IP) // ============================================================================= const getApiBaseUrl = (): string => { diff --git a/apps/web/src/app/[locale]/page.tsx b/apps/web/src/app/[locale]/page.tsx index 6e4a8c96d..31394ec5c 100644 --- a/apps/web/src/app/[locale]/page.tsx +++ b/apps/web/src/app/[locale]/page.tsx @@ -5,7 +5,7 @@ * ==================================== * 2欄佈局(Sidebar 由 AppLayout 提供): Feed + RightPanel * - * 統帥鐵律: 使用真實數據 Hook,禁止假數據! + * 專案鐵律: 使用真實數據 Hook,禁止假數據! * * @updated 2026-04-02 Claude Code — Metrics Strip 7指標視覺強化 * @updated 2026-04-03 Claude Code — 監控工具區塊 (Grafana/Prometheus/SigNoz/Gitea) @@ -1730,7 +1730,7 @@ export default function Home({ params }: { params: { locale: string } }) { // 系統健康百分比 const systemHealthPct = totalServices > 0 ? Math.round((healthyServices / totalServices) * 100) : 0 - // Sprint 5: 4 Tab 配置 (統帥批准 2026-04-08) + // Sprint 5: 4 Tab 配置 (人工批准 2026-04-08) const alertsCount = incidents?.length ?? 0 const tabs: TabConfig[] = [ { id: 'overview', label: tDashboard('tabs.overview'), content: null }, diff --git a/apps/web/src/app/[locale]/reports/page.tsx b/apps/web/src/app/[locale]/reports/page.tsx index 3ea0fde70..6c7934c08 100644 --- a/apps/web/src/app/[locale]/reports/page.tsx +++ b/apps/web/src/app/[locale]/reports/page.tsx @@ -10,7 +10,7 @@ * GET /api/v1/stats/resolution-stats * GET /api/v1/stats/disposition (Sprint 4 新增) * - * 統帥鐵律: 禁止假數據!無資料顯示 '--' + * 專案鐵律: 禁止假數據!無資料顯示 '--' * i18n: 100% next-intl * * 2026-04-02 Claude Code — 初版 diff --git a/apps/web/src/components/ai/hitl-section.tsx b/apps/web/src/components/ai/hitl-section.tsx index 2c7e81be9..1b2093750 100644 --- a/apps/web/src/components/ai/hitl-section.tsx +++ b/apps/web/src/components/ai/hitl-section.tsx @@ -30,7 +30,7 @@ import { GlassCard, GlassCardTitle } from '@/components/ui/glass-card' import { ShieldCheck, Plus, Loader2, Lock, ShieldX, AlertTriangle } from 'lucide-react' // ============================================================================= -// API Configuration (統帥鐵律: 禁止任何 Fallback IP) +// API Configuration (專案鐵律: 禁止任何 Fallback IP) // ============================================================================= const getApiBaseUrl = (): string => { diff --git a/apps/web/src/components/ai/openclaw-state-machine.tsx b/apps/web/src/components/ai/openclaw-state-machine.tsx index 8be62b2c5..2c6a9ebf1 100644 --- a/apps/web/src/components/ai/openclaw-state-machine.tsx +++ b/apps/web/src/components/ai/openclaw-state-machine.tsx @@ -52,7 +52,7 @@ interface PendingApprovalsResponse { const getApiBaseUrl = (): string => { if (typeof window === 'undefined') return '' - // 統帥鐵律: 禁止任何 Fallback IP + // 專案鐵律: 禁止任何 Fallback IP const url = process.env.NEXT_PUBLIC_API_URL if (!url) { console.error('[AWOOOI ERROR] Missing NEXT_PUBLIC_API_URL') diff --git a/apps/web/src/components/dashboard/live-dashboard.tsx b/apps/web/src/components/dashboard/live-dashboard.tsx index ad54e2ffc..b51496947 100644 --- a/apps/web/src/components/dashboard/live-dashboard.tsx +++ b/apps/web/src/components/dashboard/live-dashboard.tsx @@ -37,7 +37,7 @@ import { const _getApiBaseUrl = () => { if (typeof window === 'undefined') return '' - // 統帥鐵律: 禁止任何 Fallback IP + // 專案鐵律: 禁止任何 Fallback IP const url = process.env.NEXT_PUBLIC_API_URL if (!url) { console.error('[AWOOOI ERROR] Missing NEXT_PUBLIC_API_URL') diff --git a/apps/web/src/components/incident/incident-card.tsx b/apps/web/src/components/incident/incident-card.tsx index e4fe85f96..dd1149292 100644 --- a/apps/web/src/components/incident/incident-card.tsx +++ b/apps/web/src/components/incident/incident-card.tsx @@ -9,7 +9,7 @@ * - 授權邏輯從 DualStateIncidentCard (Phase 6.5) 移植 * handleApprove / handleReject / CSRF / 30s 超時重試 * - * 統帥鐵律: 禁止假數據!無數據顯示 "--" + * 專案鐵律: 禁止假數據!無數據顯示 "--" * @deprecated dual-state-incident-card.tsx (Phase 6.5 舊風格,此元件取代後刪除) */ diff --git a/apps/web/src/components/incident/thinking-terminal.tsx b/apps/web/src/components/incident/thinking-terminal.tsx index 9530e6b20..da6e31f42 100644 --- a/apps/web/src/components/incident/thinking-terminal.tsx +++ b/apps/web/src/components/incident/thinking-terminal.tsx @@ -11,7 +11,7 @@ * - 強制等寬字體 (font-body) * - 打字機效果展示推論步驟 * - * 統帥鐵律: 禁止假數據! + * 專案鐵律: 禁止假數據! */ import { useState, useEffect, useRef, useCallback, useMemo } from 'react' diff --git a/apps/web/src/components/infra/host-grid.tsx b/apps/web/src/components/infra/host-grid.tsx index 8dd7943bb..93f9c56d9 100644 --- a/apps/web/src/components/infra/host-grid.tsx +++ b/apps/web/src/components/infra/host-grid.tsx @@ -5,7 +5,7 @@ * ================================ * 每張卡顯示:hostname + IP + CPU/RAM + 完整服務列表 * K3s 主機: 藍色標記、K3s 徽章、獨立 Cluster 區塊 - * 統帥鐵律:無數據顯示 "--",禁止假數據 + * 專案鐵律:無數據顯示 "--",禁止假數據 * * @updated 2026-04-03 Claude Code — 完整服務清單 + K3s Cluster 突顯 */ diff --git a/apps/web/src/components/layout/sidebar.tsx b/apps/web/src/components/layout/sidebar.tsx index 9913a32e7..a39b6d150 100644 --- a/apps/web/src/components/layout/sidebar.tsx +++ b/apps/web/src/components/layout/sidebar.tsx @@ -117,7 +117,7 @@ const NAV_SECTIONS: NavSection[] = [ ], }, { - // Legacy: 經典 AI 中心 (統帥指示保留) + // Legacy: 經典 AI 中心 (既有決策保留) sectionKey: 'legacy', items: [ { id: 'terminal', href: '/terminal', labelKey: 'terminal', Icon: Terminal }, diff --git a/apps/web/src/components/neural-command/NeuralApprovalPanel.tsx b/apps/web/src/components/neural-command/NeuralApprovalPanel.tsx index 30eb51053..076e7cd3b 100644 --- a/apps/web/src/components/neural-command/NeuralApprovalPanel.tsx +++ b/apps/web/src/components/neural-command/NeuralApprovalPanel.tsx @@ -6,7 +6,7 @@ * 顯示真實待審核的操作,整合 NuclearKeyButton 長按確認 * * 2026-04-07 Claude Code: Sprint F 打假行動 — 移除 MOCK_PENDING - * 統帥鐵律: 接真實 /api/v1/approvals/pending,無資料顯示 EmptyState + * 專案鐵律: 接真實 /api/v1/approvals/pending,無資料顯示 EmptyState */ import { useState, useCallback } from 'react' diff --git a/apps/web/src/components/neural-command/NeuralLiveCenter.tsx b/apps/web/src/components/neural-command/NeuralLiveCenter.tsx index 68416e0f5..b13e3900d 100644 --- a/apps/web/src/components/neural-command/NeuralLiveCenter.tsx +++ b/apps/web/src/components/neural-command/NeuralLiveCenter.tsx @@ -6,7 +6,7 @@ * 三欄: OpenClaw/NemoTron 狀態 | 神經傳導鏈路 | 執行串流 * * 2026-04-07 Claude Code: Sprint F 打假行動 — 移除所有假數據,接上真實 props - * 統帥鐵律: 禁止假數據!無資料時顯示 '--' 或 EmptyState + * 專案鐵律: 禁止假數據!無資料時顯示 '--' 或 EmptyState */ import { useTranslations } from 'next-intl' diff --git a/apps/web/src/components/neural-command/NeuralStats.tsx b/apps/web/src/components/neural-command/NeuralStats.tsx index 70ab7473d..a17cf0428 100644 --- a/apps/web/src/components/neural-command/NeuralStats.tsx +++ b/apps/web/src/components/neural-command/NeuralStats.tsx @@ -6,7 +6,7 @@ * 5 KPI + 執行路徑分佈 + Playbook 排名 + 時間軸 * * 2026-04-07 Claude Code: Sprint F 打假行動 — 移除所有 MOCK 常數 - * 統帥鐵律: 所有數據從 stats/playbooks/history props 計算,禁止寫死! + * 專案鐵律: 所有數據從 stats/playbooks/history props 計算,禁止寫死! */ import { useMemo } from 'react' diff --git a/apps/web/src/components/timeline/action-timeline.tsx b/apps/web/src/components/timeline/action-timeline.tsx index 0867eccb3..987d899b3 100644 --- a/apps/web/src/components/timeline/action-timeline.tsx +++ b/apps/web/src/components/timeline/action-timeline.tsx @@ -23,7 +23,7 @@ import { } from 'lucide-react' // ============================================================================= -// Event Config (統帥規格) +// Event Config (專案規格) // ============================================================================= interface EventConfig { diff --git a/apps/web/src/hooks/useGlobalPulseMetrics.ts b/apps/web/src/hooks/useGlobalPulseMetrics.ts index e9471838e..c9541efea 100644 --- a/apps/web/src/hooks/useGlobalPulseMetrics.ts +++ b/apps/web/src/hooks/useGlobalPulseMetrics.ts @@ -3,13 +3,13 @@ /** * useGlobalPulseMetrics - 全局脈搏真實數據 Hook * ============================================= - * 統帥鐵律: 禁止假數據!所有指標必須來自 188 基地真實血脈 + * 專案鐵律: 禁止假數據!所有指標必須來自 production 真實資料源 * * Features: * - Fail Fast 錯誤處理 * - 自動輪詢 (30 秒) * - 誠實渲染 (無數據顯示 "--") - * - 統帥鐵律: 禁止 Hardcode API URL + * - 專案鐵律: 禁止 Hardcode API URL */ import { useState, useEffect, useCallback, useRef } from 'react' @@ -59,7 +59,7 @@ interface UseGlobalPulseMetricsResult { } // ============================================================================= -// API Helper (統帥鐵律: 禁止 Hardcode) +// API Helper (專案鐵律: 禁止 Hardcode) // ============================================================================= const getApiBaseUrl = (): string => { diff --git a/apps/web/src/hooks/useIncidents.ts b/apps/web/src/hooks/useIncidents.ts index f6b67dd1d..527813854 100644 --- a/apps/web/src/hooks/useIncidents.ts +++ b/apps/web/src/hooks/useIncidents.ts @@ -9,7 +9,7 @@ * - 從 /api/v1/approvals/pending 獲取待簽核提案 * - 支援輪詢更新 (Smart Polling) * - * 統帥鐵律: 禁止假數據!所有資料必須來自真實 API + * 專案鐵律: 禁止假數據!所有資料必須來自真實 API */ import { useState, useEffect, useCallback, useRef } from 'react' diff --git a/apps/web/src/hooks/useSSE.ts b/apps/web/src/hooks/useSSE.ts index b863ed7d7..a97ae03d4 100644 --- a/apps/web/src/hooks/useSSE.ts +++ b/apps/web/src/hooks/useSSE.ts @@ -53,7 +53,7 @@ const getApiBaseUrl = (): string => { // Server-side rendering 時回傳空字串 if (typeof window === 'undefined') return '' - // 統帥鐵律: 禁止任何 Fallback IP + // 專案鐵律: 禁止任何 Fallback IP const url = process.env.NEXT_PUBLIC_API_URL if (!url) { console.error('[AWOOOI ERROR] Missing NEXT_PUBLIC_API_URL. SSE will not connect.') diff --git a/apps/web/src/lib/api-client.ts b/apps/web/src/lib/api-client.ts index a77ee1ced..6301d968b 100644 --- a/apps/web/src/lib/api-client.ts +++ b/apps/web/src/lib/api-client.ts @@ -2,7 +2,7 @@ * AWOOOI API Client * ADR-005: 所有請求經過 BFF * - * 統帥鐵律: 禁止任何 Fallback IP,環境變數缺失即噴錯 + * 專案鐵律: 禁止任何 Fallback IP,環境變數缺失即噴錯 */ import { CURRENT_USER } from '@/lib/constants/user' diff --git a/apps/web/src/lib/config.ts b/apps/web/src/lib/config.ts index bfdcea9b3..b67d1cac2 100644 --- a/apps/web/src/lib/config.ts +++ b/apps/web/src/lib/config.ts @@ -1,7 +1,7 @@ /** * AWOOOI Frontend Configuration * ============================== - * 統帥鐵律: 禁止任何 Fallback IP + * 專案鐵律: 禁止任何 Fallback IP * * 唯一真相來源 - 所有 API URL 必須從環境變數取得 * 環境變數缺失即噴錯,絕不姑息 diff --git a/apps/web/src/stores/agent.store.ts b/apps/web/src/stores/agent.store.ts index ab481b220..e14b190e5 100644 --- a/apps/web/src/stores/agent.store.ts +++ b/apps/web/src/stores/agent.store.ts @@ -94,7 +94,7 @@ interface AgentState { // ==================== Constants ==================== -// 統帥鐵律: 禁止任何 Fallback IP +// 專案鐵律: 禁止任何 Fallback IP const getApiBaseUrl = (): string => { if (typeof window === 'undefined') return '' const url = process.env.NEXT_PUBLIC_API_URL diff --git a/apps/web/src/stores/approval.store.ts b/apps/web/src/stores/approval.store.ts index 675eb92b8..448867690 100644 --- a/apps/web/src/stores/approval.store.ts +++ b/apps/web/src/stores/approval.store.ts @@ -128,7 +128,7 @@ const MAX_SSE_RECONNECT_ATTEMPTS = 10 const BASE_RECONNECT_DELAY = 1000 // 1 second const MAX_RECONNECT_DELAY = 30000 // 30 seconds -// 統帥鐵律: 禁止任何 Fallback IP +// 專案鐵律: 禁止任何 Fallback IP const getApiBaseUrl = (): string => { if (typeof window === 'undefined') return '' const url = process.env.NEXT_PUBLIC_API_URL diff --git a/apps/web/src/stores/dashboard.store.ts b/apps/web/src/stores/dashboard.store.ts index 74abe5337..057a896e2 100644 --- a/apps/web/src/stores/dashboard.store.ts +++ b/apps/web/src/stores/dashboard.store.ts @@ -201,7 +201,7 @@ export const useDashboardStore = create()( eventSource = null } - // 統帥鐵律: 禁止任何 Fallback IP + // 專案鐵律: 禁止任何 Fallback IP const resolvedApiBaseUrl = apiBaseUrl || (typeof window !== 'undefined' ? process.env.NEXT_PUBLIC_API_URL : '') @@ -352,7 +352,7 @@ export const useDashboardStore = create()( return snapshotFetchInFlight } - // 統帥鐵律: 禁止任何 Fallback IP + // 專案鐵律: 禁止任何 Fallback IP const resolvedApiBaseUrl = apiBaseUrl || (typeof window !== 'undefined' ? process.env.NEXT_PUBLIC_API_URL : '') diff --git a/apps/web/src/stores/timeline.store.ts b/apps/web/src/stores/timeline.store.ts index 0a071cf3c..636050c02 100644 --- a/apps/web/src/stores/timeline.store.ts +++ b/apps/web/src/stores/timeline.store.ts @@ -10,7 +10,7 @@ * - 防止偽造: 前端不可直接新增事件,必須透過 API 回調 * - OOM 防護: maxEvents=100 限制記憶體使用 * - * 事件類型對應統帥規格: + * 事件類型對應專案規格: * - [SYSTEM] 系統接收告警 * - [AGENT] OpenClaw AI 分析完成 * - [SECURITY] 權限阻擋 (Access Denied) @@ -21,10 +21,10 @@ import { create } from 'zustand' // ============================================================================= -// API Configuration (統帥鐵律: 禁止 hardcode localhost) +// API Configuration (專案鐵律: 禁止 hardcode localhost) // ============================================================================= -// 統帥鐵律: 禁止任何 Fallback IP +// 專案鐵律: 禁止任何 Fallback IP const getApiBaseUrl = (): string => { if (typeof window === 'undefined') return '' const url = process.env.NEXT_PUBLIC_API_URL @@ -38,7 +38,7 @@ const getApiBaseUrl = (): string => { const API_BASE_URL = getApiBaseUrl() // ============================================================================= -// Types (統帥規格) +// Types (專案規格) // ============================================================================= export type TimelineEventType = diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index d16b14a1f..70b20fab9 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,36 @@ +## 2026-06-05|IwoooS P2-D2 註解語氣清理 + +**背景**:接續 IwoooS P2-D1 可見文案收斂,本段只處理 `apps/web/src` 中仍殘留的內部稱謂註解。這是維護者可讀性與交接語氣治理,不是前台 UI 文案改版,不是 owner response、runtime gate、Kali 維護、GitHub primary 或自動修復授權。 + +**本輪完成**: +- 建立乾淨 worktree `/private/tmp/awoooi-iwooos-i18n-d2-20260605` 與分支 `codex/iwooos-i18n-d2-20260605`,基準為 `gitea/main=8f8c914a docs(logbook): 記錄 IwoooS D1 正式驗證 [skip ci]`。 +- 將 `apps/web/src` 內註解語氣從 `統帥鐵律`、`統帥規格`、`統帥指示`、`統帥批准` 改為 `專案鐵律`、`專案規格`、`既有決策`、`人工批准`。 +- 將 `188 基地真實血脈` 註解改為 `production 真實資料源`。 +- 本段未改 runtime 行為、API、i18n key、messages、guard 契約或任何可見頁面 layout。 + +**完成度更新**: +- D2 註解語氣 slice:`0% → 100%`。 +- `apps/web/src` 內部稱謂殘留:`32 → 0`。 +- P2 全站繁中治理:`45% → 47%`;此調整只代表註解語氣與維護者可讀性,不代表 TSX hardcoded 可見文案已完成搬遷。 +- IwoooS headline:維持 `64%`。 +- framework / read-only evidence / frontend visualization:維持 `92%`。 +- runtime landing:維持 `40-45%`。 +- owner response received / accepted:`0 / 0`。 +- active runtime gate:`0`。 + +**驗證**: +- `rg -n "統帥|188 基地真實血脈" apps/web/src -g '*.ts' -g '*.tsx' -g '*.js' -g '*.jsx'`:命中 `0`。 +- D1 高風險詞掃描:`跨 Session`、`另一個 Session`、`互踩`、`聊天同意`、`Session Handoff`、`execution router`、`runtime 授權`、`reviewer candidate`、`reviewer queue`、`token/private key`、`session value`、`閘門s`、`操作按鈕s`、`統帥鐵律違反` 命中 `0`。 +- `python3 scripts/security/source-control-owner-response-guard.py --root .`:`SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`。 +- `python3 scripts/security/security-mirror-progress-guard.py --root .`:`SECURITY_MIRROR_PROGRESS_GUARD_OK`。 +- `git diff --check`:通過。 +- `pnpm --filter @awoooi/web typecheck`:通過。 +- 本段為 comments-only,無前台 DOM / CSS / bundle 行為變更;不啟動 build / browser smoke,頁面驗證留給下一個可見文案或 layout 變更切片。 + +**目前邊界**: +- 不啟動 Kali `/execute`、SSH、主機更新、active scan、repo / refs / workflow / secret / primary 變更。 +- P2 全站繁中仍未完成;下一段應處理 IwoooS page literal、Code Review page literal、AwoooP Runs fallback、AIops mock-data 或 GenUI 測試文案,該類可見 / bundle 變更需要 typecheck、build 與 desktop/mobile 頁面驗證。 + ## 2026-06-05|AwoooI Header Logo Pills V2 上線 **背景**:使用者指定 `file:///Users/ogt/awoooi/logo-gallery.html` 中的 `1. AI (AwoooI) - 科技感冷色調 (藍、紫、青)` → `V2: 膠囊疊加 (Pills) - 推薦`,要求替換網站左上角 Logo,並維持目前網站視覺規範。 diff --git a/docs/workplans/2026-06-04-iwooos-security-governance-p0.md b/docs/workplans/2026-06-04-iwooos-security-governance-p0.md index f7545d8d3..a2cdadcf2 100644 --- a/docs/workplans/2026-06-04-iwooos-security-governance-p0.md +++ b/docs/workplans/2026-06-04-iwooos-security-governance-p0.md @@ -7,12 +7,13 @@ | 項目 | 目前值 | |------|--------| | 工作視窗 | IwoooS / AWOOOI 資安治理 P0 | -| 本次乾淨 worktree | `/private/tmp/awoooi-iwooos-i18n-d1-20260605` | -| 本次分支 | `codex/iwooos-i18n-d1-20260605` | -| 最新觀察到的 `gitea/main` | `879b0a36 chore(cd): deploy f9bf8a2 [skip ci]` | +| 本次乾淨 worktree | `/private/tmp/awoooi-iwooos-i18n-d2-20260605` | +| 本次分支 | `codex/iwooos-i18n-d2-20260605` | +| 最新觀察到的 `gitea/main` | `8f8c914a docs(logbook): 記錄 IwoooS D1 正式驗證 [skip ci]` | | 最新 P2-D0 繁中文案基準 | code `cd2275a2`、deploy marker `1920bd08`、code-review `2565`、CD `2564` | | 最新 P2-D1 本地掃描基準 | `VISIBLE_LITERAL_TARGET_SCAN_OK files=221`;全站 TS / TSX 中文 literal 盤點 `35` 檔 / `752` 行;註解語氣 backlog `32` 筆 | | 最新 P2-D1 正式部署基準 | code `f9bf8a28`、deploy marker `879b0a36`、CD `2578`、code-review `2579` | +| 最新 P2-D2 註解語氣基準 | `apps/web/src` 內部稱謂殘留 `32 → 0`;D1 高風險詞命中 `0` | | 前一個正式 IwoooS 候選基準 | code `7b8fc093`、deploy marker `45c63488`、LOGBOOK `02cadee6` | | 最新導航 IA 基準 | code `973fc7a4`、LOGBOOK `2555c811`、deploy marker `0260ec89` | | 禁止事項 | 不 force push、不 destructive git、不 SSH 修改主機、不 active scan、不收 secrets 明文、不把 AwoooP approval 當資安批准、不把 UI 可見當 runtime 授權 | @@ -32,7 +33,7 @@ | VibeWork 納入 IwoooS | P1-9 onboarding handoff package `100%`;產品 / repo / surface / owner / evidence 邊界已可交接 | 否 | 保留 VibeWork 獨立產品邊界;不部署、不掃描、不改 repo / refs / workflow、不收 secrets | | IwoooS P2 首屏 UX / 資安圖表 | 本地階段 `100%`;正式站 `100%`;本輪前端發佈 `100%` | 否 | 首屏已精簡成摘要、資安網圖、拓樸圖譜、決策閘門與矩陣;S4.9 與長證據改為展開式。這只完成 P2 視覺 / 資訊架構 slice,不調高 IwoooS 整體 64% | | Frontend design system / visual grammar | 維持 `60%` | 否 | 本輪只推進 IwoooS 頁面資訊架構與圖表排序,不宣稱全站設計系統完成 | -| P2 全站繁中文案 D0+D1 | `45%` | 只限高風險可見 literal 與盤點 | D0 已清 messages 高風險殘留;D1 已掃 `apps/web/src` 字串 literal 並修正 `跨 Session`、`統帥`、`統帥鐵律違反` 等可見 / bundle 文案;全站 hardcoded TSX literal 仍需 D2 分批搬遷 | +| P2 全站繁中治理 D0+D1+D2 註解語氣 | `47%` | 只限高風險可見 literal、盤點與註解語氣 | D0 已清 messages 高風險殘留;D1 已掃 `apps/web/src` 字串 literal 並修正高風險可見 / bundle 文案;D2 已清 `apps/web/src` 內部稱謂註解。全站 hardcoded TSX 可見 literal 仍需後續分批搬遷 | ## 2. P0 工作拆解與優先順序 @@ -141,7 +142,7 @@ S4.9 是目前 IwoooS 64% 能往前的第一優先 gate。驗收前所有 count | P1 | Code Review 候選分類 | 前端體驗、測試補洞、文件同步、低風險重構;人工批准後才 Codex | 候選不自動改 code、不自動 deploy | | P2 | IwoooS UX 精簡 | 首屏保留進度誠實儀表、高層摘要、資安網圖、拓樸圖譜、決策閘門與矩陣;焦點導覽、深度地圖、證據流、解鎖佇列與 S4.9 草稿改成「首層證據與 S4.9 下鑽」展開區 | 本地 desktop/mobile 與正式站 desktop/mobile 已通過;水平溢出維持 0 | | P2 | 資安圖表專業化 | 主拓樸圖、攻擊路徑、主機 / 產品 / 版本來源關聯、決策閘門 flow 保留為主線;詳細證據與 scope 圖表改成下鑽 | 本地 build + browser 與正式站 browser 已通過 | -| P2 | 全站繁中檢查 | D0 已清 messages;D1 已完成 TS / TSX 高風險 literal 掃描與小修,並建立 `35` 檔 / `752` 行中文 literal backlog | i18n parse、key drift、placeholder drift、TypeScript、build、local / production desktop + mobile;D2 分批搬遷 | +| P2 | 全站繁中檢查 | D0 已清 messages;D1 已完成 TS / TSX 高風險 literal 掃描與小修;D2 已清 `apps/web/src` 內部稱謂註解 `32 → 0`,仍保留 `35` 檔 / `752` 行中文 literal backlog | comments-only 切片跑文字掃描、guard、diff check;後續可見文案搬遷需 i18n parse、key drift、placeholder drift、TypeScript、build、local / production desktop + mobile | | P3 | AI Agent 評估 | NemoTron / Hermes / OpenClaw / ElephantAlpha dry-run、benchmark、成本、安全邊界 | 不切 production | | P3 | runtime gate 收斂 | owner evidence、人工批准、rollback、disable、post-check | production truth,不只 UI | @@ -275,6 +276,7 @@ P1 只讀重盤階段整體完成度:`70%`。它代表 freshness / inventory / | P2-D1 本地 `/zh-TW/code-review` | desktop 1440x1000 / mobile 390x844 皆可載入,`平行工作同步` 可見;`跨 Session` 舊詞與高風險詞命中 `0`;`horizontalOverflow=0`;截圖 `/private/tmp/code-review-i18n-d1-local-desktop-a5324ef7.png`、`/private/tmp/code-review-i18n-d1-local-mobile-a5324ef7.png` | | P2-D1 production `/zh-TW/iwooos` | desktop 1440x1000 / mobile 390x844 皆可載入,`IwoooS` 與「前台入口與既有資安頁」可見;展開整合區後「審查後修正候選」可見;`horizontalOverflow=0`、禁止 action href `0`、高風險詞命中 `0`;截圖 `/private/tmp/iwooos-i18n-d1-prod-desktop-879b0a36.png`、`/private/tmp/iwooos-i18n-d1-prod-mobile-879b0a36.png` | | P2-D1 production `/zh-TW/code-review` | desktop 1440x1000 / mobile 390x844 皆可載入,`平行工作同步` 可見;`跨 Session` 舊詞與高風險詞命中 `0`;`horizontalOverflow=0`;截圖 `/private/tmp/code-review-i18n-d1-prod-desktop-879b0a36.png`、`/private/tmp/code-review-i18n-d1-prod-mobile-879b0a36.png` | +| P2-D2 註解語氣掃描 | `apps/web/src` 內 `統帥`、`188 基地真實血脈` 命中 `0`;D1 高風險詞命中 `0`;owner response guard、security mirror progress guard、`git diff --check`、`pnpm --filter @awoooi/web typecheck` 通過;本段 comments-only,無前台 DOM / CSS / bundle 行為變更,不需頁面 smoke | 本輪驗證後仍維持: