fix(comments review): 送出前排序 Review comments #37

Closed
jiantw83 wants to merge 2 commits from ai-review-resolve/20260622-153600 into develop
Member

變更摘要

  • 調整 postFindingsReview 的 Review comment 建立流程,先產生可放入 Gitea Review 的 comment payload,再依原 finding 嚴重等級排序後送出。
  • 補上測試,覆蓋不可行內標註的 finding 被過濾後,最終送出的 Review comments 仍依嚴重度排序。

影響範圍

  • app/comments.js:排序時機移到最終 comments payload 送出前。
  • app/comments.test.js:新增最終 payload 排序測試。

驗證

  • npm test -- comments.test.js
  • npm test
## 變更摘要 - 調整 `postFindingsReview` 的 Review comment 建立流程,先產生可放入 Gitea Review 的 comment payload,再依原 finding 嚴重等級排序後送出。 - 補上測試,覆蓋不可行內標註的 finding 被過濾後,最終送出的 Review comments 仍依嚴重度排序。 ## 影響範圍 - `app/comments.js`:排序時機移到最終 `comments` payload 送出前。 - `app/comments.test.js`:新增最終 payload 排序測試。 ## 驗證 - `npm test -- comments.test.js` - `npm test`
jiantw83 added 1 commit 2026-06-22 16:26:52 +00:00
fix(comments review): 送出前排序 Review comments
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 1m1s
297e75cdd5
Owner

🤖 AI Code Review 團隊

👤 角色 🎯 面向 🧠 個性
🗡️ Assassin security 多疑偏執、以攻擊者視角看世界,假設每筆輸入都是惡意的,每個信任都會被濫用
🎼 Bard style 唯美龜毛、追求優雅,把可讀性與一致性當作旋律,最受不了走調的命名與排版
🧰 Leo maintainability 有遠見、重視長期維護成本,凡事先問「六個月後的自己還看得懂嗎?」,討厭把債留給未來
🔮 Mage logic 嚴謹冷靜、滴水不漏,凡事推演到最壞情況,深信「沒驗證過的假設都是 bug」
🧪 Maya testing 對測試覆蓋率有執念,深信「沒有測試的程式碼等於沒寫完」,溫和但堅持,最在意邊界與失敗路徑
Rogue efficiency 急性子、講求速度,最痛恨被浪費的 CPU 週期與記憶體,凡事先問「這能不能更快、更省」

🔍 服務:gemini 模型:gemini-2.5-flash

## 🤖 AI Code Review 團隊 | 👤 角色 | 🎯 面向 | 🧠 個性 | |--------|--------|--------| | **🗡️ Assassin** | security | 多疑偏執、以攻擊者視角看世界,假設每筆輸入都是惡意的,每個信任都會被濫用 | | **🎼 Bard** | style | 唯美龜毛、追求優雅,把可讀性與一致性當作旋律,最受不了走調的命名與排版 | | **🧰 Leo** | maintainability | 有遠見、重視長期維護成本,凡事先問「六個月後的自己還看得懂嗎?」,討厭把債留給未來 | | **🔮 Mage** | logic | 嚴謹冷靜、滴水不漏,凡事推演到最壞情況,深信「沒驗證過的假設都是 bug」 | | **🧪 Maya** | testing | 對測試覆蓋率有執念,深信「沒有測試的程式碼等於沒寫完」,溫和但堅持,最在意邊界與失敗路徑 | | **⚡ Rogue** | efficiency | 急性子、講求速度,最痛恨被浪費的 CPU 週期與記憶體,凡事先問「這能不能更快、更省」 | > 🔍 服務:gemini 模型:gemini-2.5-flash
admin reviewed 2026-06-22 16:27:57 +00:00
admin left a comment
Owner

AI Code Review 統計

🔴 嚴重 🟡 警告 🔵 建議
1 筆 0 筆 1 筆
## AI Code Review 統計 | 🔴 嚴重 | 🟡 警告 | 🔵 建議 | | --- | --- | --- | | 1 筆 | 0 筆 | 1 筆 |
@@ -238,6 +238,22 @@ describe('postFindingsReview', () => {
assert.equal(reviewCalls[0].comments[0].path, 'app/b.js');
});
Owner

嚴重等級🔴 嚴重
審查員:Maya
問題:新增的測試案例 sorts the final review comment payload after filtering non-commentable findings,其預期結果 ['🟡 警告', '🔵 建議'] 似乎有誤。輸入的 critical 等級的 finding 帶有 suggestion 欄位,照理來說應該會被轉換成評論,並依嚴重性排在最前面。目前測試結果卻將其排除,這可能代表 toReviewComment 函數有未預期的行為,或是測試的預期結果不正確,導致未能完整驗證排序邏輯。
建議:請確認 toReviewComment 函數對於 critical 等級且帶有 suggestion 的 finding 是否會回傳 null

  1. 如果不會,則測試的預期結果應修正為 ['🔴 嚴重', '🟡 警告', '🔵 建議'],以確保所有應轉換的評論都被包含且排序正確。
  2. 如果 toReviewComment 確實會過濾掉某些 critical finding,則應新增一個獨立的測試案例,明確驗證 critical finding 在何種情況下會被過濾,並解釋其原因。
  3. 同時,這個測試案例也應該明確斷言最終評論的數量,以確保過濾行為符合預期。
**嚴重等級**:🔴 嚴重 **審查員**:Maya **問題**:新增的測試案例 `sorts the final review comment payload after filtering non-commentable findings`,其預期結果 `['🟡 警告', '🔵 建議']` 似乎有誤。輸入的 `critical` 等級的 finding 帶有 `suggestion` 欄位,照理來說應該會被轉換成評論,並依嚴重性排在最前面。目前測試結果卻將其排除,這可能代表 `toReviewComment` 函數有未預期的行為,或是測試的預期結果不正確,導致未能完整驗證排序邏輯。 **建議**:請確認 `toReviewComment` 函數對於 `critical` 等級且帶有 `suggestion` 的 finding 是否會回傳 `null`。 1. 如果不會,則測試的預期結果應修正為 `['🔴 嚴重', '🟡 警告', '🔵 建議']`,以確保所有應轉換的評論都被包含且排序正確。 2. 如果 `toReviewComment` 確實會過濾掉某些 `critical` finding,則應新增一個獨立的測試案例,明確驗證 `critical` finding 在何種情況下會被過濾,並解釋其原因。 3. 同時,這個測試案例也應該明確斷言最終評論的數量,以確保過濾行為符合預期。
@@ -241,0 +249,4 @@
});
assert.deepEqual(
reviewCalls[0].comments.map(c => c.body.match(/嚴重等級\*\*(.+)/)?.[1]),
Owner

嚴重等級🔵 建議
審查員:Bard
問題:測試中用於提取評論嚴重等級的正規表達式 c.body.match(/嚴重等級\*\*:(.+)/)?.[1] 雖然有效,但其寫法較為冗長且直接依賴於評論內文的特定格式。這使得測試在評論格式微調時可能變得脆弱,且降低了可讀性,如同樂章中突兀的音符。
建議:若評論內文的格式是固定的,可考慮將此正規表達式提取為一個具名常數或輔助函式,以提升可讀性與維護性。若 toReviewComment 函式能回傳一個包含結構化資訊(如 level)的物件,則測試可直接斷言該物件屬性,避免解析字串,讓測試更為優雅。

**嚴重等級**:🔵 建議 **審查員**:Bard **問題**:測試中用於提取評論嚴重等級的正規表達式 `c.body.match(/嚴重等級\*\*:(.+)/)?.[1]` 雖然有效,但其寫法較為冗長且直接依賴於評論內文的特定格式。這使得測試在評論格式微調時可能變得脆弱,且降低了可讀性,如同樂章中突兀的音符。 **建議**:若評論內文的格式是固定的,可考慮將此正規表達式提取為一個具名常數或輔助函式,以提升可讀性與維護性。若 `toReviewComment` 函式能回傳一個包含結構化資訊(如 `level`)的物件,則測試可直接斷言該物件屬性,避免解析字串,讓測試更為優雅。
admin added 1 commit 2026-06-22 16:28:00 +00:00
chore: update ai-review findings [ai-review-bot][failure]
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 3s
48aa8e00f3
jiantw83 closed this pull request 2026-06-22 16:36:50 +00:00
jiantw83 deleted branch ai-review-resolve/20260622-153600 2026-06-22 16:36:53 +00:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: old-actions/code-review#37