feat(ai-code-review): 建問題模式導向 issue,並整併流程調整、文件與 CI #29
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#29
Reference in New Issue
Block a user
變更摘要
本分支持續處理 AI Code Review findings,最新推送新增以下修正:
main()JSDoc,保留職責、模式差異與 exit code 契約,細節留在流程區塊與 README。pendingIssueCommentBodies、trackingIssue,降低 PR issue 與追蹤 issue 混淆。prIssueLinkComment,並釐清addIssueDependency的 blocked/blocking issue 參數方向。action.ymltoken 註解,避免 input manifest 承載過多實作細節。fn改為callback,並更新 issue 留言順序測試。影響範圍
src/index.js:建問題模式狀態命名、JSDoc 精簡、PR 回貼模板呼叫。src/lib/review.js:issue finding 留言順序送出。src/lib/gitea.js:issue dependency 參數命名。src/lib/templates.js:PR issue 連結留言模板命名。src/lib/diagnostics.js/test/*.test.js:診斷與測試輔助命名。action.yml/readme.md:manifest 註解與流程圖整理。.gitea/ai-review/findings/*.json:移除本輪已處理 findings。驗證
npm test通過:10 tests / 0 failed。git diff --check通過。風險與注意事項
🤖 AI Code Review|審查工具
codexcodex-cli 0.144.6gpt-5.5216bc39255ec176a0f66f2b257beea5929ef4eb8📋 變更摘要(送審 git diff)
action.ymlpackage.jsonreadme.mdsrc/index.jssrc/lib/agents.jssrc/lib/context.jssrc/lib/diagnostics.jssrc/lib/gitea.jssrc/lib/gitrepo.jssrc/lib/review.jssrc/lib/roles.jssrc/lib/templates.jstest/gitea.test.jstest/gitrepo.test.jstest/review.test.js⚔️ 攻擊方登場
🛡️ 防守方登場
🔴 嚴重|🗡️ Assassin
位置:
src/index.js第 105–116 行問題描述
這裡把審查結果 commit/push 失敗吞掉並回傳
false,而本次變更又把主流程改成「本輪審查不因嚴重問題直接 exit 1,靠下一輪讀到[failure]commit 才失敗」。攻擊者只要讓結果 commit 推不上去,例如在 PR head 競態推送、讓 token 沒有 push 權限、或讓來源分支拒絕 bot push,就能讓嚴重安全 finding 已產生但沒有 failure commit、也沒有下一輪失敗檢查,等同把必要檢查繞過。修改建議
嚴重問題存在時,結果 commit/push 失敗必須直接讓本輪 workflow 失敗;只有 success 結果或無變更時才可降級不阻擋。呼叫端應檢查
commitFindings回傳值,或讓commitFindings在result === 'failure'時重拋錯誤。建議寫法
🔵 建議|🎼 Bard
位置:
action.yml第 18–19 行問題描述
中文敘述裡混入
PR/issue、findings/exclusions這種半形斜線寫法,但同一份變更其他地方大量使用PR/issue、警告+建議這類全形符號。標點像節拍器,這裡忽然換拍,讓 manifest 的文字風格不夠一致。修改建議
統一中文文件與註解中的分隔符號,建議在中文語境使用全形斜線:
PR/issue、findings/exclusions;若是程式路徑或指令片段才保留半形/。🔵 建議|🎼 Bard
位置:
src/lib/gitrepo.js第 299–344 行問題描述
pushWithCredential的 JSDoc 幾乎把安全設計、CI 觸發語意、checkout extraheader 行為全部寫成一篇短文。資訊本身有價值,但集中在函式註解裡會壓過函式簽名,讀者想找參數與責任邊界時,得先穿過一大段敘事。修改建議
保留函式層級的摘要與關鍵安全不變式,其餘背景可移到較短的段落或專門文件。JSDoc 建議聚焦在「做什麼、為何不能改、參數怎麼用」,避免把完整決策紀錄塞進 API 註解。
🔵 建議|🧰 Leo
位置:
src/lib/gitrepo.js第 367–369 行問題描述
為了測試把內部函式掛在
module.exports.__test,會讓 production module 的公開形狀混入測試專用 API。未來其他程式碼可能誤用__test.assertSafeBranchRef,而維護者也得在重構時顧慮這個非正式出口,模組邊界會慢慢變模糊。修改建議
把分支名稱驗證抽到獨立小模組並正常匯出,例如
src/lib/gitref.js,讓 production code 與測試都依賴同一個正式 API;或若它只屬於 gitrepo 內部,就改由測試resolveMergeBase/commitAndPushFindings的外部行為覆蓋,不暴露__test。請把這個問題加入排除事項
本輪 code-review-resolve 處理結果
src/index.jsexclusions.json,並從來源 wrapper 移除。理由:現行主流程已在result === 'failure' && !resultCommitted時直接回傳 1,此 finding 指向的 fail-open 情境已由既有防線涵蓋。action.ymlPR/issue、findings/exclusions。src/lib/gitrepo.jspushWithCredentialJSDoc,保留安全不變式與參數責任。src/lib/gitrepo.jssrc/lib/gitref.js匯出assertSafeBranchRef,移除 production module 的__test測試出口。驗證:
npm test通過(11 tests / 0 failed),git diff --check通過。來源 wrapper 已回寫:
.gitea/ai-review/findings/2026-07-21-16:00:33.json目前保留 0 筆 finding。jiantw83 referenced this issue2026-07-21 08:27:03 +00:00