feat(ai-code-review): 建問題模式導向 issue,並整併流程調整、文件與 CI #27

Closed
opened 2026-07-21 06:27:42 +00:00 by admin · 13 comments
Owner

變更摘要

本分支持續處理 AI Code Review findings,最新推送新增以下修正:

  • 強化 resolveMergeBase / commitAndPushFindings 的分支 ref 驗證,拒絕空值、路徑穿越與不合法 git branch 名稱。
  • 調整 pushWithCredential,以 Gitea server origin 建立 extraheader scope,並驗證 push remote 與 server origin 相符。
  • 調整 AI CLI 失敗診斷:預設只輸出 exit code / signal / timeout,不再把 stderr/stdout 片段寫入長期 CI log;debug 模式才輸出遮罩後片段。
  • 修正 Authorization: Bearer ... 遮罩規則,避免只遮到 Bearer 而留下 token 本體。
  • 建問題模式 issue 留言改為批次送出,降低多筆 findings 時的 API round-trip 等待。
  • 修正 issueFindingComment JSDoc,明確涵蓋嚴重、警告與建議的共用 issue 留言模板。
  • 新增 node --test 測試腳本與 Gitea / gitrepo / review 契約測試。
  • 回寫 findings wrapper:本輪移除 29 筆已解決或已過時 findings,剩餘 40 筆皆為警告/建議,保留後續追蹤。

影響範圍

  • src/lib/gitrepo.js:ref 安全檢查、push 認證 scope 防護。
  • src/lib/review.js:AI CLI 失敗診斷政策、遮罩規則、issue findings 留言批次發布。
  • src/index.js:建問題模式情境留言批次沖刷。
  • src/lib/templates.js:issue finding 留言模板文件對齊。
  • test/*.test.js / package.json:新增零相依 Node 測試。
  • .gitea/ai-review/findings/*.json:移除本輪已處理 findings。

驗證

  • npm test 通過:8 tests / 0 failed。

風險與注意事項

  • 建問題模式多則 issue 留言現在並行送出;若 Gitea 依完成時間排序,留言顯示順序可能不再完全等同送出陣列順序。
  • 剩餘 findings 未在本輪硬改,包含 README 深連結、手動時間戳、完整主流程測試與若干命名/文件維護性問題。

本問題由 AI Code Review 依 PR #6 的審查結果自動建立,問題明細見下方留言。

<!-- ai-code-review --> ## 變更摘要 本分支持續處理 AI Code Review findings,最新推送新增以下修正: - 強化 `resolveMergeBase` / `commitAndPushFindings` 的分支 ref 驗證,拒絕空值、路徑穿越與不合法 git branch 名稱。 - 調整 `pushWithCredential`,以 Gitea server origin 建立 extraheader scope,並驗證 push remote 與 server origin 相符。 - 調整 AI CLI 失敗診斷:預設只輸出 exit code / signal / timeout,不再把 stderr/stdout 片段寫入長期 CI log;debug 模式才輸出遮罩後片段。 - 修正 `Authorization: Bearer ...` 遮罩規則,避免只遮到 `Bearer` 而留下 token 本體。 - 建問題模式 issue 留言改為批次送出,降低多筆 findings 時的 API round-trip 等待。 - 修正 `issueFindingComment` JSDoc,明確涵蓋嚴重、警告與建議的共用 issue 留言模板。 - 新增 `node --test` 測試腳本與 Gitea / gitrepo / review 契約測試。 - 回寫 findings wrapper:本輪移除 29 筆已解決或已過時 findings,剩餘 40 筆皆為警告/建議,保留後續追蹤。 ## 影響範圍 - `src/lib/gitrepo.js`:ref 安全檢查、push 認證 scope 防護。 - `src/lib/review.js`:AI CLI 失敗診斷政策、遮罩規則、issue findings 留言批次發布。 - `src/index.js`:建問題模式情境留言批次沖刷。 - `src/lib/templates.js`:issue finding 留言模板文件對齊。 - `test/*.test.js` / `package.json`:新增零相依 Node 測試。 - `.gitea/ai-review/findings/*.json`:移除本輪已處理 findings。 ## 驗證 - `npm test` 通過:8 tests / 0 failed。 ## 風險與注意事項 - 建問題模式多則 issue 留言現在並行送出;若 Gitea 依完成時間排序,留言顯示順序可能不再完全等同送出陣列順序。 - 剩餘 findings 未在本輪硬改,包含 README 深連結、手動時間戳、完整主流程測試與若干命名/文件維護性問題。 --- > 本問題由 AI Code Review 依 PR #6 的審查結果自動建立,問題明細見下方留言。
Author
Owner

🤖 AI Code Review|審查工具

項目 內容
工具 codex
版本 codex-cli 0.144.6
模型 gpt-5.5
審查 commit 9e7f8a2a0a807c26e12e9bf0381e7decfb9e5568
Run Job #63
flowchart LR
    A[整理 git diff] --> B[⚔️ 攻擊方找問題]
    B --> C[🛡️ 防守方裁決]
    C --> D[保存 findings]
    D --> E[留言到 PR]
<!-- ai-code-review --> ## 🤖 AI Code Review|審查工具 | 項目 | 內容 | | --- | --- | | 工具 | `codex` | | 版本 | `codex-cli 0.144.6` | | 模型 | `gpt-5.5` | | 審查 commit | `9e7f8a2a0a807c26e12e9bf0381e7decfb9e5568` | | Run Job | [#63](https://gitea.jsc.idv.tw/node-actions/ai-code-review/actions/runs/1632) | ```mermaid flowchart LR A[整理 git diff] --> B[⚔️ 攻擊方找問題] B --> C[🛡️ 防守方裁決] C --> D[保存 findings] D --> E[留言到 PR] ```
Author
Owner

📋 變更摘要(送審 git diff)

檔案 用途 git diff 長度 最後更新時間
action.yml 定義 Action 介面與執行入口 88 行/4025 字元 2026/07/20 17:24:18
package.json 管理套件資訊與測試腳本 15 行/417 字元 2026/07/21 13:46:43
readme.md 說明專案用法與審查流程 276 行/23829 字元(過長截斷送審) 2026/07/20 16:01:05
src/index.js 編排 AI 審查主流程 378 行/17044 字元(過長截斷送審) 2026/07/21 14:24:04
src/lib/agents.js 偵測並執行 AI CLI 工具 14 行/503 字元 2026/07/20 09:46:12
src/lib/context.js 載入 workflow 執行環境脈絡 15 行/769 字元 2026/07/20 17:24:18
src/lib/diagnostics.js 產生安全的失敗診斷摘要 78 行/2860 字元 2026/07/21 14:24:04
src/lib/gitea.js 封裝 Gitea API 操作 130 行/5744 字元 2026/07/20 18:04:23
src/lib/gitrepo.js 封裝 Git 差異與推送操作 276 行/11234 字元 2026/07/21 13:46:39
src/lib/review.js 處理審查資料與結果彙整 543 行/23201 字元(過長截斷送審) 2026/07/21 14:24:04
src/lib/roles.js 載入並分類審查角色 14 行/586 字元 2026/07/20 09:46:12
src/lib/templates.js 產生 PR 留言 Markdown 模板 165 行/5974 字元 2026/07/21 13:46:39
test/gitea.test.js 測試 Gitea API 封裝行為 80 行/2208 字元 2026/07/21 13:46:43
test/gitrepo.test.js 測試 Git 分支安全驗證 31 行/836 字元 2026/07/21 13:46:43
test/review.test.js 測試審查與診斷邏輯 106 行/3417 字元 2026/07/21 14:24:10

共 15 個檔案納入審查;另有 10 個檔案依 .reviewignore 排除。

<!-- ai-code-review --> ## 📋 變更摘要(送審 git diff) | 檔案 | 用途 | git diff 長度 | 最後更新時間 | | --- | --- | --- | --- | | `action.yml` | 定義 Action 介面與執行入口 | 88 行/4025 字元 | 2026/07/20 17:24:18 | | `package.json` | 管理套件資訊與測試腳本 | 15 行/417 字元 | 2026/07/21 13:46:43 | | `readme.md` | 說明專案用法與審查流程 | 276 行/23829 字元(過長截斷送審) | 2026/07/20 16:01:05 | | `src/index.js` | 編排 AI 審查主流程 | 378 行/17044 字元(過長截斷送審) | 2026/07/21 14:24:04 | | `src/lib/agents.js` | 偵測並執行 AI CLI 工具 | 14 行/503 字元 | 2026/07/20 09:46:12 | | `src/lib/context.js` | 載入 workflow 執行環境脈絡 | 15 行/769 字元 | 2026/07/20 17:24:18 | | `src/lib/diagnostics.js` | 產生安全的失敗診斷摘要 | 78 行/2860 字元 | 2026/07/21 14:24:04 | | `src/lib/gitea.js` | 封裝 Gitea API 操作 | 130 行/5744 字元 | 2026/07/20 18:04:23 | | `src/lib/gitrepo.js` | 封裝 Git 差異與推送操作 | 276 行/11234 字元 | 2026/07/21 13:46:39 | | `src/lib/review.js` | 處理審查資料與結果彙整 | 543 行/23201 字元(過長截斷送審) | 2026/07/21 14:24:04 | | `src/lib/roles.js` | 載入並分類審查角色 | 14 行/586 字元 | 2026/07/20 09:46:12 | | `src/lib/templates.js` | 產生 PR 留言 Markdown 模板 | 165 行/5974 字元 | 2026/07/21 13:46:39 | | `test/gitea.test.js` | 測試 Gitea API 封裝行為 | 80 行/2208 字元 | 2026/07/21 13:46:43 | | `test/gitrepo.test.js` | 測試 Git 分支安全驗證 | 31 行/836 字元 | 2026/07/21 13:46:43 | | `test/review.test.js` | 測試審查與診斷邏輯 | 106 行/3417 字元 | 2026/07/21 14:24:10 | > 共 15 個檔案納入審查;另有 10 個檔案依 `.reviewignore` 排除。
Author
Owner

⚔️ 攻擊方登場

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

🛡️ 防守方登場

角色 面向 個性
🛡️ Paladin 裁決(verdict) 沉穩公正、就事論事,不護短也不冤枉,只依排除事項與原始碼脈絡裁定問題成立與否
<!-- ai-code-review --> ## 🛡️ 防守方登場 | 角色 | 面向 | 個性 | | --- | --- | --- | | 🛡️ **Paladin** | 裁決(verdict) | 沉穩公正、就事論事,不護短也不冤枉,只依排除事項與原始碼脈絡裁定問題成立與否 |
Author
Owner

🔴 嚴重|🔮 Mage

位置src/index.js 第 149–153 行

問題描述

這個變更把「本輪審查」改成即使有嚴重問題也回傳 0,並假設後續由 [ai-review-bot][failure] 結果 commit 觸發下一輪 CI 再失敗。最小重現:workflow 仍依 action.yml 常見用法傳入自動 token(或任一不會觸發 synchronize CI 的 token)→ AI 找到 1 條嚴重問題 → 本輪成功建立留言與 push 結果 commit,但該 push 不觸發下一輪 → 沒有任何檢查讀到 [failure] commit,PR 最終呈現通過。這是未驗證的外部時序假設;嚴重 finding 會被靜默放行。

修改建議

不要讓失敗判定完全依賴下一輪 CI。若 severe.length > 0,本輪在完成留言與結果落地後仍應回傳 1;或至少提供明確 input 控制 direct-fail,並在無法驗證 token 會觸發 CI 時預設直接 fail。

<!-- ai-code-review --> ### 🔴 嚴重|🔮 Mage **位置**:`src/index.js` 第 149–153 行 **問題描述** 這個變更把「本輪審查」改成即使有嚴重問題也回傳 0,並假設後續由 `[ai-review-bot][failure]` 結果 commit 觸發下一輪 CI 再失敗。最小重現:workflow 仍依 action.yml 常見用法傳入自動 token(或任一不會觸發 synchronize CI 的 token)→ AI 找到 1 條嚴重問題 → 本輪成功建立留言與 push 結果 commit,但該 push 不觸發下一輪 → 沒有任何檢查讀到 `[failure]` commit,PR 最終呈現通過。這是未驗證的外部時序假設;嚴重 finding 會被靜默放行。 **修改建議** 不要讓失敗判定完全依賴下一輪 CI。若 `severe.length > 0`,本輪在完成留言與結果落地後仍應回傳 1;或至少提供明確 input 控制 direct-fail,並在無法驗證 token 會觸發 CI 時預設直接 fail。
Author
Owner

🟠 警告|🔮 Mage

位置src/lib/review.js 第 707–718 行

問題描述

postOthersToIssue 以並行方式送出多則 issue 留言時,issue 上的實際留言順序取決於 API 回應與資料庫寫入完成順序,不保證等於已排序的 findings 順序。最小重現:兩條建議分別位於 a.js:10a.js:20,第二個 API 較快完成,issue 會先出現第 20 行問題,再出現第 10 行問題;使用者逐檔逐行處理時順序會錯亂。

修改建議

若 issue 留言順序是介面契約,逐則 await gitea.createCommentOnIssue(...) 發送;若要保留並行,需在每則留言標題加入穩定序號,例如 2/5,讓非同步完成不破壞閱讀順序。

<!-- ai-code-review --> ### 🟠 警告|🔮 Mage **位置**:`src/lib/review.js` 第 707–718 行 **問題描述** `postOthersToIssue` 以並行方式送出多則 issue 留言時,issue 上的實際留言順序取決於 API 回應與資料庫寫入完成順序,不保證等於已排序的 findings 順序。最小重現:兩條建議分別位於 `a.js:10` 與 `a.js:20`,第二個 API 較快完成,issue 會先出現第 20 行問題,再出現第 10 行問題;使用者逐檔逐行處理時順序會錯亂。 **修改建議** 若 issue 留言順序是介面契約,逐則 `await gitea.createCommentOnIssue(...)` 發送;若要保留並行,需在每則留言標題加入穩定序號,例如 `2/5`,讓非同步完成不破壞閱讀順序。
Author
Owner

🔵 建議|🎼 Bard

位置action.yml 第 22–24 行

問題描述

manifest 的註解忽然奏起一整段實作細節:PAT、CI 觸發、主程式步驟 1 全擠在 input 說明旁,和同檔其他「介面用途」型註解的節奏不一致。讀者只是想知道 token 該填什麼,卻被迫聽完流程旁白。

修改建議

把 action.yml 留給介面契約;細節移到 README 或主流程文件。此處可濃縮成「建議使用可觸發 CI 的 PAT」即可。

建議寫法

# 建議傳入能觸發 CI 的 PAT;自動 token 推送結果 commit 時可能不會再觸發 workflow。
<!-- ai-code-review --> ### 🔵 建議|🎼 Bard **位置**:`action.yml` 第 22–24 行 **問題描述** manifest 的註解忽然奏起一整段實作細節:PAT、CI 觸發、主程式步驟 1 全擠在 input 說明旁,和同檔其他「介面用途」型註解的節奏不一致。讀者只是想知道 token 該填什麼,卻被迫聽完流程旁白。 **修改建議** 把 action.yml 留給介面契約;細節移到 README 或主流程文件。此處可濃縮成「建議使用可觸發 CI 的 PAT」即可。 **建議寫法** ``` # 建議傳入能觸發 CI 的 PAT;自動 token 推送結果 commit 時可能不會再觸發 workflow。 ```
Author
Owner

🔵 建議|🎼 Bard

位置readme.md 第 40–47 行

問題描述

mermaid 圖的節點 ID 旋律走岔了:畫面標示是 3→4→5→...→8→2→9,但節點名稱卻用 S3、S4、S2 來回跳。即使流程語意想表達「步驟 2 延後」,節點 ID 與視覺順序不一致,會讓維護者在對照圖與文字時多繞一圈。

修改建議

讓節點 ID 維持閱讀順序,將真正的流程步驟放在節點文字裡。例如用 N2、N3 或 A、B 這類中性 ID,避免 S2 看起來像應該排在 S1 後面。

建議寫法

S1 -->|未命中| N3[3 偵測 AI 工具並留言]
    N3 --> N4[4 讀 .reviewignore 整理 diff 並留言]
    N4 --> N5[5 攻擊方登場留言]
    N5 --> N6[6 攻擊方 sub agent 並行找問題]
    N6 --> N7[7 防守方登場留言]
    N7 --> N8[8 防守方裁決 → 保存 findings + 誤判回寫 exclusions.json]
    N8 --> N2[2 延後將舊留言標記解決(成功產生結果後才執行)]
    N2 --> S9[9 嚴重問題逐條掛行留言]
<!-- ai-code-review --> ### 🔵 建議|🎼 Bard **位置**:`readme.md` 第 40–47 行 **問題描述** mermaid 圖的節點 ID 旋律走岔了:畫面標示是 3→4→5→...→8→2→9,但節點名稱卻用 S3、S4、S2 來回跳。即使流程語意想表達「步驟 2 延後」,節點 ID 與視覺順序不一致,會讓維護者在對照圖與文字時多繞一圈。 **修改建議** 讓節點 ID 維持閱讀順序,將真正的流程步驟放在節點文字裡。例如用 N2、N3 或 A、B 這類中性 ID,避免 S2 看起來像應該排在 S1 後面。 **建議寫法** ``` S1 -->|未命中| N3[3 偵測 AI 工具並留言] N3 --> N4[4 讀 .reviewignore 整理 diff 並留言] N4 --> N5[5 攻擊方登場留言] N5 --> N6[6 攻擊方 sub agent 並行找問題] N6 --> N7[7 防守方登場留言] N7 --> N8[8 防守方裁決 → 保存 findings + 誤判回寫 exclusions.json] N8 --> N2[2 延後將舊留言標記解決(成功產生結果後才執行)] N2 --> S9[9 嚴重問題逐條掛行留言] ```
Author
Owner

🔵 建議|🎼 Bard

位置src/index.js 第 122–139 行

問題描述

main() 的 JSDoc 從函式說明變成流程章回。步驟、例外模式、issue 建立時機、相依關係、commit 規則全塞在同一段,和程式下方已存在的分段註解重複,讀起來像同一旋律被兩把琴同時彈奏。

修改建議

JSDoc 保留函式職責、回傳值與關鍵模式差異即可;完整 10 步驟流程交給 README 或下方區塊註解。這會讓 main() 開頭更快進入正題。

<!-- ai-code-review --> ### 🔵 建議|🎼 Bard **位置**:`src/index.js` 第 122–139 行 **問題描述** `main()` 的 JSDoc 從函式說明變成流程章回。步驟、例外模式、issue 建立時機、相依關係、commit 規則全塞在同一段,和程式下方已存在的分段註解重複,讀起來像同一旋律被兩把琴同時彈奏。 **修改建議** JSDoc 保留函式職責、回傳值與關鍵模式差異即可;完整 10 步驟流程交給 README 或下方區塊註解。這會讓 `main()` 開頭更快進入正題。
Author
Owner

🔵 建議|🎼 Bard

位置src/lib/diagnostics.js 第 45–47 行

問題描述

res 這個參數名太短促,和檔內其他 textpartsstderrstdout 這些直白命名相比顯得含糊。診斷工具本該讓人少猜一點,這裡卻讓讀者先猜它是哪一種 result。

修改建議

改用 resultagentResult,讓函式簽名本身就說清楚資料來源。

建議寫法

function agentFailureDetail(agentResult) {
  const parts = [];
  const err = agentResult && agentResult.error;
<!-- ai-code-review --> ### 🔵 建議|🎼 Bard **位置**:`src/lib/diagnostics.js` 第 45–47 行 **問題描述** `res` 這個參數名太短促,和檔內其他 `text`、`parts`、`stderr`、`stdout` 這些直白命名相比顯得含糊。診斷工具本該讓人少猜一點,這裡卻讓讀者先猜它是哪一種 result。 **修改建議** 改用 `result` 或 `agentResult`,讓函式簽名本身就說清楚資料來源。 **建議寫法** ``` function agentFailureDetail(agentResult) { const parts = []; const err = agentResult && agentResult.error; ```
Author
Owner

🔵 建議|🎼 Bard

位置test/gitea.test.js 第 8–8 行

問題描述

fn 是一個太倉促的縮寫,放在測試輔助函式裡尤其刺耳;同一行已有 handler 這種完整命名,fn 顯得像漏拍的音符。

修改建議

改成 callbackrun,讓呼叫意圖更清楚,也和此專案偏完整語意的命名風格一致。

建議寫法

function withFetchStub(handler, callback) {
<!-- ai-code-review --> ### 🔵 建議|🎼 Bard **位置**:`test/gitea.test.js` 第 8–8 行 **問題描述** `fn` 是一個太倉促的縮寫,放在測試輔助函式裡尤其刺耳;同一行已有 `handler` 這種完整命名,`fn` 顯得像漏拍的音符。 **修改建議** 改成 `callback` 或 `run`,讓呼叫意圖更清楚,也和此專案偏完整語意的命名風格一致。 **建議寫法** ``` function withFetchStub(handler, callback) { ```
Author
Owner

🔴 嚴重|🔮 Mage

位置src/index.js 第 149–153 行

問題描述

這個變更把「本輪審查」改成即使有嚴重問題也回傳 0,並假設後續由 [ai-review-bot][failure] 結果 commit 觸發下一輪 CI 再失敗。最小重現:workflow 仍依 action.yml 常見用法傳入自動 token(或任一不會觸發 synchronize CI 的 token)→ AI 找到 1 條嚴重問題 → 本輪成功建立留言與 push 結果 commit,但該 push 不觸發下一輪 → 沒有任何檢查讀到 [failure] commit,PR 最終呈現通過。這是未驗證的外部時序假設;嚴重 finding 會被靜默放行。

修改建議

不要讓失敗判定完全依賴下一輪 CI。若 severe.length > 0,本輪在完成留言與結果落地後仍應回傳 1;或至少提供明確 input 控制 direct-fail,並在無法驗證 token 會觸發 CI 時預設直接 fail。

這是不是設計錯誤,就是希望由下一輪判斷 failure 才讓工作流失敗,因此把這個問題排除

> <!-- ai-code-review --> > ### 🔴 嚴重|🔮 Mage > > **位置**:`src/index.js` 第 149–153 行 > > **問題描述** > > 這個變更把「本輪審查」改成即使有嚴重問題也回傳 0,並假設後續由 `[ai-review-bot][failure]` 結果 commit 觸發下一輪 CI 再失敗。最小重現:workflow 仍依 action.yml 常見用法傳入自動 token(或任一不會觸發 synchronize CI 的 token)→ AI 找到 1 條嚴重問題 → 本輪成功建立留言與 push 結果 commit,但該 push 不觸發下一輪 → 沒有任何檢查讀到 `[failure]` commit,PR 最終呈現通過。這是未驗證的外部時序假設;嚴重 finding 會被靜默放行。 > > **修改建議** > > 不要讓失敗判定完全依賴下一輪 CI。若 `severe.length > 0`,本輪在完成留言與結果落地後仍應回傳 1;或至少提供明確 input 控制 direct-fail,並在無法驗證 token 會觸發 CI 時預設直接 fail。 這是不是設計錯誤,就是希望由下一輪判斷 failure 才讓工作流失敗,因此把這個問題排除
Member

本輪 code-review-resolve 處理結果

已處理本 issue 留言中的 findings:

類型 處理
嚴重設計爭議 依留言確認為預期設計,已從本輪 wrapper 移除並沿用 exclusions 紀錄
issue 留言順序 postSevereToIssue / postOthersToIssue 改為依序送出,測試鎖定同時只送一則
manifest 註解 收斂 action.yml token 註解,避免把主流程細節塞在 input 說明
README 流程圖 mermaid 節點改用中性 N*,避免視覺順序與節點 ID 打架
main JSDoc 縮短為流程職責與模式差異,避免和下方分段註解重複
命名 issueBufferpendingIssueCommentBodiesissuetrackingIssueissueLinkCommentprIssueLinkComment、dependency 參數改為 blocked/blocking issue
測試命名 fn 改為 callback

驗證:npm test 通過(10 tests / 0 failed)。

本輪 findings wrapper 已回寫,.gitea/ai-review/findings/2026-07-21-14:27:42.json 目前保留 0 筆 finding。

## 本輪 code-review-resolve 處理結果 已處理本 issue 留言中的 findings: | 類型 | 處理 | | --- | --- | | 嚴重設計爭議 | 依留言確認為預期設計,已從本輪 wrapper 移除並沿用 exclusions 紀錄 | | issue 留言順序 | `postSevereToIssue` / `postOthersToIssue` 改為依序送出,測試鎖定同時只送一則 | | manifest 註解 | 收斂 `action.yml` token 註解,避免把主流程細節塞在 input 說明 | | README 流程圖 | mermaid 節點改用中性 `N*`,避免視覺順序與節點 ID 打架 | | main JSDoc | 縮短為流程職責與模式差異,避免和下方分段註解重複 | | 命名 | `issueBuffer` → `pendingIssueCommentBodies`、`issue` → `trackingIssue`、`issueLinkComment` → `prIssueLinkComment`、dependency 參數改為 blocked/blocking issue | | 測試命名 | `fn` 改為 `callback` | 驗證:`npm test` 通過(10 tests / 0 failed)。 本輪 findings wrapper 已回寫,`.gitea/ai-review/findings/2026-07-21-14:27:42.json` 目前保留 0 筆 finding。
Sign in to join this conversation.
No labels
2 Participants
Notifications
Due Date
No due date set.
Reference: node-actions/ai-code-review#27