From 0cfb6b65bdba15f4663e84eae3df282049abe3a0 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 2 Jul 2026 14:58:06 +0800 Subject: [PATCH] fix(awooop): complete inserted requirement work order --- .../awoooi_priority_work_order_readback.py | 159 ++++++++++++++++++ ...awoooi_priority_work_order_readback_api.py | 53 +++++- .../app/[locale]/awooop/work-items/page.tsx | 5 + docs/LOGBOOK.md | 24 +++ ...r-inserted-requirements-priority-ledger.md | 53 ++++-- 5 files changed, 273 insertions(+), 21 deletions(-) diff --git a/apps/api/src/services/awoooi_priority_work_order_readback.py b/apps/api/src/services/awoooi_priority_work_order_readback.py index e96708c8..42e885eb 100644 --- a/apps/api/src/services/awoooi_priority_work_order_readback.py +++ b/apps/api/src/services/awoooi_priority_work_order_readback.py @@ -243,6 +243,104 @@ _COMMANDER_INSERTED_REQUIREMENT_WORK_ITEMS: list[dict[str, Any]] = [ "next_action": "把此 readback 作為 work-items 前台的主線優先序來源。", "mapped_workplan_id": "P0-010", }, + { + "id": "CIR-P0-AILOOP-001", + "priority": "P0", + "order": 16, + "status": "in_progress", + "lane": "ai_loop_agent_mainline", + "request": "你現在有在往 AI Loop Agent 這個方向目標前進嗎?", + "normalized_work_item": ( + "AI Loop Agent 北極星必須成為所有告警、工作項、Run、LOG 與前台的主線:" + "Sensor -> Normalizer -> AI Lane -> Candidate -> Gate -> Execution Boundary -> Verifier -> Learning/Writeback。" + ), + "current_state": "MASTER §1.4 已定義產品契約;本 work-order 將其升為 P0 可見工作項。", + "acceptance": ( + "Work Items API/UI 可讀回 AI Loop Agent 主線,且每個後續 P0 都能映射到閉環節點。" + ), + "next_action": "把 Telegram、LOG、KM/RAG/MCP/PlayBook 與 UI 工作項都掛到 AI Loop Agent 節點。", + "mapped_workplan_id": "P0-006", + }, + { + "id": "CIR-P0-AILOOP-002", + "priority": "P0", + "order": 17, + "status": "in_progress", + "lane": "ai_automation_trace_nodes", + "request": "所有 AI 自動化完整流程、節點必須完整且詳盡紀錄,作為持續學習與提升依據。", + "normalized_work_item": ( + "每次 AI 自動化事件必須記錄 trace_id、run_id、work_item_id、節點狀態、timestamp、" + "evidence refs、verifier result、rollback result 與 KM/PlayBook trust writeback refs。" + ), + "current_state": "現有 Run/Work Item/receipt 有部分證據;完整節點契約仍需補齊。", + "acceptance": "API readback 能逐筆顯示 AI automation node coverage 與 missing node blockers。", + "next_action": "建立 AI automation node receipt schema,先套用 Telegram alert 與 P0 runtime lanes。", + "mapped_workplan_id": "P1-006", + }, + { + "id": "CIR-P0-LOG-001", + "priority": "P0", + "order": 18, + "status": "in_progress", + "lane": "global_log_ingestion", + "request": "把所有專案、產品、網站、服務、套件、工具等等的所有 LOG 都收進去。", + "normalized_work_item": ( + "建立全域 LOG source registry 與 ingestion adapters,涵蓋 project/product/site/service/package/tool," + "並帶 redaction、retention、freshness、last_success 與 owner lane。" + ), + "current_state": "目前 observability/log/backup coverage 分散;尚未成為單一 AI Agent 可用資料層。", + "acceptance": "source registry 顯示每類 LOG 的 adapter、freshness、缺口與安全邊界。", + "next_action": "先做 metadata-only LOG source registry,不讀 secret/raw payload,再接 AI automation trace。", + "mapped_workplan_id": "P1-006", + }, + { + "id": "CIR-P0-LOG-002", + "priority": "P0", + "order": 19, + "status": "pending", + "lane": "log_tagging_classification_clustering", + "request": "LOG 要依據專案、產品、網站、服務、套件、工具貼標,完整分類、分群,讓 AI Agent 可處理。", + "normalized_work_item": ( + "LOG 必須自動貼上 product/project/site/service/package/tool、severity、lane、evidence confidence、" + "AI route、cluster_id 與 dedup/fingerprint。" + ), + "current_state": "分類規則與群聚資料尚未統一;不能只靠 raw log 或 Telegram 文字。", + "acceptance": "AI Agent 可按 tag/cluster 查詢相關 evidence,並產生候選修復與 verifier。", + "next_action": "定義 tag taxonomy 與 clustering readback,先覆蓋 Telegram alert、CPU pressure、backup、freshness。", + "mapped_workplan_id": "P1-006", + }, + { + "id": "CIR-P0-TG-001", + "priority": "P0", + "order": 20, + "status": "in_progress", + "lane": "telegram_alert_ai_automation", + "request": "所有發送到 Telegram 的監控告警是否全面清查、完整寫入 DB 或日誌、符合 AI Agent AI 自動化?不要一堆告警都要人工作業。", + "normalized_work_item": ( + "每個 Telegram 告警都要映射到 DB/log receipt、AI route、controlled queue、work item、" + "post verifier 與 learning writeback;direct send 或 manual default 都列缺口。" + ), + "current_state": "本輪已把 workflow direct send 收斂到 0 並暴露 API direct gap;仍需全面 alert matrix。", + "acceptance": "Telegram alert matrix 顯示 total、DB receipt、AI route、controlled queue、manual/default gap 與 direct send gap。", + "next_action": "擴充 Telegram alert inventory/readback,讓人工預設只允許 critical/break-glass 或歷史證據。", + "mapped_workplan_id": "P0-006", + }, + { + "id": "CIR-P0-IA-001", + "priority": "P0", + "order": 21, + "status": "pending", + "lane": "navigation_ia_recovery", + "request": "AWOOOI 裡面的 IwoooS 被移除、導航列菜單被移除,且沒有把被移除頁面整合到相關頁面。", + "normalized_work_item": ( + "建立 IA/nav removal recovery ledger:每個被移除 menu/route/page 必須有保留、合併、替代目的地、" + "redirect、權限邊界與 desktop/mobile navigation smoke。" + ), + "current_state": "目前只在對話中被追問,尚未完整盤點成 route/menu/readback 表。", + "acceptance": "IA recovery readback 顯示 IwoooS、AwoooP、OpenClaw、governance route 是否仍可被導覽或已合併。", + "next_action": "盤點 navigation config、route list 與 removed-page destination,補 Work Items UI readback。", + "mapped_workplan_id": "P0-010", + }, { "id": "CIR-P1-001", "priority": "P1", @@ -334,6 +432,54 @@ _COMMANDER_INSERTED_REQUIREMENT_WORK_ITEMS: list[dict[str, Any]] = [ "next_action": "下個 P0 仍照排序推進。", "mapped_workplan_id": "P0-004", }, + { + "id": "CIR-P1-AUTO-001", + "priority": "P1", + "order": 23, + "status": "in_progress", + "lane": "parallel_mainline_scheduling", + "request": "不能偏離不代表一定要每一個工作完成,才能進行下一個。", + "normalized_work_item": ( + "建立主線並行推進規則:不離開 P0/P1 主線,但可在依賴允許時同時推進 API/UI、LOG、Telegram、" + "KM/RAG/MCP/PlayBook 與 verifier。" + ), + "current_state": "目前 work-order 已按 priority 排序;仍需在回報和 UI 顯示 WIP lane。", + "acceptance": "Work Items 顯示 next item、active lanes 與 blocked/deferred,不把單一 blocker 當全局停工。", + "next_action": "讓後續回報以 active lane + evidence 更新,而不是等待單一項完全結束。", + "mapped_workplan_id": "P0-010", + }, + { + "id": "CIR-P1-UI-001", + "priority": "P1", + "order": 24, + "status": "in_progress", + "lane": "professional_product_ui_ux_mainline", + "request": "UI/UX 工作項目不見了;整個前端頁面一大堆文字,要趕快優化成主流、專業網站、產品做法。", + "normalized_work_item": ( + "UI/UX 成為主線工作項:first-viewport cockpit、可掃描 cards/flow rows、少文字牆、" + "route/nav 一致、desktop/mobile visual smoke。" + ), + "current_state": "AwoooP Work Items 有初版面板;全站仍需系統性文字牆收斂與 IA 修復。", + "acceptance": "AwoooP/Approvals/Runs/Work Items/Alerts/AI Loop 重要頁面都有專業 cockpit 與截圖 smoke。", + "next_action": "先把新增 AI Loop/LOG/Telegram/IA 工作項顯示在 Work Items spotlight,再排 UI smoke。", + "mapped_workplan_id": "P2-UX", + }, + { + "id": "CIR-P1-KM-002", + "priority": "P1", + "order": 25, + "status": "pending", + "lane": "log_km_mcp_rag_playbook_integration", + "request": "所有服務日誌、LOG 要完整跟 KM、MCP、RAG、PLAYBOOK 整合,讓 AI Agent 利用起來。", + "normalized_work_item": ( + "LOG ingestion 的每個 tag/cluster 必須能產生 RAG chunk、KM entry、MCP evidence pointer、" + "PlayBook candidate、trust update 與 verifier/rollback learning。" + ), + "current_state": "writeback targets 分散存在;尚未形成 LOG -> AI Agent -> controlled action 的統一管線。", + "acceptance": "readback 顯示 KM/RAG/MCP/PlayBook writeback target count、missing target 與 last_success。", + "next_action": "把 LOG source registry 接到 KM/RAG/MCP/PlayBook writeback readback。", + "mapped_workplan_id": "P1-006", + }, { "id": "CIR-P2-001", "priority": "P2", @@ -633,6 +779,19 @@ _COMMANDER_INSERTED_REQUIREMENT_WORK_ITEMS: list[dict[str, Any]] = [ "next_action": "維持 stopped / do_not_use。", "mapped_workplan_id": "P0-003A", }, + { + "id": "CIR-P3-NON-001", + "priority": "P3", + "order": 45, + "status": "deferred", + "lane": "non_awoooi_personal_note", + "request": "隱形鐵窗 + 防霾捲紗(陽台最推薦)。", + "normalized_work_item": "此插入內容已記錄為非 AWOOOI 產品/AI 自動化主線事項,不拿來改變 P0/P1 排序。", + "current_state": "已歸檔為非產品主線 note,避免被誤當 AWOOOI 實作項。", + "acceptance": "work-order 可見但 deferred,不阻擋 AWOOOI AI Loop Agent 主線。", + "next_action": "不執行,除非使用者明確切換到家裝/陽台需求。", + "mapped_workplan_id": "NON-AWOOOI", + }, ] diff --git a/apps/api/tests/test_awoooi_priority_work_order_readback_api.py b/apps/api/tests/test_awoooi_priority_work_order_readback_api.py index 0a8a9bb9..19b1a456 100644 --- a/apps/api/tests/test_awoooi_priority_work_order_readback_api.py +++ b/apps/api/tests/test_awoooi_priority_work_order_readback_api.py @@ -186,19 +186,54 @@ def test_awoooi_priority_work_order_readback_loader_returns_mainline_order(): assert payload["operation_boundaries"]["workflow_dispatch_performed"] is False assert payload["operation_boundaries"]["host_write_performed"] is False inserted_items = payload["commander_inserted_requirement_work_items"] - assert len(inserted_items) == 45 + assert len(inserted_items) == 55 assert inserted_items[0]["id"] == "CIR-P0-001" - assert inserted_items[-1]["id"] == "CIR-P3-001" - assert [item["order"] for item in inserted_items] == list(range(1, 46)) + assert inserted_items[-1]["id"] == "CIR-P3-NON-001" + assert [item["order"] for item in inserted_items] == list(range(1, 56)) assert all(item["acceptance"] for item in inserted_items) - assert payload["summary"]["commander_inserted_requirement_work_item_count"] == 45 - assert payload["summary"]["commander_inserted_requirement_p0_count"] == 28 - assert payload["summary"]["commander_inserted_requirement_p1_count"] == 11 + assert payload["summary"]["commander_inserted_requirement_work_item_count"] == 55 + assert payload["summary"]["commander_inserted_requirement_p0_count"] == 34 + assert payload["summary"]["commander_inserted_requirement_p1_count"] == 14 assert payload["summary"]["commander_inserted_requirement_p2_count"] == 5 - assert payload["summary"]["commander_inserted_requirement_p3_count"] == 1 + assert payload["summary"]["commander_inserted_requirement_p3_count"] == 2 assert payload["summary"]["commander_inserted_requirement_next_id"] == "CIR-P0-001" assert payload["rollups"]["commander_inserted_requirement_blocked_count"] == 1 inserted_by_id = {item["id"]: item for item in inserted_items} + assert inserted_by_id["CIR-P0-AILOOP-001"]["lane"] == ( + "ai_loop_agent_mainline" + ) + assert "AI Loop Agent" in inserted_by_id["CIR-P0-AILOOP-001"]["request"] + assert "Sensor -> Normalizer" in inserted_by_id[ + "CIR-P0-AILOOP-001" + ]["normalized_work_item"] + assert inserted_by_id["CIR-P0-AILOOP-002"]["lane"] == ( + "ai_automation_trace_nodes" + ) + assert "trace_id" in inserted_by_id["CIR-P0-AILOOP-002"][ + "normalized_work_item" + ] + assert inserted_by_id["CIR-P0-LOG-001"]["lane"] == "global_log_ingestion" + assert "專案、產品、網站、服務、套件、工具" in inserted_by_id[ + "CIR-P0-LOG-001" + ]["request"] + assert inserted_by_id["CIR-P0-LOG-002"]["lane"] == ( + "log_tagging_classification_clustering" + ) + assert inserted_by_id["CIR-P0-TG-001"]["lane"] == ( + "telegram_alert_ai_automation" + ) + assert "manual/default" in inserted_by_id["CIR-P0-TG-001"]["acceptance"] + assert inserted_by_id["CIR-P0-IA-001"]["lane"] == "navigation_ia_recovery" + assert "IwoooS" in inserted_by_id["CIR-P0-IA-001"]["request"] + assert inserted_by_id["CIR-P1-AUTO-001"]["lane"] == ( + "parallel_mainline_scheduling" + ) + assert inserted_by_id["CIR-P1-UI-001"]["lane"] == ( + "professional_product_ui_ux_mainline" + ) + assert inserted_by_id["CIR-P1-KM-002"]["lane"] == ( + "log_km_mcp_rag_playbook_integration" + ) assert inserted_by_id["CIR-P1-OPENCLAW-001"]["lane"] == ( "openclaw_live_ops_space" ) @@ -207,6 +242,8 @@ def test_awoooi_priority_work_order_readback_loader_returns_mainline_order(): "ai_professional_workbench_ux" ) assert "文字牆" in inserted_by_id["CIR-P2-UX-002"]["request"] + assert inserted_by_id["CIR-P3-NON-001"]["status"] == "deferred" + assert inserted_by_id["CIR-P3-NON-001"]["lane"] == "non_awoooi_personal_note" def test_awoooi_priority_work_order_readback_endpoint_returns_snapshot( @@ -279,7 +316,7 @@ def test_awoooi_priority_work_order_readback_endpoint_returns_snapshot( "P0-006-AI-LOOP-CURRENT-BLOCKER-EXECUTION-QUEUE" ) assert "do not reopen Harbor 502" in data["next_execution_order"][0] - assert data["summary"]["commander_inserted_requirement_work_item_count"] == 45 + assert data["summary"]["commander_inserted_requirement_work_item_count"] == 55 assert data["summary"]["commander_inserted_requirement_next_id"] == "CIR-P0-001" assert data["commander_inserted_requirement_work_items"][1]["id"] == ( "CIR-P0-002" diff --git a/apps/web/src/app/[locale]/awooop/work-items/page.tsx b/apps/web/src/app/[locale]/awooop/work-items/page.tsx index 0f8b4e0b..daa9e26b 100644 --- a/apps/web/src/app/[locale]/awooop/work-items/page.tsx +++ b/apps/web/src/app/[locale]/awooop/work-items/page.tsx @@ -8521,6 +8521,11 @@ function CommanderInsertedRequirementsPanel({ }; const spotlightIds = new Set([ nextId, + "CIR-P0-AILOOP-001", + "CIR-P0-LOG-001", + "CIR-P0-TG-001", + "CIR-P0-IA-001", + "CIR-P1-UI-001", "CIR-P1-OPENCLAW-001", "CIR-P2-UX-002", ]); diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 6eaa723c..f0d57ff3 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -52822,3 +52822,27 @@ production browser smoke: - 沒有讀 secret / token / `.env` / raw sessions / SQLite / auth;沒有讀 `.runner` 內容。 - 沒有使用 GitHub / gh / GitHub API / GitHub Actions。 - 沒有重啟主機,沒有 Docker / Nginx / K3s / DB restart,沒有 workflow_dispatch,沒有 DROP / TRUNCATE / restore / prune。 + +## 2026-07-02 — Commander inserted requirements API/UI priority completion + +**完成內容**: +- `awoooi-priority-work-order-readback` 的 commander inserted requirement work items 從 `45` 增為 `55`,並把使用者中途插入的 AI Loop Agent、AI 自動化節點紀錄、全域 LOG 收集、LOG 貼標/分類/分群、Telegram 告警 AI 自動化、IwoooS / navigation IA 復原、主線並行推進、UI/UX 專業化、LOG -> KM/RAG/MCP/PlayBook 整合與非 AWOOOI 插入事項全部納入正式排序。 +- Priority readback 目前為 `P0=34`、`P1=14`、`P2=5`、`P3=2`,`next_id=CIR-P0-001`;新增 P0 工作項固定排在核心主線之後、reboot/runner runtime P0 之前。 +- `/zh-TW/awooop/work-items` commander inserted requirements spotlight 新增 `CIR-P0-AILOOP-001`、`CIR-P0-LOG-001`、`CIR-P0-TG-001`、`CIR-P0-IA-001`、`CIR-P1-UI-001`,避免 UI/UX、AI Loop、LOG、Telegram 與 IA 工作項再被長文字淹沒。 +- `docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md` 同步補上 AI Loop Agent / 全域 LOG / IA / UI 插入需求補全、Done/In Progress 與下一輪固定執行順序。 + +**本地驗證結果**: +- `DATABASE_URL='postgresql+asyncpg://test:test@localhost/test' PYTHONPATH=apps/api python3.11 -m pytest apps/api/tests/test_awoooi_priority_work_order_readback_api.py -q -p no:cacheprovider`:`14 passed`。 +- `DATABASE_URL='postgresql+asyncpg://test:test@localhost/test' PYTHONPATH=apps/api python3.11 -m pytest apps/api/tests/test_ai_agent_report_truth_actionability_review.py apps/api/tests/test_ai_agent_report_truth_actionability_review_api.py apps/api/tests/test_awoooi_priority_work_order_readback_api.py ops/runner/test_cd_controlled_runtime_profile.py -q -p no:cacheprovider`:`68 passed`。 +- `pnpm --dir apps/web typecheck`:通過。 +- `python3 scripts/security/security-mirror-progress-guard.py`:`SECURITY_MIRROR_PROGRESS_GUARD_OK`。 +- `python3.11 -m json.tool apps/web/messages/zh-TW.json`、`apps/web/messages/en.json`、`docs/operations/awoooi-priority-work-order-readback.snapshot.json`:通過。 +- `git diff --check`:通過。 + +**仍維持**: +- 沒有讀 secret / token / `.env` / raw sessions / SQLite / auth;沒有讀 `.runner` 內容。 +- 沒有使用 GitHub / gh / GitHub API / GitHub Actions。 +- 沒有重啟主機,沒有 Docker / Nginx / K3s / DB / firewall restart,沒有 workflow_dispatch,沒有 DROP / TRUNCATE / restore / prune。 + +**下一步**: +- commit / push 到 Gitea main 後讀回 CD;deploy 後驗證 `/api/v1/agents/awoooi-priority-work-order-readback` 與 `/zh-TW/awooop/work-items` 顯示 55 個插入工作項與新增 spotlight。 diff --git a/docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md b/docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md index cd4771f8..67413079 100644 --- a/docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md +++ b/docs/workplans/2026-07-02-commander-inserted-requirements-priority-ledger.md @@ -78,6 +78,23 @@ | 19 | CIR-P2-UX-001 | P2 | 「維護頁外部雲端或其他專業做法評估」 | Maintenance UX 可先做設計 / decision record;實際 DNS/edge cutover 需 controlled apply | 尚未開始 | 先出 no-write design / rollback / smoke verifier,不直接切 DNS | | 20 | CIR-P2-UX-002 | P2 | 「不要又是一大堆文字頁 / 文字牆,要像主流網站與專業 AI 產品」 | AI professional UI:first-viewport cockpit、metrics/cards/flow rows、expandable technical detail、desktop/mobile screenshot smoke | AwoooP 已有插入需求工作項面板;仍需把長文區塊持續收斂成可掃描 cockpit | 針對 AwoooP / governance / OpenClaw live ops 做 visual smoke 與長文字區塊收斂 | +## 2026-07-02 AI Loop Agent / 全域 LOG / IA / UI 插入需求補全 + +> 本節補登使用者在 AI 自動化、所有 LOG 收攏、Telegram 告警、MCP / RAG / KM / PlayBook、IwoooS / 導航移除與 UI/UX 追問期間插入的明確要求。這些項目已同步到 `awoooi-priority-work-order-readback` API 與 `/zh-TW/awooop/work-items` spotlight,不得只停在 Markdown。 + +| 順序 | ID | 優先序 | 使用者插入要求 | 正規化工作項 | 目前狀態 | 下一個可驗證動作 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | CIR-P0-AILOOP-001 | P0 | 「你現在有在往 AI Loop Agent 這個方向目標前進嗎?」 | AI Loop Agent 北極星成為所有告警、工作項、Run、LOG 與前台主線:Sensor → Normalizer → AI Lane → Candidate → Gate → Execution Boundary → Verifier → Learning / Writeback | 已升為 API/UI 可見 P0 工作項 | 把 Telegram、LOG、KM/RAG/MCP/PlayBook 與 UI 工作項掛到 AI Loop Agent 節點 | +| 2 | CIR-P0-AILOOP-002 | P0 | 「所有 AI 自動化完整流程、節點必須完整且詳盡紀錄」 | 每次 AI 自動化事件記錄 trace_id、run_id、work_item_id、節點狀態、timestamp、evidence refs、verifier、rollback、KM/PlayBook trust writeback | 已升為 API/UI 可見 P0 工作項;節點 schema 待補 | 建立 AI automation node receipt schema,先套用 Telegram alert 與 P0 runtime lanes | +| 3 | CIR-P0-LOG-001 | P0 | 「所有專案、產品、網站、服務、套件、工具的 LOG 都要收進去」 | 建立全域 LOG source registry 與 ingestion adapters,含 redaction、retention、freshness、last_success、owner lane | 已升為 API/UI 可見 P0 工作項 | 先做 metadata-only LOG source registry,不讀 secret / raw payload | +| 4 | CIR-P0-LOG-002 | P0 | 「LOG 要貼標、分類、分群,讓 AI Agent 可以處理」 | LOG 自動貼 product/project/site/service/package/tool、severity、lane、confidence、AI route、cluster_id、fingerprint | 已升為 API/UI 可見 P0 工作項 | 定義 tag taxonomy 與 clustering readback,先覆蓋 Telegram、CPU、backup、freshness | +| 5 | CIR-P0-TG-001 | P0 | 「所有發送到 Telegram 的監控告警是否全面清查、完整寫入 DB 或日誌、符合 AI 自動化?」 | 每個 Telegram 告警映射 DB/log receipt、AI route、controlled queue、work item、post verifier、learning writeback;direct send / manual default 列缺口 | workflow direct send 已收斂到 0;API direct gap 仍需追 | 擴充 Telegram alert inventory/readback,人工預設只允許 critical / break-glass 或歷史證據 | +| 6 | CIR-P0-IA-001 | P0 | 「IwoooS 被移除、導航列菜單被移除,且沒有整合到相關頁面」 | 建立 IA/nav removal recovery ledger:被移除 menu/route/page 必須有保留、合併、替代目的地、redirect、權限邊界與 smoke | 已升為 API/UI 可見 P0 工作項;route/menu 盤點待補 | 盤點 navigation config、route list 與 removed-page destination,補 readback | +| 7 | CIR-P1-AUTO-001 | P1 | 「不能偏離不代表一定要每一個工作完成,才能進行下一個」 | 建立主線並行推進規則:不離開 P0/P1 主線,但依賴允許時可同時推 API/UI、LOG、Telegram、KM/RAG/MCP/PlayBook、verifier | 已升為 API/UI 可見 P1 工作項 | 後續回報以 active lane + evidence 更新,不等待單一項完全結束 | +| 8 | CIR-P1-UI-001 | P1 | 「UI/UX 工作項目不見;整個前端頁面一大堆文字,要主流專業產品做法」 | UI/UX 成為主線:first-viewport cockpit、cards/flow rows、少文字牆、route/nav 一致、desktop/mobile smoke | 已升為 API/UI spotlight | 先讓 AI Loop / LOG / Telegram / IA 工作項在 Work Items spotlight 可見,再排 UI smoke | +| 9 | CIR-P1-KM-002 | P1 | 「所有服務日誌、LOG 要完整跟 KM、MCP、RAG、PLAYBOOK 整合」 | LOG tag/cluster 產生 RAG chunk、KM entry、MCP evidence pointer、PlayBook candidate、trust update、verifier/rollback learning | 已升為 API/UI 可見 P1 工作項 | 把 LOG source registry 接到 KM/RAG/MCP/PlayBook writeback readback | +| 10 | CIR-P3-NON-001 | P3 | 「隱形鐵窗 + 防霾捲紗(陽台最推薦)」 | 非 AWOOOI / AI 自動化主線事項,記錄但不改變 P0/P1 排序 | 已歸檔 deferred | 不執行,除非使用者明確切換到家裝 / 陽台需求 | + ## 目前 Done / In Progress / Blocked ### Done @@ -93,11 +110,20 @@ | 建立時基準同步到 Gitea truth | local `main...origin/main` clean at deploy marker `ab748b1a` | | 110 Gitea CPU 專用 check-mode playbook | `gitea-queue-hook-backlog-playbook.py` 已上 main;live readback 可輸出 health/version/hooktasks/active Actions | | 110 CPU evidence / controller 分流一致性 | live evidence 與 controller 皆將 Stock/Postgres pressure 優先導向 `postgres_hot_query_or_backup_export_playbook` | +| 插入需求 API/UI 可見化 | `awoooi-priority-work-order-readback` 已把插入需求主線工作項產品化;Work Items 頁有 spotlight | ### In Progress | 項目 | 目前狀態 | 下一步 | | --- | --- | --- | +| AI Loop Agent 主線 | 已升為 P0 工作項,對齊 MASTER §1.4 閉環節點 | 把 Telegram、LOG、KM/RAG/MCP/PlayBook、UI 工作項都掛到 AI Loop 節點 | +| AI 自動化流程 / 節點紀錄 | 已升為 P0 工作項;trace/run/work_item/node/evidence/verifier/writeback schema 待補 | 建立 AI automation node receipt schema | +| 全域 LOG 收集 | 已升為 P0 工作項;source registry / adapter / freshness / retention 尚未統一 | 建立 metadata-only LOG source registry | +| LOG 貼標 / 分類 / 分群 | 已升為 P0 工作項;tag taxonomy / cluster readback 待補 | 先覆蓋 Telegram、CPU、backup、freshness | +| Telegram 告警 AI 自動化 | 已升為 P0 工作項;direct send / DB receipt / AI route / controlled queue gap 需全面 readback | 擴充 Telegram alert inventory/readback | +| IwoooS / 導航 IA 復原 | 已升為 P0 工作項;removed menu/route/page destination 待盤點 | 盤點 navigation config、route list、removed-page integration | +| 主線並行推進規則 | 已升為 P1 工作項;需在回報與 UI 顯示 active lanes | 後續以 active lane + evidence 更新,不因單一 blocker 停全局 | +| UI/UX 專業化主線 | 已升為 P1 工作項;Work Items spotlight 先呈現核心缺口 | 排 AwoooP / Approvals / Runs / Work Items / Alerts desktop/mobile smoke | | 110 controlled drain lane | live verifier 仍不能宣稱 ready,需 staging artifacts / registration metadata / service guardrails 全綠 | 補 staging artifacts 後只跑 readiness verifier | | 全產品 source-control governance | 9 expected Gitea repos OK,但跨產品 dev/prod CI baseline 尚未全綠 | 以 Gitea / Gitea SSH / backup health 為 source truth | | KM / PlayBook / RAG / MCP 整合 | 已被列為 P1,不再遺漏 | 建立 work item schema 與 trust writeback 欄位 | @@ -122,16 +148,17 @@ ## 下一輪固定執行順序 1. 先確認 Gitea `main` / CD / production readback 是否仍與最新 truth 一致。 -2. 接續目前 active P0:110 Stock/Postgres hot pressure,跑 `postgres_hot_query_or_backup_export_playbook` 的 read-only evidence / source freshness / query attribution。 -3. 補全 reboot auto-recovery P0:99/110/111/112/120/121/188 reboot detection、10 分鐘 SLO scorecard、Telegram down/up/recovered/SLO missed receipts。 -4. 補 99 Windows / VMware autostart P0:99 host 自動啟動 VMware,VM 111/188/120/121/112 自動啟動;同時補 Windows Update no-auto-restart verifier。 -5. 補 public maintenance fallback P0:避免 502 直出,先完成 external/edge/local fallback decision record 與 no-write smoke。 -6. 補 backup observability P0:host / DB / website / service config / package list / tools / logs backup matrix、last success、offsite、restore drill、Telegram receipt。 -7. 補 product freshness/version P0:所有產品網站 source SHA / deploy marker / runtime image / public URL / data freshness readback。 -8. 繼續補 110 controlled drain lane 的 staging / verifier,不恢復 generic runner。 -9. 把全產品 repo identity / backup health / private visibility / dev-prod CI baseline 接到 product governance matrix。 -10. 把本台帳的 P0/P1 工作項映射進 KM / PlayBook / RAG / MCP / LOG,不讓需求只留在聊天。 -11. 補 OpenClaw Live Ops Space 的 production desktop/mobile animation smoke 與 AwoooP 導流。 -12. 補 AI professional UI / 非文字牆 cockpit 驗收,避免只剩長文字頁。 -13. SignOz degraded 分流到 Observability P2,不阻擋 Gitea/CD 主線。 -14. GitHub appeal 前不做任何 GitHub 操作;appeal 後若使用者明確要求,先做風險評估。 +2. 先把 AI Loop Agent、AI 自動化節點紀錄、LOG 收集/貼標、Telegram 告警 AI route、IwoooS/nav IA、UI/UX spotlight 落到 API/UI readback。 +3. 接續目前 active P0:110 Stock/Postgres hot pressure,跑 `postgres_hot_query_or_backup_export_playbook` 的 read-only evidence / source freshness / query attribution。 +4. 補全 reboot auto-recovery P0:99/110/111/112/120/121/188 reboot detection、10 分鐘 SLO scorecard、Telegram down/up/recovered/SLO missed receipts。 +5. 補 99 Windows / VMware autostart P0:99 host 自動啟動 VMware,VM 111/188/120/121/112 自動啟動;同時補 Windows Update no-auto-restart verifier。 +6. 補 public maintenance fallback P0:避免 502 直出,先完成 external/edge/local fallback decision record 與 no-write smoke。 +7. 補 backup observability P0:host / DB / website / service config / package list / tools / logs backup matrix、last success、offsite、restore drill、Telegram receipt。 +8. 補 product freshness/version P0:所有產品網站 source SHA / deploy marker / runtime image / public URL / data freshness readback。 +9. 繼續補 110 controlled drain lane 的 staging / verifier,不恢復 generic runner。 +10. 把全產品 repo identity / backup health / private visibility / dev-prod CI baseline 接到 product governance matrix。 +11. 把本台帳的 P0/P1 工作項映射進 KM / PlayBook / RAG / MCP / LOG,不讓需求只留在聊天。 +12. 補 OpenClaw Live Ops Space 的 production desktop/mobile animation smoke 與 AwoooP 導流。 +13. 補 AI professional UI / 非文字牆 cockpit 驗收,避免只剩長文字頁。 +14. SignOz degraded 分流到 Observability P2,不阻擋 Gitea/CD 主線。 +15. GitHub appeal 前不做任何 GitHub 操作;appeal 後若使用者明確要求,先做風險評估。