# ADR-0009: 智能评估执行改为触发式执行（取代 Cron 池）

**状态**: 已接受
**日期**: 2026-08-17
**决策者**: 架构团队
**相关**: 取代 ADR-0007（Cron 池模式）、CONTEXT.md（智能评估词汇）

## Context

智能评估原按 ADR-0007 采用 **Cron 池模式**：平台维护 5-20 个 OpenClaw cron（工作单元），每个 cron 每分钟自唤醒、从平台任务队列取任务执行。2026-08 实际部署验证发现该机制**依赖外部 IM channel**：OpenClaw 的 cron delivery 需要一个 channel 账号，而 webchat 是 Control UI 内置、非 channel 账号，无法用于 delivery；`--command` cron 同样 fail-closed。结果 cron worker 永远无法被唤醒执行，评估卡在 assigned。

## Decision

将智能评估执行改为**触发式执行（Trigger-driven）**：

1. **平台掌控节奏**：lifespan 后台循环每 60s 扫描 executing 评估 → 判断时段到期/欠账 → 入队（任务队列语义不变）
2. **平台按需触发**：有 pending 任务时 `docker exec openclaw-eval openclaw agent --agent main -m "<worker skill + 立即完成，不要等待下一节拍>" --json`，触发一个**无状态 headless agent**（`--deliver` 默认 false，免外部 channel）执行 worker skill，从任务队列取任务，完成即退
3. **平台兜底**：assigned 超时（>10min）重入队（`requeue_stale_assigned_tasks`）；agent 未上报决策日志时按状态补录（`cron_id=platform`）

任务队列、决策日志、评估状态机等共享层原样保留；变化只在"执行主体"：常驻 cron（pull、有状态）→ 按需触发的一次性 agent（push、无状态）。

### 已否决的方案

- **常驻 cron worker**（ADR-0007 原方案）：需外部 IM channel，OpenClaw webchat 非 channel 账号，`--command` cron fail-closed——cron 无法被唤醒
- **平台静态执行**：平台直接驱动对话会退化为静态评测，失去 OpenClaw 的自主决策（ADR-0007 已否决过）

### Consequences

- **Cron 池代码遗留**：cron_pool.py / fault_tolerance.py / openclaw_cron_pool 路由 / Cron 池监控页为遗留，标注 deprecated，导航入口移除；t480 上旧 `intelligent-eval-worker` cron 已禁用（保留 `agenteval-patrol` 独立 cron）
- **卡死检测机制变化**：cron 的 busy/last_active stuck 检测对无状态 agent 不适用，改为平台 assigned 超时重入队
- **触发指令必须带"立即完成"语义**：`openclaw agent` 无 cron state，若只发 skill 名会按 worker skill 的"跨节拍"设计决策后等下一拍而死锁
- **监控载体变化**：旧"定时触发"可视化由任务队列监控页（TaskQueueMonitor）取代
