#!/bin/sh
# ratchet-watch.sh — 把 AGENTS §0.2.1 标准 ① 挂上必经之路的共用包装。
#
# 🔴 owner 2026-09-14 拍定「补上标准 ② 那个缺口」⇒ 本脚本被两处调用：
#    · .githooks/pre-commit        —— 收尾侧（每次提交 lab）
#    · .claude/settings.json SessionStart —— 起手侧（每次开 session）
#    两处合起来就是 AGENTS §0.2.1 那句「每格起手跑一次、收尾再跑一次」的机制化。
#
# ⛔ 铁律：**绝不阻塞**。本脚本永远 exit 0。
#    理由不是怕麻烦 —— 那些红**多半不是 lab 的账**（被测仓是别人的工作面）。
#    一个会挡我提交、而我又无权修的闸，我只会想办法绕过它 ⇒ 它就退化成恒红 = 零信息（lab:N58）。
#
# ⚠️ 如实登记的上限（⛔ 别读成「已经有人盯着了」）：
#    本脚本只能让 **lab 侧**看见。改了 DS 规则真源的那个人**看不到**这个输出。
#    ⇒ 它把发现成本从「翻仓库」降到「零操作」，⛔ 但不是自动告警，也⛔ 不强制处理。

set -u

LAB_ROOT=$(cd "$(dirname "$0")/.." && pwd)

# 被测仓路径 ⛔ 不写死（换机器必挂）：环境变量优先，否则按同级目录猜。
DS_ROOT="${LAB_DS_ROOT:-$(cd "$LAB_ROOT/../tvu-design-system" 2>/dev/null && pwd || true)}"

# 猜不到 / 不在 ⇒ 静默跳过。⛔ 不报错、⛔ 不阻塞（新机器上这很正常）。
if [ -z "${DS_ROOT}" ] || [ ! -f "${DS_ROOT}/package.json" ]; then
  exit 0
fi

LEDGER="$LAB_ROOT/subjects/tvu-ds/ratchet-ledger.jsonl"
OUT=$(mktemp)
ERR=$(mktemp)

# ⚠️ 分开重定向两条流 —— zsh 的 MULTIOS 会让 `2>&1 >/dev/null` 变成「量两条流之和」（lab:N68）。
node "$LAB_ROOT/metrics/ratchet-watch.mjs" --ds-root "$DS_ROOT" --ledger "$LEDGER" > "$OUT" 2> "$ERR"
CODE=$?

case "$CODE" in
  0)
    echo "🟢 棘轮巡检：没有破的（被测仓 $(basename "$DS_ROOT")）—— ⛔ 这不等于系统是对的，见 AGENTS §0.2.1"
    ;;
  3)
    # 有棘轮破 ⇒ 把量具的表原样打出来（它自己已经排好版、带连红天数）
    cat "$OUT"
    ;;
  2)
    echo "⚠️ 棘轮巡检：用法错（exit 2）—— 修 .githooks/ratchet-watch.sh 的参数"
    head -3 "$ERR"
    ;;
  *)
    # 🔴 exit 1 或其它 = **量具自己崩了**，⛔ 不是「系统坏了」。⛔ 别把装置故障读成被测对象的状态。
    echo "⚠️ 棘轮巡检：量具自己崩了（exit $CODE）—— ⛔ 这⛔ 不是「有棘轮破」，先修量具"
    head -5 "$ERR"
    ;;
esac

rm -f "$OUT" "$ERR"
exit 0
