feat(ai-code-review): 建問題模式導向 issue,並整併流程調整、文件與 CI #15
Notifications
Due Date
No due date set.
Blocks
#6 feat(ai-code-review): 建問題模式導向 issue,並整併流程調整、文件與 CI
node-actions/ai-code-review
Reference: node-actions/ai-code-review#15
Reference in New Issue
Block a user
變更摘要
本 PR 將 ai-code-review action 分支的完整成果併入
develop,主要含四塊:create-issue: 'true'時,審查留言(工具/diff/角色/嚴重問題/警告+建議)全部改發到追蹤 issue、不再張貼到 PR;不執行「舊留言標過時/resolve」;issue 延後到「確定有保留問題」才建立;無保留問題或無可審查變更則不建 issue、PR 也完全不留言(靜默通過);有問題時最後在 PR 回貼一則 issue 連結並補掛標籤,形成雙向關聯。action.yml/src各模組文件、重建readme.md,新增.gitea/workflows/ci.yaml(多工具 code review 驗證)並啟用建問題模式。影響範圍
src/index.jsmain()依模式分流:留言去向、跳過 resolveOldComments、issue 延後建立、severe/others 導向 issue、有問題才在 PR 回貼連結src/lib/gitea.js新增addLabelsToIssuesrc/lib/templates.js新增issueLinkCommentsrc/lib/review.js新增postSevereToIssue,移除createIssueWithFindings、sortFindingsForIssuesrc/lib/gitrepo.js補抓淺層 checkout 的 base 歷史readme.md、action.yml、.gitea/workflows/ci.yaml、.gitea/workflows/readme.md風險與注意事項
readme.md尚未反映「建問題模式導向 issue」的最新行為與新/移除的函式,建議後續以 doc-funcs 重建文件。2026/07/17 18:49:58,未刷新。🤖 AI Code Review|審查工具
codexcodex-cli 0.144.6gpt-5.536bf2d8644d77876f3f1342fb4a5f74add273192📋 變更摘要(送審 git diff)
action.ymlreadme.mdsrc/index.jssrc/lib/agents.jssrc/lib/context.jssrc/lib/gitea.jssrc/lib/gitrepo.jssrc/lib/review.jssrc/lib/roles.jssrc/lib/templates.js⚔️ 攻擊方登場
🛡️ 防守方登場
🟠 警告|⚡ Rogue
位置:
src/lib/gitrepo.js第 128–130 行問題描述
這裡在淺層 checkout 一失敗就先跑
git fetch --unshallow origin,等於可能把整個遠端歷史一次抓回來。大型 repo 會從原本只需補 base/head 附近幾百到幾千個 commit,膨脹成全 repo 歷史下載,白白燒網路、磁碟與 CI 時間。修改建議
把成本低、目標明確的
--deepenbase/head 放在--unshallow前面;只有多次 targeted deepen 仍找不到 merge-base 時,才把--unshallow當最後手段。這樣常見 PR 只補必要歷史,不會一開始就下載全量。建議寫法
🔵 建議|🎼 Bard
位置:
action.yml第 2–3 行問題描述
檔案標示的最後更新時間是 2026/07/20,但檔頭仍寫
2026/07/17 18:49:58。文件時間戳走調,會讓讀者懷疑這份 manifest 的說明是否同步。修改建議
若保留手寫更新時間,請同步為本次實際更新時間;更理想是移除容易過期的手動時間戳,交給 git history 說話。
🔵 建議|🎼 Bard
位置:
readme.md第 3–3 行問題描述
README 的更新時間仍停在
2026/07/17 18:49:58,但本次文件內容已大幅改動。首頁第一眼就出現過期節拍,會削弱文件可信度。修改建議
同步更新時間,或移除這類需人工維護的時間戳,避免每次文件改動都多一個容易漏改的音符。
🔵 建議|🧰 Leo
位置:
readme.md第 56–132 行問題描述
README 的功能表大量手動維護
src/branch/develop/...#Lxx深連結,這次光是分支與行號就改了整排。這類文件會隨任何插入註解、重排函式、換預設分支而失準,未來維護者必須在改程式時同步更新一大段文件,維護成本偏高。修改建議
改成不依賴行號的相對連結,或用文件產生腳本從原始碼 JSDoc 自動產出這張表。若仍要指向 Gitea,建議至少移除
#Lxx,或集中定義分支名稱,避免每次改分支都要全表搜尋替換。🔵 建議|🎼 Bard
位置:
src/index.js第 195–202 行問題描述
postComment這個名字如今已不再準確:一般模式是真的發 PR 留言,建問題模式卻可能只是塞進issueBuffer暫存並回傳null。函式名唱的是「發布」,實際節拍卻包含「排隊」,語義不夠優雅。修改建議
改成能涵蓋兩種行為的命名,例如
queueOrPostComment、publishReviewComment,或拆成postPrComment與bufferIssueComment,讓呼叫端不用讀完整實作才知道副作用。🔵 建議|🎼 Bard
位置:
src/lib/gitea.js第 190–197 行問題描述
dependency作為參數名太薄,與issueNumber並列時看不出它也是 issue 編號。讀到addIssueDependency(ctx, ctx.prNumber, issue.number)時,語意要靠上下文補拍子。修改建議
改用更完整的名稱,例如
dependencyIssueNumber或blockingIssueNumber,讓「誰被誰阻擋」在簽名裡就清楚成形。建議寫法
🔵 建議|🎼 Bard
位置:
src/lib/review.js第 28–37 行問題描述
這段註解的旋律前後打架:開頭說「原始輸出預設隱藏」,後文卻說失敗時預設附上遮罩後的 stderr/stdout 片段。讀者才剛建立心智模型,下一拍就被改調。
修改建議
請讓摘要句與實際行為一致,明確說明「原始輸出不直接輸出,但會輸出遮罩與截斷後的診斷片段」。
建議寫法
🔵 建議|🎼 Bard
位置:
src/lib/templates.js第 334–341 行問題描述
issueFindingComment的註解只提到review.postSevereToIssue,但主流程也以postOthersToIssue發布警告與建議。文件把共用模板寫成嚴重問題專用,讀起來像少了一個聲部。修改建議
把 remarks 改成同時涵蓋嚴重、警告與建議的 issue 留言產生器,避免維護者誤以為它只服務嚴重 finding。
🧩 code-review-resolve 處理進度
本議題為 AI Code Review 建問題模式的追蹤議題。以
--issue all併同.gitea/ai-review/findings/逐條處理後結果如下(對照目前程式碼與exclusions.json):src/lib/gitrepo.js第 128–130 行action.yml第 2–3 行readme.md第 3–3 行readme.md第 56–132 行src/index.js第 195–202 行src/lib/gitea.js第 190–197 行src/lib/review.js第 28–37 行src/lib/templates.js第 334–341 行小計:✅ 已解決 2 條、🚫 誤報(已列入 exclusions)2 條、⏭️ 待人工處理 4 條。
resolveMergeBase補抓策略調整、deepen PR HEAD改用 head SHA、留言閉包改名、push-tokeninput 移除等)。.gitea/ai-review/exclusions.json既有裁決等價,不重複新增排除條目。處理完成,依 code-review-resolve 流程關閉本議題。