chore: update ai-review findings [ai-review-bot][failure]
node-actions/template: CI / BUILD (pull_request) Successful in 4s
CI / TEST (Codex) (pull_request) Failing after 25s
CI / TEST (Claude) (pull_request) Failing after 25s
CI / TEST (Antigravity) (pull_request) Failing after 32s

This commit is contained in:
ai-review-bot
2026-07-20 10:36:03 +00:00
parent d7cecc8fa8
commit 05153bba8e
+154
View File
@@ -1318,5 +1318,159 @@
"endLine": 195,
"problem": "新增 `addIssueDependency` 封裝 Gitea issue dependency endpoint,但沒有對 endpoint、HTTP method 與 body 語意補測試。這個 API 的方向性很重要:是讓 PR 相依於追蹤 issue;若 body 的 `index` 或 URL 上的 issue number 寫反,測試沒抓到就會變成錯誤的阻擋關係,甚至完全沒有阻擋效果。",
"reason": "Paladin:可排除(重複)。歷史 findings 已指出 `addIssueDependency` 缺少 endpoint、HTTP method、payload 與相依方向的契約測試,與本條指控相同。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Assassin",
"severity": "嚴重",
"file": "src/lib/review.js",
"startLine": 68,
"endLine": 75,
"problem": "AI CLI 失敗時會把 stderrstdout 片段預設寫進 CI log。攻擊者只要讓工具失敗,且讓 prompt、diff、CLI 錯誤或環境診斷中夾帶未被正規式涵蓋的秘密格式(例如 JWT、雲端憑證、私鑰片段、較短 token、含符號的密碼或 PII),就能把機密永久留在多人可讀的 workflow log。`redactSecrets` 是盡力遮罩,不足以作為洩漏邊界。",
"reason": "Paladin:可排除(重複)。歷史 findings 已指出 AI CLI 失敗時將 stderr/stdout 寫入 CI log、黑名單式遮罩可繞過,並可能洩漏機密或個資;本條是同一風險。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Assassin",
"severity": "警告",
"file": "action.yml",
"startLine": 22,
"endLine": 25,
"problem": "文件改成建議呼叫端傳入可觸發 CI 的 PAT。若 workflow 在 PR head 上執行此 action,或 action 程式碼可被 PR 修改,攻擊者可以把這顆 PAT 當成獵物:改寫 action、讓工具輸出、或藉由執行流程把 token 外送。自動 token 原本的防遞迴限制被 PAT 繞開後,等於把更高權限、更危險的憑證交給不可信變更。",
"reason": "Paladin:可排除(重複)。歷史 findings 已針對 action.yml 建議使用可觸發 CI 的 PAT,導致不可信 PR 或可修改 action 程式碼時產生憑證外洩與濫用風險提出相同問題。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Bard",
"severity": "建議",
"file": "action.yml",
"startLine": 3,
"endLine": 3,
"problem": "檔案標頭的「更新時間」仍停在 `2026/07/17 18:49:58`,但本次變更內容與提供的檔案最後更新時間已是 `2026/07/20`。這種手寫時間戳像樂譜上的舊拍號,讀者會懷疑文件到底是否同步。",
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 action.yml 檔頭手寫更新時間與實際版本不一致,屬同一問題。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Bard",
"severity": "建議",
"file": "readme.md",
"startLine": 3,
"endLine": 3,
"problem": "README 的更新時間也停在 `2026/07/17 18:49:58`,與本次文件內容大幅改動不相稱。對讀者而言,這個欄位現在不是資訊,而是噪音。",
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 README 檔頭手寫更新時間與實際更新不符,屬同一問題。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Bard",
"severity": "建議",
"file": "src/index.js",
"startLine": 7,
"endLine": 7,
"problem": "啟動 banner 的更新時間仍是 `2026/07/17 18:49:58`,但同檔本次新增了大量流程與註解。執行時印出的版本感與實際程式節奏不一致,像開場音還停在舊調。",
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 src/index.js 啟動橫幅硬編碼更新時間失準,屬同一問題。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Bard",
"severity": "建議",
"file": "readme.md",
"startLine": 42,
"endLine": 50,
"problem": "mermaid 圖用 `S1 -> S3 -> ... -> S8 -> S2 -> S9` 表示延後的步驟 2,節點代號與視覺流程反向交錯。雖然顯示文字能說明「步驟 2 延後」,但閱讀原始 Markdown 時節奏很拗,維護者很容易在後續增修時接錯線。",
"reason": "Paladin:可排除(重複)。歷史 findings 已涵蓋流程步驟編號硬編碼於 README 與流程圖,造成文件與流程順序高耦合;本條只是針對 Mermaid 節點 ID 的同類表現。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Bard",
"severity": "建議",
"file": "src/index.js",
"startLine": 182,
"endLine": 238,
"problem": "`queueOrPostComment` 與 `createIssueAndFlushBufferedComments` 這兩段閉包夾在主流程前奏中,註解、狀態變數與模式分流交織在一起,讓 `main()` 的旋律還沒進入步驟 3 就先變成長篇宣敘。可讀性負擔集中在主流程,後面的步驟編排也因此更難掃描。",
"reason": "Paladin:可排除(重複)。歷史 finding 已指出 main() 在步驟 3 前被 issueBuffer、issue 與兩個閉包函式打斷,留言路由與 issue 建立細節混入主流程,屬同一可讀性問題。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Leo",
"severity": "警告",
"file": "src/index.js",
"startLine": 180,
"endLine": 407,
"problem": "`main()` 這次把留言路由、issue 暫存、標籤挑選、issue 建立、問題發布、PR 回貼、相依設定全部塞進同一個流程函式。半年後要改「建問題模式」其中一段時,維護者必須同時理解 `currentRunCommentIds`、`issueBuffer`、`issue` 閉包狀態與一般模式/建問題模式的分支時序,這會讓錯誤很容易藏在流程順序裡,也很難針對單一行為做單元測試。",
"reason": "Paladin:可排除(命中已知排除事項且重複)。既有紀錄已涵蓋 main() 內留言路由、issue 狀態、緩衝佇列、標籤、相依關係與發布職責耦合的問題。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Leo",
"severity": "警告",
"file": "src/lib/review.js",
"startLine": 32,
"endLine": 48,
"problem": "`agentFailureDetail` 的文件和實作描述互相打架:前面寫「原始輸出預設隱藏」,下一段又寫預設附上經遮罩的 stderr/stdout,後面還提到 `ACTIONS_STEP_DEBUG=true`,但實作沒有任何 debug 開關。這種註解漂移會讓未來維護者誤判 CI log 會不會輸出 agent 內容,進而在除錯或調整遮罩策略時做錯決策。",
"reason": "Paladin:可排除(重複)。歷史 findings 已多次指出 agentFailureDetail 文件宣稱預設隱藏原始輸出,卻又描述預設輸出 stderr/stdout 且提到未實作的 ACTIONS_STEP_DEBUG 分支。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Leo",
"severity": "建議",
"file": "readme.md",
"startLine": 76,
"endLine": 131,
"problem": "README 的功能列表把分支名稱與原始碼行號硬編在數十個連結裡;這次只是程式碼位移就必須大面積同步改 `#Lxx`。這種文件形態維護成本很高,未來只要函式上方增減幾行,文件就會悄悄指到錯誤位置。",
"reason": "Paladin:可排除(重複)。歷史 findings 已指出 README 功能列表硬編分支名稱與行號連結,維護成本高且容易漂移。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Maya",
"severity": "警告",
"file": "src/index.js",
"startLine": 320,
"endLine": 386,
"problem": "建問題模式這次改成「有保留問題才建 issue」、「先暫存工具/diff/角色留言」、「嚴重問題才加相依」、「無保留問題靜默通過」,但 diff 沒看到對應測試。這些是使用者可觀察到的流程分支,尤其 `kept.length === 0`、只有警告/建議、有嚴重問題、`addIssueDependency` 失敗降級,都還沒有被驗證。",
"reason": "Paladin:可排除(重複)。歷史 findings 已涵蓋建問題模式的 issue 建立條件、暫存留言、嚴重與非嚴重分流、無 finding 靜默通過、標籤或相依 API 失敗等核心分支缺少測試。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Maya",
"severity": "警告",
"file": "src/lib/gitrepo.js",
"startLine": 102,
"endLine": 147,
"problem": "`resolveMergeBase` 新增多段 fetchdeepenunshallow 重試策略與診斷錯誤,但沒有看到測試覆蓋淺層 checkout 的失敗路徑。這段邏輯若順序或 refspec 錯,會直接讓審查抓不到正確 diff 基準。",
"reason": "Paladin:可排除(重複)。歷史 findings 已針對 resolveMergeBase 多階段 fetch、deepen、unshallow、停止條件與最終失敗診斷缺少測試提出相同問題。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Maya",
"severity": "警告",
"file": "src/lib/gitrepo.js",
"startLine": 310,
"endLine": 340,
"problem": "`pushWithCredential` 改成用 `GIT_CONFIG_*` 注入 PAT、先清掉 checkout 的 extraheader,且失敗時改丟固定錯誤;這是認證與 CI 觸發的關鍵行為,但缺少測試驗證環境變數、refspec 與錯誤遮蔽。",
"reason": "Paladin:可排除(重複)。歷史 findings 已涵蓋 pushWithCredentialcommitAndPushFindings 的 token 認證推送路徑、refspec、環境變數注入與錯誤遮蔽缺少測試。"
},
{
"addedAt": "2026/07/20 18:36:02",
"prNumber": 6,
"reviewer": "Maya",
"severity": "建議",
"file": "src/lib/review.js",
"startLine": 13,
"endLine": 73,
"problem": "新增的 `redactSecrets``agentFailureDetail` 會把 AI CLI 的 stderr/stdout 寫進 CI log,雖然有遮罩與限長,但沒有測試驗證常見機密格式、控制字元與長輸出邊界是否真的被處理。",
"reason": "Paladin:可排除(重複)。歷史 findings 已指出 redactSecretsagentFailureDetail 對常見憑證格式、URL 帳密、控制字元、截斷與空輸出等邊界缺少測試。"
}
]