#!/bin/sh
# 2026-10-16 降级为「快速 lint + docs gate」：全量测试（10-20 分钟）移交 CI
# （.github/workflows/ci.yml test job，同款 run-tests + 套件隔离）。理由：全量门在
# 本地并发负载下轮换假红（batch-tick/thin-done-dirty/audit-quick/committed-drift/
# cross-worktree-ghost 等套件单跑全绿、全量偶发失败）连拦五次推送，且单跑定位均为
# 绿——套件间干扰面，非代码回归。CI 红灯即阻断合并口径不变；本地保留秒级 lint +
# docs ratchet 兜文档面。需要全量本地跑：npm test。
echo "🔧 pre-push: running lint (fast) + docs gate... 全量测试由 CI 执行（.github/workflows/ci.yml）"
npm run lint --silent 2>&1
if [ $? -ne 0 ]; then
  echo "❌ pre-push: lint failed, aborting push"
  exit 1
fi
# docs gate ratchet（doc-consistency-debt 第七节）：docs check 失效数 ≤ 基线放行。
# 基线 .sillyspec/docs-check-baseline 缺失/损坏时 fail-closed exit 2 拦截。
# --against HEAD（坑 docs-gate-shared-worktree-parallel-block）：按被推送的提交树校验——
# 推的是提交不是工作区；并行会话在途编辑造成的锚点瞬时漂移不再拦无关推送（移动靶）。
node bin/sillyspec.js docs gate --against HEAD 2>&1
if [ $? -ne 0 ]; then
  echo "❌ pre-push: docs gate failed, aborting push"
  exit 1
fi
# archive_integrity advisory（2026-09-17 D14 收尾裁决第一段）：零阻断只露出——
# 欠账清零并稳定后另裁第二段（镜像 docs-gate 的 ratchet 棘轮，只拦新增劣化）。
node bin/sillyspec.js doctor --json 2>/dev/null | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>{try{const j=JSON.parse(s);const d=(j.dimensions||[]).find(x=>x&&x.name==='archive_integrity');if(d&&d.pass===false){console.log('⚠️ [advisory·不阻断] archive_integrity: '+String(d.evidence).split('；')[0]);}}catch(e){/* doctor JSON 异常不干扰 push */}})"
echo "✅ pre-push: lint + test + docs gate passed"
