chore: update ai-review findings [ai-review-bot][failure]

This commit is contained in:
ai-review-bot
2026-07-20 09:32:01 +00:00
parent b277ff2f7c
commit be72aa0944
+77
View File
@@ -757,5 +757,82 @@
"endLine": 73,
"problem": "`agentFailureDetail` 現在會把 AI CLI 的 stderr/stdout 片段寫進 log,並依賴 `redactSecrets` 做遮罩與單行化;但這段新增的失敗診斷路徑沒有看到測試覆蓋。這不只是快樂路徑問題,邊界包含空輸出、只有 stdout、逾時 killed、換行控制字元、Authorization/token/URL credentials/長 token 等格式,任何一個漏掉都會讓診斷品質或遮罩行為失真。",
"reason": "Paladin:可排除(重複)。歷史 finding 已記錄 `agentFailureDetail``redactSecrets` 對空輸出、控制字元、憑證格式、URL 帳密、截斷與 debug 開關缺少測試。"
},
{
"addedAt": "2026/07/20 17:32:00",
"prNumber": 6,
"reviewer": "Assassin",
"severity": "警告",
"file": "src/lib/review.js",
"startLine": 52,
"endLine": 69,
"problem": "AI CLI 失敗時會把 stdout/stderr 片段預設寫進 CI log。攻擊者只要讓 CLI 失敗,並讓錯誤輸出夾帶 prompt、diff、環境診斷、原始碼片段或不符合目前 regex 的 token/PII,就能把本應留在審查沙箱內的內容長期落到多人可讀的 workflow log。`redactSecrets` 是黑名單式遮罩,擋不住未知格式憑證、中文個資、內部 URL、客戶資料或模型/CLI 回顯的任意文字。",
"reason": "Paladin:可排除(重複)。歷史 finding 已針對 AI CLI 失敗輸出 stdout/stderr、黑名單式遮罩可繞過,以及機密或個資落入 CI log 的風險提出相同問題。"
},
{
"addedAt": "2026/07/20 17:32:00",
"prNumber": 6,
"reviewer": "Bard",
"severity": "建議",
"file": "src/index.js",
"startLine": 178,
"endLine": 235,
"problem": "`main()` 裡新加入的兩個閉包與大段 JSDoc 讓主流程開場變得過於厚重。這些說明本身有價值,但它們插在流程步驟之前,讓讀者要先穿過一整段留言派送與建 issue 細節,才聽見真正的 10 步驟主旋律。",
"reason": "Paladin:可排除(重複)。歷史 finding 已涵蓋 main() 承擔留言路由、issue 狀態、緩衝佇列與發布職責耦合,並提出抽離 helper/發布器的方向。"
},
{
"addedAt": "2026/07/20 17:32:00",
"prNumber": 6,
"reviewer": "Leo",
"severity": "警告",
"file": "src/index.js",
"startLine": 177,
"endLine": 378,
"problem": "`main()` 這次把「一般模式」與「建問題模式」的留言路由、issue 建立、暫存 buffer、標籤挑選、相依關係、舊留言清理全部塞進同一個流程函式。六個月後要改任一個發佈規則時,維護者必須同時理解 `ctx.createIssue`、`issue` 閉包狀態、`issueBuffer`、`currentRunCommentIds` 與步驟順序,控制流已經變成隱含狀態機,測試也很難只針對「留言目的地」或「issue 收束」單獨驗證。",
"reason": "Paladin:可排除(重複)。此條與歷史 Leo finding 同樣指向 main() 內一般模式/建問題模式發布規則、issueBuffer、issue 閉包狀態與 ctx.createIssue 分支耦合。"
},
{
"addedAt": "2026/07/20 17:32:00",
"prNumber": 6,
"reviewer": "Maya",
"severity": "警告",
"file": "src/index.js",
"startLine": 177,
"endLine": 390,
"problem": "建問題模式這次新增了大量可觀察行為,但 diff 沒看到對應測試:留言先暫存再寫入 issue、無保留問題時靜默通過、有嚴重問題才加 PR 相依、只有警告/建議時不阻擋合併,以及一般模式才延後 resolve 舊留言。這些都是很容易在分支條件中漏掉的流程行為,現在還沒有被試煉過。",
"reason": "Paladin:可排除(重複)。歷史 Maya findings 已涵蓋建問題模式的暫存留言、靜默通過、嚴重/非嚴重分流、PR 相依與一般模式舊留言清理等核心分支缺少測試。"
},
{
"addedAt": "2026/07/20 17:32:00",
"prNumber": 6,
"reviewer": "Maya",
"severity": "警告",
"file": "src/lib/gitrepo.js",
"startLine": 102,
"endLine": 158,
"problem": "`resolveMergeBase` 新增了多段 fetch 補救策略與錯誤診斷,但沒有看到測試驗證邊界與失敗路徑:首次 merge-base 成功、淺層 repo 走 `--unshallow`、unshallow 失敗後 deepen base/head、所有策略都失敗時要拋出含診斷且保留 `cause` 的錯誤。這段若沒測,很容易在淺層 checkout 才暴露審查整段中斷。",
"reason": "Paladin:可排除(重複)。歷史 findings 已針對 resolveMergeBase 多階段 fetch、淺層與非淺層分支、停止條件、降級及最終錯誤診斷缺少測試提出相同問題。"
},
{
"addedAt": "2026/07/20 17:32:00",
"prNumber": 6,
"reviewer": "Maya",
"severity": "警告",
"file": "src/lib/gitrepo.js",
"startLine": 266,
"endLine": 306,
"problem": "`commitAndPushFindings` 改成一律透過 `pushWithCredential` 使用 token 推送,且 `pushWithCredential` 要保證 token 不進 argv、失敗錯誤被固定訊息取代;但 diff 沒有對這些失敗與遮蔽保證新增測試。這條路徑失敗時會直接影響 findings commit,也可能讓敏感資訊出現在測不到的例外訊息中。",
"reason": "Paladin:可排除(重複)。歷史 finding 已涵蓋 pushTokenpushWithCredential 推送策略、認證遮蔽與失敗路徑缺少測試。"
},
{
"addedAt": "2026/07/20 17:32:00",
"prNumber": 6,
"reviewer": "Maya",
"severity": "警告",
"file": "src/lib/review.js",
"startLine": 13,
"endLine": 72,
"problem": "`agentFailureDetail` 現在會把 stderr/stdout 片段寫進 CI log,雖然有 `redactSecrets`,但沒有看到測試驗證遮罩規則與截斷邊界。這不是快樂路徑;一旦 AI CLI 失敗,未驗證的遮罩就會變成長期保存的 log 風險。",
"reason": "Paladin:可排除(重複)。歷史 finding 已涵蓋 redactSecretsagentFailureDetail 對 Authorization、token、URL 帳密、控制字元、截斷與空輸出等邊界缺少測試。"
}
]