# Changelog — 一次性调度失败回滚（2026-06-04）

## 摘要

修复 `run_mode=once` 的推送/脚本调度在执行失败后无法再次触发的问题。

## 动机

调度器在触发前将 `enabled=False` 并写入 `last_run_at` 以防重复触发；若随后执行失败，旧逻辑只对 cron 回滚 `last_run_at`，一次性任务保持禁用，运维侧表现为「任务跑了一次就永远消失」。

## 变更

| 文件 | 说明 |
|------|------|
| `server/background/schedule_runner.py` | 新增 `rollback_schedule_after_failed_run()`；失败时 once 恢复 `enabled=True` |
| `tests/test_schedule_runner_once.py` | 回滚行为单测 |
| `docs/reports/audit-bug-line-walk-2026-06-04-batch2.md` | BUG Batch 2 审计报告 |

## 迁移 / 重启

- 需重启 Nexus 后端（Supervisor `nexus`）以加载 `schedule_runner` 变更。
- 无数据库迁移。

## 验证

```bash
ruff check server/background/schedule_runner.py
pytest tests/test_schedule_runner_once.py -q
```

## 关联

- BUG-06-04-04（Batch 2）
- 前序：Batch 1 安装锁与 script callback 聚合 — `docs/changelog/2026-06-04-install-lock-atomic.md`
