worktree 閘:heredoc 的 body 是資料不是指令,並把 inkstone/ISEP#125 的驗收表 A–F 寫成測試
#125 缺陷 D/E(09-02 兩次實地命中):用 heredoc 寫一份內含 `cd <目錄> && git checkout X` 示範的 說明文件,整條指令沒有 git 操作卻被擋。沿用 lib/strip_heredoc.py(D20 閘同一支)先剝 body 再解析。 A–F 六條照票上期望值進 hooks/tests/(A–E 0、F 2)。 (76) 把 tokenize 層「換行被當空白吞掉」寫成已知邊界測試(舊閘同樣 exit=0,漏擋不是誤攔,與 (53) 同層,另報)。 A24:69→77。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0178ef1fGw3XeZtpN7LaZrm4
This commit is contained in:
@@ -245,6 +245,46 @@ t 0 "(68) cd 進去再掛前綴:cd <repo> && WORKTREE_OK=1 git checkout main
|
||||
t 0 "(69) 在自己的 worktree 裡也掛了前綴 ⇒ 本來就放行,前綴不礙事" \
|
||||
"WORKTREE_OK=1 git checkout -b feat/x2" "$OWN"
|
||||
|
||||
echo
|
||||
echo "── F 群:inkstone/ISEP#125 驗收表 A–F(票上原文的六條,期望值照票)──"
|
||||
# A 逃生門原文照打→0 B 環境變數裡真的有→0 C 文件裡只寫 'git checkout X'→0
|
||||
# D 文件裡寫 'cd <目錄> && git checkout X'→0 E 同 D 角括號拿掉→0 F 真的要切→2(本體,退化成 0=閘廢了)
|
||||
t 0 "(70) #125-A 逃生門原文照打:WORKTREE_OK=1 git -C <TOP> checkout main ⇒ 0" \
|
||||
"WORKTREE_OK=1 git -C $REPO checkout main" "$PLAIN"
|
||||
t 0 "(71) #125-B 同一句、WORKTREE_OK 真的在 hook 的環境裡 ⇒ 0(本來就是,不要弄壞)" \
|
||||
"git -C $REPO checkout main" "$PLAIN" "CLAUDE_CODE_CHILD_SESSION=1 WORKTREE_OK=1"
|
||||
DOC_C="cat > $ROOT/doc-c.md <<'EOF'
|
||||
把 repo 複製一份,然後 git checkout X
|
||||
EOF
|
||||
echo written"
|
||||
t 0 "(72) #125-C 文件裡只寫 'git checkout X' ⇒ 0" "$DOC_C"
|
||||
DOC_D="cat > $ROOT/doc-d.md <<'EOF'
|
||||
示範:cd <目錄> && git checkout X
|
||||
EOF
|
||||
echo written"
|
||||
t 0 "(73) #125-D 文件裡寫 'cd <目錄> && git checkout X' ⇒ 0(寫文件不是執行;09-02 兩次實地命中)" "$DOC_D"
|
||||
DOC_E="cat > $ROOT/doc-e.md <<'EOF'
|
||||
示範:cd $REPO && git checkout feat/x
|
||||
EOF
|
||||
echo written"
|
||||
t 0 "(74) #125-E 同 D、角括號拿掉、目錄是真的共用目錄 ⇒ 0" "$DOC_E"
|
||||
t 2 "(75) #125-F 真的要切(對照組)⇒ 2 🔴 本體,退化成 0=閘廢了" "cd $REPO && git checkout feat/x" "$PLAIN"
|
||||
# 🔴 已知邊界,寫成測試而不是註解(跟 (53) 同一層、同一個病):tokenize 層把**換行**當空白吞掉,
|
||||
# 多行指令被併成一句 ⇒ `echo hi⏎git checkout main` 從第一版起就看不到(舊閘實測 exit=0,
|
||||
# 同一句改成 `echo hi; git checkout main` 就擋)。剝 heredoc 沒有讓它變好也沒有變壞——
|
||||
# body 剝掉之後留下的仍是「換行分隔的兩句」。要修得動那層,會連帶改到推 main 那道閘的偵測範圍
|
||||
# ⇒ 不在本票裡動(另報)。這條紅了=那層被改了,回頭看 (53) 與推 main 的 10+19 條。
|
||||
t 0 "(76) 已知邊界:heredoc 之後**換行**再真的切 ⇒ 這道閘看不到(漏擋,不是誤攔;(53) 同層)" \
|
||||
"cat > $ROOT/doc-f.md <<'EOF'
|
||||
只是文件
|
||||
EOF
|
||||
git checkout main"
|
||||
t 2 "(77) 同一句換成分號:cat <<'EOF' … EOF; git checkout main ⇒ 照擋(剝掉的只有 body)" \
|
||||
"cat > $ROOT/doc-g.md <<'EOF'
|
||||
只是文件
|
||||
EOF
|
||||
; git checkout main"
|
||||
|
||||
clean
|
||||
echo
|
||||
echo "══ $PASS/$N 通過${FAIL:+,$FAIL 個失敗} ══"
|
||||
|
||||
Reference in New Issue
Block a user