From 03857bc7c9f9c550d9c42434635d5b4c451608f6 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Wed, 24 Jun 2026 16:04:57 +0000 Subject: [PATCH] =?UTF-8?q?chore(ai-review=20=E7=8B=80=E6=85=8B):=20?= =?UTF-8?q?=E6=B8=85=E7=90=86=E5=B7=B2=E8=99=95=E7=90=86=20findings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/ai-review/exclusions.json | 24 ++++++++++++ .gitea/ai-review/findings.json | 66 +------------------------------- 2 files changed, 25 insertions(+), 65 deletions(-) diff --git a/.gitea/ai-review/exclusions.json b/.gitea/ai-review/exclusions.json index 2cb2fa1..4c740a0 100644 --- a/.gitea/ai-review/exclusions.json +++ b/.gitea/ai-review/exclusions.json @@ -16,5 +16,29 @@ "role": "Leo", "original_finding": "建議將與 Gitea API 互動的邏輯封裝成一個獨立的 shell script 或另一個獨立的 Action,使此 composite action 的 `runs` 階段更清晰,專注於流程編排而非細節實作。", "reason": "此 action 的核心職責就是產生 AI 回覆並留言到 Gitea issue;目前 inline API 呼叫很短且已包含 URL 驗證、空回覆檢查與 JSON escaping,額外拆成 script/action 對此小型 composite action 並非必要修復。" + }, + { + "location": "action.yml:96", + "role": "Maya", + "original_finding": "應補上測試案例,驗證當 `GITEA_SERVER_URL` 輸入為非預期格式、空白或惡意字串時,系統是否能正確攔截並處理。", + "reason": "目前 action 已以白名單與空值檢查在執行期攔截非預期 Gitea URL;此 repository 沒有既有測試框架,為單一 composite action 額外建立 mock runner 測試超出本次修復範圍。" + }, + { + "location": "action.yml:109", + "role": "Maya", + "original_finding": "建議模擬 `curl` 接收到不同 HTTP 錯誤代碼的情境,驗證 Workflow 是否會正確執行失敗並留下相應錯誤訊息。", + "reason": "curl 已使用 --fail-with-body,非 2xx 會使 workflow 失敗並輸出 API body;此 repository 沒有既有測試框架可模擬 HTTP 狀態碼,新增完整 mock 測試不屬於目前 action 修復的最小範圍。" + }, + { + "location": "action.yml:85", + "role": "Maya", + "original_finding": "建議在測試案例中模擬 `steps.codex` 輸出為空字串,以驗證是否確實會以錯誤狀態結束 Workflow。", + "reason": "空回覆已在 action 內以 [ -z \"$RESPONSE\" ] 明確失敗;此 repository 沒有既有測試框架,無法在不新增大型 mock harness 的情況下驗證 steps.codex output。" + }, + { + "location": "action.yml:80", + "role": "Rogue", + "original_finding": "直接使用 bash 的字串操作功能進行 URL 清理,對於 API 請求,應考慮將所有邏輯合併為單一腳本區塊,避免多次呼叫外部進程(如 `jq`)。建議可以直接利用 curl 的 --json 選項(若版本支援)或更直接的處理方式減少對外部依賴的 fork。", + "reason": "此處保留 jq 是為了正確處理多行與特殊字元的 JSON escaping,避免手寫 JSON 或依賴 runner curl 版本的 --json 支援;安全與相容性優先於移除單一外部程序。" } ] diff --git a/.gitea/ai-review/findings.json b/.gitea/ai-review/findings.json index df8313c..fe51488 100644 --- a/.gitea/ai-review/findings.json +++ b/.gitea/ai-review/findings.json @@ -1,65 +1 @@ -[ - { - "level": "critical", - "role": "Maya", - "location": "action.yml:61", - "problem": "在建立 Prompt 的步驟中,完全沒有針對 `ISSUE_TITLE`、`ISSUE_BODY` 或 `COMMENT_BODY` 為空的情況進行測試或驗證,這可能導致產生的 Prompt 語意不清或格式錯誤。", - "suggestion": "建議加入 bash 檢查,若這些必要的輸入欄位為空,應明確拋出錯誤或提供預設內容,確保 Prompt 產生的結構完整。", - "is_new": true - }, - { - "level": "critical", - "role": "Maya", - "location": "action.yml:96", - "problem": "檢查 Gitea Server URL 是否支援僅依賴於 `case` 比對,缺乏對無效輸入(如惡意網址或錯誤格式)的邊界測試。", - "suggestion": "應補上測試案例,驗證當 `GITEA_SERVER_URL` 輸入為非預期格式、空白或惡意字串時,系統是否能正確攔截並處理。", - "is_new": true - }, - { - "level": "critical", - "role": "Maya", - "location": "action.yml:109", - "problem": "`curl` 執行 API 呼叫時,若 API 回傳非 2xx 狀態碼(例如 401 Unauthorized, 404 Not Found, 403 Forbidden),雖然使用 `--fail-with-body`,但缺乏對應這些錯誤狀態的測試案例以確保流程處理符合預期。", - "suggestion": "建議模擬 `curl` 接收到不同 HTTP 錯誤代碼的情境,驗證 Workflow 是否會正確執行失敗並留下相應錯誤訊息。", - "is_new": true - }, - { - "level": "warning", - "role": "Bard", - "location": "action.yml:58", - "problem": "在建立 Prompt 的步驟中,shell 腳本內混用了多種輸出方式(`printf` 與 `echo`),節奏不統一,且 `printf` 參數過多導致排版顯得瑣碎。", - "suggestion": "建議統一使用 `cat <