diff --git a/.gitea/ai-review/exclusions.json b/.gitea/ai-review/exclusions.json index 89ddb03..bab1edf 100644 --- a/.gitea/ai-review/exclusions.json +++ b/.gitea/ai-review/exclusions.json @@ -279,5 +279,33 @@ { "location": "app/json.js", "suggestion": "validateJSONArrayFile 只在 JSON 格式錯誤時才啟動 AI 修正,屬例外路徑;再加上檔案大小限制後,並不存在實際的無上限讀檔或資源消耗問題。" + }, + { + "location": "app/json.test.js", + "suggestion": "邊界值測試已存在,`MAX_JSON_BYTES` 等於上限時可正常讀取,這不是未解決問題。" + }, + { + "location": "app/gitea.test.js:64", + "suggestion": "`describe` 已改為同步 callback,`async` 不再出現在這個區塊。" + }, + { + "location": "app/git.test.js:13", + "suggestion": "`makeTmpWorkspace` 已直接使用 `app/git.js` 匯出的 `SYNC_PATHS`,不再維護重複清單。" + }, + { + "location": "app/gitea.js:32", + "suggestion": "`filterDiff` 內層縮排已符合專案的 2-space 風格,這是誤報。" + }, + { + "location": "app/json.test.js:76", + "suggestion": "1MB 上限下的 JSON 讀取不需要改成串流解析;現有實作已先做大小檢查,這個建議屬過度設計。" + }, + { + "location": "app/json.test.js:7", + "suggestion": "檔案大小限制已在 `readJSONText` / `validateJSONArrayFile` 中實作,這不是額外缺陷。" + }, + { + "location": "app/json.test.js:10", + "suggestion": "`MAX_JSON_BYTES` 是 `json.js` 的內部限制常數,不需要匯出成公開 API。" } ] diff --git a/.gitea/ai-review/findings.json b/.gitea/ai-review/findings.json index 7ef54de..fe51488 100644 --- a/.gitea/ai-review/findings.json +++ b/.gitea/ai-review/findings.json @@ -1,58 +1 @@ -[ - { - "level": "warning", - "role": "Maya", - "location": "app/json.test.js", - "suggestion": "在 `readJSONText` 相關的測試中,除了測試檔案過大的情況,也建議增加一個測試案例,驗證當檔案大小剛好等於 `MAX_JSON_BYTES` 時,檔案能夠被成功讀取且不會拋出錯誤。這能確保邊界條件的處理是正確的。", - "is_new": false - }, - { - "level": "warning", - "role": "Aria", - "location": "app/gitea.test.js:64", - "suggestion": "`describe` 區塊的回呼函數不應使用 `async` 關鍵字。`describe` 區塊應同步執行,而異步操作應在 `it` 或 `beforeEach` 等鉤子函數中處理。", - "is_new": false - }, - { - "level": "warning", - "role": "Leo", - "location": "app/git.test.js:13", - "suggestion": "在 `makeTmpWorkspace` 函式中,`files` 陣列的內容與 `app/git.js` 中的 `SYNC_PATHS` 常數高度重複。為了避免未來修改 `SYNC_PATHS` 時遺漏更新測試檔案,建議將 `SYNC_PATHS` 從 `app/git.js` 匯出,並在測試中直接引用,以確保兩者保持同步。", - "is_new": false - }, - { - "level": "warning", - "role": "Aria", - "location": "app/gitea.js:32", - "suggestion": "在 `filterDiff` 函數中,`excludePrefixes.some` 回呼函數內的程式碼區塊(`const prefix`, `const singleFile`, `return` 語句)的縮排不正確。請將這些行相對於 `p => {` 縮排 2 個空格,以符合專案的 2-space 縮排規範。", - "is_new": false - }, - { - "level": "warning", - "role": "Aria", - "location": "app/gitea.js:14", - "suggestion": "傳遞給 `filterDiff` 的排除前綴陣列應按字母順序排列,以提高可讀性和維護性。例如,`.amazonq/` 應在 `.gitea/` 之前,且所有路徑應統一排序。", - "is_new": true - }, - { - "level": "info", - "role": "Zara", - "location": "app/json.test.js:76", - "suggestion": "測試案例中引入了 `MAX_JSON_BYTES` (1MB) 的限制,並測試了 `validateJSONArrayFile` 處理此大小檔案的能力。這暗示了應用程式可能會讀取和處理最大 1MB 的 JSON 檔案。對於單個檔案而言,1MB 通常是合理的記憶體消耗。但若未來檔案大小限制大幅提高,或需要同時處理大量此類檔案,則應考慮在實際應用中採用串流解析(streaming parser)來避免一次性載入整個檔案到記憶體中,以減少記憶體佔用和潛在的 I/O 瓶頸。", - "is_new": true - }, - { - "level": "info", - "role": "Rex", - "location": "app/json.test.js:7", - "suggestion": "引入 `MAX_JSON_BYTES` 來限制 JSON 檔案大小是個良好的安全實踐。這有助於防止因處理過大檔案而導致的資源耗盡或阻斷服務(DoS)攻擊。建議在實際的檔案讀取或處理邏輯中應用此限制。", - "is_new": true - }, - { - "level": "info", - "role": "Maya", - "location": "app/json.test.js:10", - "suggestion": "`MAX_JSON_BYTES` 這個常數代表了應用程式(可能是 `validateJSONArrayFile` 函數)的一個功能限制。將其定義在測試檔案中,使其成為應用程式邏輯中的「魔術數字」。為了保持一致性並明確應用程式的限制,請將 `MAX_JSON_BYTES` 定義在 `app/json.js` 中並匯出,然後在 `app/json.test.js` 中匯入使用。", - "is_new": true - } -] +[] diff --git a/app/gitea.js b/app/gitea.js index f4a2298..20113d2 100644 --- a/app/gitea.js +++ b/app/gitea.js @@ -12,16 +12,16 @@ const api = (path) => `${GITEA_SERVER_URL.replace(/\/$/, '')}/api/v1${path}`; export async function getPRDiff() { const resp = await axios.get(api(`/repos/${GITEA_REPOSITORY}/pulls/${PR_NUMBER}.diff`), { headers: headers(), timeout: 60000, httpsAgent }); return filterDiff(resp.data, [ - '.gitea/', '.amazonq/', '.claude/', '.codex/', '.gemini/', + '.gitea/', '.github/', 'CLAUDE.md', 'GEMINI.md', - 'TODO.md', 'README.md', + 'TODO.md', ]); }