# 02 — 调度决策纯函数 + 派生子 Run **What to build:** 给定一个活动的静态计划和"当前活动时钟位置",一个纯函数能算出此刻应派生哪些子 Run(以及活动是否已到窗口终点)。据此实际派生普通 Run——每个子 Run 复用现有单次评测的执行路径、带上活动归属,跑完后其结果照常入库。这一票让"活动能真的按计划生出评测"成立,但不含自动循环(由测试或手动推进时钟驱动)。 **Blocked by:** 01(需要活动持久化与 campaign_id 归属字段)。 **Status:** ready-for-agent - [ ] 纯函数:输入活动计划 + 活动时钟位置(由真实经过时间 × time_scale 映射到窗口偏移),输出"到点应派生的计划条目"与"是否已达窗口终点";不触碰任何判定/报告口径 - [ ] time_scale 只影响"何时到点",正式线 1.0=真实墙钟、开发线可压缩;判定与结果口径与倍速无关 - [ ] 据纯函数结果派生普通 Run:复用现有评测执行入口(existing_run 路径),子 Run 携带 campaign_id,triggered_by 体现活动来源 - [ ] 幂等:同一计划条目在同一到点不重复派生(推进进度可追踪) - [ ] 纯函数单元测试(仿 test_orphan_runs 的纯 db_session 风格):注入不同时钟/倍速覆盖"未到点/到点/多条同时到点/已达终点"矩阵 - [ ] 集成测试:手动推进时钟驱动一个压缩倍速活动,断言派生出的子 Run 数量、归属、场景与计划一致;子 Run 跑完后结果与 summary 正常入库