Files
ai-pull-request/.gitea/ai-review/findings.json
T

101 lines
5.1 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[
{
"level": "critical",
"role": "Mage",
"location": "app/lib/git.js:147, 154",
"problem": "在 `createResolveBranch` 中使用 `git add -A` 與 `git commit` 會強制提交包括未追蹤檔案在內的所有變更,可能污染分支且掩蓋衝突內容。且此流程缺乏測試。",
"suggestion": "僅針對衝突檔案(`--diff-filter=U`)執行 `git add`,並補上整合測試,驗證模擬衝突時,產生的分支確實包含正確的衝突標記與檔案。"
},
{
"level": "critical",
"role": "Maya",
"location": "app/index.js:1, 58",
"problem": "核心邏輯(涉及分支操作、API 交互、AI 分析)完全缺乏自動化測試。且 `createResolveBranch` 產生的分支缺乏邏輯處理衝突檔案,亦無測試驗證分支建立及提交內容。",
"suggestion": "必須建立測試目錄,導入測試框架(如 Jest 或 Mocha),並至少為 lib/ 下的工具類與 index.js 的核心邏輯增加單元測試。應補上整合測試,驗證 detectConflict 能偵測衝突,且 createResolveBranch 產生的分支確實包含預期的衝突檔案與 commit。"
},
{
"level": "critical",
"role": "Maya",
"location": "app/lib/git.js:106",
"problem": "detectConflict 函式在執行 git 合併失敗後的 abort 嘗試若失敗,會導致工作區殘留錯誤狀態,且未經測試驗證。",
"suggestion": "增加測試案例來模擬 git 合併失敗與 abort 失敗的場景,確保狀態正確復原。"
},
{
"level": "warning",
"role": "Mage",
"location": "app/lib/git.js:39, 52",
"problem": "多次使用 `git config --global` 修改全域設定,可能導致 `~/.gitconfig` 無限膨脹、污染環境或導致並行 Git 作業行為異常。",
"suggestion": "改用 `--local` 設定,或在執行 Git 指令時透過 `-c` 傳入設定,避免修改全域組態。同時限制 `safe.directory` 只針對特定的工作目錄,而非萬用字元 `*`。"
},
{
"level": "warning",
"role": "Mage",
"location": "app/lib/opencode.js:106, 111",
"problem": "將 `HOME` 環境變數硬編碼為 `/root``opencode run` 設定了 5 分鐘 timeout 但未處理發生時的清理。",
"suggestion": "動態獲取當前使用者的家目錄;增加對 timeout 的特殊處理,並確保 finally 區塊正確清理所有狀態。"
},
{
"level": "warning",
"role": "Leo",
"location": "app/lib/opencode.js:34, 46, 143",
"problem": "暫存目錄與設定檔未清理造成空間堆積;頻繁 I/O;且複雜的 JSON 解析邏輯不僅脆弱且維護成本高。",
"suggestion": "在 finally 區塊中統一實作檔案系統清理;將設定檔產生邏輯快取;優化 Prompt 嚴格要求 LLM 僅輸出標準 JSON,並使用原生 `JSON.parse`。"
},
{
"level": "warning",
"role": "Mage",
"location": "app/index.js:84, 176",
"problem": "分支名稱長度可能超出 Git 限制,或字元替換後導致名稱無效。",
"suggestion": "確保 resolveBranch 長度不超過 Git 建議限制,並對最終產生的分支名稱進行正規化。"
},
{
"level": "warning",
"role": "Assassin",
"location": "app/index.js:183",
"problem": "錯誤處理中的 `maskSecrets` 基於字串取代,可能無法處理所有 Token 變體導致敏感資訊洩漏。",
"suggestion": "確保 `maskSecrets` 處理所有可能的變體,並在生產環境中禁止輸出原始錯誤物件。"
},
{
"level": "warning",
"role": "Leo",
"location": "app/index.js:7",
"problem": "函式 `main()` 承擔過多責任,違反單一職責原則。",
"suggestion": "將職責拆解,抽離衝突處理邏輯為 `ConflictManager`,並封裝 Gitea API 互動。"
},
{
"level": "warning",
"role": "Maya",
"location": "app/index.js:114, 126",
"problem": "diff 截斷邏輯與 fallbackSummary 處理邊界情況缺乏測試。",
"suggestion": "補上針對 truncateDiff 及 commitMessages 為空/null 時的測試案例。"
},
{
"level": "info",
"role": "Maya",
"location": "app/index.js:150",
"problem": "缺乏測試案例驗證 fallbackSummary 的結果是否符合預期格式。",
"suggestion": "補上單元測試,驗證 fallbackSummary 在不同輸入下的產出格式。"
},
{
"level": "info",
"role": "Maya",
"location": "app/lib/opencode.js:176",
"problem": "缺乏單元測試驗證 `extractResult` 對非標準 JSON 的解析能力。",
"suggestion": "補上單元測試,驗證 extractResult 能否正確解析壞 JSON。"
},
{
"level": "info",
"role": "Assassin",
"location": "app/lib/opencode.js:77",
"problem": "呼叫外部指令時傳遞整個 `process.env`,導致敏感環境變數暴露。",
"suggestion": "應明確篩選並只傳遞必要環境變數。"
},
{
"level": "info",
"role": "Rogue",
"location": "app/index.js:37",
"problem": "在 `ahead` 為 0 時,仍執行昂貴的 diff 採集與分析。",
"suggestion": "先執行 `countAheadCommits`,若 `ahead === 0` 則直接終止。"
}
]