# [ERR-20260430-002] Gitea act_runner `capacity: 0` 不是硬阻断（软优先级）

## 现象

把 Gitea 主机自带的 `workspace-runner` config `capacity` 从 3 改为 0、`systemctl restart act-runner.service` 后，跑同一个 PR 的 CI：

- `build-check`（重型，3GB+ 内存）→ 落到 `dedicated-runner-1`（capacity=2）✅
- `verify-agent-assets` / `contract-check`（轻量）→ 仍落到 `workspace-runner`（cap=0）

也就是 `cap=0` 在 v1.25.4 + act_runner v0.6.0 这套上**只是降低优先级**，不是排除。

## 复用建议

- 想让 runner **真正不接活**：必须 `sudo systemctl stop act-runner.service`，光改 config 不够
- `cap=0` 适用「主备」场景：让备用 runner 继续保持 online 状态、平时不抢活、但极少数情况下兜底——这正是本项目对 workspace-runner 当前的安排
- 路由策略（实测）：Gitea 把 capacity 当软权重，重型 job 倾向 cap 高的 runner，轻量 job 当 cap=0 也能落到

## 上下文

- PR #195（infra/runner-migrate-off-gitea-host）
- 关联 issue #169（act_runner 迁出 Gitea 主机）
- 关联历史 ERR-20260429-001（Gitea 主机 CI 高负载 SSH/HTTP 全挂）

---

# [ERR-20260430-003] Gitea 主机内存只有 1.9G —— nest build 必 OOM

## 现象

排查 PR #192 build-check 失败时发现：

```
build-check: ❌ Failure - Main Backend build
Killed
signal: terminated
```

跑 `ssh ubuntu@43.130.59.228 free -h`：**total 1.9G**，跑 `npm install` 时 67% 已被吃，`available` 仅 213M。结论：Gitea 主机根本扛不动 nest build / next build（都需要 2-3G+），**任何 build job 落到 workspace-runner 都会 OOM**。

文档之前写的 "起一台便宜 VM (4c8G)" 是新 runner 主机的规格建议——不是 Gitea 自身规格。Gitea 主机一直是低配，跑 web/SSH 已经吃紧，再扛 CI 就崩。

## 复用建议

- 评估"是否能在 X 主机跑 CI" 之前先 `free -h` —— 不要假设 4c8G、不要按文档"建议规格"反推真实规格
- 任何 build job 在小内存 runner 上挂，先怀疑 OOM（`Killed` + `signal: terminated`，无 stack trace）
- 永远不要让 build job 落到 workspace-runner（cap=0 是当前防线，不要动）

## 上下文

- PR #195（infra/runner-migrate-off-gitea-host）
- 主因之一：issue #169 必须迁，本质是「runner 跟 Gitea web 共抢 1.9G 内存」
