fix(verify-release): 429 被判成死链 —— 外链门禁开始误报自己人

发版前跑 verify-release,H 段报 `死链(429): https://windsurf.com`。手工用浏览器
UA 复核了几次,稳定 429 —— 站点活着,只是对反复验活限流。

判活口径写的是 `2*|3*|403`,把「服务器答复了但不是 200/403」一律当死。而 429 恰恰
证明 URL 存在:能限流就是能路由到资源。

这条门禁自己的立项理由是「一个会误报的门禁比没有门禁更糟:人会学会忽略它」。
它现在正在做那件事:唯一的 FAIL 每次都是同一条误报,跑几次就会开始忽略整段输出。

判活口径改为 `2*|3*|401|403|405|429` —— 都属于「答复了,只是不欢迎自动化访问」:

| 码 | 含义 | 为什么不是死 |
|---|---|---|
| 401 | 要登录 | 资源存在,只是要凭证 |
| 403 | 拒爬虫 | 原本就在白名单里 |
| 405 | 不认这个请求方式 | 服务器识别了这个路径 |
| 429 | 限流 | 能限流就是能路由到资源 |

真正的死仍然只有两种:404/410,以及连不上(curl 返回空)。

双向验证:
- 往 docs/README.aider.md 塞一条 github.com/anthropics/this-repo-does-not-exist-xyz,
  门禁照报 `死链(404)`,FAIL 1 —— 没被这次放宽削弱
- 还原后 115 pass / 0 fail
This commit is contained in:
AI不止语
2026-08-28 22:37:33 +08:00
parent 1f66b091b7
commit c7713cac65

View File

@@ -262,7 +262,7 @@ if curl -sS -o /dev/null --max-time 5 https://github.com 2>/dev/null; then
grep -rhoE "https://[a-zA-Z0-9./_-]+" "$REPO"/docs/*.md "$REPO"/README.md "$REPO"/README.zh-Hant.md 2>/dev/null \
| grep -viE "jnmetacode|aiolaola|user-images|shields\.io|opensource\.org|makeapullrequest|npmjs\.com|compshare|cubence|claude\.ai/code" \
| sed 's/[.,)]*$//' | sort -u \
| xargs -P 10 -I{} sh -c 'c=$(curl -sS -o /dev/null -w "%{http_code}" -L --max-time 8 "$1" 2>/dev/null); case "$c" in 2*|3*|403) ;; *) echo "$1" ;; esac' _ {} \
| xargs -P 10 -I{} sh -c 'c=$(curl -sS -o /dev/null -w "%{http_code}" -L --max-time 8 "$1" 2>/dev/null); case "$c" in 2*|3*|401|403|405|429) ;; *) echo "$1" ;; esac' _ {} \
> "$LINKTMP" 2>/dev/null
# 第二遍:只对嫌疑名单串行复核,放宽超时并让 curl 自己重试。两遍都判死才算死。
suspects=$(wc -l < "$LINKTMP" | tr -d ' ')
@@ -271,8 +271,14 @@ if curl -sS -o /dev/null --max-time 5 https://github.com 2>/dev/null; then
while read -r u; do
[ -z "$u" ] && continue
c=$(curl -sS -o /dev/null -w "%{http_code}" -L --max-time 25 --retry 2 --retry-delay 1 "$u" 2>/dev/null)
# 判活口径 = 「服务器答复了」,而不是「答复是 200」
# 401 要登录、403 拒爬虫、405 不认 HEAD/GET 的方式、429 限流
# —— 这四种都证明 URL 存在,只是不欢迎自动化访问。
# 429 是实测加的windsurf.com 对反复验活稳定返回 429浏览器 UA 也一样),
# 而链接本身是活的。判成死链就是误报,而误报的门禁会被学会忽略 —— 那还不如没有。
# 真正的死只有两种4xx 里的 404/410以及连不上curl 返回空)。
case "$c" in
2*|3*|403) ;;
2*|3*|401|403|405|429) ;;
*) bad "死链(${c:-无响应}: ${u}"; dead=$((dead+1)) ;;
esac
done < "$LINKTMP"