From 4ed0bf11a234122dda0c12aebc4054c308c8e044 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 31 Aug 2026 13:35:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(check-requires):=20=E5=88=86=E9=96=8B?= =?UTF-8?q?=E7=9B=B8=E4=BE=9D=E4=B8=8D=E7=AC=A6=E8=88=87=E5=88=A4=E4=B8=8D?= =?UTF-8?q?=E5=87=BA=E7=B5=90=E8=AB=96=E7=9A=84=E7=B5=90=E6=9D=9F=E7=A2=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit What:把原本的結束碼 1 拆成兩個。1 只代表相依版本不符或缺相依 plugin。新增 4 代表判不出結論,成因是 manifest 不存在、不是有效 JSON、或缺 python3。這三種成因的輸出從 status=blocked 改成 status=unknown。 Why:兩種成因共用同一個結束碼,呼叫端就只能用同一句話講兩件事。環境壞掉會被講成版本落後。操作者照著去補版本,補到最後也碰不到真正的問題點。 How:找不到 manifest、找不到 python3、JSON 解析失敗三處改回傳 4,狀態字串一併改成 unknown。檔頭的輸出格式表與結束碼表跟著改寫,並寫下 1 與 4 分開的理由。 Who:相依檢查結論分流。 --- tools/check-requires.sh | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/tools/check-requires.sh b/tools/check-requires.sh index 6a264ff..1a40671 100755 --- a/tools/check-requires.sh +++ b/tools/check-requires.sh @@ -4,11 +4,17 @@ # check-requires.sh {claude|codex|copilot|antigravity|kiro} {manifest} # 輸出(單行,可供程式判讀): # status=ok reason={沒有宣告相依版本|相依版本符合:...} -# status=blocked reason={缺哪一個 plugin、差哪一版,或 manifest 讀不到} +# status=blocked reason={缺哪一個 plugin、差哪一版} +# status=unknown reason={manifest 讀不到、不是有效 JSON,或缺 python3} # 結束碼:0=通過(沒有宣告相依,或全部符合) -# 1=擋下(相依版本不符、缺相依 plugin、manifest 不存在或不是有效 JSON、缺 python3) +# 1=相依版本不符或缺相依 plugin # 2=用法錯誤(參數個數不對,或 CLI 代號不在五個之內) -# deploy.sh update 在每個 domain 更新前呼叫一次;擋下就跳過該 domain,不更新到一半才失敗。 +# 4=判不出結論(manifest 不存在、不是有效 JSON、缺 python3) +# 1 與 4 分開的理由:兩者都不是「通過」,但成因完全不同。混成同一個碼,呼叫端就只能 +# 用同一句話講兩件事,環境壞掉會被說成版本落後,操作者照著去補版本永遠補不到問題點。 +# deploy.sh update 在每個 domain 更新前呼叫一次,但擋下不代表跳過:deploy.sh 照樣更新, +# 只印一行提醒說缺哪一版。跳過會讓落後的 domain 永遠更新不到,形成死鎖。 +# 真正的阻擋在 jsc-hooks 的 version-guard.sh,技能被叫用時才擋。 set -u usage() { @@ -26,14 +32,14 @@ case "$CLI" in esac [ -f "$MANIFEST" ] || { - printf 'status=blocked reason=找不到 manifest:%s\n' "$MANIFEST" - exit 1 + printf 'status=unknown reason=找不到 manifest:%s\n' "$MANIFEST" + exit 4 } command -v python3 >/dev/null 2>&1 || { # 直接讓 shell 回 127 的話,呼叫端會看到一個沒宣告過的結束碼,也讀不到原因。 - printf 'status=blocked reason=找不到 python3,無法解析 manifest:%s\n' "$MANIFEST" - exit 1 + printf 'status=unknown reason=找不到 python3,無法解析 manifest:%s\n' "$MANIFEST" + exit 4 } JSC_HOME_DIR="${JSC_HOME:-$HOME/.jsc}" @@ -53,8 +59,8 @@ try: with open(manifest, encoding="utf-8") as fh: data = json.load(fh) except Exception as exc: - print(f"status=blocked reason=manifest 不是有效 JSON:{manifest}:{exc}") - sys.exit(1) + print(f"status=unknown reason=manifest 不是有效 JSON:{manifest}:{exc}") + sys.exit(4) requires = ((data.get("jsc") or {}).get("requires") or {}) if not requires: