diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 66575603..863adf15 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -133,6 +133,46 @@ - `git diff --check` 通過。 - 敏感字串掃描確認本輪未保存 Kali SSH 密碼、常見 token pattern、private key material 或 `GITEA_READONLY_TOKEN` value;也未出現 `token_value_collection_allowed`、`repo_write_allowed`、`refs_sync_allowed`、`github_primary_switch_authorized`、`action_buttons_allowed` 或 `runtime_execution_authorized` 被打開。 +## 2026-05-17 | T33 AwoooP 列表新增 AI 補救證據篩選 + +**背景**:T31 已讓 Run List / Approval List 顯示 `remediation_summary`,T32 也讓 Telegram 主卡顯示 dry-run evidence。但前端仍只能「看見」AI 證據狀態,不能直接用「只讀試跑 / 有寫入旗標 / 受阻 / 缺證據」篩選。這會讓 AwoooP 比較像觀察頁,而不是 AI 自動化管理介面。 + +**修正**: +- `GET /api/v1/platform/runs/list` 新增 `remediation_status` query: + - 支援 `no_evidence / read_only_dry_run / write_observed / blocked / observed`。 + - filter 會先建立每個 Run 的 durable ADR-100 remediation summary,再依 status 篩選並回傳正確 `total/page/per_page`。 +- `GET /api/v1/platform/approvals` 同步新增 `remediation_status` query,讓待審佇列可用同一套 AI 證據狀態過濾。 +- `/awooop/runs` 新增 AI 證據篩選器,和 project/state filter 並列;選擇後會呼叫 `remediation_status=...`。 +- `/awooop/approvals` 新增 AI 證據篩選器;新文案補進 `zh-TW` / `en` i18n。 +- 修補 production 驗證抓到的漏抓問題:全域 `remediation_status` filter 不能沿用列表 sidecar context 的 500 筆上限。production 有 4176+ runs,真正的 evidence rows 在較舊頁面;已改成依 candidate rows 動態放大 context window,上限 20,000,避免 filter 把舊頁 evidence 誤判成 `no_evidence`。 + +**本地驗證**: +- `python -m py_compile apps/api/src/services/platform_operator_service.py apps/api/src/api/v1/platform/operator_runs.py apps/api/tests/test_awooop_operator_timeline_labels.py`:pass。 +- `ruff check --select F,E9 src/services/platform_operator_service.py src/api/v1/platform/operator_runs.py tests/test_awooop_operator_timeline_labels.py`:pass。 +- `DATABASE_URL=postgresql+asyncpg://test:test@localhost:5432/test python -m pytest tests/test_awooop_operator_timeline_labels.py -q`:12 passed。 +- i18n JSON parse:pass。 +- `pnpm --filter @awoooi/web typecheck`:pass。 +- `pnpm --dir apps/web exec next lint --file 'src/app/[locale]/awooop/runs/page.tsx' --file 'src/app/[locale]/awooop/approvals/page.tsx'`:exit 0;仍有這兩個 legacy pages 原有 literal-string warnings,新增 filter 文案走 i18n。 +- `NEXT_PUBLIC_API_URL=https://awoooi.wooo.work pnpm --filter @awoooi/web build`:pass;僅既有 Sentry setup / webpack cache warnings。 + +**推版與 production 驗證**: +- `665e72ba feat(awooop): filter runs by remediation evidence` 已推 Gitea main;Code Review run `2211` success,CD run `2210` success;deploy marker `e6a62bb1 chore(cd): deploy 665e72b [skip ci]`。 +- 首次 production filter 驗證發現 `read_only_dry_run` 回 0,根因是 4176 runs 下 context cap 500 漏掉較舊 evidence rows。 +- `a3f2b010 fix(awooop): widen remediation filter context` 修正後推 Gitea main;Code Review run `2214` success,CD run `2213` success;最新 deploy marker `0d9cde51 chore(cd): deploy a3f2b01 [skip ci]`。 +- `https://awoooi.wooo.work/api/v1/health`:200 healthy,PostgreSQL / Redis / Ollama / OpenClaw / SigNoz all up。 +- Production API `GET /api/v1/platform/runs/list?project_id=awoooi&remediation_status=read_only_dry_run&page=1&per_page=5`:`total=2`,兩列分別是 `44109526-8fea-508e-a0f9-af818514ab59` 與 `6d8feeaa-1035-570f-a03f-9287c1036746`,均為 `status=read_only_dry_run`、`latest_route=auto_repair_executor/ssh_diagnose/read`、`writes_incident_state=false`、`writes_auto_repair_result=false`。 +- Production API status sweep:`no_evidence=4183`、`read_only_dry_run=2`、`observed=0`、`write_observed=0`、`blocked=0`。 +- Production API `GET /api/v1/platform/approvals?project_id=awoooi&remediation_status=read_only_dry_run`:`total=0`,目前無待審批列。 +- Playwright production Run List check:`/zh-TW/awooop/runs` AI 證據篩選選 `read_only_dry_run` 後,畫面顯示 2 筆與 `auto_repair_executor/ssh_diagnose/read`,screenshot `/tmp/awoooi-t33-runs-evidence-filter.png`。 +- Playwright production Approval List check:`/zh-TW/awooop/approvals` AI 證據篩選器可操作,選 `read_only_dry_run` 後佇列仍為空,console/page errors = 0,screenshot `/tmp/awoooi-t33-approvals-evidence-filter.png`。 + +**目前整體進度**: +- Alertmanager 低風險自動修復主線:約 98%。 +- 完整 AI 自動化管理產品化:約 98%。 +- 告警詳情/歷史/主卡可追溯:約 97%。 +- Telegram 首屏流程可判讀:約 92%。 +- 前端 AI 自動化管理介面同步:約 93%。 +- T33 把 AI 證據狀態從展示推進到可操作篩選。下一段應把 Telegram 卡片的「詳情/歷史」再導向 AwoooP 對應 Run/Incident 視圖,並收斂成單一 operator entrypoint。 ## 2026-05-17 | T32 Telegram 主告警卡顯示 AI 補救試跑證據 **背景**:T29-T31 已把 ADR-100 remediation dry-run evidence 接到 Telegram 詳情/歷史、AwoooP Work Items、Run Detail、Approval Decision、Run List / Approval List。但 Telegram 主告警卡仍只顯示「ACTION REQUIRED / 流程進度 / AI 自動化鏈路」,值班者不按「詳情/歷史」時仍看不出 AI 是否已做只讀補救試跑、是否真的沒有寫入 incident / auto-repair 狀態、目前是否只是等人工審批。這正對應截圖中「無法知道跑到哪個流程、是否真的 AI 自動化處理」的體驗缺口。 diff --git a/k8s/awoooi-prod/kustomization.yaml b/k8s/awoooi-prod/kustomization.yaml index 2f4b989d..c7930644 100644 --- a/k8s/awoooi-prod/kustomization.yaml +++ b/k8s/awoooi-prod/kustomization.yaml @@ -41,7 +41,7 @@ resources: images: - name: 192.168.0.110:5000/library/api:IMAGE_TAG_PLACEHOLDER newName: 192.168.0.110:5000/awoooi/api - newTag: 665e72ba33228771acc3195d15bb5b80617e5417 + newTag: a3f2b010f8415e83dcb9882361125363bf749f8d - name: 192.168.0.110:5000/library/web:IMAGE_TAG_PLACEHOLDER newName: 192.168.0.110:5000/awoooi/web - newTag: 665e72ba33228771acc3195d15bb5b80617e5417 + newTag: a3f2b010f8415e83dcb9882361125363bf749f8d