diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 25e65587..3a909234 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,66 @@ +## 2026-05-07 | CD 188 ops 腳本同步修復,移除 scp 不支援參數 + +**背景**:手動檢查 Gitea CD log 時發現 `Sync Ops Scripts to 188` 步驟雖然被標成非致命,但實際上 `scp` 收到 `ssh` 專用的 `-n` 參數後會報 `scp: unrecognized option: n`,導致 `docker-health-monitor.sh` 與 `pg-backup.sh` 無法同步到 188。這會讓 188 ops 腳本版本漂移,後續監控與備份治理難以信任。 + +**本次修補**: +- `.gitea/workflows/cd.yaml` 將 188 連線參數拆成 `SSH_188_COMMON_OPTS`、`SSH_188_OPTS` 與 `SCP_188_OPTS`。 +- `ssh` 保留 `-n`,避免非互動式 job 卡 stdin。 +- `scp` 改用不含 `-n` 的 `SCP_188_OPTS`。 +- 加上繁體中文註解,明確記錄 `scp` 不支援 `ssh -n` 的原因。 + +**驗證**: +- `ruby -e 'require "yaml"; YAML.load_file(".gitea/workflows/cd.yaml")'` → `yaml ok`。 +- `git diff --check` → clean。 +- Gitea Code Review `#1859` success。 +- 因 workflow-only push 不會自動觸發 CD,已用 `workflow_dispatch` 手動補跑 CD `#1860`。 +- CD `#1860` 三個 job 全部成功: + - `tests` → success。 + - `build-and-deploy` → success。 + - `post-deploy-checks` → success。 +- 188 同步步驟實際輸出: + - `docker-health-monitor.sh 已同步`。 + - `pg-backup.sh 已同步`。 + - `權限設定完成`。 + - 未再出現 `scp: unrecognized option: n`。 +- CD deploy marker:`6ae3a55a chore(cd): deploy 94e680a [skip ci]`。 +- K8s live image: + - `awoooi-api` → `192.168.0.110:5000/awoooi/api:94e680add4125077bb3587a926ada2ab2398b4e4`。 + - `awoooi-web` → `192.168.0.110:5000/awoooi/web:94e680add4125077bb3587a926ada2ab2398b4e4`。 + - `awoooi-worker` → `192.168.0.110:5000/awoooi/api:94e680add4125077bb3587a926ada2ab2398b4e4`。 +- K8s rollout:`awoooi-api` / `awoooi-web` / `awoooi-worker` 均 successfully rolled out。 +- HTTP smoke:`/api/v1/health` → 200,`/zh-TW/awooop/runs` → 200。 + +判讀:這次是 CD 治理修補,不改 runtime 業務邏輯;但它會影響 188 ops 腳本是否能被穩定下發。修復後,188 健康監控與備份腳本同步恢復可信。 + +## 2026-05-07 | AwoooP 審批詳情回接 Run Timeline,避免決策後狀態斷裂 + +**背景**:Run Detail / Action Panel 已能從 `waiting_approval` 導向審批頁,但審批頁仍依賴 `/approvals` 列表資料,Approve / Reject 完成後也只回列表。值班者無法自然回到同一個 Run 的完整 timeline,容易造成 Telegram、Approval Queue 與 AwoooP Run 狀態各看各的。 + +**本次修補**: +- `/zh-TW/awooop/approvals/[run_id]` 改以 `GET /api/v1/platform/runs/{run_id}/detail` 作為 source of truth。 +- 只有 `run.state === "waiting_approval"` 時才顯示 approve / reject 操作。 +- 若 Run 已不在等待審批,頁面改顯示「目前不需要人工決策」,並提供回 Run Timeline 的入口。 +- Approve / Reject 成功後導回 `/awooop/runs/{run_id}?project_id=...`,讓操作者立刻看到後續 step、outbound message 與 audit 脈絡。 +- 視覺改成目前 AwoooP 白底邊框 operator-console 風格,不再延續舊版暗色卡片。 +- 所有可見字串移到 `awooop.approvalDecision` i18n namespace,補齊 `zh-TW` 與 `en`。 + +**驗證**: +- `node -e "JSON.parse(...zh-TW.json); JSON.parse(...en.json)"` → messages ok。 +- `pnpm --filter @awoooi/web lint -- --file 'src/app/[locale]/awooop/approvals/[run_id]/page.tsx'` → No ESLint warnings or errors。 +- `pnpm --filter @awoooi/web typecheck` → success。 +- `NEXT_PUBLIC_API_URL='https://awoooi.wooo.work' pnpm --filter @awoooi/web build` → success,`/[locale]/awooop/approvals/[run_id]` route 存在。 +- `rg "192\\.168|10\\.42\\.|NEXT_PUBLIC_API_URL.*192" ...` → no match。 +- Gitea Code Review `#1858` success,CD `#1857` success。 +- CD deploy marker:`4810125e chore(cd): deploy 3df2311 [skip ci]`。 +- K8s `awoooi-api` / `awoooi-web` / `awoooi-worker` 已 rollout 到 image tag `3df23112ef8071147560f4fd5bbfdac41522d8de`。 +- Production smoke: + - `/zh-TW/awooop/approvals/018f2d04-4c37-7a18-b764-df0df0cbe111` → 200。 + - `/en/awooop/approvals/018f2d04-4c37-7a18-b764-df0df0cbe111` → 200。 + - `/zh-TW/awooop/runs/018f2d04-4c37-7a18-b764-df0df0cbe111` → 200。 +- Production log 短窗口未看到 `IntlError`、`MISSING_MESSAGE`、`run_detail`、`platform_operator` 或 Traceback。 + +判讀:審批決策頁已回到 Run Timeline 這條主線,AwoooP 的人工閘門不再是孤立頁面。下一步應把審批決策結果與 Telegram 原告警卡狀態更新綁得更緊,讓群組只收摘要,完整操作脈絡留在 Console。 + ## 2026-05-07 | AwoooP Run Detail 新增下一步判斷 Action Panel **背景**:Run Detail 已可看到完整時間線,但值班者仍需要在同一頁快速判斷「AI 還在做」、「等待人工審批」、「已完成可稽核」或「AI 無法閉環需人工接手」。若只呈現 timeline,仍然會回到 Telegram 訊息洗版與人工判讀負擔。