## [ERR-20260425-010] gitea-pr-merge.py 在 SSH 端口 URL 上 detect_repo() 解析失败

**日期**: 2026-04-25
**类别**: 工具脚本 / Gitea API

### 问题
执行 `python3 scripts/ops/gitea-pr-merge.py --pr 138`：
```
PR #138 读取失败: HTTP 404
{"errors":["user redirect does not exist [name: 2222]"],"message":"GetUserByName"}
```

### 根本原因
`detect_repo()` 用 `re.search(rf"{re.escape(GITEA_HOST)}[:/]([^/]+/[^/.]+)", url)` 提取 `owner/repo`。当 origin 是 SSH 端口形式 `ssh://git@43.130.59.228:2222/FFAIWorkspace/workspace.git`：
- 第一个 `[^/]+` 匹配到 `2222`（端口号）
- 第二个 `[^/.]+` 匹配到 `FFAIWorkspace`
- 组合成 `2222/FFAIWorkspace` → API path 错位 → 404 GetUserByName

### 排查/解决
**绕行**：直接 curl Gitea API 手动跑 dance（同样 4 步：read PR → relax 3 字段 → sleep 30s → merge → restore），见 CLAUDE.md "Gitea 平台配置 → PR 自审批 dance"段。

**根因修复**（建议未来 PR 改 scripts/ops/gitea-pr-merge.py:78）：
```python
# 老
m = re.search(rf"{re.escape(GITEA_HOST)}[:/]([^/]+/[^/.]+)", url)
# 新（端口可选）
m = re.search(rf"{re.escape(GITEA_HOST)}(?::\d+)?[:/]([^/]+/[^/.]+)", url)
```

### 预防
- 仓库默认 SSH origin 带端口（`ssh://git@host:2222/...`），脚本默认匹配规则没考虑 URL 多形态。SSH 标准端口（22）不出问题，自定义端口暴露 bug。
- 项目用 Gitea 自建（非 GitHub），SSH 自定义端口是常态。未来类似脚本要先考虑 URL 多形态：
  - `https://host/o/r`、`http://host/o/r`
  - `ssh://git@host/o/r.git`、`ssh://git@host:port/o/r.git`
  - `git@host:o/r.git`

### Metadata
- Reproducible: yes（任何带端口的 SSH origin 必现）
- Related Files: scripts/ops/gitea-pr-merge.py:78

---
