docs(iteration): 补充多实例错位接力机制

This commit is contained in:
HIsheR
2026-10-26 12:52:38 +08:00
parent 9bb0704b0a
commit 1de7ec3166
+14
View File
@@ -13,6 +13,20 @@
- **调度器约束(踩过的坑,勿重复)**:本地调度器只支持 `HOURLY` 及以上粒度(`DAILY/WEEKLY/MONTHLY/YEARLY`),**`FREQ=MINUTELY` / `FREQ=SECONDLY` 不受支持**——写入后 `next_run_at` 会变成 `NULL`,首跑之后永久静默(实测 10/23–10/26 停摆三天)。因此「高频监护」不能靠加密 rrule 实现,只能靠**单次唤起内的连续循环**;心跳间隔 = 1 小时,循环预算 45–50 分钟,两者共同保证覆盖面。任何对自动化的改动(改 prompt、改 rrule、暂停恢复)都必须回查 `next_run_at` 非空,改 prompt 会把状态重置为 `PAUSED`,需再单独置 `ACTIVE`。
- **有效性自检**:每轮迭代首步除同步仓库外,检查 `.ua/loop.lock` 与 `automation_runtime_state.last_run_at`;若发现上次运行距今超过 2 小时(说明调度中断),在留痕 `summary` 里注明「调度中断后恢复」,便于周报统计停摆时长。
## 多实例错位接力
单条自动化的占空比受平台语义限制:**`next_run_at` = 本次运行结束时刻 + `INTERVAL`,不是整点对齐**(实测 12:46:50 结束 → 下次 13:46:50)。`INTERVAL` 下限 1 小时,45 分钟预算下单条仅 `45/(45+60) ≈ 43%` 覆盖面,即「干 45 分、歇 60 分」。因此用**两条同构自动化错位 30 分钟**补齐空档:
| 实例 | 锚点(错位) | 角色 |
|---|---|---|
| A `无人值守迭代循环` | 整点链(当前 13:46:50 → 逐轮顺延) | 主循环 |
| B `…B(错位接力)` | A 之后 30 分钟(当前 14:16:50) | 补位循环 |
- **接力靠 `missed` 队列自动完成**:到点时若另一实例仍持锁,该次被记为 `missed` 并保留 `missedScheduledAt`,待当前实例释放锁后**立即补跑**(实测间隔 9 秒)。无需人工干预,也不占用额外配置。
- **抢锁失败是正常行为**:看到 15 分钟内新鲜锁的实例直接回复「循环存活,未干预」退出——不计失败、不写留痕、不改 backlog。
- **同一把锁、同一份 backlog**:多实例共享 `.ua/loop.lock` 与 `qa/*` 分支流水线,任何时刻只有一个实例在写,冲突由锁而非分支解决。
- **调整排期的方法**:改 `validFrom`(`next = max(now, validFrom) + INTERVAL`),改完必须回查 `next_run_at` 非空且落在期望时刻;改 prompt 会把状态重置为 `PAUSED`,须再单独置 `ACTIVE`。
## 分支流水线
```