Merge pull request 'fix/codex-model-gate' (#48) from fix/codex-model-gate into develop

Reviewed-on: #48
This commit was merged in pull request #48.
This commit is contained in:
2026-08-28 10:12:31 +00:00
4 changed files with 177 additions and 37 deletions
+40
View File
@@ -760,6 +760,46 @@ if [ "$action" = smoke ]; then
smoke_one sdlc-gate.sh "wp-check prompt"
smoke_one sdlc-gate.sh "wp-check skill"
smoke_model_case() { # $1=情境 $2=來源模式 $3=預期來源片段
_name="$1"; _mode="$2"; _want="$3"
_home=$(mktemp -d 2>/dev/null) || {
smoke_fails=$((smoke_fails + 1))
printf '[jsc] sdlc-gate.sh model:建不出暫存目錄,模型來源判定沒驗到。\n' >> "$smoke_out"
return
}
mkdir -p "$_home/sessions" "$_home/codex/sessions/2026/08/28" 2>/dev/null
printf 'stage\tplan\treasoning-max\nmodel\tgpt-5.x\treasoning-max,reasoning-high,coding\nmodel\tgpt-5.x-mini\tcoding,fast,cheap\n' > "$_home/model-tags.tsv"
_tp="$_home/transcript.jsonl"
_cf="$_home/codex/sessions/2026/08/28/rollout-2026-08-28T00-00-00-smoke-model.jsonl"
printf '{"type":"assistant","model":"gpt-5.x"}\n' > "$_tp"
printf '{"type":"turn_context","payload":{"model":"gpt-5.x"}}\n' > "$_cf"
case "$_mode" in
transcript) _json='{"transcript_path":"'"$_tp"'","session_id":"smoke-model"}'; _env="" ;;
codex) _json='{"session_id":"smoke-model"}'; _env="" ;;
stdin) _json='{"model":"gpt-5.x","session_id":"smoke-model-stdin"}'; _env="" ;;
override) _json='{"session_id":"smoke-model-override"}'; _env="JSC_MODEL=gpt-5.x" ;;
esac
if [ "$_mode" = override ]; then
_out=$(printf '%s' "$_json" | JSC_HOME="$_home" CODEX_HOME="$_home/codex" JSC_CLI="$cli" JSC_MODEL="gpt-5.x" sh "$HOOKS/sdlc-gate.sh" lock plan 2>&1); _rc=$?
else
_out=$(printf '%s' "$_json" | JSC_HOME="$_home" CODEX_HOME="$_home/codex" JSC_CLI="$cli" sh "$HOOKS/sdlc-gate.sh" lock plan 2>&1); _rc=$?
fi
_rep=$(JSC_HOME="$_home" CODEX_HOME="$_home/codex" JSC_CLI="$cli" \
sh "$HOOKS/sdlc-gate.sh" report </dev/null 2>/dev/null)
if [ "$_rc" -eq 0 ] && printf '%s\n%s' "$_out" "$_rep" | grep -qF "$_want"; then
printf '[jsc] sdlc-gate.sh model(%s):exit 0,來源含 %s,與預期相同。\n' "$_name" "$_want" >> "$smoke_out"
else
smoke_fails=$((smoke_fails + 1))
printf '[jsc] sdlc-gate.sh model(%s):exit %s,來源未命中 %s,輸出:%s\n' \
"$_name" "$_rc" "$_want" "$(printf '%s %s' "$_out" "$_rep" | tr '\n' ' ' | cut -c1-200)" >> "$smoke_out"
fi
rm -rf "$_home"
}
smoke_model_case "transcript 實查" transcript "transcript:"
smoke_model_case "Codex session 記錄" codex "codex-session:"
smoke_model_case "stdin model 欄位" stdin "hook-stdin"
smoke_model_case "JSC_MODEL 人工覆寫" override "人工覆寫:JSC_MODEL"
# 工作包歸屬判定(wp-check 的第二段):上面兩支清空技能名,只走得到「沒有未結清 PR」與
# 「取不到技能名」兩條捷徑,歸屬比對整段都沒跑到。這裡自備一份暫時的 $JSC_HOME 狀態檔,
# 把每條判定路徑各跑一次,驗的是判定結果本身,不只是腳本跑得完。用暫時目錄是為了不動到