chore(ai-review 狀態): 更新 findings.json 與 exclusions.json
CI / AI Code Review (pull_request) Failing after 39s

已解決 5 條(critical x1、warning x2、info x2:抽常數、提升 regex、補邊界測試),5 條判定為誤報寫入 exclusions(過度收緊 regex、迴圈測試已帶訊息、總長度冗餘、片段建議互相衝突、mock 過早抽離),findings 清空。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-06-26 14:11:36 +08:00
co-authored by Claude Opus 4.8
parent 5e8d58b5f9
commit fcb1dc4525
2 changed files with 31 additions and 76 deletions
+30
View File
@@ -70,5 +70,35 @@
"role": "Leo",
"original_finding": "在測試中使用 monkey-patch 直接覆蓋 process.stdout.write 或 process.stderr.write 是極度危險的模式,可能導致狀態污染;建議重構 logger 使其支援依賴注入。",
"reason": "攔截已於 finally 還原原本的 write,無狀態污染,且為 Node 測試 stdout/stderr 輸出的標準作法;logger 僅是寫入 stdout/stderr 的薄封裝,為其引入依賴注入框架屬過度設計。已將兩個攔截輔助合併為單一 captureStream。"
},
{
"location": "app/config.js:63",
"role": "Mage",
"original_finding": "正規表達式 ^[A-Za-z0-9._-]+$ 仍允許以點號開頭或結尾的名稱(如 .foo 或 foo.)。建議調整為點號只能存在於中間。",
"reason": "路徑穿越風險來自 .、.. 與額外斜線,皆已明確排除;前/後綴點號非穿越向量,且禁止會誤拒如 .github 這類合法 repo 名稱。"
},
{
"location": "app/test/config.test.js:65",
"role": "Bard",
"original_finding": "for...of 迴圈測試將多種錯誤案例綁在同一個測試名稱下,失敗時難以辨識是哪一種格式。建議拆分或加入描述性訊息。",
"reason": "迴圈內 assert.throws 已帶入第三引數描述訊息(應拒絕:<repo>),失敗時可定位具體案例;逐案拆成獨立 test 屬純風格偏好。"
},
{
"location": "app/config.js:62",
"role": "Mage",
"original_finding": "parts.every 僅檢查單一區段長度,未對 owner/repo 總長度做限制。建議分割前先限制 value 總長度。",
"reason": "已限定恰兩段且每段 <= MAX_REPO_NAME_LENGTH,總長度已被間接上限;再加總長度檢查為冗餘。"
},
{
"location": "app/releases.js:68",
"role": "Assassin",
"original_finding": "將未經清洗的 API 回應片段納入 Error,若 API 返回敏感資訊可能導致外洩。建議僅含概括描述或先脫敏。",
"reason": "此片段為前一輪審查明確要求加入以利除錯;release 清單 API 的非 JSON 回應通常為錯誤頁/代理訊息而非機密資料,且片段已截斷。兩輪建議互相衝突,維持可偵錯性。"
},
{
"location": "app/test/releases.test.js:33",
"role": "Bard",
"original_finding": "jsonResponse 輔助函式定義在測試檔內,建議統一抽離至 app/test/support/mock.js 集中管理。",
"reason": "目前僅 releases.test.js 單一測試檔使用,「若未來」屬臆測性需求,為單一消費者提前抽出共用模組屬過度設計。"
}
]