joy-cli/scripts/manhuang/check-net-path-regression.sh
feibisi 8afef51d41 feat(manhuang): deeper net-path — scutil, geo/ASN, rules, board publish
Add system proxy detection via scutil, egress geo/ASN enrichment,
subscription node deltas, Clash rule snippet for shenzhou DIRECT,
regression checker, robust actions-to-board publisher, and UI fields
for sys proxy / geo / serial findings.
2026-07-13 02:34:35 +08:00

64 lines
2 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 网络供应链串线回归:跑 deep 探针并断言「不可接受」状态码
# exit 0 = 通过1 = 探针失败2 = 串线/策略回归失败
#
# 用法:
# bash scripts/manhuang/check-net-path-regression.sh
# bash scripts/manhuang/check-net-path-regression.sh --strict # 系统代理+global 也算失败
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
STRICT=0
[[ "${1:-}" == "--strict" ]] && STRICT=1
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:${PATH:-}"
export PYTHONPATH="${ROOT}/src${PYTHONPATH:+:$PYTHONPATH}"
export STRICT="$STRICT"
echo "[regression] probe-proxy-path --deep ..."
set +e
python3 "$ROOT/scripts/manhuang/probe-proxy-path.py" --deep
prc=$?
set -e
STATUS="${HOME}/.cache/manhuang/net-path/status.json"
if [[ ! -f "$STATUS" ]]; then
echo "[regression] FAIL: no status.json"
exit 1
fi
python3 - <<PY
import json, os, sys
from pathlib import Path
strict = os.environ.get("STRICT", "0") == "1"
st = json.loads(Path.home().joinpath(".cache/manhuang/net-path/status.json").read_text())
level = st.get("level")
iso = st.get("n4_n5_isolation") or {}
risk = iso.get("risk") or "ok"
sp = st.get("system_proxy") or {}
mode = (st.get("primary") or {}).get("mode")
findings = iso.get("findings") or []
print(f"[regression] level={level} risk={risk} mode={mode} sys_proxy={sp.get('enabled')} findings={len(findings)}")
print(f"[regression] headline={st.get('headline')}")
fails = []
# 硬失败crit 串线
if risk == "crit":
fails.append("serial_risk=crit")
# 硬失败controller 都没有
if not (st.get("primary") or {}).get("ok"):
fails.append("controller_down")
# strict系统代理 + global
if strict and sp.get("enabled") and str(mode).lower() == "global":
fails.append("strict:system_proxy+global")
# 打印关键 findings
for f in findings[:8]:
print(f" [{f.get('level')}] {f.get('title')}")
if fails:
print("[regression] FAIL:", ", ".join(fails))
sys.exit(2)
print("[regression] PASS")
sys.exit(0)
PY