#!/usr/bin/env bash
set -uo pipefail
cd "$(dirname "$0")/../.." || exit 1
ROOT="$(pwd)"
read -r -d '' J_ALLOW <<'ALLOW' || true
6 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/ok.log" 2>&1 || true
4 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/bad.log" 2>&1 || true
2 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && env -u XW_ADJUDICATE_SKIP bash scripts/verify_release.sh) > "$repo/nokey.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && XW_ADJUDICATE_SKIP="$keys" bash scripts/verify_release.sh) > "$repo/right.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && XW_ADJUDICATE_SKIP="$wrong" bash scripts/verify_release.sh) > "$repo/wrong.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && XW_ADJUDICATE_SKIP="$bare" bash scripts/verify_release.sh) > "$repo/bare.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/out.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/post.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/none.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/nolabel.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/noanchor.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/oldanchor.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo" && bash scripts/verify_release.sh) > "$repo/cond.log" 2>&1 || true
1 @@ scripts/tests/verify_release_gate_selftest.sh @@ (cd "$repo2" && bash scripts/verify_release.sh) > "$repo2/out.log" 2>&1 || true
1 @@ scripts/tests/golden_baseline_sm33.sh @@ "$@" --cwd "$ws" ) >"$snap/stdout.raw" 2>"$snap/stderr.raw" || true
1 @@ .xuanwu/snippets/install-cargo-binstall.sh @@ "/usr/local/bin/${BIN_NAME}" --version || "/usr/local/bin/${BIN_NAME}" -V || true
ALLOW
SELF_REL="scripts/tests/no_swallow_leg.sh"
echo "== no-swallow · 面 =="
echo " 支 = $(git rev-parse --abbrev-ref HEAD)"
echo " 尖 = $(git rev-parse HEAD)"
echo " 树 = $(git rev-parse 'HEAD^{tree}')"
echo " 器 sha256 = $(sha256sum "$0" | awk '{print $1}')"
echo " 剔器自身 = $SELF_REL(★ 由: 本器源码含 \`|| true\` 字面 ⇒ 不剔则**自计脏数**)"
alive() {
local r="$1"
find "$r/.xuanwu" "$r/scripts/tests" -type d -name '__pycache__' -prune -o -type f ! -name '*.md' -print 2>/dev/null | sort \
| while IFS= read -r f; do
rel="${f#"$r"/}"
[ "$rel" = "$SELF_REL" ] && continue
awk -v F="$rel" '!/^[[:space:]]*#/ { printf "%s:%d:%s\n", F, NR, $0 }' "$f"
done
}
norm() { printf '%s' "$1" | tr -s ' \t' ' ' | sed -e 's/^ //' -e 's/ $//'; }
key() {
local row="$1" f ln s
f="${row%%:*}"; ln="${row#*:}"; ln="${ln%%:*}"
s="${row#*:}"; s="${s#*:}"
printf '%s @@ %s\n' "$f" "$(norm "$s")"
}
J_LIST="$(mktemp)"; M_LIST="$(mktemp)"; ALL_LIST="$(mktemp)";
trap 'rm -f "$J_LIST" "$M_LIST" "$ALL_LIST"' EXIT
alive "$ROOT" | grep -F '|| true' > "$ALL_LIST"
while IFS= read -r row; do
[ -z "$row" ] && continue
k="$(key "$row")"
s="${k#* @@ }"
if grep -qE '\) *> *[^|]*\|\| true' <<<"$s" || { [[ "$s" == *'|| true' ]] && [[ "$s" != *'$('* ]] && [[ "$k" == .xuanwu/* ]]; }; then
printf '%s\n' "$k" >> "$J_LIST"
else
printf '%s\n' "$k" >> "$M_LIST"
fi
done < "$ALL_LIST"
RC=0
N_J="$(wc -l < "$J_LIST")"; N_M="$(wc -l < "$M_LIST")"
if [ -f "$ROOT/$SELF_REL" ] && [ -z "$(find "$ROOT/scripts/tests" -type f -name "$(basename "$SELF_REL")" 2>/dev/null | head -2 | tail -1)" ]; then
:
fi
N_SELF="$(find "$ROOT/scripts/tests" -type f -name 'no_swallow_leg.sh' | wc -l)"
echo
echo " 剔器自身之自检: 命中档数 = $N_SELF(期 ≥ 1 ⇒ 剔除非 no-op)"
[ "$N_SELF" -ge 1 ] || { echo " ✗ 排除成 no-op($SELF_REL 不在域内)⇒ 谓词域与所剔之名不同形" >&2; RC=1; }
echo
echo "-- 判据① J 类(判据执行行)⇄ allow-list"
echo " J 类计数 = $N_J(期 = 25)"
sort "$J_LIST" | uniq -c | sort -rn | sed 's/^/ /'
if [ "$N_J" -ne 25 ]; then
echo " ✗ 判据① 计数不符: $N_J ≠ 25" >&2; RC=1
fi
sort "$J_LIST" | uniq -c | awk '{$1=$1; print}' | sed -E 's/^([0-9]+) (.*)$/\1 @@ \2/' | sort > "$J_LIST.agg"
printf '%s\n' "$J_ALLOW" | sed '/^$/d' | sort > "$J_LIST.allow"
if diff -u "$J_LIST.allow" "$J_LIST.agg" > /dev/null 2>&1; then
echo " ✓ 判据① 集合 ⇄ 多重度 **逐键逐数相符**(15 键 / 25 处)"
else
echo " ✗ 判据① 与 allow-list 不符(★ 名单外 = 新增 J 类; ★ 名单内而少 = 名单腐):" >&2
diff -u "$J_LIST.allow" "$J_LIST.agg" | sed 's/^/ /' >&2
RC=1
fi
echo
echo "-- 判据② M 类(读值/计数/清理/准备 · **放行**)全名单"
echo " M 类计数 = $N_M"
sort "$M_LIST" | sed 's/^/ /'
echo " ★ 并载(照实 · 限): M 类之「空值须显名 <不可读>」系**逐处语义**判 ⇒ 本腿**只印名单 · 不判红**。"
PLACEHOLDER_RE='<不可读>|n/a|unknown|unavailable|未取|不判'
m_empty_scan() {
local r="$1" row f rest ln s ns ctx nxt named masq dflt v
alive "$r" | grep -F '|| true' | while IFS= read -r row; do
f="${row%%:*}"; rest="${row#*:}"; ln="${rest%%:*}"; s="${rest#*:}"
ns="$(norm "$s")"
[[ "$ns" =~ ^[A-Za-z_][A-Za-z0-9_]*= ]] || continue
printf 'ASSIGN\t%s:%s\n' "$f" "$ln"
ctx="$ns"
if [ -r "$r/$f" ]; then
nxt="$(sed -n "$((ln + 1))p" "$r/$f" 2>/dev/null)"
ctx="$ctx
$(norm "$nxt")"
fi
named=0; masq=""
grep -qE "$PLACEHOLDER_RE" <<<"$ctx" && named=1
grep -qE '\[[[:space:]]*-[nz][[:space:]]' <<<"$ctx" && named=1
while IFS= read -r dflt; do
[ -z "$dflt" ] && continue
v="${dflt##*:-}"; v="${v%\}}"
if grep -qE "$PLACEHOLDER_RE" <<<"$v"; then named=1; else masq="$dflt"; fi
done < <(grep -oE '\$\{[A-Za-z_][A-Za-z0-9_]*:-[^}]*\}' <<<"$ctx" 2>/dev/null || true)
if [ -n "$masq" ]; then
printf 'MASQ\t%s:%s\t%s\n' "$f" "$ln" "$masq"
elif [ "$named" -eq 0 ]; then
printf 'RISK\t%s:%s\t%s\n' "$f" "$ln" "$ns"
fi
done
}
echo
echo "-- 判据②之补(★ R18 裁1 余项 · **格式检查**)M 类空值显名"
M_SCAN="$(m_empty_scan "$ROOT")"
N_M_ASSIGN="$(grep -c '^ASSIGN' <<<"$M_SCAN" || true)"
N_M_RISK="$(grep -c '^RISK' <<<"$M_SCAN" || true)"
N_M_MASQ="$(grep -c '^MASQ' <<<"$M_SCAN" || true)"
N_M_NAMED=$((N_M_ASSIGN - N_M_RISK - N_M_MASQ))
grep '^RISK' <<<"$M_SCAN" | cut -f2,3 | sed 's/^/ ⚠ 空值未显名: /'
grep '^MASQ' <<<"$M_SCAN" | cut -f2,3 | sed 's/^/ ⚠ 默认值冒充读数: /'
echo " 赋值形 M 类 = $N_M_ASSIGN(分母)· 已显名 = $N_M_NAMED · ⚠ 空值未显名 = $N_M_RISK · ⚠ 默认值冒充读数 = $N_M_MASQ"
echo " ★ 本补【不判红】(R18 裁1: 逐处语义不判)—— 上列 ⚠ 系**读数** · 供 ar 定夺是否另立判据。"
echo
echo "-- 判据③ 对照: 副本注入一处 J 形 ⇒ 必红(★ 造法不依赖现面之形)"
TMPD="$(mktemp -d)"; trap 'rm -f "$J_LIST" "$M_LIST" "$ALL_LIST" "$J_LIST.agg" "$J_LIST.allow"; rm -rf "$TMPD"' EXIT
mkdir -p "$TMPD/x/scripts/tests" "$TMPD/x/.xuanwu/snippets"
printf '#!/bin/bash\nf(){ ( cd /tmp && bash scripts/verify_release.sh ) > /tmp/a.log 2>&1 || true; }\n' > "$TMPD/x/scripts/tests/probe.sh"
printf '#!/bin/bash\necho hi\n' > "$TMPD/x/.xuanwu/snippets/plain.sh"
N_PROBE="$(alive "$TMPD/x" | grep -F '|| true' | while IFS= read -r r; do key "$r"; done | grep -cE '\) *> *[^|]*\|\| true')"
if [ "$N_PROBE" -ge 1 ]; then
echo " ✓ 对照咬合(注入 J 形 ⇒ 谓词命中 $N_PROBE 处 · 翻转得证)"
else
echo " ✗ 对照未咬合(注入 J 形竟 0 命中)—— 谓词无判别力" >&2; RC=1
fi
printf '#!/bin/bash\nf(){ ( cd /tmp && bash scripts/verify_release.sh ) > /tmp/a.log 2>&1 ; }\n' > "$TMPD/x/scripts/tests/probe.sh"
N_PROBE2="$(alive "$TMPD/x" | grep -F '|| true' | while IFS= read -r r; do key "$r"; done | grep -cE '\) *> *[^|]*\|\| true')"
if [ "$N_PROBE2" -eq 0 ]; then
echo " ✓ 反向对照(撤去 \`|| true\` ⇒ 0 命中 · 隔离「凡 > 皆命中」之退化)"
else
echo " ✗ 反向对照未过(撤去 \`|| true\` 仍命中 $N_PROBE2)—— 谓词过宽" >&2; RC=1
fi
echo
echo "-- 判据③ 第二组: ②之补之器(M 类空值显名)须能【翻转】"
printf '#!/bin/bash\nv="$(grep -c x /dev/null || true)"\n' > "$TMPD/x/scripts/tests/probe2.sh"
C_RISK="$(m_empty_scan "$TMPD/x" | grep -c '^RISK' || true)"
if [ "$C_RISK" -ge 1 ]; then
echo " ✓ 咬合(赋值形吞错而无显名 ⇒ 报 ⚠ 空值未显名 $C_RISK 处)"
else
echo " ✗ 未咬合(赋值形吞错竟不报 ⚠)—— ②之补之器零判别力" >&2; RC=1
fi
printf '#!/bin/bash\nv="$(grep -c x /dev/null || true)"; v="${v:-<不可读>}"\n' > "$TMPD/x/scripts/tests/probe2.sh"
C_RISK2="$(m_empty_scan "$TMPD/x" | grep -c '^RISK' || true)"
C_MASQ2="$(m_empty_scan "$TMPD/x" | grep -c '^MASQ' || true)"
if [ "$C_RISK2" -eq 0 ] && [ "$C_MASQ2" -eq 0 ]; then
echo " ✓ 显名占位 \`\${v:-<不可读>}\` ⇒ 0 报(隔离「凡赋值皆报」之退化)"
else
echo " ✗ 显名占位仍被报(RISK=$C_RISK2 MASQ=$C_MASQ2)—— 谓词过宽" >&2; RC=1
fi
printf '#!/bin/bash\nv="$(grep -c x /dev/null || true)"; v="${v:-0}"\n' > "$TMPD/x/scripts/tests/probe2.sh"
C_MASQ3="$(m_empty_scan "$TMPD/x" | grep -c '^MASQ' || true)"
if [ "$C_MASQ3" -ge 1 ]; then
echo " ✓ 默认值冒充读数 \`\${v:-0}\` ⇒ 报 ⚠ MASQ $C_MASQ3 处(★ 承 [[shell-default-expansion-masquerades-as-reading]])"
else
echo " ✗ 未咬合(\`\${v:-0}\` 竟不报 MASQ)—— 该子判零判别力" >&2; RC=1
fi
rm -f "$TMPD/x/scripts/tests/probe2.sh"
rm -rf "$TMPD"
echo
echo "== 判据(★ 唯载【不变量】· 读数唯见上列各行 · 禁由本块推)=="
echo " · 判据① = J 类集合⇄多重度须与 allow-list(15 键 / 25 处)逐键逐数相符;"
echo " · 判据② = M 类印全名单(放行)· ★ 空值显名之判本腿【不判】(照实);"
echo " · 判据②之补(R18 裁1)= M 类【赋值形】之**格式检查**(⚠ 空值未显名 / ⚠ 默认值冒充读数)"
echo " —— ★ **只印 ⚠ + 计数 · 不判红**(逐处语义不判 · 不膨胀新判据);"
echo " · 判据③ = 器须能【咬合】(注入 J 形必命中)∧【不过宽】(撤 \`|| true\` 必不命中);"
echo " · 判据③第二组 = ②之补之器须能【翻转】(赋值吞错必报 RISK ∧ 显名占位必不报 ∧ \${v:-0} 必报 MASQ)"
echo " —— ★ 所判者 = 「器有判别力」(**非**「M 类合规」);"
echo " · 域 = .xuanwu/** + scripts/tests/** 活码(剔注释物理行 ∧ 剔 *.md);"
echo " · 形1 = \`\\) *> *[^|]*\\|\\| true\` ∧ 形2 = .xuanwu/** 内末行验证 \`|| true\`(无 \`\$(\`)."
exit "$RC"