# 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 "" --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)取代