From 3ef8a302911c60b9f71024e1f4b60e0d4578b8fd Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 20 Jul 2026 17:33:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E7=B5=90=E6=9E=9C=E5=9B=9E=E5=A0=B1):=20?= =?UTF-8?q?=E5=AF=A9=E6=9F=A5=E6=9C=AC=E8=BC=AA=E4=B8=8D=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=20exit=201=EF=BC=8C=E5=A4=B1=E6=95=97=E5=8F=AA=E7=94=B1?= =?UTF-8?q?=E6=AD=A5=E9=A9=9F=201=20=E8=AE=80=E7=B5=90=E6=9E=9C=20commit?= =?UTF-8?q?=20=E8=A8=8A=E6=81=AF=E5=9B=9E=E5=A0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- src/index.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index 9fe7562..15f2be6 100644 --- a/src/index.js +++ b/src/index.js @@ -143,13 +143,16 @@ function commitFindings({ cwd, ctx, files, result }) { * 建問題模式只 commit exclusions.json、無檔案可 commit 時略過; * commit 訊息帶結果標記(success=無嚴重問題、failure=有嚴重問題)。 * - * @returns {Promise} process exit code:0=成功(無嚴重問題或無可審查變更、或偵測到 success 標記); - * 1=失敗(有嚴重問題、缺 PR 編號/token、找不到 AI 工具、或偵測到 failure 標記)。 + * @returns {Promise} process exit code:本輪「審查」一律回傳 0(不因嚴重問題直接讓檢查失敗—— + * 失敗改由推出的 `[ai-review-bot][failure]` 結果 commit,於下一輪在步驟 1 讀 commit 訊息時回報); + * 回傳 1 僅發生於:步驟 1 偵測到 `[ai-review-bot][failure]` 結果 commit,或前置條件不足 + * (缺 PR 編號/token、找不到 AI 工具)等無法進行審查的情況。 * @remarks * 使用情境:由本檔尾端的頂層呼叫端執行 —— `main().then((code) => process.exit(code))`; * 非預期例外由頂層 `catch` 記 ERR log 後以 exit code 1 收場,且刻意不 commit 結果標記, - * 讓下一次 workflow 觸發時重新完整審查。警告+建議等級的問題不影響成敗,只有「嚴重」會使結果為 failure; - * 建問題模式只改變問題明細的落地方式(issue 留言取代 findings 進版控),不改變成敗判定。 + * 讓下一次 workflow 觸發時重新完整審查。警告+建議等級不影響結果標記,只有「嚴重」會使結果 commit + * 標記為 failure;而「失敗檢查(exit 1)」只由步驟 1 讀到該 failure 結果 commit 時產生,審查本輪不直接 exit 1。 + * 建問題模式只改變問題明細的落地方式(issue 留言取代 findings 進版控),不改變上述結果標記判定。 */ async function main() { const ctx = loadContext(); @@ -406,7 +409,13 @@ async function main() { } else { 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()