feat(wire-cli): 接線腳本納入部署後重啟閘門,七支改八支
What:`tools/wire-cli.sh` 四處增修。`smoke` 加跑 `restart-gate.sh`,另外自備一份暫時的 `$JSC_HOME`,把八條判定路徑(狀態檔不存在、狀態檔存在且技能為 `jsc-sdlc:implement`、四支豁免技能各一條、逃生門、取不到技能名)各跑一次並比對結束碼,再驗一次清除機制真的清得掉;claude 的接線驗證與 `status` 盤點各加一個 `restart-gate` 檢查點;codex、copilot、antigravity、kiro 四支的 degraded 說法補上「部署後重啟閘門也接不上」;檔頭與各處「七支」一律改為「八支」。 Why:新的 hook 接進 `hooks.json` 只代表宣告在檔案裡。接線驗證不點名就漏得掉——`comment-scope.sh` 與 `lang-guard.sh` 當初就是為同一個原因各列一項。冒煙測試也一樣:不自備狀態檔,只走得到「狀態檔不存在」與「取不到技能名」兩條捷徑,擋人與豁免那幾條一次都跑不到,判定寫了卻沒驗等於沒寫。四個 CLI 的降級說法不補,回報就會暗示每個 CLI 都擋得下來。 How:驗的是判定結果本身,不只是腳本跑得完——每一條路徑都給定預期結束碼,對不上就計入失敗並印出前 200 字的輸出。狀態檔放在暫時目錄,冒煙測試不該把使用者真正的 `$JSC_HOME/restart-required` 拆掉。清除機制那一段刻意走 `session-timer.sh start` 這條真實路徑,不直接呼叫 `clear`:要驗的是「新工作階段會不會清」,不是「`clear` 這個子命令能不能刪檔」。每次呼叫都接 `</dev/null`:hook 模式會讀標準輸入,管線沒人關閉時整支會卡死。建不出暫存目錄也算失敗,不能靜悄悄跳過。四支非 claude 的 CLI 除了 degraded 一句,另外逐支印一行講明後果:一次技能呼叫都擋不下來,狀態檔照樣寫、下次工作階段開始照樣清,只是中間沒有判定點,重啟要靠 `/jsc-cli:deploy` 收尾的提示自己動手。 Who:`jsc-hooks:hooks-install` 的接線、冒煙與盤點三個子命令。
This commit is contained in:
+83
-19
@@ -3,7 +3,7 @@
|
|||||||
# 用法:
|
# 用法:
|
||||||
# wire-cli.sh {claude|codex|copilot|antigravity|kiro} 接線
|
# wire-cli.sh {claude|codex|copilot|antigravity|kiro} 接線
|
||||||
# wire-cli.sh purge {claude|codex|copilot|antigravity|kiro} 備份後移除該 CLI 的所有 hook
|
# wire-cli.sh purge {claude|codex|copilot|antigravity|kiro} 備份後移除該 CLI 的所有 hook
|
||||||
# wire-cli.sh smoke {claude|codex|copilot|antigravity|kiro} 跑一輪七支 hook,驗執行期
|
# wire-cli.sh smoke {claude|codex|copilot|antigravity|kiro} 跑一輪八支 hook,驗執行期
|
||||||
# wire-cli.sh status {claude|codex|copilot|antigravity|kiro} 唯讀盤點接線現況,不寫檔也不執行 hook
|
# wire-cli.sh status {claude|codex|copilot|antigravity|kiro} 唯讀盤點接線現況,不寫檔也不執行 hook
|
||||||
#
|
#
|
||||||
# purge 移除的是「所有 hook」,含非 jsc 的第三方項目。安裝一律先 purge 再接線:混著別人的
|
# purge 移除的是「所有 hook」,含非 jsc 的第三方項目。安裝一律先 purge 再接線:混著別人的
|
||||||
@@ -14,9 +14,11 @@
|
|||||||
# 跑起來不出錯(缺 node、路徑錯、權限不足都只在真的執行時才現形)。
|
# 跑起來不出錯(缺 node、路徑錯、權限不足都只在真的執行時才現形)。
|
||||||
# 有分支的判定另外驗結果,不只驗跑得完:sdlc-gate.sh 的工作包歸屬比對會自備一份暫時的
|
# 有分支的判定另外驗結果,不只驗跑得完:sdlc-gate.sh 的工作包歸屬比對會自備一份暫時的
|
||||||
# $JSC_HOME 狀態檔,把「查無歸屬」「自己的工作包」「別的工作包」與逃生門各跑一次,比對結束碼。
|
# $JSC_HOME 狀態檔,把「查無歸屬」「自己的工作包」「別的工作包」與逃生門各跑一次,比對結束碼。
|
||||||
|
# restart-gate.sh 的部署後重啟閘門同法:狀態檔不存在、狀態檔存在、豁免技能、逃生門、
|
||||||
|
# 取不到技能名五條路徑各跑一次,再驗一次清除機制真的清得掉。
|
||||||
#
|
#
|
||||||
# 接線行為(依 CLI 而定,皆為冪等:重跑只取代既有的 jsc-hooks 標記段落,不會重複疊加):
|
# 接線行為(依 CLI 而定,皆為冪等:重跑只取代既有的 jsc-hooks 標記段落,不會重複疊加):
|
||||||
# claude — 什麼都不用寫,hooks.json 已自動接線七支 hook
|
# claude — 什麼都不用寫,hooks.json 已自動接線八支 hook
|
||||||
# codex — 在 shell rc 檔加上 codex 別名,轉呼叫 tools/jsc-wrap.sh codex(開始計時,
|
# codex — 在 shell rc 檔加上 codex 別名,轉呼叫 tools/jsc-wrap.sh codex(開始計時,
|
||||||
# 結束時收尾掃一次註解範圍與繁中編碼);在 config.toml 設 notify(每輪補
|
# 結束時收尾掃一次註解範圍與繁中編碼);在 config.toml 設 notify(每輪補
|
||||||
# session-timer.sh start 再 mark,最後 comment-scope.sh sweep 與
|
# session-timer.sh start 再 mark,最後 comment-scope.sh sweep 與
|
||||||
@@ -33,10 +35,13 @@
|
|||||||
# 皆帶 JSC_CLI=kiro
|
# 皆帶 JSC_CLI=kiro
|
||||||
#
|
#
|
||||||
# 覆蓋範圍要據實回報,不得暗示每個 CLI 都有保護:
|
# 覆蓋範圍要據實回報,不得暗示每個 CLI 都有保護:
|
||||||
# claude 七支 hook 全接,回報 wired
|
# claude 八支 hook 全接,回報 wired
|
||||||
# codex、copilot、antigravity、kiro 只有別名、notify 或規則檔,接不上 PreToolUse、PostToolUse
|
# codex、copilot、antigravity、kiro 只有別名、notify 或規則檔,接不上 PreToolUse、PostToolUse
|
||||||
# 與 UserPromptSubmit,版本前置檢查與 SDLC 模型鎖都沒接上,
|
# 與 UserPromptSubmit,版本前置檢查、部署後重啟閘門與
|
||||||
# 一律回報 degraded 並在 reason 講明
|
# SDLC 模型鎖都沒接上,一律回報 degraded 並在 reason 講明。
|
||||||
|
# 重啟閘門在這四個 CLI 上一次技能呼叫都擋不下來:狀態檔照樣
|
||||||
|
# 寫、下次工作階段開始照樣清,只是中間沒有任何判定點,重啟
|
||||||
|
# 只能靠 /jsc-cli:deploy 收尾的提示自己動手
|
||||||
#
|
#
|
||||||
# 註解範圍與繁中編碼掃描每個 CLI 的時機都不同(兩支腳本接在同一批位置),回報時不得寫成五支一樣:
|
# 註解範圍與繁中編碼掃描每個 CLI 的時機都不同(兩支腳本接在同一批位置),回報時不得寫成五支一樣:
|
||||||
# claude 掛在 PostToolUse,寫完哪個檔就掃哪個,逐檔即時
|
# claude 掛在 PostToolUse,寫完哪個檔就掃哪個,逐檔即時
|
||||||
@@ -664,6 +669,7 @@ if [ "$action" = smoke ]; then
|
|||||||
smoke_one session-timer.sh mark
|
smoke_one session-timer.sh mark
|
||||||
smoke_one sdlc-gate.sh check
|
smoke_one sdlc-gate.sh check
|
||||||
smoke_one version-guard.sh
|
smoke_one version-guard.sh
|
||||||
|
smoke_one restart-gate.sh
|
||||||
smoke_one skill-usage.sh
|
smoke_one skill-usage.sh
|
||||||
smoke_one ste100-guard.sh
|
smoke_one ste100-guard.sh
|
||||||
# sdlc-gate.sh 有兩個 hook 模式,接在不同事件上,兩個都要驗:wp-check prompt 一律 exit 0,
|
# sdlc-gate.sh 有兩個 hook 模式,接在不同事件上,兩個都要驗:wp-check prompt 一律 exit 0,
|
||||||
@@ -701,6 +707,53 @@ if [ "$action" = smoke ]; then
|
|||||||
smoke_fails=$((smoke_fails + 1))
|
smoke_fails=$((smoke_fails + 1))
|
||||||
printf '[jsc] sdlc-gate.sh wp-check skill:建不出暫存目錄,工作包歸屬判定沒驗到。\n' >> "$smoke_out"
|
printf '[jsc] sdlc-gate.sh wp-check skill:建不出暫存目錄,工作包歸屬判定沒驗到。\n' >> "$smoke_out"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 部署後重啟閘門(restart-gate.sh):上面那支只走得到「狀態檔不存在」與「取不到技能名」,
|
||||||
|
# 擋人那一條完全沒跑到。這裡同樣自備一份暫時的 $JSC_HOME,把五條判定路徑各跑一次並比對
|
||||||
|
# 結束碼,最後再驗清除機制真的把狀態檔清掉。用暫時目錄是為了不動到使用者真正的
|
||||||
|
# $JSC_HOME/restart-required——冒煙測試不該把別人的閘門拆掉。
|
||||||
|
# 一律 </dev/null:hook 模式會讀標準輸入,管線沒人關閉時整支卡死。
|
||||||
|
smoke_rs_case() { # $1=情境 $2=技能名 $3=預期結束碼 $4=JSC_RESTART_GATE 值(可省略)
|
||||||
|
_out=$(JSC_HOME="$rs_home" JSC_CLI="$cli" JSC_SKILL="$2" SKILL="$2" \
|
||||||
|
JSC_RESTART_GATE="${4:-}" sh "$HOOKS/restart-gate.sh" </dev/null 2>&1); _rc=$?
|
||||||
|
if [ "$_rc" -eq "$3" ]; then
|
||||||
|
printf '[jsc] restart-gate.sh(%s):exit %s,與預期相同。\n' "$1" "$_rc" >> "$smoke_out"
|
||||||
|
else
|
||||||
|
smoke_fails=$((smoke_fails + 1))
|
||||||
|
printf '[jsc] restart-gate.sh(%s):exit %s,預期 %s,重啟閘門判定壞了:%s\n' \
|
||||||
|
"$1" "$_rc" "$3" "$(printf '%s' "$_out" | tr '\n' ' ' | cut -c1-200)" >> "$smoke_out"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
if rs_home=$(mktemp -d 2>/dev/null); then
|
||||||
|
smoke_rs_case "狀態檔不存在" jsc-sdlc:implement 0
|
||||||
|
JSC_HOME="$rs_home" sh "$HOOKS/restart-gate.sh" require update hooks cli </dev/null 2>/dev/null
|
||||||
|
smoke_rs_case "狀態檔存在,技能 jsc-sdlc:implement" jsc-sdlc:implement 2
|
||||||
|
smoke_rs_case "狀態檔存在,豁免技能 jsc-cli:deploy" jsc-cli:deploy 0
|
||||||
|
smoke_rs_case "狀態檔存在,豁免技能 jsc-gitea:wiki" jsc-gitea:wiki 0
|
||||||
|
smoke_rs_case "狀態檔存在,豁免技能 jsc-log:worklog" jsc-log:worklog 0
|
||||||
|
smoke_rs_case "狀態檔存在,豁免技能 jsc-meta:skill-check" jsc-meta:skill-check 0
|
||||||
|
smoke_rs_case "逃生門 JSC_RESTART_GATE=off" jsc-sdlc:implement 0 off
|
||||||
|
smoke_rs_case "取不到技能名" "" 0
|
||||||
|
# 清除機制:session-timer.sh 判定為新工作階段時會呼叫 restart-gate.sh clear。
|
||||||
|
# 這裡走的就是那條路徑(暫時 $JSC_HOME 底下沒有起始檔,等同行程新起的第一次)。
|
||||||
|
if [ -f "$rs_home/restart-required" ]; then
|
||||||
|
JSC_HOME="$rs_home" JSC_SESSION_ID=smoke-restart \
|
||||||
|
sh "$HOOKS/session-timer.sh" start </dev/null 2>/dev/null
|
||||||
|
if [ -f "$rs_home/restart-required" ]; then
|
||||||
|
smoke_fails=$((smoke_fails + 1))
|
||||||
|
printf '[jsc] restart-gate.sh(清除機制):新工作階段開始後狀態檔還在,閘門會一直擋。\n' >> "$smoke_out"
|
||||||
|
else
|
||||||
|
printf '[jsc] restart-gate.sh(清除機制):新工作階段開始後狀態檔已清除,與預期相同。\n' >> "$smoke_out"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
smoke_fails=$((smoke_fails + 1))
|
||||||
|
printf '[jsc] restart-gate.sh(清除機制):require 沒有寫出狀態檔,清除機制沒驗到。\n' >> "$smoke_out"
|
||||||
|
fi
|
||||||
|
rm -rf "$rs_home"
|
||||||
|
else
|
||||||
|
smoke_fails=$((smoke_fails + 1))
|
||||||
|
printf '[jsc] restart-gate.sh:建不出暫存目錄,部署後重啟閘門判定沒驗到。\n' >> "$smoke_out"
|
||||||
|
fi
|
||||||
# comment-scope.sh 有三個接在不同事件的模式,三個都要驗:prompt 一律 exit 0,
|
# comment-scope.sh 有三個接在不同事件的模式,三個都要驗:prompt 一律 exit 0,
|
||||||
# 無參數模式在取不到檔名時安靜 exit 0(上面已清空 JSC_CHANGED_FILE,stdin 也只有 {}),
|
# 無參數模式在取不到檔名時安靜 exit 0(上面已清空 JSC_CHANGED_FILE,stdin 也只有 {}),
|
||||||
# sweep 掃目前工作目錄所在的 git 工作區——乾淨或非 git 目錄回 0,有違規註解回 2,
|
# sweep 掃目前工作目錄所在的 git 工作區——乾淨或非 git 目錄回 0,有違規註解回 2,
|
||||||
@@ -715,7 +768,7 @@ if [ "$action" = smoke ]; then
|
|||||||
smoke_one lang-guard.sh sweep
|
smoke_one lang-guard.sh sweep
|
||||||
|
|
||||||
if [ "$smoke_fails" -eq 0 ]; then
|
if [ "$smoke_fails" -eq 0 ]; then
|
||||||
printf 'status=ok reason=%s\n' "七支 hook 的每個接線模式都跑得完,工作包歸屬判定也各走過一次,沒有執行期錯誤"
|
printf 'status=ok reason=%s\n' "八支 hook 的每個接線模式都跑得完,工作包歸屬判定與部署後重啟閘門的每條路徑也各走過一次,沒有執行期錯誤"
|
||||||
cat "$smoke_out"; rm -f "$smoke_out"; exit 0
|
cat "$smoke_out"; rm -f "$smoke_out"; exit 0
|
||||||
fi
|
fi
|
||||||
printf 'status=failed reason=%s\n' "$smoke_fails 支 hook 有執行期錯誤"
|
printf 'status=failed reason=%s\n' "$smoke_fails 支 hook 有執行期錯誤"
|
||||||
@@ -772,14 +825,18 @@ if [ "$action" = status ]; then
|
|||||||
claude)
|
claude)
|
||||||
if [ -f "$HOOKS/hooks.json" ]; then st_item hooks.json "$HOOKS/hooks.json" present
|
if [ -f "$HOOKS/hooks.json" ]; then st_item hooks.json "$HOOKS/hooks.json" present
|
||||||
else st_item hooks.json "$HOOKS/hooks.json" missing; fi
|
else st_item hooks.json "$HOOKS/hooks.json" missing; fi
|
||||||
# 七支 hook 全靠這一個檔宣告,只看檔案在不在會漏掉「檔在、某支沒接進去」。
|
# 八支 hook 全靠這一個檔宣告,只看檔案在不在會漏掉「檔在、某支沒接進去」。
|
||||||
# 後來才加進來的 comment-scope.sh 與 lang-guard.sh 是最可能漏的兩支,所以各列一項。
|
# 後來才加進來的 comment-scope.sh、lang-guard.sh 與 restart-gate.sh 是最可能漏的三支,
|
||||||
|
# 所以各列一項。
|
||||||
if [ -f "$HOOKS/hooks.json" ] && grep -qF 'comment-scope.sh' "$HOOKS/hooks.json" 2>/dev/null
|
if [ -f "$HOOKS/hooks.json" ] && grep -qF 'comment-scope.sh' "$HOOKS/hooks.json" 2>/dev/null
|
||||||
then st_item comment-scope "$HOOKS/hooks.json" present
|
then st_item comment-scope "$HOOKS/hooks.json" present
|
||||||
else st_item comment-scope "$HOOKS/hooks.json" missing; fi
|
else st_item comment-scope "$HOOKS/hooks.json" missing; fi
|
||||||
if [ -f "$HOOKS/hooks.json" ] && grep -qF 'lang-guard.sh' "$HOOKS/hooks.json" 2>/dev/null
|
if [ -f "$HOOKS/hooks.json" ] && grep -qF 'lang-guard.sh' "$HOOKS/hooks.json" 2>/dev/null
|
||||||
then st_item lang-guard "$HOOKS/hooks.json" present
|
then st_item lang-guard "$HOOKS/hooks.json" present
|
||||||
else st_item lang-guard "$HOOKS/hooks.json" missing; fi ;;
|
else st_item lang-guard "$HOOKS/hooks.json" missing; fi
|
||||||
|
if [ -f "$HOOKS/hooks.json" ] && grep -qF 'restart-gate.sh' "$HOOKS/hooks.json" 2>/dev/null
|
||||||
|
then st_item restart-gate "$HOOKS/hooks.json" present
|
||||||
|
else st_item restart-gate "$HOOKS/hooks.json" missing; fi ;;
|
||||||
|
|
||||||
codex)
|
codex)
|
||||||
config="${CODEX_HOME:-$HOME/.codex}/config.toml"
|
config="${CODEX_HOME:-$HOME/.codex}/config.toml"
|
||||||
@@ -808,21 +865,21 @@ if [ "$action" = status ]; then
|
|||||||
st_block ste100 "${CODEX_HOME:-$HOME/.codex}/AGENTS.md" "<!-- jsc-hooks -->"
|
st_block ste100 "${CODEX_HOME:-$HOME/.codex}/AGENTS.md" "<!-- jsc-hooks -->"
|
||||||
st_comment_scope comment-scope "${CODEX_HOME:-$HOME/.codex}/AGENTS.md"
|
st_comment_scope comment-scope "${CODEX_HOME:-$HOME/.codex}/AGENTS.md"
|
||||||
st_lang_guard lang-guard "${CODEX_HOME:-$HOME/.codex}/AGENTS.md"
|
st_lang_guard lang-guard "${CODEX_HOME:-$HOME/.codex}/AGENTS.md"
|
||||||
st_degrade="STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查,註解範圍與繁中編碼改為每輪結束掃整個工作區,不是逐檔即時" ;;
|
st_degrade="STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查與部署後重啟閘門,註解範圍與繁中編碼改為每輪結束掃整個工作區,不是逐檔即時" ;;
|
||||||
|
|
||||||
copilot)
|
copilot)
|
||||||
st_rc_alias alias jsc-hooks:copilot
|
st_rc_alias alias jsc-hooks:copilot
|
||||||
st_block ste100 "${JSC_COPILOT_INSTRUCTIONS:-$HOME/.config/copilot/copilot-instructions.md}" "<!-- jsc-hooks -->"
|
st_block ste100 "${JSC_COPILOT_INSTRUCTIONS:-$HOME/.config/copilot/copilot-instructions.md}" "<!-- jsc-hooks -->"
|
||||||
st_comment_scope comment-scope "${JSC_COPILOT_INSTRUCTIONS:-$HOME/.config/copilot/copilot-instructions.md}"
|
st_comment_scope comment-scope "${JSC_COPILOT_INSTRUCTIONS:-$HOME/.config/copilot/copilot-instructions.md}"
|
||||||
st_lang_guard lang-guard "${JSC_COPILOT_INSTRUCTIONS:-$HOME/.config/copilot/copilot-instructions.md}"
|
st_lang_guard lang-guard "${JSC_COPILOT_INSTRUCTIONS:-$HOME/.config/copilot/copilot-instructions.md}"
|
||||||
st_degrade="STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查,註解範圍與繁中編碼只在工作階段結束時掃一次整個工作區" ;;
|
st_degrade="STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查與部署後重啟閘門,註解範圍與繁中編碼只在工作階段結束時掃一次整個工作區" ;;
|
||||||
|
|
||||||
antigravity)
|
antigravity)
|
||||||
st_rc_alias alias jsc-hooks:antigravity
|
st_rc_alias alias jsc-hooks:antigravity
|
||||||
st_block ste100 "${JSC_ANTIGRAVITY_RULES:-$HOME/.antigravity/AGENTS.md}" "<!-- jsc-hooks -->"
|
st_block ste100 "${JSC_ANTIGRAVITY_RULES:-$HOME/.antigravity/AGENTS.md}" "<!-- jsc-hooks -->"
|
||||||
st_comment_scope comment-scope "${JSC_ANTIGRAVITY_RULES:-$HOME/.antigravity/AGENTS.md}"
|
st_comment_scope comment-scope "${JSC_ANTIGRAVITY_RULES:-$HOME/.antigravity/AGENTS.md}"
|
||||||
st_lang_guard lang-guard "${JSC_ANTIGRAVITY_RULES:-$HOME/.antigravity/AGENTS.md}"
|
st_lang_guard lang-guard "${JSC_ANTIGRAVITY_RULES:-$HOME/.antigravity/AGENTS.md}"
|
||||||
st_degrade="STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查,註解範圍與繁中編碼只在工作階段結束時掃一次整個工作區" ;;
|
st_degrade="STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查與部署後重啟閘門,註解範圍與繁中編碼只在工作階段結束時掃一次整個工作區" ;;
|
||||||
|
|
||||||
kiro)
|
kiro)
|
||||||
# kiro 的 hook 檔綁在工作區,這裡看的一律是目前工作目錄底下那一份
|
# kiro 的 hook 檔綁在工作區,這裡看的一律是目前工作目錄底下那一份
|
||||||
@@ -849,7 +906,7 @@ if [ "$action" = status ]; then
|
|||||||
grep -qF 'lang-guard.sh\" sweep' ./.kiro/hooks/jsc-hooks.json 2>/dev/null
|
grep -qF 'lang-guard.sh\" sweep' ./.kiro/hooks/jsc-hooks.json 2>/dev/null
|
||||||
then st_item lang-guard-sweep ./.kiro/hooks/jsc-hooks.json present
|
then st_item lang-guard-sweep ./.kiro/hooks/jsc-hooks.json present
|
||||||
else st_item lang-guard-sweep ./.kiro/hooks/jsc-hooks.json missing; fi
|
else st_item lang-guard-sweep ./.kiro/hooks/jsc-hooks.json missing; fi
|
||||||
st_degrade="SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查,註解範圍與繁中編碼改為每輪提示送出時掃整個工作區,不是逐檔即時" ;;
|
st_degrade="SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查與部署後重啟閘門,註解範圍與繁中編碼改為每輪提示送出時掃整個工作區,不是逐檔即時" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [ "$st_missing" -gt 0 ]; then
|
if [ "$st_missing" -gt 0 ]; then
|
||||||
@@ -860,7 +917,7 @@ if [ "$action" = status ]; then
|
|||||||
printf 'status=degraded reason=%s\n' "$st_degrade"
|
printf 'status=degraded reason=%s\n' "$st_degrade"
|
||||||
cat "$st_items"; rm -f "$st_items"; exit 1
|
cat "$st_items"; rm -f "$st_items"; exit 1
|
||||||
fi
|
fi
|
||||||
printf 'status=wired reason=%s\n' "hooks.json 自動接線全部七支 hook"
|
printf 'status=wired reason=%s\n' "hooks.json 自動接線全部八支 hook"
|
||||||
cat "$st_items"; rm -f "$st_items"; exit 0
|
cat "$st_items"; rm -f "$st_items"; exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -873,8 +930,11 @@ case "$cli" in
|
|||||||
|| fail "$HOOKS/hooks.json 沒有接上 comment-scope.sh,註解範圍檢查不會生效"
|
|| fail "$HOOKS/hooks.json 沒有接上 comment-scope.sh,註解範圍檢查不會生效"
|
||||||
grep -qF 'lang-guard.sh' "$HOOKS/hooks.json" 2>/dev/null \
|
grep -qF 'lang-guard.sh' "$HOOKS/hooks.json" 2>/dev/null \
|
||||||
|| fail "$HOOKS/hooks.json 沒有接上 lang-guard.sh,繁中與編碼檢查不會生效"
|
|| fail "$HOOKS/hooks.json 沒有接上 lang-guard.sh,繁中與編碼檢查不會生效"
|
||||||
|
grep -qF 'restart-gate.sh' "$HOOKS/hooks.json" 2>/dev/null \
|
||||||
|
|| fail "$HOOKS/hooks.json 沒有接上 restart-gate.sh,部署後重啟閘門不會生效"
|
||||||
printf 'status=wired reason=%s\n' "hooks.json 自動接線"
|
printf 'status=wired reason=%s\n' "hooks.json 自動接線"
|
||||||
echo "[jsc] claude:由 hooks/hooks.json 自動接線全部七支 hook,無需寫入設定。"
|
echo "[jsc] claude:由 hooks/hooks.json 自動接線全部八支 hook,無需寫入設定。"
|
||||||
|
echo "[jsc] claude:只有 claude 有 pre-tool hook,版本前置檢查與部署後重啟閘門只在這裡擋得下技能呼叫;其他四個 CLI 兩道閘門都接不上。"
|
||||||
echo "[jsc] claude:只有 claude 有 post-tool hook,comment-scope.sh 與 lang-guard.sh 的逐檔即時掃描只在這裡接得上;其他四個 CLI 改用 sweep 掃整個工作區,時機晚一輪或晚到工作階段結束。"
|
echo "[jsc] claude:只有 claude 有 post-tool hook,comment-scope.sh 與 lang-guard.sh 的逐檔即時掃描只在這裡接得上;其他四個 CLI 改用 sweep 掃整個工作區,時機晚一輪或晚到工作階段結束。"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
|
||||||
@@ -912,13 +972,14 @@ case "$cli" in
|
|||||||
has_block "$agents" "<!-- jsc-hooks -->" || fail "$agents 寫入後讀不到 jsc-hooks 標記段落"
|
has_block "$agents" "<!-- jsc-hooks -->" || fail "$agents 寫入後讀不到 jsc-hooks 標記段落"
|
||||||
has_comment_scope "$agents" || fail "$agents 寫入後讀不到註解範圍規則"
|
has_comment_scope "$agents" || fail "$agents 寫入後讀不到註解範圍規則"
|
||||||
has_lang_guard "$agents" || fail "$agents 寫入後讀不到繁中與編碼規則"
|
has_lang_guard "$agents" || fail "$agents 寫入後讀不到繁中與編碼規則"
|
||||||
printf 'status=degraded reason=%s\n' "STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查,註解範圍與繁中編碼改為每輪結束掃整個工作區,不是逐檔即時"
|
printf 'status=degraded reason=%s\n' "STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查與部署後重啟閘門,註解範圍與繁中編碼改為每輪結束掃整個工作區,不是逐檔即時"
|
||||||
echo "[jsc] codex:已在 shell rc 加上 $bin 別名,轉呼叫 tools/jsc-wrap.sh codex,啟動當下開始計時。"
|
echo "[jsc] codex:已在 shell rc 加上 $bin 別名,轉呼叫 tools/jsc-wrap.sh codex,啟動當下開始計時。"
|
||||||
echo "[jsc] codex:別名要開新的 shell 或重新 source rc 檔才生效。"
|
echo "[jsc] codex:別名要開新的 shell 或重新 source rc 檔才生效。"
|
||||||
echo "[jsc] codex:已設定 $config 的 notify(根層鍵,已驗證),每輪補 session-timer.sh start 再 mark,最後跑 comment-scope.sh sweep 與 lang-guard.sh sweep。"
|
echo "[jsc] codex:已設定 $config 的 notify(根層鍵,已驗證),每輪補 session-timer.sh start 再 mark,最後跑 comment-scope.sh sweep 與 lang-guard.sh sweep。"
|
||||||
echo "[jsc] codex:已在 $agents 寫入 STE100、註解範圍與繁中編碼規則段落(prompt 降級)。"
|
echo "[jsc] codex:已在 $agents 寫入 STE100、註解範圍與繁中編碼規則段落(prompt 降級)。"
|
||||||
echo "[jsc] codex:SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 sdlc-gate.sh lock 寫入。"
|
echo "[jsc] codex:SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 sdlc-gate.sh lock 寫入。"
|
||||||
echo "[jsc] codex:版本前置檢查接不上(codex 沒有 pre-tool hook),改由 /jsc-cli:deploy 定期更新。"
|
echo "[jsc] codex:版本前置檢查接不上(codex 沒有 pre-tool hook),改由 /jsc-cli:deploy 定期更新。"
|
||||||
|
echo "[jsc] codex:部署後重啟閘門也接不上(同樣是沒有 pre-tool hook),一次技能呼叫都擋不下來;狀態檔照樣寫、下次工作階段開始照樣清,重啟要自己動手。"
|
||||||
echo "[jsc] codex:註解範圍與繁中編碼除了規則提示,每輪結束會由 notify 各掃一次整個 git 工作區(codex 沒有 post-tool hook,接不到逐檔即時掃描),回饋比 claude 晚一輪。"
|
echo "[jsc] codex:註解範圍與繁中編碼除了規則提示,每輪結束會由 notify 各掃一次整個 git 工作區(codex 沒有 post-tool hook,接不到逐檔即時掃描),回饋比 claude 晚一輪。"
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
|
|
||||||
@@ -933,12 +994,13 @@ case "$cli" in
|
|||||||
has_block "$instr" "<!-- jsc-hooks -->" || fail "$instr 寫入後讀不到 jsc-hooks 標記段落"
|
has_block "$instr" "<!-- jsc-hooks -->" || fail "$instr 寫入後讀不到 jsc-hooks 標記段落"
|
||||||
has_comment_scope "$instr" || fail "$instr 寫入後讀不到註解範圍規則"
|
has_comment_scope "$instr" || fail "$instr 寫入後讀不到註解範圍規則"
|
||||||
has_lang_guard "$instr" || fail "$instr 寫入後讀不到繁中與編碼規則"
|
has_lang_guard "$instr" || fail "$instr 寫入後讀不到繁中與編碼規則"
|
||||||
printf 'status=degraded reason=%s\n' "STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查,註解範圍與繁中編碼只在工作階段結束時掃一次整個工作區"
|
printf 'status=degraded reason=%s\n' "STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查與部署後重啟閘門,註解範圍與繁中編碼只在工作階段結束時掃一次整個工作區"
|
||||||
echo "[jsc] copilot:已在 shell rc 加上 $bin 別名,轉呼叫 tools/jsc-wrap.sh copilot。"
|
echo "[jsc] copilot:已在 shell rc 加上 $bin 別名,轉呼叫 tools/jsc-wrap.sh copilot。"
|
||||||
echo "[jsc] copilot:已在 $instr 寫入 STE100、註解範圍與繁中編碼規則段落(prompt 降級)。"
|
echo "[jsc] copilot:已在 $instr 寫入 STE100、註解範圍與繁中編碼規則段落(prompt 降級)。"
|
||||||
echo "[jsc] copilot:別名要開新的 shell 或重新 source rc 檔才生效。"
|
echo "[jsc] copilot:別名要開新的 shell 或重新 source rc 檔才生效。"
|
||||||
echo "[jsc] copilot:SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 sdlc-gate.sh lock 寫入。"
|
echo "[jsc] copilot:SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 sdlc-gate.sh lock 寫入。"
|
||||||
echo "[jsc] copilot:版本前置檢查接不上(copilot 沒有 pre-tool hook),改由 /jsc-cli:deploy 定期更新。"
|
echo "[jsc] copilot:版本前置檢查接不上(copilot 沒有 pre-tool hook),改由 /jsc-cli:deploy 定期更新。"
|
||||||
|
echo "[jsc] copilot:部署後重啟閘門也接不上(同樣是沒有 pre-tool hook),一次技能呼叫都擋不下來;狀態檔照樣寫、下次工作階段開始照樣清,重啟要自己動手。"
|
||||||
echo "[jsc] copilot:註解範圍與繁中編碼除了規則提示,工作階段結束時由 jsc-wrap.sh 收尾各掃一次整個 git 工作區(copilot 連逐輪事件都沒有),回饋要等到離開 CLI 才看得到。"
|
echo "[jsc] copilot:註解範圍與繁中編碼除了規則提示,工作階段結束時由 jsc-wrap.sh 收尾各掃一次整個 git 工作區(copilot 連逐輪事件都沒有),回饋要等到離開 CLI 才看得到。"
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
|
|
||||||
@@ -953,12 +1015,13 @@ case "$cli" in
|
|||||||
has_block "$rules" "<!-- jsc-hooks -->" || fail "$rules 寫入後讀不到 jsc-hooks 標記段落"
|
has_block "$rules" "<!-- jsc-hooks -->" || fail "$rules 寫入後讀不到 jsc-hooks 標記段落"
|
||||||
has_comment_scope "$rules" || fail "$rules 寫入後讀不到註解範圍規則"
|
has_comment_scope "$rules" || fail "$rules 寫入後讀不到註解範圍規則"
|
||||||
has_lang_guard "$rules" || fail "$rules 寫入後讀不到繁中與編碼規則"
|
has_lang_guard "$rules" || fail "$rules 寫入後讀不到繁中與編碼規則"
|
||||||
printf 'status=degraded reason=%s\n' "STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查,註解範圍與繁中編碼只在工作階段結束時掃一次整個工作區"
|
printf 'status=degraded reason=%s\n' "STE100 降級為 prompt 檔,SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查與部署後重啟閘門,註解範圍與繁中編碼只在工作階段結束時掃一次整個工作區"
|
||||||
echo "[jsc] antigravity:已在 shell rc 加上 $bin 別名,轉呼叫 tools/jsc-wrap.sh antigravity。"
|
echo "[jsc] antigravity:已在 shell rc 加上 $bin 別名,轉呼叫 tools/jsc-wrap.sh antigravity。"
|
||||||
echo "[jsc] antigravity:已在 $rules 寫入 STE100、註解範圍與繁中編碼規則段落(prompt 降級)。"
|
echo "[jsc] antigravity:已在 $rules 寫入 STE100、註解範圍與繁中編碼規則段落(prompt 降級)。"
|
||||||
echo "[jsc] antigravity:別名要開新的 shell 或重新 source rc 檔才生效。"
|
echo "[jsc] antigravity:別名要開新的 shell 或重新 source rc 檔才生效。"
|
||||||
echo "[jsc] antigravity:SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 sdlc-gate.sh lock 寫入。"
|
echo "[jsc] antigravity:SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 sdlc-gate.sh lock 寫入。"
|
||||||
echo "[jsc] antigravity:版本前置檢查接不上(antigravity 沒有 pre-tool hook),改由 /jsc-cli:deploy 定期更新。"
|
echo "[jsc] antigravity:版本前置檢查接不上(antigravity 沒有 pre-tool hook),改由 /jsc-cli:deploy 定期更新。"
|
||||||
|
echo "[jsc] antigravity:部署後重啟閘門也接不上(同樣是沒有 pre-tool hook),一次技能呼叫都擋不下來;狀態檔照樣寫、下次工作階段開始照樣清,重啟要自己動手。"
|
||||||
echo "[jsc] antigravity:註解範圍與繁中編碼除了規則提示,工作階段結束時由 jsc-wrap.sh 收尾各掃一次整個 git 工作區(antigravity 連逐輪事件都沒有),回饋要等到離開 CLI 才看得到。"
|
echo "[jsc] antigravity:註解範圍與繁中編碼除了規則提示,工作階段結束時由 jsc-wrap.sh 收尾各掃一次整個 git 工作區(antigravity 連逐輪事件都沒有),回饋要等到離開 CLI 才看得到。"
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
|
|
||||||
@@ -1011,10 +1074,11 @@ EOF
|
|||||||
|| fail "$hookfile 的 run 沒有接到 lang-guard.sh prompt,每輪不會注入繁中與編碼規則"
|
|| fail "$hookfile 的 run 沒有接到 lang-guard.sh prompt,每輪不會注入繁中與編碼規則"
|
||||||
grep -qF 'lang-guard.sh\" sweep' "$hookfile" 2>/dev/null \
|
grep -qF 'lang-guard.sh\" sweep' "$hookfile" 2>/dev/null \
|
||||||
|| fail "$hookfile 的 run 沒有接到 lang-guard.sh sweep,kiro 每輪不會掃簡體字與亂碼"
|
|| fail "$hookfile 的 run 沒有接到 lang-guard.sh sweep,kiro 每輪不會掃簡體字與亂碼"
|
||||||
printf 'status=degraded reason=%s\n' "SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查,註解範圍與繁中編碼改為每輪提示送出時掃整個工作區,不是逐檔即時"
|
printf 'status=degraded reason=%s\n' "SDLC 模型鎖降級為技能步驟檢查,無 pre-tool hook 可接版本前置檢查與部署後重啟閘門,註解範圍與繁中編碼改為每輪提示送出時掃整個工作區,不是逐檔即時"
|
||||||
echo "[jsc] kiro:已建立 $startfile(sessionStart 開始計時)與 $hookfile(JSC_CLI=kiro),兩份都已驗證。"
|
echo "[jsc] kiro:已建立 $startfile(sessionStart 開始計時)與 $hookfile(JSC_CLI=kiro),兩份都已驗證。"
|
||||||
echo "[jsc] kiro:SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 sdlc-gate.sh lock 寫入。"
|
echo "[jsc] kiro:SDLC 模型鎖降級為技能步驟檢查,鎖檔仍由 sdlc-gate.sh lock 寫入。"
|
||||||
echo "[jsc] kiro:版本前置檢查接不上(kiro 沒有 pre-tool hook),改由 /jsc-cli:deploy 定期更新。"
|
echo "[jsc] kiro:版本前置檢查接不上(kiro 沒有 pre-tool hook),改由 /jsc-cli:deploy 定期更新。"
|
||||||
|
echo "[jsc] kiro:部署後重啟閘門也接不上(同樣是沒有 pre-tool hook),一次技能呼叫都擋不下來;狀態檔照樣寫、下次工作階段開始照樣清,重啟要自己動手。"
|
||||||
echo "[jsc] kiro:註解範圍與繁中編碼除了規則提示,每輪提示送出時會各掃一次整個 git 工作區(kiro 沒有 post-tool hook),掃到的是上一輪寫的檔。"
|
echo "[jsc] kiro:註解範圍與繁中編碼除了規則提示,每輪提示送出時會各掃一次整個 git 工作區(kiro 沒有 post-tool hook),掃到的是上一輪寫的檔。"
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user