fix(smoke): 模型來源判定補上計數器,冒煙預期條數對回實際路徑

重定基底到 develop 後,冒煙測試併入了 sdlc-gate.sh 取模型代號的四條來源
判定,但那支輸出函式沒有自己的計數器,四個預期值也沒跟著加。結果是實際
印出六十四條結果行、四類計數器只算到六十條,收尾的自我斷言當場判定不符,
smoke 一律以 exit 4 收場。

補上第五個計數器 smoke_n_model 與對應的 SMOKE_EXPECT_MODEL,計數放在該
函式開頭,連建不出暫存目錄那條也算得到;總數、逐類比對訊息與結果摘要一併
納入模型來源這一類。五支 CLI 的 smoke 都回 status=ok,行數與各類條數三邊
一致。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-31 11:26:11 +08:00
co-authored by Claude Opus 5
parent 99d87f7365
commit 3ae6dba13f
+13 -5
View File
@@ -743,14 +743,17 @@ if [ "$action" = smoke ]; then
# 每一類實際跑過的結果行數。收尾時與下面宣告的預期條數逐類比對,加減判定路徑卻忘了改預期
# 就會當場失敗,散文與程式之間不會再各記一份數字。
smoke_n_hook=0; smoke_n_wp=0; smoke_n_rs=0; smoke_n_wg=0
# 預期條數(改動判定路徑時一起改):
smoke_n_hook=0; smoke_n_model=0; smoke_n_wp=0; smoke_n_rs=0; smoke_n_wg=0
# 預期條數(改動判定路徑時一起改):每一類都要有自己的計數器,印得出結果行卻沒人計數的
# 那一類會讓總數永遠對不上,斷言也就形同虛設。
# hook 模式 九支 hook 的每個接線模式各一條。sdlc-gate.sh、comment-scope.sh、
# lang-guard.sh 與 write-guard.sh 各有多個模式,所以比 hook 支數多
# 模型來源 sdlc-gate.sh lock 取模型代號的四條來源判定路徑
# 工作包 sdlc-gate.sh wp-check skill 的歸屬判定路徑
# 重啟閘門 restart-gate.sh 的判定、清除路徑與狀態檔範圍檢查
# 寫入閘門 write-guard.sh 三種擋人模式與 release 解除模式的判定路徑
SMOKE_EXPECT_HOOK=17
SMOKE_EXPECT_MODEL=4
SMOKE_EXPECT_WP=6
SMOKE_EXPECT_RS=16
SMOKE_EXPECT_WG=21
@@ -807,6 +810,8 @@ if [ "$action" = smoke ]; then
smoke_model_case() { # $1=情境 $2=來源模式 $3=預期來源片段
_name="$1"; _mode="$2"; _want="$3"
# 先計數再開工:底下建不出暫存目錄那條路徑也會印一條結果行,計數放在後面就會漏掉它。
smoke_n_model=$((smoke_n_model + 1))
_home=$(mktemp -d 2>/dev/null) || {
smoke_fails=$((smoke_fails + 1))
printf '[jsc] sdlc-gate.sh model:建不出暫存目錄,模型來源判定沒驗到。\n' >> "$smoke_out"
@@ -1033,10 +1038,13 @@ if [ "$action" = smoke ]; then
# 少跑一條或多印一行都會在這裡現形,散文就不必再自己記一份數字。
smoke_lines=$(wc -l < "$smoke_out" 2>/dev/null | tr -d ' ')
[ -n "$smoke_lines" ] || smoke_lines=0
smoke_total=$((SMOKE_EXPECT_HOOK + SMOKE_EXPECT_WP + SMOKE_EXPECT_RS + SMOKE_EXPECT_WG))
smoke_total=$((SMOKE_EXPECT_HOOK + SMOKE_EXPECT_MODEL + SMOKE_EXPECT_WP \
+ SMOKE_EXPECT_RS + SMOKE_EXPECT_WG))
smoke_mismatch=""
[ "$smoke_n_hook" = "$SMOKE_EXPECT_HOOK" ] \
|| smoke_mismatch="${smoke_mismatch}hook 模式 $smoke_n_hook 條(預期 $SMOKE_EXPECT_HOOK);"
[ "$smoke_n_model" = "$SMOKE_EXPECT_MODEL" ] \
|| smoke_mismatch="${smoke_mismatch}模型來源 $smoke_n_model 條(預期 $SMOKE_EXPECT_MODEL);"
[ "$smoke_n_wp" = "$SMOKE_EXPECT_WP" ] \
|| smoke_mismatch="${smoke_mismatch}工作包 $smoke_n_wp 條(預期 $SMOKE_EXPECT_WP);"
[ "$smoke_n_rs" = "$SMOKE_EXPECT_RS" ] \
@@ -1046,7 +1054,7 @@ if [ "$action" = smoke ]; then
[ "$smoke_lines" = "$smoke_total" ] \
|| smoke_mismatch="${smoke_mismatch}結果行數 $smoke_lines 行(預期 $smoke_total);"
smoke_breakdown="hook 模式 $SMOKE_EXPECT_HOOK 條、工作包 $SMOKE_EXPECT_WP 條、重啟閘門 $SMOKE_EXPECT_RS 條、寫入閘門 $SMOKE_EXPECT_WG 條"
smoke_breakdown="hook 模式 $SMOKE_EXPECT_HOOK 條、模型來源 $SMOKE_EXPECT_MODEL 條、工作包 $SMOKE_EXPECT_WP 條、重啟閘門 $SMOKE_EXPECT_RS 條、寫入閘門 $SMOKE_EXPECT_WG 條"
if [ -n "$smoke_mismatch" ]; then
printf 'status=failed reason=%s\n' "冒煙結果行數與預期不符:${smoke_mismatch}判定路徑有增減時要一併改腳本裡的預期條數"
printf 'lines\t%s\n' "$smoke_lines"
@@ -1057,7 +1065,7 @@ if [ "$action" = smoke ]; then
fi
if [ "$smoke_fails" -eq 0 ]; then
printf 'status=ok reason=%s\n' "九支 hook 的每個接線模式都跑得完,工作包歸屬、部署後重啟閘門與寫入提交閘門的每條路徑也各走過一次($smoke_breakdown),沒有執行期錯誤"
printf 'status=ok reason=%s\n' "九支 hook 的每個接線模式都跑得完,模型來源、工作包歸屬、部署後重啟閘門與寫入提交閘門的每條路徑也各走過一次($smoke_breakdown),沒有執行期錯誤"
printf 'lines\t%s\n' "$smoke_lines"
cat "$smoke_out"; rm -f "$smoke_out"; exit 0
fi