fix(結果回報): 審查本輪不直接 exit 1,失敗只由步驟 1 讀結果 commit 訊息回報
node-actions/template: CI / BUILD (pull_request) Successful in 5s
CI / TEST (Claude) (pull_request) Successful in 29s
CI / TEST (Antigravity) (pull_request) Successful in 56s
CI / TEST (Codex) (pull_request) Successful in 2m59s

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-07-20 17:33:20 +08:00
co-authored by Claude Opus 4.8
parent be72aa0944
commit 3ef8a30291
+14 -5
View File
@@ -143,13 +143,16 @@ function commitFindings({ cwd, ctx, files, result }) {
* 建問題模式只 commit exclusions.json、無檔案可 commit 時略過; * 建問題模式只 commit exclusions.json、無檔案可 commit 時略過;
* commit 訊息帶結果標記(success=無嚴重問題、failure=有嚴重問題)。 * commit 訊息帶結果標記(success=無嚴重問題、failure=有嚴重問題)。
* *
* @returns {Promise<number>} process exit code0=成功(無嚴重問題或無可審查變更、或偵測到 success 標記); * @returns {Promise<number>} process exit code本輪「審查」一律回傳 0(不因嚴重問題直接讓檢查失敗——
* 1=失敗(有嚴重問題、缺 PR 編號/token、找不到 AI 工具、或偵測到 failure 標記)。 * 失敗改由推出的 `[ai-review-bot][failure]` 結果 commit,於下一輪在步驟 1 讀 commit 訊息時回報);
* 回傳 1 僅發生於:步驟 1 偵測到 `[ai-review-bot][failure]` 結果 commit,或前置條件不足
* (缺 PR 編號/token、找不到 AI 工具)等無法進行審查的情況。
* @remarks * @remarks
* 使用情境:由本檔尾端的頂層呼叫端執行 —— `main().then((code) => process.exit(code))` * 使用情境:由本檔尾端的頂層呼叫端執行 —— `main().then((code) => process.exit(code))`
* 非預期例外由頂層 `catch` 記 ERR log 後以 exit code 1 收場,且刻意不 commit 結果標記, * 非預期例外由頂層 `catch` 記 ERR log 後以 exit code 1 收場,且刻意不 commit 結果標記,
* 讓下一次 workflow 觸發時重新完整審查。警告+建議等級的問題不影響成敗,只有「嚴重」會使結果為 failure * 讓下一次 workflow 觸發時重新完整審查。警告+建議等級不影響結果標記,只有「嚴重」會使結果 commit
* 建問題模式只改變問題明細的落地方式(issue 留言取代 findings 進版控),不改變成敗判定 * 標記為 failure;而「失敗檢查(exit 1)」只由步驟 1 讀到該 failure 結果 commit 時產生,審查本輪不直接 exit 1
* 建問題模式只改變問題明細的落地方式(issue 留言取代 findings 進版控),不改變上述結果標記判定。
*/ */
async function main() { async function main() {
const ctx = loadContext(); const ctx = loadContext();
@@ -406,7 +409,13 @@ async function main() {
} else { } else {
log('收尾', 'INF', '建問題模式且 exclusions.json 無變更,略過 commit/push。'); log('收尾', 'INF', '建問題模式且 exclusions.json 無變更,略過 commit/push。');
} }
return result === 'success' ? 0 : 1; // 本輪「審查」一律以成功收場、不直接讓檢查失敗;有嚴重問題時已推出 [failure] 結果 commit
// 由它再觸發的下一輪在步驟 1 讀 commit 訊息時才回報失敗(exit 1)。如此失敗檢查落在帶有結果
// 標記的最新 head 上,與合併判定一致。(result 僅用於上方 commit 訊息的結果標記。)
if (result === 'failure') {
log('收尾', 'INF', '本輪有嚴重問題:已標記結果 commit 為 [failure],失敗檢查由下一輪步驟 1 讀 commit 訊息回報。');
}
return 0;
} }
main() main()