From b2129e0bc6c533cc5cfabd198698950377495966 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 20 Jul 2026 15:22:35 +0800 Subject: [PATCH] =?UTF-8?q?chore(ai-review=20=E7=8B=80=E6=85=8B):=20?= =?UTF-8?q?=E5=AF=AB=E5=9B=9E=E8=AD=B0=E9=A1=8C=20#7=20=E5=BE=85=E4=BA=BA?= =?UTF-8?q?=E5=B7=A5=E8=99=95=E7=90=86=E5=95=8F=E9=A1=8C=E8=87=B3=20findin?= =?UTF-8?q?gs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../findings/2026-07-20-15:20:13.json | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 .gitea/ai-review/findings/2026-07-20-15:20:13.json diff --git a/.gitea/ai-review/findings/2026-07-20-15:20:13.json b/.gitea/ai-review/findings/2026-07-20-15:20:13.json new file mode 100644 index 0000000..964b1d0 --- /dev/null +++ b/.gitea/ai-review/findings/2026-07-20-15:20:13.json @@ -0,0 +1,78 @@ +{ + "generatedAt": "2026/07/20 15:20:13", + "commitSha": "c980add8077dd1316a6e4d62be481bc4f1c94e25", + "prNumber": 6, + "tool": { + "name": "code-review-resolve", + "version": "0.0.8", + "model": "(工具預設)" + }, + "findings": [ + { + "id": "F001", + "reviewer": "Leo", + "focus": "maintainability", + "badge": "🧰", + "severity": "警告", + "file": "src/index.js", + "startLine": 210, + "endLine": 224, + "problem": "`ensureIssueCreated` 同時建立 issue、修改外層 `issue` 狀態、逐筆清空 `issueBuffer`,但整段流程沒有可重入或冪等機制。若 issue 建立成功後,寫入其中一則暫存留言時失敗,主流程會中止;重跑後又會建立另一個 issue,留下內容不完整的孤兒 issue。這種依賴閉包可變狀態的半完成狀態,半年後要加入重試、續傳或測試失敗情境都會很痛苦。", + "suggestion": "把「建立追蹤 issue 並沖刷留言」抽成獨立、可注入 Gitea client 的服務函式,明確回傳 issue 與已寫入進度;建立前以 PR 編號或隱藏識別標記查找既有追蹤 issue,讓重跑能接續而非重複建立。至少也應保留已建立的 issue 編號並在錯誤訊息中回報,避免留下無法追蹤的半成品。", + "suggestedCode": "" + }, + { + "id": "F002", + "reviewer": "Maya", + "focus": "testing", + "badge": "🧪", + "severity": "警告", + "file": "src/index.js", + "startLine": 306, + "endLine": 359, + "problem": "建問題模式的核心流程已大幅改變,但 diff 中沒有對應測試驗證各分支:有保留問題時才建立 issue、暫存留言依序送出、無問題時靜默通過、嚴重與非嚴重問題送往正確位置,以及標籤失敗後仍須回貼 PR 連結。這些分支牽涉多次外部 API 呼叫與狀態切換,未測試時很容易出現漏留言、留言送錯 PR/issue,或在 `issue` 尚未建立時解參考的回歸。", + "suggestion": "新增主流程測試並 mock Gitea、agent 與 git 操作,至少涵蓋:`kept=[]` 時不建立 issue 且不留言;僅嚴重問題;僅警告/建議;混合問題;建立 issue 或寫入暫存留言失敗;標籤查詢、AI 選標籤及補掛標籤失敗時仍回貼 issue 連結。除了呼叫次數,也應斷言 API 呼叫順序、目標 issue 編號及留言內容。", + "suggestedCode": "" + }, + { + "id": "F003", + "reviewer": "Maya", + "focus": "testing", + "badge": "🧪", + "severity": "警告", + "file": "src/lib/gitea.js", + "startLine": 188, + "endLine": 191, + "problem": "新增的 `addLabelsToIssue` 沒有對應測試,尚未驗證空值捷徑與實際 API 請求格式。這個函式位於新建問題流程的收尾路徑;若 endpoint、HTTP method 或 `{ labels }` payload 不符預期,追蹤 issue 將無法取得標籤,而空陣列是否真的不發出請求也未被保護。", + "suggestion": "新增單元測試,分別傳入 `undefined`、`null`、空陣列及多個 label id;斷言前三者回傳 `null` 且完全不呼叫 API,多個 id 時以 POST 呼叫正確的 owner/repo/issue endpoint 並傳送 `{ labels: [...] }`,另驗證 API 拋錯會原樣往上傳遞。", + "suggestedCode": "" + }, + { + "id": "F004", + "reviewer": "Maya", + "focus": "testing", + "badge": "🧪", + "severity": "警告", + "file": "src/lib/gitrepo.js", + "startLine": 100, + "endLine": 122, + "problem": "`resolveMergeBase` 新增多階段 fetch 與淺層 checkout 修復邏輯,但沒有看到測試驗證成功、降級與最終失敗路徑。尤其初次 merge-base 失敗後,淺層與非淺層 repository 會走不同路徑,且多個 `tryGit` 失敗會被刻意吞掉;若參數、refspec 或重試順序有誤,只會在實際 CI checkout 深度不足時才暴露。", + "suggestion": "以 stub 的 git 執行器或暫存 repository 補齊案例:首次 merge-base 成功;淺層 repository 經 `--unshallow` 後成功;`--unshallow` 失敗但 `--deepen=1000` 後成功;非淺層首次失敗後重試成功;所有策略失敗時拋出含 `baseRef` 且保留原始 `cause` 的錯誤。並斷言 base/head fetch 的 refspec 與執行順序。", + "suggestedCode": "" + }, + { + "id": "F005", + "reviewer": "Maya", + "focus": "testing", + "badge": "🧪", + "severity": "建議", + "file": "src/lib/review.js", + "startLine": 17, + "endLine": 45, + "problem": "新增的 agent 失敗診斷涵蓋逾時、數字或字串 exit code、signal、空輸出及 500 字截斷等多個邊界,但沒有測試鎖定輸出。這些資訊只在失敗路徑出現,正常審查不會自然覆蓋;日後修改時可能悄悄遺失真正的 CLI 錯誤內容,或破壞單行與截斷約束。", + "suggestion": "將摘要邏輯匯出供測試,或透過失敗的 `runAttackers`/`runDefenders`/`fillPurposes` 測試間接斷言 log。至少覆蓋 killed、數字 exit code、字串 code、signal、stderr 與 stdout 同時存在、超過 500 字、完全無資訊,以及 `res` 為 null/undefined 的案例。", + "suggestedCode": "" + } + ], + "excluded": [] +}