feat(ai-code-review): 建問題模式導向 issue,並整併流程調整、文件與 CI #6
@@ -1054,5 +1054,148 @@
|
|||||||
"endLine": 194,
|
"endLine": 194,
|
||||||
"problem": "新增的 `addIssueDependency` API wrapper 沒有看到測試確認 endpoint 與 body。這段雖然薄,但語意很容易寫反:URL 上的是被阻擋的 PR/issue,body 的 `index` 才是 dependency。少了測試,未來調整時很可能把相依方向顛倒而不自知。",
|
"problem": "新增的 `addIssueDependency` API wrapper 沒有看到測試確認 endpoint 與 body。這段雖然薄,但語意很容易寫反:URL 上的是被阻擋的 PR/issue,body 的 `index` 才是 dependency。少了測試,未來調整時很可能把相依方向顛倒而不自知。",
|
||||||
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 addIssueDependency 缺少 endpoint、HTTP method、payload、錯誤傳遞與相依方向測試,與本條相同。"
|
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 addIssueDependency 缺少 endpoint、HTTP method、payload、錯誤傳遞與相依方向測試,與本條相同。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Assassin",
|
||||||
|
"severity": "警告",
|
||||||
|
"file": "src/lib/review.js",
|
||||||
|
"startLine": 65,
|
||||||
|
"endLine": 78,
|
||||||
|
"problem": "AI CLI 失敗時預設把 stderr/stdout 片段寫進 CI log。攻擊者可以讓 CLI 失敗並誘使它回顯 prompt、diff、環境診斷或原始碼內容;`redactSecrets` 只是盡力遮罩,擋不住 PII、內部路徑、專案機密格式、JWT/雲端金鑰變體,或模型輸出的敏感片段。CI log 通常被長期保存且可被多人讀取,這條路徑會把不該外洩的內容變成可搜尋的紀錄。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 finding 已針對 AI CLI stderr/stdout 寫入 CI log、黑名單式遮罩可繞過,以及敏感內容外洩提出相同問題。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Bard",
|
||||||
|
"severity": "建議",
|
||||||
|
"file": "action.yml",
|
||||||
|
"startLine": 2,
|
||||||
|
"endLine": 3,
|
||||||
|
"problem": "檔頭的「更新時間」仍停在 2026/07/17 18:49:58,但本次變更脈絡顯示檔案已在 2026/07/20 更新;這種手動時間戳與實際修改節奏不同拍,會讓讀者懷疑哪一份資訊才可信。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 action.yml 檔頭手動更新時間與實際更新時間不一致,且建議移除或改由 git history 表達。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Bard",
|
||||||
|
"severity": "建議",
|
||||||
|
"file": "readme.md",
|
||||||
|
"startLine": 3,
|
||||||
|
"endLine": 3,
|
||||||
|
"problem": "README 的更新時間被改成 2026/07/17 18:49:58,卻與本次 2026/07/20 的文件變更不一致;文件首頁第一眼就走調,會削弱後續內容的可信度。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 README 手動更新時間與實際更新時間不符,且與其他檔案重複保存易過期資訊。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Bard",
|
||||||
|
"severity": "建議",
|
||||||
|
"file": "src/index.js",
|
||||||
|
"startLine": 7,
|
||||||
|
"endLine": 7,
|
||||||
|
"problem": "啟動橫幅的更新時間仍是 2026/07/17 18:49:58,但本檔本次已有大量流程調整;執行 log 會唱出過期的日期,維運者讀 log 時容易被誤導。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 src/index.js 啟動橫幅硬編碼更新時間與程式實際更新時間不一致。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Bard",
|
||||||
|
"severity": "警告",
|
||||||
|
"file": "src/index.js",
|
||||||
|
"startLine": 183,
|
||||||
|
"endLine": 237,
|
||||||
|
"problem": "`main()` 內新增 `postComment`、`ensureIssueCreated` 兩個閉包,還各自塞入完整 JSDoc;主流程本來應像總譜一樣清楚推進,現在在步驟前奏就被大量細節註解打斷,閱讀節奏明顯變重。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 finding 已涵蓋 main() 內新增閉包、JSDoc 與建問題模式細節打斷主流程可讀性的問題。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Leo",
|
||||||
|
"severity": "警告",
|
||||||
|
"file": "src/index.js",
|
||||||
|
"startLine": 180,
|
||||||
|
"endLine": 407,
|
||||||
|
"problem": "`main()` 這次同時吃下「一般模式留言」、「建問題模式暫存/建 issue/貼回 PR/設定相依」、「舊留言延後解決」與「結果 commit」等多條流程。半年後要改其中一種模式時,維護者必須在同一個長函式裡追蹤 `issue`、`issueBuffer`、`currentRunCommentIds`、`kept/severe/others` 的狀態轉換,任何插入步驟都很容易破壞另一個模式。",
|
||||||
|
"reason": "Paladin:可排除(重複)。已知排除事項與歷史 findings 已涵蓋 main() 承擔一般模式、建問題模式、issue 狀態、緩衝佇列與發布職責耦合的問題。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Leo",
|
||||||
|
"severity": "警告",
|
||||||
|
"file": "src/index.js",
|
||||||
|
"startLine": 188,
|
||||||
|
"endLine": 216,
|
||||||
|
"problem": "`postComment` 以同一個函式名稱包了三種行為:PR 直接留言、issue 直接留言、issue 尚未建立時暫存且回傳 `null`。這個回傳型別與副作用都依 `ctx.createIssue`/`issue` 閉包狀態改變,未來新增呼叫點時很容易誤以為一定會真的發出留言或一定會拿到留言物件。",
|
||||||
|
"reason": "Paladin:可排除(重複)。此條仍屬 main() 中留言路由、issue 狀態與緩衝語意集中在閉包狀態的同一設計問題,已由歷史 findings 涵蓋。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Mage",
|
||||||
|
"severity": "嚴重",
|
||||||
|
"file": "src/index.js",
|
||||||
|
"startLine": 405,
|
||||||
|
"endLine": 419,
|
||||||
|
"problem": "在 `create-issue: true` 且本輪有嚴重問題、但 `exclusions.json` 沒有變更時,`filesToCommit` 會是空陣列,因此不會推出帶 `[failure]` 的結果 commit。接著第 419 行仍固定 `return 0`。最小情境:PR 產生 1 條嚴重 finding、沒有任何 excluded finding、Gitea 未啟用 issue dependency 或 `addIssueDependency` 失敗;流程只建立 issue 並記 WRN,CI check 卻成功結束,也沒有下一輪可讀取 `[failure]` commit,嚴重問題不會阻擋合併。",
|
||||||
|
"reason": "Paladin:可排除(重複)。與 F001 指涉同一個建問題模式嚴重 finding 在 dependency 失敗且無 failure marker 時 fail-open 的問題。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Maya",
|
||||||
|
"severity": "警告",
|
||||||
|
"file": "src/index.js",
|
||||||
|
"startLine": 321,
|
||||||
|
"endLine": 395,
|
||||||
|
"problem": "建問題模式的核心流程被大幅改寫,但 diff 沒看到對應測試驗證幾個分支:沒有保留問題時不建 issue、不在 PR 留言;只有警告/建議時建立 issue 但不加 dependency;有嚴重問題時建立 issue、回貼 PR 連結並嘗試加 dependency。這些都是會影響 PR 合併與通知位置的新行為,沒有測試就很容易在後續調整時悄悄退化。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 findings 已涵蓋建問題模式核心分支缺少測試,包括無保留問題、嚴重與非嚴重分流、PR 回貼與相依 API 失敗降級。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Maya",
|
||||||
|
"severity": "警告",
|
||||||
|
"file": "src/lib/gitrepo.js",
|
||||||
|
"startLine": 104,
|
||||||
|
"endLine": 148,
|
||||||
|
"problem": "`resolveMergeBase` 新增多段 fetch/deepen/unshallow 補救流程與診斷錯誤,但沒有看到測試驗證淺層 checkout、fetch 失敗後改走下一策略、某策略成功後立即停止,以及全部失敗時錯誤訊息含診斷。這裡直接決定送審 diff 的基準,邊界沒驗證就可能把錯誤檔案送審或漏審。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 findings 已針對 resolveMergeBase 多階段 fetch、淺層與非淺層路徑、停止條件及最終診斷缺少測試提出相同問題。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Maya",
|
||||||
|
"severity": "警告",
|
||||||
|
"file": "src/lib/gitrepo.js",
|
||||||
|
"startLine": 307,
|
||||||
|
"endLine": 333,
|
||||||
|
"problem": "`pushWithCredential` 新增以 `GIT_CONFIG_*` 注入 Basic header、先清空 checkout 自動 token、失敗時隱藏 URL/憑證的行為,但 diff 沒看到測試覆蓋成功與失敗路徑。這段是結果 commit 能否觸發下一輪 CI 的關鍵,也承擔避免 token 出現在 argv/錯誤訊息的保護,沒有測試很難防回歸。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 findings 已涵蓋 pushWithCredential/pushToken 推送認證路徑、環境變數注入、成功與失敗路徑及憑證遮蔽缺少測試。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Maya",
|
||||||
|
"severity": "警告",
|
||||||
|
"file": "src/lib/review.js",
|
||||||
|
"startLine": 13,
|
||||||
|
"endLine": 72,
|
||||||
|
"problem": "`redactSecrets`/`agentFailureDetail` 現在會把 AI CLI 的 stderr/stdout 片段寫進 CI log,但遮罩規則與截斷策略沒有測試。這是失敗路徑才會觸發的行為,若正規表示式或輸出拼接被改壞,可能不是漏診斷就是把敏感字串帶進 log。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 findings 已涵蓋 redactSecrets/agentFailureDetail 對 stderr/stdout、遮罩、控制字元、截斷與敏感字串缺少測試的問題。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addedAt": "2026/07/20 17:54:00",
|
||||||
|
"prNumber": 6,
|
||||||
|
"reviewer": "Maya",
|
||||||
|
"severity": "建議",
|
||||||
|
"file": "src/lib/gitea.js",
|
||||||
|
"startLine": 169,
|
||||||
|
"endLine": 175,
|
||||||
|
"problem": "新增 `addIssueDependency` API wrapper,但沒有看到測試固定 endpoint 與 payload。這種薄封裝看似簡單,卻很容易在 issue/PR 編號、`index` 欄位或 repo owner/name 組合上出錯。",
|
||||||
|
"reason": "Paladin:可排除(重複)。歷史 findings 已指出 addIssueDependency 缺少 endpoint、HTTP method、payload 與相依方向測試,與本條相同。"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user