v0.2.1:43 支閘的白話盤點、測試手冊、補上兩個被抓到的洞
leo 2026-08-20 問「InkStoneCo#40 加入了嗎?如果是這樣我應該可以白話文看到 hooks 的內容?」
答案是不行——43 支閘沒有任何白話清單。這一版補上。
docs/hooks-inventory.md 43 支逐支一行,按「你會在什麼時候撞到它」分 9 組
抽驗 5 支逐行核對源碼;順帶抓到 3 支有檔案沒註冊
docs/TESTING.md A1-A8 + B1-B5,每格都有「怎麼跑/該看到什麼/什麼算失敗」
scripts/test-*.sh 兩支閘的測試,共 21 條,全過
兩個實撞的洞:
- release-tag-guard 的排除清單是前綴比對,x 整條放行
(A8 那個新 session 抓到的,總管複驗屬實)。改用 #23 驗證過的判準:
關鍵字要在指令位置才算執行。補 3 條複合指令測試,8/8。
⇒ 這是 InkStoneCo#36「包一層就繞過去」的同一個病,發生在同一天新寫的閘上。
- scripts/ticket 寫死只認名叫 gitea 的 remote,在 ISEP(remote 叫 origin)整個跑不起來
⇒「開票前先搜」那道閘在新 repo 等於不存在。改成掃所有指向本站的 remote + 環境變數 fallback。
A8 已通過:新 session 裡 plugin 的閘真的觸發(exit 2、tag 未建立、訊息來自 plugin 路徑)。
文件漂移訂正:plugin.json 與 README 寫 42 支/52 條,實際 43 支/53 條。
兩支新閘補上 #40 §1 要求的三行中文檔頭。
🔴 但仍違反 #40 §3「新規則一律先 warn」——兩支都是 block。理由記在 #40 留言,等 leo 裁。
This commit is contained in:
@@ -34,9 +34,20 @@ except Exception: print("")
|
||||
|
||||
[ -z "$CMD" ] && exit 0
|
||||
|
||||
# ── 先排除不是「打新 tag」的動作 ──────────────────────────────────────
|
||||
# ── 判準:`git tag` 要出現在「指令位置」才算真的要打 tag ──────────────
|
||||
# 🔴 這裡原本用前綴比對排除 sed/cat/grep/echo/ls…(`echo\ *)` 這種),
|
||||
# 2026-08-20 被一個新 session 抓到洞、總管複驗屬實:
|
||||
# echo 開始 && git tag -a v9.9.9 -m test → 整條放行
|
||||
# ls && git tag -a v9.9.9 -m x → 整條放行
|
||||
# 因為前綴是 `echo `/`ls ` 就整條 exit 0,後面串什麼都不看。
|
||||
# ⇒ 就是 inkstone/InkStoneCo#36「守 prod 的閘,包一層腳本就繞過去」的同一個病,
|
||||
# 而且發生在同一天新寫的閘上。
|
||||
# 修法用 #23 已驗證過的判準:**關鍵字要在指令位置才算執行**
|
||||
# (行首、或跟在 ; & | ( && || 之後),只是被別的指令當成文字提到就不算。
|
||||
printf '%s' "$CMD" | grep -qE '(^|[;&|(`]|&&|\|\|)[[:space:]]*git[[:space:]]+tag[[:space:]]' || exit 0
|
||||
|
||||
# 讀取/刪除類的 tag 動作不是「打新 tag」,放行
|
||||
case "$CMD" in
|
||||
sed\ *|cat\ *|grep\ *|head\ *|tail\ *|wc\ *|less\ *|ls\ *|awk\ *|rg\ *|echo\ *) exit 0 ;;
|
||||
*"git tag -d"*|*"git tag --delete"*|*"git tag -l"*|*"git tag --list"*|*"git tag -n"*) exit 0 ;;
|
||||
*" --dry-run"*|*"--dry-run "*) exit 0 ;;
|
||||
esac
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
#!/bin/bash
|
||||
# 管什麼: 用 Gitea API 直接開新票時,要求這一輪有跑過跨 repo 的搜尋(/tmp/.ticket-where-ok,30 分鐘內)。
|
||||
# 為什麼: scripts/ticket 早就強制先搜,但那道閘只擋走正門的人。2026-08-20 總管走 API 側門開了 12 張票,每一張都跟舊票重疊。
|
||||
# 誤觸時怎麼關: 跑 `scripts/ticket where <關鍵字>` 先搜(之後 30 分鐘 API 也放行),或在指令裡加 `ticket-api-ok` 留痕放行。
|
||||
# ticket-api-bypass-guard.sh — 開票的「側門」也要經過同一道搜尋閘
|
||||
#
|
||||
# 來由(leo 2026-08-20 當場問「如何防止」):
|
||||
|
||||
Reference in New Issue
Block a user