From 1dc97f0bd6ac3b94488b876b774d588f9dfb8a80 Mon Sep 17 00:00:00 2001 From: richblack Date: Thu, 20 Aug 2026 19:46:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(hooks):=20=E8=A3=9C=E4=B8=8A=20leo21c-write?= =?UTF-8?q?-guard.sh=20=E7=AC=AC=E4=BA=8C=E3=80=81=E4=B8=89=E6=AC=A1?= =?UTF-8?q?=E8=AA=A4=E6=94=94=E7=9A=84=E4=BF=AE=E6=B3=95=EF=BC=88InkStoneC?= =?UTF-8?q?o=20=E5=8F=8D=E5=90=91=E7=A7=BB=E6=A4=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit InkStoneCo/.claude/hooks/leo21c-write-guard.sh 2026-08-20 當天已修過兩次 誤攔(bc8a529/5e62d28),但沒人把修法帶回 ISEP——ISEP 那份還是上線當天 的舊版,會誤擋「git commit 訊息提到 leo21c」「Gitea PATCH 內文提到 leo21c」這類完全碰不到 CF 帳號的動作。 發現於 inkstone/InkStoneCo#57/inkstone/ISEP#32「同一件事只留一份」: 要把 InkStoneCo 本機的閘收斂成只剩 ISEP 這份之前,先確認 ISEP 沒有落後 ——結果這支剛好是唯一反向的(其餘 4 支已修過的閘 ISEP 都領先)。 判準改成只認「這個指令會不會真的寫到那台」: ① 寫入請求打到 *.leo21c.workers.dev(POST/PUT/PATCH/DELETE/--data/-d/trigger) ② 用它的 CF 帳號 id 跑 wrangler/acr 其餘一律放行,不管文字裡提到什麼。 實測 6/6(4 該放行/2 該擋,含這次要修的兩個誤攔案例):見 PR 說明。 Co-Authored-By: Claude Sonnet 5 --- hooks/leo21c-write-guard.sh | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/hooks/leo21c-write-guard.sh b/hooks/leo21c-write-guard.sh index 8d74d53..55a7f97 100755 --- a/hooks/leo21c-write-guard.sh +++ b/hooks/leo21c-write-guard.sh @@ -46,16 +46,34 @@ if printf '%s' "$cmd" | grep -q 'leo21c-write-guard'; then exit 0 fi -# leo21c 的三個座標(帳號 id/namespace/worker 網域) -if ! printf '%s' "$cmd" | grep -qE 'leo21c|51a01bfa2665bd7bc3fd080dc40cf3e1|bfezv28v'; then - exit 0 +# ── 判準:這個指令會不會真的把東西寫到那台?──────────────────────────────── +# 🔴 2026-08-20 第三次誤攔後收斂(前兩次:git commit 訊息、修閘自己)。 +# 舊判準是「文字裡有沒有出現座標」+「有沒有寫入動詞」,於是 +# `curl -X PATCH .../api/v1/repos/inkstone/Arcrun/issues/145 -d '{"state":"closed"}'` +# **只因為票的內文提到那個帳號就被擋**——而那是打 Gitea,跟 CF 一點關係都沒有。 +# ⇒ 只認**兩種真的會寫到那台的形狀**,其餘一律不管文字寫了什麼: +# ① 寫入請求打到 `*.leo21c.workers.dev` +# ② 用它的 CF 帳號 id 去跑 wrangler/acr +# leo 2026-08-17:「紅線寫得越細,命中關鍵字的機率越高 ⇒ 那些閘在懲罰謹慎。」 + +hit=0 + +# ① 寫入請求打到那台 worker +if printf '%s' "$cmd" | grep -qiE 'https?://[^[:space:]"'"'"']*leo21c\.workers\.dev'; then + if printf '%s' "$cmd" | grep -qE -- '-X *(POST|PUT|PATCH|DELETE)|--data|--data-raw|-d[[:space:]]|/trigger'; then + hit=1 + fi fi -# 寫入動作的形狀 -if ! printf '%s' "$cmd" | grep -qE -- '-X *(POST|PUT|PATCH|DELETE)|--data|--data-raw|-d ["'"'"'{]|wrangler +(deploy|publish|kv|d1|secret)|acr +(update|deploy|push)|/trigger|ingest|kbdb_create|kbdb_update'; then - exit 0 +# ② 拿它的 CF 帳號去部署 +if printf '%s' "$cmd" | grep -qE 'CLOUDFLARE_ACCOUNT_ID=51a01bfa2665bd7bc3fd080dc40cf3e1'; then + if printf '%s' "$cmd" | grep -qE 'wrangler|acr |node .*index\.js'; then + hit=1 + fi fi +[ "$hit" = "1" ] || exit 0 + cat >&2 <<'MSG' 🚫 不准寫 leo 的個人帳號 leo21c(leo 2026-08-20 立)