# auto-merge-daemon

systemd timer 驱动的 PR 自动合并 daemon。取代 `.gitea/workflows/auto-merge.yml` 的 cron schedule。

完整设计 / 运维文档：[`docs/ops/03-auto-merge-daemon.md`](../../../docs/ops/03-auto-merge-daemon.md)

## 文件

| 文件 | 用途 |
|---|---|
| `auto-merge-daemon.service` | systemd oneshot 服务（每次 tick 执行 `auto-merge-develop.py`） |
| `auto-merge-daemon.timer.template` | systemd timer 模板（部署时 sed `OFFSET_PLACEHOLDER`） |
| `deploy.sh` | 一键部署到指定 host |

合并逻辑本身在 [`../auto-merge-develop.py`](../auto-merge-develop.py)（同时被本 daemon 和 `.gitea/workflows/auto-merge.yml` 的 `workflow_dispatch:` 应急入口共用）。

## 部署

```bash
# 前置：AIBot 账号生成 PAT，scope = write:repository
export AIBOT_MERGE_TOKEN=<token>

# 部署到两台 dedicated runner（错峰 2 分钟，无锁 HA）
bash scripts/ops/auto-merge-daemon/deploy.sh 43.166.205.48 0    # *:0/5
bash scripts/ops/auto-merge-daemon/deploy.sh 43.166.182.155 2   # *:2/5
```

幂等——同一 host 重复运行只会更新文件 + reload systemd，不会留 stale 状态。

## 健康检查

```bash
for h in 43.166.205.48 43.166.182.155; do
  echo "--- $h ---"
  ssh ubuntu@$h "sudo systemctl is-active auto-merge-daemon.timer; sudo systemctl list-timers --no-pager | grep auto-merge"
done
```

## 紧急停用

```bash
for h in 43.166.205.48 43.166.182.155; do
  ssh ubuntu@$h "sudo systemctl stop auto-merge-daemon.timer"
done
```

停后 PR 走人手合（另一团队成员 web UI Approve → Merge）兜底。
