diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json
index 44302b2d..dc69a9f0 100644
--- a/apps/web/messages/en.json
+++ b/apps/web/messages/en.json
@@ -9715,6 +9715,15 @@
"source_correlation_review": "來源證據待配對",
"no_repair_record": "無修復記錄"
},
+ "workItemStatuses": {
+ "owner_review_ready": "草案待 owner review",
+ "draft_ready": "草案已準備",
+ "open": "工作項待處理",
+ "blocked": "工作項阻塞",
+ "closed": "工作項已關閉",
+ "none": "無工作項",
+ "unknown": "工作項狀態未知"
+ },
"item": {
"latest": "最新 {time}",
"duplicates": "重複 {count}",
diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json
index 44302b2d..dc69a9f0 100644
--- a/apps/web/messages/zh-TW.json
+++ b/apps/web/messages/zh-TW.json
@@ -9715,6 +9715,15 @@
"source_correlation_review": "來源證據待配對",
"no_repair_record": "無修復記錄"
},
+ "workItemStatuses": {
+ "owner_review_ready": "草案待 owner review",
+ "draft_ready": "草案已準備",
+ "open": "工作項待處理",
+ "blocked": "工作項阻塞",
+ "closed": "工作項已關閉",
+ "none": "無工作項",
+ "unknown": "工作項狀態未知"
+ },
"item": {
"latest": "最新 {time}",
"duplicates": "重複 {count}",
diff --git a/apps/web/src/app/[locale]/awooop/runs/page.tsx b/apps/web/src/app/[locale]/awooop/runs/page.tsx
index a9abdea9..c8e955a3 100644
--- a/apps/web/src/app/[locale]/awooop/runs/page.tsx
+++ b/apps/web/src/app/[locale]/awooop/runs/page.tsx
@@ -2211,6 +2211,20 @@ function recurrenceRepairStatusLabelKey(status?: string | null) {
return "repairStatuses.no_repair_record";
}
+function recurrenceWorkItemStatusLabelKey(status?: string | null) {
+ if (
+ status === "owner_review_ready" ||
+ status === "draft_ready" ||
+ status === "open" ||
+ status === "blocked" ||
+ status === "closed" ||
+ status === "none"
+ ) {
+ return `workItemStatuses.${status}`;
+ }
+ return "workItemStatuses.unknown";
+}
+
function EventRecurrencePanel({
recurrence,
error,
@@ -2344,6 +2358,17 @@ function EventRecurrencePanel({
const workItem = item.work_item;
const repairKey = recurrenceRepairStatusLabelKey(repair?.status);
const repairLabel = t(repairKey as never);
+ const workItemStatusLabel = workItem
+ ? t(recurrenceWorkItemStatusLabelKey(workItem.status) as never)
+ : null;
+ const workItemTone =
+ workItem?.status === "owner_review_ready" || workItem?.status === "draft_ready"
+ ? "owner_review"
+ : workItem?.status === "blocked"
+ ? "blocked"
+ : workItem?.status === "open"
+ ? "open"
+ : "neutral";
const runHref = item.latest_run_id
? `/awooop/runs/${item.latest_run_id}?project_id=${encodeURIComponent(recurrence?.project_id ?? "awoooi")}`
: null;
@@ -2391,6 +2416,22 @@ function EventRecurrencePanel({
>
{repairLabel}
+ {workItemStatusLabel ? (
+
+ {workItemStatusLabel}
+
+ ) : null}
{runHref ? (
65%`。
+- AwoooP AI 自動化真相鏈:維持 `64%`,因本輪只是 readback UI。
+- 全站 UI/UX 專業化:`55% -> 56%`。
+- Runtime execution gate / production autonomous repair verified success:不變。
+
+**邊界**:本輪只做 Runs read-only 狀態 chip;沒有發 Telegram、沒有套用 PlayBook、沒有執行 Ansible、沒有 SSH、沒有重啟服務、沒有讀 secret、沒有提高 runtime gate。
+
## 2026-06-25|Repair Candidate Draft Ready owner review 狀態模型
**背景**:Telegram `INC-20260625-977E5F` 類 `node-exporter-188` 告警已能預填 `host_service_route_after_owner_review`、`systemctl restart node-exporter-188`、rollback、verifier 與 AwoooP Work Item,但 webhook / Telegram 仍把它標成 `NO_ACTION - REPAIR_CANDIDATE_MISSING`,造成 operator 看到「AI 選擇不修、需人工」而非「AI 已產出 owner review 草案」。這會讓 AI 自動化產品看起來像只會把問題丟回人工。
diff --git a/docs/workplans/2026-06-25-awoooi-navigation-ia-consolidation.md b/docs/workplans/2026-06-25-awoooi-navigation-ia-consolidation.md
index 048da2b2..f07c4e48 100644
--- a/docs/workplans/2026-06-25-awoooi-navigation-ia-consolidation.md
+++ b/docs/workplans/2026-06-25-awoooi-navigation-ia-consolidation.md
@@ -142,12 +142,22 @@
| Tests | `py_compile` 通過;targeted API tests `21 passed` |
| 邊界 | 不執行主機命令、不發 Telegram、不套用 PlayBook、不跑 Ansible、不開 runtime gate;只是讓 owner review 草案成為可追蹤狀態 |
+## 4.7 2026-06-25 Runs recurrence Work Item 草案狀態 chip
+
+| 項目 | 結果 |
+|---|---|
+| UI | `/zh-TW/awooop/runs` recurrence 卡片新增 Work Item status chip |
+| 新狀態 | `owner_review_ready`、`draft_ready`、`open`、`blocked`、`closed`、`none`、`unknown` |
+| 判讀 | `owner_review_ready` 顯示為「草案待 owner review」,不再和「無修復記錄」混淆 |
+| 驗證 | JSON parse、i18n mirror、web typecheck、diff check 通過 |
+| 邊界 | 只讀狀態顯示;不新增執行、重啟、Telegram send 或 PlayBook apply 入口 |
+
## 5. 下一輪必做
| 優先級 | 工作 | 驗收 |
|---|---|---|
-| P0 | AwoooP Runs 共用 Situation Strip / Agent Flow / Action Rail | Overview、Work Items、Approvals 第一刀已完成;下一步讓 Runs 也能一眼看懂卡點、owner、補救試跑、verifier 與下一步 |
-| P0 | Repair candidate draft readback 串接 | 後端已拆出 `draft_ready_for_owner_review`;下一步 Runs / Work Items / KB 必須顯示草案 ID、owner、rollback、verifier、KM / PlayBook / script / schedule 資產狀態 |
+| P0 | AwoooP Runs 共用 Situation Strip / Agent Flow / Action Rail | Recurrence Work Item status chip 已完成;下一步補首屏 Situation Strip,讓 Runs 一眼看懂卡點、owner、補救試跑、verifier 與下一步 |
+| P0 | Repair candidate draft readback 串接 | 後端已拆出 `draft_ready_for_owner_review`,Runs 已顯示 Work Item 草案狀態;下一步 Work Items / KB 顯示草案 ID、owner、rollback、verifier、KM / PlayBook / script / schedule 資產狀態 |
| P0 | Tenants 舊表格 responsive 化 | route / source 已完成卡片化;下一步處理租戶資料表 drawer 與產品 topology drilldown |
| P0 | Observability topology | 主機 / 服務 / 網站 / 告警 / SLO 關聯可視化 |
| P0 | Knowledge / Automation trust ledger | KM、PlayBook、腳本、排程、dry-run、verifier 有統一沉澱面板 |
diff --git a/docs/workplans/2026-06-25-awoooi-product-uiux-inventory.md b/docs/workplans/2026-06-25-awoooi-product-uiux-inventory.md
index c06bada2..dae797ce 100644
--- a/docs/workplans/2026-06-25-awoooi-product-uiux-inventory.md
+++ b/docs/workplans/2026-06-25-awoooi-product-uiux-inventory.md
@@ -186,6 +186,20 @@ Tenants 目前已讀到:
完成度同步:Repair candidate missing 後端真相模型 `38% -> 48%`;Telegram 告警可判讀性 `58% -> 64%`;AwoooP AI 自動化真相鏈 `60% -> 64%`;production autonomous repair verified success 仍 `3-5%`。
+### 2.5.5 Runs recurrence Work Item 草案狀態 chip
+
+2026-06-25 已完成 `/zh-TW/awooop/runs` 小切片,讓 recurrence 卡片能讀出 work item 的 `owner_review_ready` / `draft_ready`,把「AI 已產出草案,等待 owner review」放到 Run 視角。
+
+| 項目 | 完成 |
+|---|---|
+| UI | recurrence 卡片新增 Work Item status chip |
+| 狀態 | `owner_review_ready`、`draft_ready`、`open`、`blocked`、`closed`、`none`、`unknown` |
+| 判讀 | `owner_review_ready` 顯示「草案待 owner review」,不再只看到「無修復記錄」 |
+| 驗證 | JSON parse、i18n mirror `RUNS_WORK_ITEM_STATUS_I18N_OK leaves=13652`、`pnpm --filter @awoooi/web typecheck`、`git diff --check` 通過 |
+| 邊界 | 只讀顯示,不新增執行、重啟、Telegram send、PlayBook apply 或 runtime gate |
+
+完成度同步:AwoooP Runs 可判讀性 `62% -> 65%`;全站 UI/UX 專業化 `55% -> 56%`;AwoooP AI 自動化真相鏈仍 `64%`。
+
## 3. 頁面 UI/UX 現況盤點
2026-06-25 對正式站桌機 / mobile 抽查:
@@ -193,7 +207,7 @@ Tenants 目前已讀到:
| 頁面 | 現況 | 主要問題 | 優先級 |
|---|---|---|---|
| `/zh-TW/awooop` | Google Ads 式 shell 已存在,AwoooP 概覽與 AI 自動化真相帶可見 | 仍需把 Runs / Work Items / Approvals 的卡點與 owner SOP rail 串回同一首屏;後續要減少下方長文字卡 | P0 |
-| `/zh-TW/awooop/runs` | Runs 狀態鏈與 provider evidence 可見 | mobile 有長字串、內部 provider URL / key 類資訊外露風險;使用者無法一眼分辨「AI 已做什麼、卡哪裡、下一步誰做」 | P0 |
+| `/zh-TW/awooop/runs` | Runs 狀態鏈、provider evidence 與 recurrence Work Item 草案狀態 chip 可見 | mobile 有長字串、內部 provider URL / key 類資訊外露風險;仍需補 Situation Strip / Agent Flow / Action Rail 才能一眼分辨「AI 已做什麼、卡哪裡、下一步誰做」 | P0 |
| `/zh-TW/awooop/work-items` | 工作項目、repair candidate 與 operator SOP rail 可見;已能一眼看到人工卡點、候選品質、沉澱資產與負責人接手 | 底部長表格仍需 responsive data grid / drawer 化;每筆 item 還要補更細的 owner、rollback、verifier receipt 與狀態回寫 | P0 |
| `/zh-TW/awooop/approvals` | approval 狀態鏈、AI evidence 與審批決策 handoff rail 可見;已能一眼看到阻塞、證據、接手包與安全閘門;後端已能把 prefilled host-service 草案標成 owner-review-ready | 表格仍需 drawer 化;Runs / Work Items 仍要讀回 draft-ready 狀態、owner、rollback、verifier receipt 與資產 ID | P0 |
| `/zh-TW/awooop/tenants` | 16 產品、31 路由、10 repo 資產可讀;作戰圖與 route/source 手機卡片已上線 | 下一步補產品拓樸 drilldown 與租戶資料表 drawer | P0 |
@@ -379,7 +393,7 @@ AWOOOI 缺的是:
| 項目 | 基準完成度 |
|---|---:|
-| 全站 UI/UX 專業化 | `55%` |
+| 全站 UI/UX 專業化 | `56%` |
| 導航 / IA 整合 | `64%` |
| AwoooP 操作台產品化 | `65%` |
| Tenants 全產品資產中心 | `68%` |