#!/usr/bin/env bash
# `v1.7.2` 批10 —— `lint` 面腿(`typos` ∧ `taplo`)· 承 `ar` 裁决 `06` 裁3
#
# 判据面: 仓根 `typos.toml`(家法)∧ `git ls-files '*.toml'`(`taplo` 之域, 与 `ci.yml:884` 同形)
# 器: `typos` ∧ `taplo` ∧ `git`
#
# ★★ 本腿之**由来**(具名 · 非泛设): 批10 勘察时**实跑捕出**批7/批8 遗留之二红 ——
#   `typos`(`sbom/xwcode-skeleton.cdx.json` 未具名排除)∧ `taplo`(`cliff.toml` 未合格式),
#   二者皆 **CI `lint-extra` `job`** 之步(`ci.yml:880` ∧ `:884`)而**不在** `verify_release.sh`
#   之射程 ⇒ **本机门禁绿而 CI 红**, 且自批7/批8 落笔起**恒红**至今(GHA 未真跑 ⇒ 静默)。
#   ⇒ 根因 = 【本机零腿件覆盖 `lint` 面】。本腿即该缺口之机械承载(承裁决06 裁3「准纳入本版」)。
#
# ★★ 本腿之**自指之防**(照实 · 本席首版当场自捕): 首版将探针之误拼**写成字面** ⇒ 该字面随
#   本档入库 ⇒ `G1`(真面 `typos`)**命中本腿自身** ⇒ 恒红。★ 此即 `typos.toml` 头注已立之律
#   (「凡含误词字面之档 ⇒ 须入自指族」)之**同族**, 唯本档系**判据件**(不宜以排除了事)⇒
#   取【**分段拼接**】: 源文本无连续误拼形 ⇒ 扫 blob 不命中, 运行期拼合后方成探针。
#   ★ 并载: 首版另有 `echo` 内**反引号**未转义 ⇒ 被命令替换(同批9 报 `codeql` 之失)⇒ 已改单引号。
#
# ★ 判据形: `G1`/`G2` 判真面二器 `rc=0`; `R1`–`R4` 为**阳性对照**(各器一面, 接入出口码)
#   —— 临时面注入 ⇒ 必红; 同面不注入 ⇒ 绿(隔离其因)。
#
# 用法: bash scripts/tests/lint_face_leg.sh [仓根]
# 退出码: 0 = 绿侧全过 ∧ 红侧咬合(**零 `CTL`**) / 1 = 任一**判据**不符 / 9 = **有 `CTL`(未判)**
#
# ★★ `v1.9.17` 变更记(`test` 域 · 本席 `2026-10-24` · 面 `d2d4a95fd` · 承 `R23` 去向「`F11` 续行」):
#   ★ 本条系 **`F11` 之「快档 `M1=0`(零环境红)」** 之**前件** —— 一手: 本腿于同刻串行复跑 `30`
#     ⇒ **`10/30` 报红**(`33%`)⇒ ★ 若入 `pr-fast` 之 `lint` 组 ⇒ 快档**非「永远可信」**。
#   ★ 病征 ∧ 正形 ∧ 限 **逐条**见 `R1`/`R3` 之正名块。★ 要旨三条:
#     ① 判据**取退出口**(`rc`)· 措辞行降**诊断面**(承 [[rc-must-be-read-from-exit-not-inferred-from-summary]]);
#     ② 新增第三态 `CTL`(**未判**)**另计** ∧ **反映于出口 `9`**(防吞器自败 · 承
#        [[na-branch-can-swallow-instrument-self-failure]]);
#     ③ ★ **未**以重试掩盖间歇(承 [[dose-response-attributes-hidden-cause]])⇒ 根因**仍显名未定**。
#   ★ 并载(**照实 · 非我擅定**): `CTL ⇒ rc=9` 之**门之接法**(是否致红)**归 `ar` 裁** ——
#     本席取「**非绿须与绿相区别**」之现制律(承本仓 `rc` 三值语义)。
set -uo pipefail

HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT="${1:-$(cd "$HERE/../.." && pwd)}"
CFG="$ROOT/typos.toml"
[ -f "$CFG" ] || { echo "缺 $CFG(家法)" >&2; exit 1; }
command -v typos >/dev/null 2>&1 || { echo "缺 typos" >&2; exit 1; }
command -v taplo >/dev/null 2>&1 || { echo "缺 taplo" >&2; exit 1; }

# ★ 探针误拼取**分段拼接**(承档头注「自指之防」)—— 单段短于词形 ⇒ 源文本不成词。
BAD_A="t"; BAD_B="eh"
BAD_WORD="${BAD_A}${BAD_B}"

PASS=0
FAIL=0
ok() { printf '  ✓ %s\n' "$1"; PASS=$((PASS + 1)); }
no() { printf '  ✗ %s\n' "$1"; FAIL=$((FAIL + 1)); }
# ★★ `v1.9.17` 新增第三态(**未判**)—— ★ 由(一手 · 见 `R1`/`R3` 之正名块):
#   「器报错而其【措辞行】未落档」**既非**「咬合」**亦非**「未咬合」⇒ ★ 旧形二支皆判 `no`
#   ⇒ **假红**(实测同腿串行复跑 `30` 次 ⇒ `10/30` 红)。⇒ 本态**另计** ∧ **显名**
#   (承在册 [[na-branch-can-swallow-instrument-self-failure]]: `CTL` **须另计** ∧ 出口须反映)。
CTL=0
ctl() { printf '  ⚠ %s\n' "$1"; CTL=$((CTL + 1)); }

TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT

echo '== lint 面腿(typos ∧ taplo)· 面 = '"$ROOT"' =='
echo "-- 器面(读数须附器之版本): $(typos --version 2>&1) ∧ $(taplo --version 2>&1)"

# ── 绿侧 G1: 真面 `typos`(家法 = 仓根 `typos.toml`)⇒ `rc=0` ──────────────────
echo '-- G1 真面: typos(全域 · 家法)⇒ rc=0'
G1="$TMP/g1.txt"
( cd "$ROOT" && timeout 300 typos ) >"$G1" 2>&1
G1RC=$?
N_HIT="$(grep -c '^error' "$G1" || true)"
if [ "$G1RC" -eq 0 ]; then
    ok 'G1 rc=0(零命中)'
else
    no "G1 rc=$G1RC ∧ 命中 $N_HIT 条"
    grep -E '^error|▸ ' "$G1" | head -8 | sed 's/^/      /'
fi

# ── 绿侧 G2: 真面 `taplo fmt --check`(域 = `git ls-files '*.toml'`, 与 `ci.yml:884` 同形)──
echo "-- G2 真面: taplo fmt --check \$(git ls-files '*.toml') ⇒ rc=0"
G2="$TMP/g2.txt"
( cd "$ROOT" && timeout 300 taplo fmt --check $(git ls-files '*.toml') ) >"$G2" 2>&1
G2RC=$?
if [ "$G2RC" -eq 0 ]; then
    ok "G2 rc=0($(git -C "$ROOT" ls-files '*.toml' | wc -l) 档皆合格式)"
else
    no "G2 rc=$G2RC"
    grep -E '^ERROR' "$G2" | head -6 | sed 's/^/      /'
fi

# ── 红侧 R1/R2: `typos` 之阳性对照 ────────────────────────────────────────────
# ★ 造态面 = `$TMPDIR`(**不入库**); 面内含家法之副本 ⇒ 与真面**同 config**(免「器之域随调用形而变」)。
probe_typos() { # $1 = 目录; $2 = inject|clean
    mkdir -p "$1"
    cp "$CFG" "$1/typos.toml"
    if [ "$2" = "inject" ]; then
        printf 'This line has %s classic misspelling.\n' "$BAD_WORD" >"$1/probe.txt"
    else
        printf 'This line has the classic spelling.\n' >"$1/probe.txt"
    fi
    ( cd "$1" && timeout 120 typos ) >"$1/out.txt" 2>&1
    return $?
}
echo '-- R1 阳性对照: 临时面(同家法)植入一经典误拼(分段拼接)⇒ typos 必红'
R1F="$TMP/t_inject"; probe_typos "$R1F" inject; R1RC=$?
# ★ 同 R3 之显名支(承裁17 §2 同律 · 超时 ⇒ **未判** · 非判「未咬合」)
# ★★ `v1.9.17` 正名(★ 本席实测 `2026-10-24` · 面 `d2d4a95fd` · `F11` 之「快档 `M1=0`」项):
#   病征(**一手**): 同腿**串行复跑 `30`** ⇒ `10/30` 报红; 隔离其**精确形**
#     (`( cd … && timeout 120 taplo fmt --check bad.toml ) > out.txt 2>&1`)⇒ `1/30`;
#     而**独立形**(`$( … )` 捕获)⇒ `30/30` 稳。
#   ⇒ ★ **可断言者**: 器之【**退出口**】稳定(坏形 `rc≠0` `30/30`),而【**措辞行**】**间歇缺失**
#     (`not properly formatted` 未落档)⇒ ★ 旧形**由日志行判** ⇒ **假红**
#     —— ★ 正犯在册 [[rc-must-be-read-from-exit-not-inferred-from-summary]]
#     (「`rc` 须读**退出口** · **禁由汇总行推**」)。
#   ⇒ **正形**: 判据取**退出口**(`rc`); ★ 措辞行降为**诊断面**(在场则印 · 不在场则**显名** · **不判**)。
#   ★★ 防「吞器自败」(承在册 [[na-branch-can-swallow-instrument-self-failure]]):
#     `rc≠0` 唯于**并证器已抵判据点**(输出含该器之**具名面**)时判 `PASS`;
#     输出**全空** ⇒ 无从证(可能是启动即败)⇒ ★ 落 `CTL`(**未判** · 另计 · **非**假红亦**非**假绿)。
#   ★ 防哑闸(承在册 [[control-comparison-must-be-able-to-flip]]): 若器对**任意**输入皆 `rc≠0`
#     ⇒ 本支恒绿 ⇒ 零判别力 —— ★ 然 `R2`/`R4` 之**绿侧对照**(净面/良形 ⇒ `rc=0`)已隔之 ⇒ 二向咬合。
#   ★ 并载(照实 · 限): 本支之**失败形【未观察】**(`30` 次复跑唯 `R3` 报红)⇒ 本支系**同法类推**
#     (与 `R3` **同构** · 同一「显名支」批 · 同一作者)—— ★ **非**行为级实证
#     (承在册 [[structural-claim-needs-behavioral-run]])⇒ 候复现复核。
R1OUT="$(cat "$R1F/out.txt" 2>/dev/null || true)"
if [ "$R1RC" -eq 124 ]; then
    ctl "R1 ★ 逾时被杀 rc=124(**本腿未判**)—— 超时 ≠ 未咬合 · 禁混(候复跑)"
elif [ "$R1RC" -eq 0 ]; then
    no "R1 未咬合 rc=0(注入面 typos 竟绿 ⇒ 器无咬合力)"
    head -6 "$R1F/out.txt" | sed 's/^/      /'
elif [ -z "$R1OUT" ]; then
    ctl "R1 ★ rc=$R1RC 而输出**全空**(**未判**)—— 无从证器已抵判据点(显名 · 非判「未咬合」)"
elif printf '%s' "$R1OUT" | grep -q "$BAD_WORD"; then
    ok "R1 咬合 rc=$R1RC ∧ 命中具名($(printf '%s' "$R1OUT" | grep -oE "\`$BAD_WORD\` should be" | head -1))"
elif printf '%s' "$R1OUT" | grep -qE 'probe\.txt'; then
    ok "R1 咬合 rc=$R1RC(★ 措辞行未落档 · 然输出**并证器已抵该档**)"
    head -6 "$R1F/out.txt" | sed 's/^/      /'
else
    ctl "R1 ★ rc=$R1RC 而输出**既无措辞亦无具名面**(**未判**)—— 显名 · 非判「未咬合」"
    head -6 "$R1F/out.txt" | sed 's/^/      /'
fi
echo '-- R2 对照: 同形临时面不植入 ⇒ typos 绿(隔离 R1 之差因)'
R2F="$TMP/t_clean"; probe_typos "$R2F" clean; R2RC=$?
if [ "$R2RC" -eq 124 ]; then
    no "R2 ★ 逾时被杀 rc=124(**本腿未判**)—— 同律(候复跑)"
elif [ "$R2RC" -eq 0 ]; then
    ok 'R2 rc=0(同形面不植入)⇒ R1 之差可归于【植入项】而非面之差'
else
    no "R2 rc=$R2RC ⇒ 造态面自身不绿 ⇒ R1 之因不可归"
    # ★★ `v1.9.14` 补 dump(承 `ar` 裁 `R26` §裁1 · `2026-10-23` · 报备制 · `test` 域器面小修):
    #   ★ 同 `R3` 之律(`R25` §裁2): 报「不绿」而**无 dump** ⇒ ★ 读数**不可归因**
    #   (承在册 [[observation-face-must-be-named]])。★ 输出面之补 · **不改判据**。
    head -6 "$R2F/out.txt" 2>/dev/null | sed 's/^/      /'
fi

# ── 红侧 R3/R4: `taplo` 之阳性对照 ───────────────────────────────────────────
# ★ 坏形取【数组元素缩进不合】(本席于探针面实证: `taplo fmt --check` ⇒ `rc=1`)——
#   即 `cliff.toml` 原病之**同形**(非臆造之坏形)。
echo '-- R3 阳性对照: 临时面植入坏格式 toml ⇒ taplo 必红'
mkdir -p "$TMP/p_inject"
printf '[a]\nb = [\n    "x",\n]\n' >"$TMP/p_inject/bad.toml"
( cd "$TMP/p_inject" && timeout 120 taplo fmt --check bad.toml ) >"$TMP/p_inject/out.txt" 2>&1
R3RC=$?
# ★★ 显名支(承 `ar` 裁决17 §2 · `2026-10-21` · `test` 域修):
#   原谓词 `R3RC -ne 0 && grep -q 'not properly formatted'` **混【超时】与【真未咬合】** ——
#   并发下 `timeout 120` 杀 `taplo` ⇒ `rc=124` ∧ **无** `not properly formatted` 输出
#   ⇒ 落 `else` 支 ⇒ ★ **假红「器无咬合力」**(一手: 直跑 `PASS=6 FAIL=0` 印证谓词**真咬合**)。
#   ⇒ 本支使【超时】与【无输出】**显名**,**不**径判「未咬合」(承在册 `observation-face-must-be-named`
#     同律: 读数之【无】≠ 被测之【否】)。
R3OUT="$(cat "$TMP/p_inject/out.txt" 2>/dev/null || true)"
# ★★ `v1.9.17` 正名(★ 本席实测 `2026-10-24` · 面 `d2d4a95fd` · `F11` 之「快档 `M1=0`」项):
#   `v1.9.14` 之正名(下块)已识病征「`taplo` 报错而其 `ERROR` 行未落档」∧ 立**二分**;
#   ★ 然二支**皆判 `no`** ⇒ ★ 病征**改名而未改判** ⇒ **假红仍在**。
#   **一手**(本役): 同腿**串行复跑 `30`** ⇒ `10/30` 红(`33%`); 隔离其**精确形** ⇒ `1/30`;
#     而**独立形**(`$( … )` 捕获 · 无 subshell 重定向)⇒ `30/30` 稳。
#   ⇒ ★ **可断言者**: 器之【**退出口**】稳定(坏形 `rc≠0` · `30/30`)—— ★ 即**器确已咬合**;
#     【**措辞行**】间歇缺失 ⇒ ★ 旧形**由日志行判** ⇒ **假红**
#     —— ★ 正犯在册 [[rc-must-be-read-from-exit-not-inferred-from-summary]]。
#   ⇒ **正形**: 判据取**退出口**; 措辞行降为**诊断面**(在场则印 · 不在场则**显名** · **不判**)。
#   ★★ 防「吞器自败」: `rc≠0` 唯于**并证器已抵判据点**(输出含 `taplo` 之**具名面**
#     `format_files` · 实测之失败形**恰**含之)时判 `PASS`; 输出**全空** ⇒ `CTL`(**未判**)。
#   ★ 防哑闸: `R4` 之**绿侧对照**(良格式 ⇒ `rc=0`)已隔「器恒红」之差因 ⇒ 二向咬合。
#   ★ 并载(照实 · 限): 「措辞行未落档」之**根因仍未定**(`v1.9.14` 候选三: 刷出竞态/
#     重定向缓冲/重负载同期; `ar` 裁 `R27` §裁2 否决本版深挖)⇒ ★ 本支**不**以重试掩盖之
#     (承在册 [[dose-response-attributes-hidden-cause]]: 禁以结果充因由)⇒ **显名**留档。
if [ "$R3RC" -eq 124 ]; then
    ctl "R3 ★ 逾时被杀 rc=124(**本腿未判**)—— 承裁17 §2: 超时 ≠ 未咬合 · 禁混(候复跑)"
elif [ "$R3RC" -eq 0 ]; then
    no "R3 未咬合 rc=0(坏格式竟绿 ⇒ 器无咬合力)"
    head -6 "$TMP/p_inject/out.txt" | sed 's/^/      /'
elif [ -z "$R3OUT" ]; then
    ctl "R3 ★ rc=$R3RC 而输出**全空**(**未判**)—— 无从证器已抵判据点(显名 · 非判「未咬合」)"
elif printf '%s' "$R3OUT" | grep -q 'not properly formatted'; then
    ok "R3 咬合 rc=$R3RC ∧ taplo 报 not properly formatted"
elif printf '%s' "$R3OUT" | grep -q 'format_files'; then
    ok "R3 咬合 rc=$R3RC(★ 措辞行未落档 · 然输出**并证器已抵该档**)"
    head -6 "$TMP/p_inject/out.txt" | sed 's/^/      /'
else
    ctl "R3 ★ rc=$R3RC 而输出**既无措辞亦无具名面**(**未判**)—— 显名 · 非判「未咬合」"
    head -6 "$TMP/p_inject/out.txt" | sed 's/^/      /'
fi
echo '-- R4 对照: 同形面之良格式 toml ⇒ taplo 绿(隔离 R3 之差因)'
mkdir -p "$TMP/p_clean"
printf '[a]\nb = "x"\n' >"$TMP/p_clean/good.toml"
( cd "$TMP/p_clean" && timeout 120 taplo fmt --check good.toml ) >"$TMP/p_clean/out.txt" 2>&1
R4RC=$?
# ★ 同 R3 之显名支(逾时 ⇒ **未判** · 非「器于良格式亦红」之假红)
if [ "$R4RC" -eq 124 ]; then
    no "R4 ★ 逾时被杀 rc=124(**本腿未判**)—— 承裁17 §2 同律(候复跑)"
elif [ "$R4RC" -eq 0 ]; then
    ok 'R4 rc=0(良格式)⇒ R3 之差可归于【坏格式项】而非器之恒红'
else
    no "R4 rc=$R4RC ⇒ 器于良格式亦红 ⇒ R3 之因不可归"
    # ★★ `v1.9.14` 补 dump(承 `ar` 裁 `R26` §裁1 · 同 `R3` 之律 · 报备制):
    #   ★ 报「不绿」而**无 dump** ⇒ ★ 读数**不可归因**。★ 输出面之补 · **不改判据**。
    head -6 "$TMP/p_clean/out.txt" 2>/dev/null | sed 's/^/      /'
fi

echo "== 结果: PASS=$PASS FAIL=$FAIL CTL=$CTL =="
if [ "$CTL" -ne 0 ]; then
    echo "  ⚠ CTL=$CTL(**未判**腿数)—— ★ **非绿**(承在册 [[na-branch-can-swallow-instrument-self-failure]]:" >&2
    echo "     『n/a』/未判 支若不计 ∧ 不反映于出口 ⇒ 吞器自败 ⇒ 假绿)" >&2
fi
[ "$FAIL" -eq 0 ] || exit 1
[ "$CTL" -eq 0 ] || exit 9
exit 0