# 01 — 自动基线配对 + 机械指标 diff（GET 先行）

**What to build:** 周期对比的确定性半边。计划指纹纯函数（对象 + 计划条目集合[场景/偏移/次数] + 窗口，条目顺序无关）；自动基线解析：双方均正式线、指纹相等、完成时间早于本期、已有 completed 分析，取最近一期，无则 None。机械 diff 纯函数：两期 `generate_campaign_report` dict 进，整窗 + 分场景（按 scenario_id 并集）的通过率/可用性/时延 delta 出，任一侧 None 则 delta None。`GET /api/campaigns/{id}/comparison` 先行返回 `{auto_baseline: {id, name, completed_at} | null, metric_diff: {...} | null}`（自动基线存在才算 diff），404 活动不存在。

**Blocked by:** 无 — 可立即开始

**Status:** done

- [x] 计划指纹纯函数：同计划不同条目顺序相等；改窗口/对象/场景/偏移/次数任一不等
- [x] 自动基线：指纹相等取最近一期；跳过无分析/分析非 completed/加速线候选；本期为加速线时返回 None；无匹配返回 None
- [x] 机械 diff：整窗与分场景 delta 数值正确；并集场景缺一侧 delta None；None 指标传播
- [x] GET 返回自动基线 + 现算 diff；无基线时两个 null；404
- [x] `pytest` + `ruff` 全绿
