# Changelog — 外网探测脚本 curl / WebSocket 修复

**日期**：2026-06-07

## 摘要

修复 `security_probe_external.sh` 中 `probe()` 对 `shift 3` 的误用，消除 `code=000000ok200` 类误报 `[FAIL]`；WebSocket 段自动解析项目 `venv` 或引导临时 venv 安装 `websockets`。

## 动机

`probe GET /path` 仅 2 个参数时，bash `shift 3` 不移位，`GET` 与 `/health` 被当作 curl 额外 URL，stdout 混入 `000` 错误与响应体，判定逻辑全部失真。

## 涉及文件

- `scripts/security_probe_external.sh`

## 变更（续 2026-06-07 试跑）

- `deploy-production.sh`：`NEXUS_PUBLISH_PORT` 缺失时 `PORT` 默认 **8600**（修复空端口打到 OpenResty 404）

## 变更

- GET：`shift 2`；非 GET：`shift 2` + `shift 1`（消费 body），剩余 `$@` 为额外 curl 参数
- HTTP 状态码写入独立临时文件，避免与 body 混淆
- 统一 `-X "$method"`
- `script-callback` 探测 body 满足 Pydantic 最小长度，确保测到 401 而非 422
- 新增 `resolve_ws_python()`：`NEXUS_PROBE_PYTHON` → `venv/` → 系统 python → `/tmp/nexus-probe-venv` + `websockets==14.1`

## 迁移 / 重启

无。

## 验证

```bash
NEXUS_PROBE_BASE=https://api.synaglobal.vip bash scripts/security_probe_external.sh
# GET /health → [PASS]；install POST → [PASS] 404；无 code=000000... 误报
# WebSocket → [PASS] HTTP 403（不再 [SKIP]）
```
