feat(ai-review 行號): 強制問題帶行號,缺行號時反問原角色定位 #44

Merged
jiantw83 merged 5 commits from ai-review-resolve/20260623-153635 into ai-review-resolve/20260623-110950 2026-06-23 07:40:30 +00:00
Member

變更摘要

修正「Review 只顯示統計數字、看不到問題內容」的根因:問題的 location 若只有檔名、沒有行號,parseLocation 無法解析 → 無法產生行內 review comment(commentable=0)。本 PR 從兩個層面確保每條問題都帶行號。

影響範圍與重點檔案

  • app/roles.js
    • buildAnalysisPrompt 強化 location 規則——每條問題必須檔案路徑:行號(單一行號、不可只給檔名、不可逗號列多檔)。
    • 新增 buildLocateLinePrompt(role):當某問題缺行號時,用來請原角色對照該檔 diff 回 {"line": 數字}
  • app/findings.js:新增 resolveMissingLineNumbers(findings, diff)——掃出「只有檔名、缺行號」的問題,反問原角色(依 finding 的 role 載入)、附該檔 diff 區段(extractFileDiff,省 token),重複嘗試直到取得有效行號;每條最多 MAX_LOCATE_ATTEMPTS=3 次以避免無限迴圈,成功補成 檔案:行號,連續失敗則保留檔名並記錄警告。
  • app/main.js:Step5 角色分析後、合併前呼叫 resolveMissingLineNumbers(newFindings, diff),log 顯示「補行號: X/Y 筆成功定位」。
  • 測試:roles.test.js(行號必填規則、buildLocateLinePrompt)、findings.test.js(補行號、重試到成功、重試耗盡保留檔名,及誤報裁決/排除邊界)、comments.test.js(新舊統計+舊問題不行內標註)。
  • README.md:新增設計第 15 點。

風險與注意事項

  • 補行號會對「缺行號的新問題」各多打數次 LLM 呼叫(上限 3 次/條),token 成本略增;這是為了確保問題能被行內標註的取捨。
  • node --test app/*.test.js 全數通過。
  • 本 PR 以 ai-review-resolve/20260623-110950 為 base(stacked 子 PR),合併後隨母分支進入 PR #42 → develop。
## 變更摘要 修正「Review 只顯示統計數字、看不到問題內容」的根因:問題的 `location` 若只有檔名、沒有行號,`parseLocation` 無法解析 → 無法產生行內 review comment(`commentable=0`)。本 PR 從兩個層面確保每條問題都帶行號。 ## 影響範圍與重點檔案 - `app/roles.js`: - `buildAnalysisPrompt` 強化 location 規則——每條問題**必須**是 `檔案路徑:行號`(單一行號、不可只給檔名、不可逗號列多檔)。 - 新增 `buildLocateLinePrompt(role)`:當某問題缺行號時,用來請**原角色**對照該檔 diff 回 `{"line": 數字}`。 - `app/findings.js`:新增 `resolveMissingLineNumbers(findings, diff)`——掃出「只有檔名、缺行號」的問題,反問原角色(依 finding 的 `role` 載入)、附該檔 diff 區段(`extractFileDiff`,省 token),**重複嘗試直到取得有效行號**;每條最多 `MAX_LOCATE_ATTEMPTS=3` 次以避免無限迴圈,成功補成 `檔案:行號`,連續失敗則保留檔名並記錄警告。 - `app/main.js`:Step5 角色分析後、合併前呼叫 `resolveMissingLineNumbers(newFindings, diff)`,log 顯示「補行號: X/Y 筆成功定位」。 - 測試:`roles.test.js`(行號必填規則、`buildLocateLinePrompt`)、`findings.test.js`(補行號、重試到成功、重試耗盡保留檔名,及誤報裁決/排除邊界)、`comments.test.js`(新舊統計+舊問題不行內標註)。 - `README.md`:新增設計第 15 點。 ## 風險與注意事項 - 補行號會對「缺行號的新問題」各多打數次 LLM 呼叫(上限 3 次/條),token 成本略增;這是為了確保問題能被行內標註的取捨。 - `node --test app/*.test.js` 全數通過。 - 本 PR 以 `ai-review-resolve/20260623-110950` 為 base(stacked 子 PR),合併後隨母分支進入 PR #42 → develop。
jiantw83 added 4 commits 2026-06-23 07:37:13 +00:00
Owner

🤖 AI Code Review 團隊

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

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

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

AI Code Review 統計

類型 🔴 嚴重 🟡 警告 🔵 建議 無法標示
新問題 0 筆 1 筆 0 筆 0 筆
舊問題 0 筆 0 筆 0 筆 0 筆

🤖 AI 助理使用量

本次審查(opencode / gemini-2.5-flash,共 8 次呼叫)

提示 token 回應 token 合計
62,904 3,946 118,269

剩餘可用

剩餘可用:無法計算百分比(自架服務,無帳號額度概念)

## AI Code Review 統計 | 類型 | 🔴 嚴重 | 🟡 警告 | 🔵 建議 | ⚪ 無法標示 | | --- | --- | --- | --- | --- | | 新問題 | 0 筆 | 1 筆 | 0 筆 | 0 筆 | | 舊問題 | 0 筆 | 0 筆 | 0 筆 | 0 筆 | ## 🤖 AI 助理使用量 **本次審查**(opencode / gemini-2.5-flash,共 8 次呼叫) | 提示 token | 回應 token | 合計 | | --- | --- | --- | | 62,904 | 3,946 | 118,269 | **剩餘可用** 剩餘可用:無法計算百分比(自架服務,無帳號額度概念)
@@ -228,0 +280,4 @@
assert.equal(findings[0].location, 'app/y.js'); // 仍保留檔名
assert.equal(n, 3); // 嘗試 3 次後放棄
});
Owner

嚴重等級🟡 警告
審查員:Maya
問題:在測試 resolveMissingLineNumbers 時,僅測試了 chatFn 成功回傳有效或無效行號的情況,但未測試 chatFn 拋出例外(Exception)的失敗情境。
建議:補上 chatFn throw error 的測試案例,驗證該函數是否能妥善處理例外並正確記錄警告資訊,而非讓整個執行流程中斷。

**嚴重等級**:🟡 警告 **審查員**:Maya **問題**:在測試 `resolveMissingLineNumbers` 時,僅測試了 `chatFn` 成功回傳有效或無效行號的情況,但未測試 `chatFn` 拋出例外(Exception)的失敗情境。 **建議**:補上 `chatFn` throw error 的測試案例,驗證該函數是否能妥善處理例外並正確記錄警告資訊,而非讓整個執行流程中斷。
admin added 1 commit 2026-06-23 07:37:50 +00:00
chore: update ai-review findings [ai-review-bot][success]
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Successful in 4s
d3dcb36cbd
jiantw83 merged commit 48b6f36b3d into ai-review-resolve/20260623-110950 2026-06-23 07:40:30 +00:00
jiantw83 deleted branch ai-review-resolve/20260623-153635 2026-06-23 07:40:30 +00:00
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#44