Skip to content

Changes ​

本页汇总自 3.11.3 版本以来的主要变更。完整提交历史可在 GitHub Commits 查看。

✨ 新功能 ​

  • 匹配裁决层(Arbiter):[matching] 段新增 arbiter_enabled 与各来源权重,由「单阈值」改为「分数够不够 + 领先第二名多少」双阈值门控,240 条归档用例实测精确率 95.9% → 99.0%(错命中 9 → 2,覆盖率 92.5% → 85.8%)。默认关闭,开启后不推翻季度/媒体类型/关联条目改选;配置页「匹配裁决层」卡片可调开关、双阈值与各来源权重 #255 2026-09-21
  • 拒绝待确认候选时记入标题级负样本黑名单,下次自动匹配命中同一 subject 时降级为漏标(宁可漏标不能错标);自定义映射为显式意图,不受黑名单约束 #15 #255 2026-09-21
  • 封面批量解析优化:已配置 Bangumi 账号时优先从「在看」收藏列表一次性提取封面(覆盖时间线绝大多数条目),未命中的条目再逐个调用 API 兜底(不再走 Archive 短路,确保返回图片字段),结果缓存 24 小时 2026-08-12
  • 新增 ECH(加密 Client Hello)支持:[dev] 段新增 ech_mode / ech_doh_url / ech_doh_use_proxy / ech_hosts / ech_ech_config 五项配置,可加密 Bangumi 各域名的 TLS Client Hello 以应对 SNI 探测/封锁;DoH 获取失败或配置无效时自动降级为普通 TLS,不影响同步 2026-08-12
  • 日志分级:新增 [dev] log_level 配置(默认 INFO,可用 LOG_LEVEL 环境变量覆盖),低于阈值的日志不再写入控制台/日志文件 2026-08-09
  • 请求/批次关联:HTTP 请求经 X-Request-ID 生成/透传 [req:...] 标签,一次同步一个 [run:...] 标签,批量补发一轮一个 [batch:...] 标签,同步记录同时落库 run_id / batch_id,可串联一次完整调用链;日志页分组卡与同步记录详情页均展示对应 ID 徽章 2026-08-09
  • config_manager 新增配置版本号与变更监听回调:「在看」缓存、封面前缀缓存、bangumi-data 配置在配置改动后自动失效/重读,无需重启即可生效 2026-08-09
  • 新增番剧放送日历视图与 API 端点,仪表板展示 30 天追番日程 2026-07-31
  • 新增 airing_today 今日放送提醒定时任务,每日推送当日放送汇总 2026-07-31
  • 新增 Bangumi Archive 离线查询层,把全站数据快照下载到本地 SQLite #210 2026-07-29
  • 新增 Bangumi Replay 待同步队列补发,API 不可达时入队暂存、恢复后秒级补发 #210 2026-07-29
  • 新增匹配追踪(MatchTrace)可视化,同步记录详情展示流水线各阶段 #200 2026-07-17
  • 通知系统重构,引入「事件 → 规则 → 渠道 → 模板」四层架构 #219 2026-07-31
  • 新增 AI 追番总结,支持每日 / 每周 / 每月 / 每季度 / 年度任务 #205 2026-07-26
  • 新增三次元(日剧/电影)匹配支持,动画匹配失败时继续尝试三次元条目 #194 2026-07-17
  • 映射管理增强,支持季度感知映射与正则规则 #194 2026-07-17
  • 新增 fongmi 局域网同步,轮询 fongmi 设备 HTTP API 检测「看完」的剧集 #185 2026-07-14
  • 新增配置备份与恢复功能,登录后跳回原页面 #189 2026-07-15
  • 引入 SectionMeta 注册表作为配置元数据单一真相源 #219 2026-07-31
  • 引入 SchedulerRegistry 单例统一管理调度器 #219 2026-07-31
  • 配置页改为双栏布局,TOC 与操作按钮移至左侧 sticky 侧栏 #189 2026-07-15

🐛 Bug 修复 ​

  • 修复全角标题匹配失败:归一化入口补齐 Unicode NFKC(索引侧本就做了 NFKC,查询侧没做),240 条归档用例命中率 88.8% → 97.9% #255 2026-09-21

  • 修复跨季匹配选到集数更多的前作:收紧媒体类型改选触发条件,并删除「按 eps 最大择优」(凡人修仙传 81 集盖过 凡人修仙传 新年番 48 集) #255 2026-09-21

  • 修复 bangumi-data 命中不校验放送日期导致的错标:与请求日期相差超过 365 天时改为未命中,交由 Archive / API 继续解析(宁可漏标不能错标) #4 #255 2026-09-21

  • 修复集数定位误用「衍生」关系边:鬼灭之刃 第 28 集曾错标到 鬼灭广播(广播节目,89 集),现排除该边;同时补上 favorite 字段的反序列化 #255 2026-09-21

  • 修复类型冲突时同名动画漏标:archive 精确匹配只命中真人剧时(凡人修仙传 动画条目均带后缀),补召回同名动画候选 #255 2026-09-21

  • 修复 infobox 花括号别名列表未解析:98.9% 的 别名 字段使用花括号 block 格式却只识别 bullet,导致别名被当作一整个脏字符串,含空格的别名永远匹配不上(需重建 FTS5 索引生效) #16 #255 2026-09-21

  • 修复空白原始标题(Emby 缺 OriginalTitle 时传入 " ")顶掉正确匹配分支的问题,emby/plex 源头统一为 None #255 2026-09-21

  • 修复通知在删除规则后仍广播到所有渠道:无 notify-rule 时改为停发外部渠道(仅写站内信),渠道不再兜底按自身 types 订阅,规则成为发布的唯一闸门 2026-08-09

  • 修复 Replay 匹配阶段在 API 不可达时反复产出「未找到匹配的番剧」error 记录,改为直接跳过;探测成功后统一复位所有用户实例的不可达标记 2026-08-09

  • 修复 _bangumi_archive.html 多余 </div> 导致 Replay/Airing Today 段渲染在 form 外、配置数据保存丢失 2026-07-31

  • 修复 airing_calendar.js 缺少 IIFE 起始导致整个 JS 解析失败、卡片不显示 2026-07-31

  • 修复 list_user_collections 把 httpx.Response 当 dict 处理导致在看列表获取为空 2026-07-31

  • 修复 notify-airing-today.enabled 默认启用语义矛盾 2026-07-31

  • 修复 airing_calendar.js catch 分支未重置 row.style.display 导致隐藏行后错误提示看不见 2026-07-31

  • 修复 BangumiApi 实例从不 close 导致的 httpx.Client 连接池泄漏 2026-07-31

  • 修正 BangumiApi.get/post/put/patch 返回类型注解(实际返回 httpx.Response) 2026-07-31

  • 修复 date.today() 取系统时区导致 Docker UTC 环境下与 [scheduler] timezone 不一致 2026-07-31

  • 为 _watching_cache 添加锁防止并发竞态 2026-07-31

  • bangumi_archive.reload_config() 异常时降级避免 API 500 与调度器报错 2026-07-31

  • 任务超时/失败时触发 scheduler_job_failed 通知 2026-07-31

  • notify-airing-today 段补全 notification_types 关联 2026-07-31

  • 修复启动时 Archive .tmp 残留子目录未清理 #220 2026-07-31

  • 修复 Archive SSE cached 为 None 时 AttributeError #220 2026-07-31

  • 修复 Archive 导入进度直接跳到 100% 的问题 #220 2026-07-31

  • 修复 Archive 下载阶段前端卡死(进度推送过频+历史日志暴涨) #220 2026-07-31

  • 清空旧库前先 invalidate FTS5 连接,修复 WinError 32 #220 2026-07-31

  • 修复 _build_fts5_index 批量插入逻辑,攒满 _BATCH_SIZE 再插 #217 2026-07-30

  • 修复 try_get_episodes / try_get_related_subjects 在 archive 不完整时静默返回空数据 #210 2026-07-29

  • 修复 bangumi-archive 段被误归入多账号导致前端读不到 enabled 状态 #210 2026-07-29

  • 修复 import_local 路径穿越漏洞 (CWE-22) #215 2026-07-29

  • 修复 Replay API 探测始终不可达 #210 2026-07-29

  • 修复 Replay trigger_immediate_run 防抖未使用 time.monotonic() #214 2026-07-29

  • 修复重试时因信息缺失导致匹配错误的问题,完善输入持久化 #206 2026-07-24

  • 修复多用户模式保存配置失败的问题 #201 2026-07-17

  • 修复升级后首次启动误删历史同步记录的问题 #195 2026-07-17

  • 修复 Dockerfile/release-zip/.dockerignore 引用 config.ini 的问题 #194 2026-07-17

  • 修复 season=1 时改选无季度后缀的第一季候选 #210 2026-07-29

  • 修复匹配记录详情点击报错 — getMethodBadge 函数未定义 #197 2026-07-17

  • 修复 config 零值被当作 falsy 的问题 #199 2026-07-17

  • 修复多次保存导致的密钥丢失问题 #201 2026-07-17

  • 修复 Trakt 同步时 TMDB 映射不支持季度感知查询导致无职第三季匹配错误 #204 2026-07-23

  • 修复集匹配季度边界检测与续集链计数 #210 2026-07-29

  • 修复登录测试与 apiFetch returnResponse 未生效导致登录页报错 #219 2026-07-31

  • 修复 P0-P2 前端问题,fetch → apiFetch 全量迁移 #219 2026-07-31

  • 修复 getSourceColor 与 mappings showLoading bug #219 2026-07-31

  • 测试接口可选跳过用户名校验(仅对测试来源生效) #199 2026-07-17

🚀 优化 ​

  • bangumi-data 全表扫描消除重复 strptime 与未命中路径的二次扫描(后者此前把同一次扫描跑了两遍) #255 2026-09-21
  • 日志文件超过 20MB 自动轮转,保留最近 2 份备份(log.txt.1、log.txt.2) 2026-08-09
  • 同步路径日志收敛:单集标记、匹配细节、网络诊断等大量细节下移为 DEBUG,默认 INFO 下日志噪音显著降低 2026-08-09
  • BangumiApi 实例按用户缓存,避免重复构造 httpx.Client #210 2026-07-29
  • Archive 标题索引后台构建 + 磁盘缓存,消除首次查询 111s 阻塞 #210 2026-07-29
  • 优化 Archive 导入性能,临时文件统一到 data_dir/.tmp/ 并解压后立即删 zip #220 2026-07-31
  • FTS5 trigram 替代内存索引 + 磁盘阈值上调至 4GB #217 2026-07-30
  • 移除死表并按 type 过滤导入,单库体积降至约 0.8GB #217 2026-07-30
  • 优化首页时间线海报异步加载 #191 2026-07-15
  • 列表查询去除 match_trace + retention 自动清理 + config 模板化 #194 2026-07-17
  • e2e-tests 提速 + 失败捕获 + 补关键用例 #219 2026-07-31

♻️ 重构 ​

  • 匹配管线引入契约层:统一 SubjectRef / EpisodeRef 形状与 Archive / API / bangumi-data 三方 adapter,各策略命中一律产出候选;不改判定顺序、阈值与终止条件 #255 2026-09-21
  • 共享标题正则收敛至 utils/title_patterns.py(YEAR_RE / SEASON_SUFFIX_PATTERNS / extract_year),消除同目的正则的多处副本 #255 2026-09-21
  • 去重同目的常量(GitHub 反代镜像原有 3 份副本、UA/超时/TTL 在公告模块重复定义、EP_TYPE_* 与 EPISODE_TYPE_* 并存),并补齐 RELATION_ID_* / PLATFORM_* 具名常量 #255 2026-09-21
  • 通知系统重构 + 调度器状态卡修复 + 死代码清理 #219 2026-07-31
  • 拆分 config.html 巨石模板为 12 个子模板 #219 2026-07-31
  • 引入 ConfigForm 库实现前端自动序列化与配置注入 #219 2026-07-31
  • 配置保存统一联动改为遍历 SectionMeta 驱动 #219 2026-07-31
  • 前端通知类型动态加载,消除硬编码复选框 #219 2026-07-31
  • 拆分 app.js 与 style.css 按功能模块/分区 #219 2026-07-31
  • 抽取 BangumiApi 工厂与写映射 helper #210 2026-07-29
  • 提取文本处理字典常量到 utils/text_constants.py 统一管理 #219 2026-07-31
  • 集成 bangumi/common 常量,消除关联/条目/收藏类型硬编码 #219 2026-07-31
  • 修复 core↔utils、utils↔services 分层违规 #210 2026-07-29

📚 文档 ​

  • 拆出独立的 bangumi-replay.md,明确 Replay 与 Archive 解耦但功能互补 #210 2026-07-29
  • 新增常见同步失败原因文档 + 重试弹窗加宽并链接文档/issues #192 2026-07-15
  • 修正 mark_api_unreachable 过时注释 #210 2026-07-29
  • 文档拆分 LLM 配置和 AI 追番总结 #205 2026-07-26
  • 提供月度/年度配置的 cron 表达式供用户参考 #205 2026-07-26
  • 更新 trakt 文档:通过 SSH 端口转发以应对 Trakt 严格校验回调地址 #209 2026-07-26

🧪 测试 ​

  • 新增匹配管线基线检查工具(手动执行,非 CI):scripts/golden_check.py 逐条比对 scripts/golden_data/ 中的行为快照,报出差异与 oracle 命中率;scripts/gen_golden_cases.py 负责生成基线。改匹配逻辑前后各跑一次,避免静默改变既有行为 #255 2026-09-21
  • 引入 Playwright E2E 测试基础设施 #219 2026-07-31
  • 修复 conftest 优先用 config.example.ini 而非 config.ini #210 2026-07-29
  • 修复 bangumi-archive.enabled=True 卡死测试 + asyncio.run 污染事件循环 #210 2026-07-29
  • 显式关闭 sqlite 连接修复 Windows 临时目录清理失败 #210 2026-07-29

🔧 其他 ​

  • 简化 PR 模板,移除提交前检查清单(pre-commit 钩子自动完成) #198 2026-07-17
  • HTTP 成功请求日志改为 DEBUG #190 2026-07-15
  • 后台任务统一注册与生命周期管理 #210 2026-07-29
  • 数据库迁移,sync_records.db 默认路径迁移到 data/ #210 2026-07-29
  • Archive 数据目录迁移到 ./data/archive 并清理旧索引缓存 #210 2026-07-29

完整提交历史

本页仅汇总主要变更,完整提交记录可在 GitHub Commits 查看。