feat(ai-review 對話收斂): 讀 PR review 留言判斷解決狀態並收斂 findings #42
@@ -1,90 +1 @@
|
|||||||
[
|
[]
|
||||||
{
|
|
||||||
"level": "critical",
|
|
||||||
"role": "Maya",
|
|
||||||
"problem": "`reconcileConversations` 核心流程中,對於 `getFileContent` 失敗或內容為空的處理邏輯,直接降級為空字串並視為未解決,但若檔案內容實際上非空且未解決,這可能導致判斷偏差。",
|
|
||||||
"suggestion": "補測試案例,模擬 `getFileContent` 拋出錯誤時,`reconcileConversations` 是否正確地將對話保留為未解決,且後續統計數字(`carriedFindings`)是否正確。",
|
|
||||||
"location": "app/resolve.js:142",
|
|
||||||
"is_new": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"location": "app/comments.test.js:275",
|
|
||||||
"problem": "新增了 `usageSection` 功能,但測試案例中沒有驗證當 `usageSection` 為空字串或未傳入時,輸出的 body 是否正確排版(例如不會多出不必要的換行符號)。",
|
|
||||||
"suggestion": "補充測試案例,驗證當 `usageSection` 為空時,輸出的 Markdown 結構是否如預期(沒有多餘的 `\n\n` 結尾)。",
|
|
||||||
"is_new": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"problem": "函式 `parseBotReviewComment` 缺少對 `levelRaw` 為空但其他欄位存在時的測試案例。程式碼有 `level: level || 'warning'` 處理,但此行為應被明確驗證。",
|
|
||||||
"suggestion": "請新增測試案例,模擬評論內文缺少 `嚴重等級` 或 `等級` 欄位,但有 `審查員` 和 `問題`/`建議` 欄位時,確認 `level` 會正確地預設為 `warning`。",
|
|
||||||
"location": "app/resolve.js:40",
|
|
||||||
"is_new": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"problem": "函式 `parseBotReviewComment` 缺少對 `problem` 存在但 `suggestion` 為空字串的測試案例。程式碼有 `suggestion: suggestion || problem || ''` 處理,但此行為應被明確驗證。",
|
|
||||||
"suggestion": "請新增測試案例,模擬評論內文只包含 `問題` 欄位而無 `建議` 欄位時,確認 `suggestion` 會正確地使用 `problem` 的內容。",
|
|
||||||
"location": "app/resolve.js:41",
|
|
||||||
"is_new": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"problem": "在 `judgeConversationsResolved` 函數中,AI 判斷回傳結構如果不符合預期(非陣列),雖有降級處理,但未驗證當 AI 回傳包含無效 `idx` 或缺少 `resolved` 欄位的物件時,對應邏輯是否正確過濾。",
|
|
||||||
"suggestion": "補測試案例,模擬 AI 回傳包含無效結構(如 `idx` 為字串、缺少 `resolved`)的 JSON,確保系統能正確忽略無效項並將其視為未解決。",
|
|
||||||
"location": "app/resolve.js:89",
|
|
||||||
"is_new": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"problem": "函式 `judgeConversationsResolved` 缺少對 `chatFn` 拋出錯誤情境的測試。雖然上層呼叫者有處理,但此函式本身的錯誤行為應被驗證。",
|
|
||||||
"suggestion": "請新增測試案例,模擬 `chatFn` 拋出錯誤時,確認 `judgeConversationsResolved` 會正確地將錯誤向上拋出,以便呼叫者處理。",
|
|
||||||
"location": "app/resolve.js:90",
|
|
||||||
"is_new": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"problem": "函式 `reconcileConversations` 缺少對 `judge` 拋出錯誤情境的明確測試。雖然程式碼有 `try-catch` 處理,但應有專門的測試案例來驗證此失敗路徑的行為。",
|
|
||||||
"suggestion": "請新增測試案例,模擬 `judge` 函式拋出錯誤時,確認 `reconcileConversations` 能正確捕獲錯誤,記錄警告,並將所有待判斷的對話都視為未解決(即 `verdicts` 應全部為 `resolved: false`)。",
|
|
||||||
"location": "app/resolve.js:144",
|
|
||||||
"is_new": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"location": "app/resolve.js:246",
|
|
||||||
"problem": "`reconcileConversations` 中的 `reconcile` 流程包含多個步驟(取得 comments、group、判斷、resolve),一旦中間有外部呼叫失敗就降級。目前的測試案例主要覆蓋了「全部成功」或「特定某個失敗」,但缺乏對「部分 resolve 成功,部分 resolve 失敗」這種狀態的驗證。",
|
|
||||||
"suggestion": "補充測試案例,模擬部分 `resolveComment` 成功、部分失敗的情境,驗證最終回傳的 `closedCount` 與 `resolvedFindings` 等統計數據是否正確計算。",
|
|
||||||
"is_new": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"problem": "`fetchAccountQuota` 策略在處理 API key 時,假設 `apiKeys` 陣列存在並取第一個,若傳入的 `config.apiKeys` 為空陣列或 undefined,缺乏明確的防禦與測試。",
|
|
||||||
"suggestion": "補測試案例,模擬 `config.apiKeys` 為空或無效的情境,確認系統降級行為是否符合預期。",
|
|
||||||
"location": "app/usage.js:173",
|
|
||||||
"is_new": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "warning",
|
|
||||||
"role": "Maya",
|
|
||||||
"problem": "`resolveRemainingPercent` 函數負責處理額度計算,但針對 `quota.limit` 為 0 的情況缺乏顯式處理,可能會導致除以零或錯誤的百分比計算結果。",
|
|
||||||
"suggestion": "補測試案例,模擬 `quota.limit` 為 0 的情境,確認系統是否正確處理或返回錯誤訊息,避免計算偏差。",
|
|
||||||
"location": "app/usage.js:211",
|
|
||||||
"is_new": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "info",
|
|
||||||
"role": "Maya",
|
|
||||||
"location": "app/usage.test.js",
|
|
||||||
"problem": "測試 `resolveRemainingPercent` 時,雖然覆蓋了各種分支,但對於「邊界值」的處理(例如 `remaining` 剛好等於 `limit`,或 `limit` 為 0)還可以更嚴謹。",
|
|
||||||
"suggestion": "增加對 `remaining === limit` (100%) 與 `remaining === 0` (0%) 的明確測試案例。",
|
|
||||||
"is_new": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|||||||
Reference in New Issue
Block a user