feat(ai-code-review): 建問題模式導向 issue,並整併流程調整、文件與 CI #24
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#24
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.5d7cecc8fa858abd63e5ba43f80d6545a55ff3495📋 變更摘要(送審 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⚔️ 攻擊方登場
🛡️ 防守方登場
🔴 嚴重|🗡️ Assassin
位置:
src/index.js第 386–392 行問題描述
建問題模式下,嚴重問題只靠
addIssueDependency阻擋 PR;但這裡把相依設定失敗降級成 WRN。攻擊者只要讓目標 Gitea 未啟用 issue dependencies、API 不支援、token 權限不足,或相依建立暫時失敗,嚴重安全 finding 仍可能只留下提示留言,而檢查流程繼續成功收場。這是審查閘門可被環境設定繞過。修改建議
有嚴重問題時,相依關係建立失敗不得靜默放行。至少要讓本輪檢查失敗,或保證推出
[failure]結果 commit;若建問題模式不提交 findings,也應有一個固定結果檔或直接return 1作為保底。建議寫法
🔴 嚴重|🔮 Mage
位置:
src/index.js第 397–414 行問題描述
在有「嚴重」finding 的本輪審查中,程式改成一律回傳 0,並假設後續由
[ai-review-bot][failure]commit 觸發下一輪才讓檢查失敗。這個假設沒有被驗證,最小重現:workflow 仍依 action.yml 說明傳入自動 token(例如 gitea.token / GITHUB_TOKEN),push 出 failure commit 後不會再觸發 CI;或在建問題模式下exclusionsChanged === false,程式直接略過 commit/push。兩種情境都會讓本輪含嚴重問題的檢查以 exit 0 通過,PR 可能被誤判為可合併。修改建議
不要把失敗狀態完全交給未保證會發生的下一輪 workflow。當
severe.length > 0時,若沒有成功推出可觸發下一輪的 failure commit,就應在本輪回傳 1;建問題模式即使沒有 exclusions 變更,也需要有可提交的結果標記檔,或直接 exit 1。🔵 建議|🎼 Bard
位置:
src/lib/review.js第 63–66 行問題描述
INPUT_LIMIT與AGENT_DIAGNOSTIC_OUTPUT_LIMIT被放在agentFailureDetail()函式內,旁邊還用註解解釋它們是政策常數。既然是診斷輸出政策,藏在函式中段會讓設定散在樂句裡,不如放到檔案頂端與其他常數並列。修改建議
將兩個限制值提升到模組層級,靠命名表達政策,函式內就不需要這麼多鋪陳註解。
建議寫法
我可以接受這個風險,請幫我加入排除事項
我可以接受這個風險,請幫我加入排除事項
🧩 code-review-resolve 處理進度
本議題為 AI Code Review 建問題模式的追蹤議題。以
--issue all併同.gitea/ai-review/findings/逐條處理後結果如下(對照目前程式碼與exclusions.json):src/index.js第 386–392 行exclusions.json已有多筆等價 Mage 嚴重裁決,不重複新增。src/index.js第 397–414 行[ai-review-bot][failure]結果 commit 回報,為刻意兩階段設計,已列入 exclusions。src/lib/review.js第 63–66 行INPUT_LIMIT/AGENT_DIAGNOSTIC_OUTPUT_LIMIT診斷輸出長度常數提升至模組頂層,與既有PER_FILE_DIFF_LIMIT/TOTAL_DIFF_LIMIT並列。小計:✅ 已解決 1 條、🚫 誤報(已列入 exclusions)2 條、⏭️ 待人工處理 0 條。
處理完成,依 code-review-resolve 流程關閉本議題。