#!/usr/bin/env bash
# v1.9.17 M1 R1(承 docs/V1916_RULINGS_36.md 裁1/裁4 · docs/V1917_RULINGS_05.md 裁1):
#   工具钉版 —— `.xuanwu/**` 活码内 `cargo install` 逐处须带【精确】`--version`。
#
# 由: 类 I 红之直接成因(`cargo install` 不带 `--version` ⇒ 随上游 MSRV 上升而破);
#     `R36` 裁4 一手: `.xuanwu` 内无 `--version` 者 `7` 处(跨 `5` 腿)。
#
# 判据(三支 · 皆须能翻转):
#   ① 归零: 活码内 `cargo install` 之处数 = `0`(违者**逐处具名**)
#   ② 精确: 带 `--version` 者,其值须为 `X.Y.Z` 形(可 `=` 前缀 / 预发布尾缀)
#           ⇒ **禁** `^`/`~`/`*`/`>=`/范围/空值(承 `AC` 逐字「逐处精确 `--version`」)
#   ③ 对照: 副本**先归一为【全钉形】**(既有钉者剔 ∧ 无钉者补)⇒ 必绿;
#           于其上**撤一处** ⇒ 必红具名; **改一处为范围钉** ⇒ 必红(★ 器须能翻转)。
#      ★★ 造法**禁依赖【现面之形】** —— 首版唯「补 `--version`」⇒ 于**已修面** `sed` 不中
#        ⇒ 对照成 **no-op**(★ 该跑已报「不可造」并置 `rc=1` ⇒ **未静默** · 本席当场自捕)。
#
# 域(★ 承 P0-1 分母之辨 · `release/v1.9.17/evidence/P0_1_inventory.md` §一.2):
#   `.xuanwu/**` **活码** = 剔【整行注释】∧ 剔 `*.md`(文档引文非活码)。
#   ★ 行续接(`\` 尾)**须先拼接**再匹配 —— 否则 `--version` 落在续行时**假红**。
#
# 用法: bash scripts/tests/check_tool_pins.sh [--root <仓根>]
# 退出码: 0 绿(判据全达) / 1 红(有违规,逐处已具名) / 2 器之自败(域不可读等)
set -uo pipefail

ROOT=""
while [ $# -gt 0 ]; do
    case "$1" in
        --root) ROOT="${2:-}"; shift 2 ;;
        *) echo "[tool-pins] 用法: $0 [--root <仓根>]" >&2; exit 2 ;;
    esac
done
[ -n "$ROOT" ] || ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
[ -d "$ROOT/.xuanwu" ] || { echo "[tool-pins] 器之自败: 域不可读 $ROOT/.xuanwu" >&2; exit 2; }

# ── 面(器自落 · 禁手抄)─────────────────────────────────────────────────────
SELF_SHA="$(sha256sum "$0" | awk '{print $1}')"
echo "== tool-pins · 面 =="
if git -C "$ROOT" rev-parse --git-dir >/dev/null 2>&1; then
    echo "  支 = $(git -C "$ROOT" rev-parse --abbrev-ref HEAD)"
    echo "  尖 = $(git -C "$ROOT" rev-parse HEAD)"
    echo "  树 = $(git -C "$ROOT" rev-parse 'HEAD^{tree}')"
else
    echo "  支/尖/树 = n/a(非 git 工作树 · 对照副本态)"
fi
echo "  器 sha256 = $SELF_SHA"

# ── 活码视图: 拼接续行 ⇒ 逐【调用位】切段 ⇒ `档:行号:段` ──────────────────────
# ★★ 段级粒度之由(**本席当场自捕** · 决定性): 首版唯拼接续行 ⇒ `Dockerfile` 之 `RUN`
#   整块并为**一逻辑行** ⇒ ① 同块内多处 `cargo install` 计为 **1**(分母 `5` ≠ `7`);
#   ② 同块他命令之 `--version`(如 `dist --version`)**串味**入本处之值 ⇒ **假违规②**。
#   ⇒ 正形 = 段界与【调用位】相符: 自 `cargo install` 起至**下一分隔符**(`&&`/`||`/`;`)。
# ★ 行号取【`cargo install` 所在之物理行】(非块首行)—— ★ 具名之精(块首行会指向 `RUN`)。
scan() { # scan <仓根> ⇒ 活码【调用位段】
    local r="$1"
    find "$r/.xuanwu" -type f -name '*.md' -prune -o -type f -print 2>/dev/null \
    | sort \
    | while IFS= read -r f; do
        awk -v F="${f#"$r"/}" '
            function emit(s,   pos, rel, ci, head, nl, s1, out) {
                pos = 1
                while ((rel = index(substr(s, pos), "cargo install")) > 0) {
                    ci = pos + rel - 1
                    head = substr(s, 1, ci - 1)
                    nl = gsub(/\n/, "\n", head)
                    s1 = substr(s, ci)
                    if (match(s1, /&&|\|\||;/)) s1 = substr(s1, 1, RSTART - 1)
                    out = s1; gsub(/\n/, " ", out)
                    printf "%s:%d:%s\n", F, start + nl, out
                    pos = ci + 1
                }
            }
            { if ($0 ~ /^[[:space:]]*#/) {          # ★ 注释物理行: 不参与拼接
                  if (buf != "") buf = buf "\n"     #   (续接态下补 `\n` 以保行号)
                  next
              }
              if (buf == "") start = NR
              line = $0
              if (line ~ /\\$/) { sub(/\\$/, "", line); buf = buf line "\n"; next }
              emit(buf line); buf = ""
            }
            END { if (buf != "") emit(buf) }
        ' "$f"
      done \
    | grep -vE ':[0-9]+:[[:space:]]*#'   # 剔整行注释(切段后之段)
}

# ── 判据① 归零 ∧ 判据② 精确 ────────────────────────────────────────────────
# 逐处抽 `cargo install <crate> [--version <val>]`
# ★ 谓词锚定【调用位之形】(`cargo install` 之逻辑行),**禁**锚定档名/器名
#   (承 P0-1 §四 自捕①: 锚定档名 ⇒ 假阳性)。
CHECK_OUT="$(mktemp)"; trap 'rm -f "$CHECK_OUT"' EXIT

audit() { # audit <仓根> ⇒ 印违规行; 返违规处数
    local r="$1" n=0
    while IFS= read -r row; do
        [ -z "$row" ] && continue
        # 抽取 `cargo install` 之后之参量串(至行尾)
        local args; args="${row#*cargo install }"
        # `--version` 之值(支持 `--version X` 与 `--version=X`)
        local ver; ver="$(grep -oP -- '--version[= ]+\K[^ ]+' <<<"$args" | head -1)"
        if [ -z "$ver" ]; then
            printf '  违规① 无 --version: %s\n' "$row"
            n=$((n + 1)); continue
        fi
        if ! grep -qP '^=?[0-9]+\.[0-9]+\.[0-9]+([-+.][0-9A-Za-z.-]+)?$' <<<"$ver"; then
            printf '  违规② 非精确钉: %s(--version %s)\n' "$row" "$ver"
            n=$((n + 1)); continue
        fi
    done < <(scan "$r" | grep -F 'cargo install')
    return "$n"
}

echo
echo "-- 判据① 归零 + 判据② 精确(域: .xuanwu/** 活码 · 拼接续行后)"
echo "-- 存量(★ 先量存量: 违者逐处具名 · 承 absent-claim-needs-a-named-list)"
N_VIOL=0
audit "$ROOT" > "$CHECK_OUT"; N_VIOL=$?
cat "$CHECK_OUT"
N_SCAN="$(scan "$ROOT" | grep -cF 'cargo install')"
echo "  分母(活码内 cargo install 之处数)= $N_SCAN"
echo "  违规处数 = $N_VIOL"

RC=0
if [ "$N_VIOL" -eq 0 ] && [ "$N_SCAN" -ge 1 ]; then
    echo "[tool-pins] PASS 判据①②($N_SCAN 处皆带精确 --version)"
else
    [ "$N_SCAN" -lt 1 ] && echo "[tool-pins] FAIL 判据①: 分母 = 0 ⇒ 谓词【恒真】之险(域内无 cargo install 可判)" >&2
    [ "$N_VIOL" -gt 0 ] && echo "[tool-pins] FAIL 判据①②: $N_VIOL 处违规(上列具名)" >&2
    RC=1
fi

# ── 判据③ 对照(★ 器须能翻转 · 仓外副本 · **与现面之形无关**)────────────────
# ★★ 造法之律(**本席当场自捕** · 决定性): 对照之造法**禁依赖【现面之形】** ——
#   首版「唯补 `--version`」之法**唯于【未修面】成立**; ★ 于**已修面**该 `sed` **不中**
#   ⇒ 对照成 **no-op**(★ 器已报「不可造」并置 `rc=1` ⇒ **未静默** —— 该闸生效)。
#   ★ 正形 = **先【归一】为全钉形**(既有钉者剔 ∧ 无钉者补)⇒ 二面**同法可造**。
echo
echo "-- 判据③ 对照(仓外副本 · 先归一为【全钉形】⇒ 与现面形无关)"
TMPD="$(mktemp -d)"; trap 'rm -f "$CHECK_OUT"; rm -rf "$TMPD"' EXIT
mkdir -p "$TMPD/base" && cp -a "$ROOT/.xuanwu" "$TMPD/base/.xuanwu"
while IFS= read -r f; do
    # ① 剔 `cargo install <crate>` 后既有之 `--version <val>` ⇒ ② 统一补 `--version 9.9.9`
    sed -i -E -e 's/(cargo install +[A-Za-z0-9_-]+)( +--version +[^ ]+)?/\1/g' \
              -e 's/(cargo install +[A-Za-z0-9_-]+)/\1 --version 9.9.9/g' "$f"
done < <(find "$TMPD/base/.xuanwu" -type f ! -name '*.md')
audit "$TMPD/base" >/dev/null 2>&1; N_FIXED=$?
if [ "$N_FIXED" -eq 0 ]; then
    echo "  对照甲(全钉形)⇒ 违规 0 ✓(谓词能绿)"
else
    echo "  对照甲(全钉形)⇒ 违规 $N_FIXED ✗ —— 谓词【恒红】之险(全钉形亦不绿)" >&2
    audit "$TMPD/base" >&2; RC=1
fi
# 乙/丙 各取【全钉形】之独立副本(★ 免互染)
cp -a "$TMPD/base" "$TMPD/red" && cp -a "$TMPD/base" "$TMPD/rng"
FIRST_OF() { grep -rlE -- '--version +[0-9]' "$1/.xuanwu" 2>/dev/null | sort | head -1; }
F_B="$(FIRST_OF "$TMPD/red")"; F_C="$(FIRST_OF "$TMPD/rng")"
if [ -z "$F_B" ] || [ -z "$F_C" ]; then
    echo "  ✗ 乙/丙 不可造: 全钉形内无钉可撤/可改 ⇒ **记 CTL**(★ 非绿 · 非静默)" >&2
    RC=1
else
    sed -i -E '0,/ --version +[0-9][^ ]*/s// /' "$F_B"
    audit "$TMPD/red" >/dev/null 2>&1; N_FLIP=$?
    if [ "$N_FLIP" -ge 1 ]; then
        echo "  对照乙(撤一处钉)⇒ 违规 $N_FLIP ✓(谓词能红 · 翻转得证)"
        audit "$TMPD/red" | sed 's/^/    /'
    else
        echo "  对照乙(撤一处钉)⇒ 违规 0 ✗ —— 谓词【恒绿】之险(撤一处竟不红 = 零证力)" >&2
        RC=1
    fi
    sed -i -E '0,/ --version +[0-9][^ ]*/s// --version "^9.9"/' "$F_C"
    audit "$TMPD/rng" >/dev/null 2>&1; N_RANGE=$?
    if [ "$N_RANGE" -ge 1 ]; then
        echo "  对照丙(范围钉 ^9.9)⇒ 违规 $N_RANGE ✓(判据② 有判别力)"
    else
        echo "  对照丙(范围钉 ^9.9)⇒ 违规 0 ✗ —— 判据② 无判别力(范围钉竟绿)" >&2
        RC=1
    fi
fi
rm -rf "$TMPD"

echo
echo "== 判据(★ 唯载【不变量】· 读数唯见上列各行 · 禁由本块推)=="
echo "  · 判据① = 活码内 cargo install 之处数【= 0】;"
echo "  · 判据② = --version 之值形为 \`X.Y.Z\`(可 = 前缀 / 预发布尾缀);"
echo "  · 判据③ = 器须【能绿】(**全钉形**)∧【能红】(撤一处钉 / 范围钉); ★ 对照造法**先归一** ⇒ 与现面形无关;"
echo "  · 域 = .xuanwu/** 活码(剔整行注释 ∧ 剔 *.md)· 续行先拼接;"
echo "  · 本器【不】判「钉值是否等于某权威源」—— 该面须另有权威表(现无 ⇒ 不判 · 照实)。"
exit "$RC"