[ { "location": "action.yml:94", "role": "Assassin", "original_finding": "儘量避免將敏感 Token 直接透過環境變數傳遞至 Shell 命令。若必須傳遞,請確保該 Runner 的環境配置已設定遮蔽機制,或使用 GitHub Actions 內建的 `secrets` 處理方式(如 `github.token` 或預先設定好的 Secret Context)來存取,而非直接由外部輸入。", "reason": "Composite action 無法直接讀取呼叫端 secrets context,必須由 workflow 以 input/env 傳入;此處 token 只在 runner 內以 secret 值傳給 curl,且未輸出到 log,屬 CI secret 傳遞慣用模式。" }, { "location": "action.yml:78", "role": "Mage", "original_finding": "建議在 `printf` 使用變數時,確保輸入內容已適當轉義,或者考慮使用將變數內容寫入檔案並透過 `cat` 讀取的方式,避免直接在 `printf` 字串中展開變數。", "reason": "此處使用 printf 的固定格式字串與 %s 參數,且變數皆以雙引號包住;issue/comment 內容中的雙引號不會重新進入 shell 語法解析,因此不會造成 shell 注入或解析錯誤。" }, { "location": "action.yml:85", "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 支援;安全與相容性優先於移除單一外部程序。" } ]