# 01 — 活动持久化 + 创建/查询 API **What to build:** 用户能通过 API 创建一个「评估活动」:提交一个绑定单个评测对象的静态活动计划(窗口长度、time_scale、若干"在窗口某偏移时刻对某场景跑几次"的计划条目),活动被持久化、状态为"计划中",并能按 id 查询取回完整活动。为后续调度与聚合打好数据地基。 **Blocked by:** 无 — 可立即开始。 **Status:** ready-for-agent - [ ] 新增评估活动持久化:窗口长度、状态(计划中/进行中/已完成/已取消/失败)、time_scale(默认 1.0)、静态计划(JSON 存取,仿现有 cases)、目标对象、时间戳 - [ ] 评测运行增加可空的活动归属字段(campaign_id);非活动派生的手动 Run 该字段为空;不破坏现有 Run 的创建/查询/更新 - [ ] 新增活动仓储,沿用现有仓储的 to_db/from_db 映射与 Session 管理约定 - [ ] Alembic batch mode 迁移(SQLite),沿用现有迁移链与 render_as_batch 约定;全新库经 init_db 的 create_all 亦能建出新表与新列 - [ ] `POST /api/campaigns` 校验并创建活动(计划非空、对象存在、窗口/倍速合法),返回活动 id 与初始状态 - [ ] `GET /api/campaigns` 列表、`GET /api/campaigns/{id}` 详情(含计划与状态) - [ ] 活动通过率等汇总口径为空占位,待后续票填充;本票不含调度与派生 - [ ] API 集成测试(httpx AsyncClient 同现有 runs 测法):创建→取回一致、非法计划/不存在对象报错、campaign_id 迁移后既有 Run 不受影响