「活动报告取数三件套」此前在报告/markdown/分析/对比等 7 处手写重复, 唯一深化产物 build_campaign_report_dict 被锁在周期对比私有角落。 升位为 report.py 的 load_campaign_report(session, campaign) 单一出口 (探索线 summarize_campaign_exploration 同口径),并把 8 处 scenario_names 推导式收敛为 ScenarioRepository.name_map() 窄方法。 纯结构重排、零行为变更,572 项测试全绿。
- analysis/comparison 重复的 _gateway_chat_client 提取为共享 gateway_chat_client - Campaigns.tsx 周期对比区块抽为 PeriodComparisonSection 组件,指标格式化 收敛为单一 METRICS 元表(消除三处 metric 分支级联) - 基线下拉排除无 completed_at 的终态活动(选中必 400) - spec/issue 03 追认 delta 按好坏着色口径与 GET 生效基线合并口径
正式线活动分析完成后自动链式生成对比;报告抽屉新增「周期对比」区块 (趋势徽章、指标 delta 表、问题演变、建议追踪,无自动基线时手动选择)。 版本号升至 0.8.0。