Changes
本页汇总自 3.11.3 版本以来的主要变更。完整提交历史可在 GitHub Commits 查看。
✨ 新功能
- 匹配裁决层(Arbiter):
[matching]段新增arbiter_enabled与各来源权重,由「单阈值」改为「分数够不够 + 领先第二名多少」双阈值门控,240 条归档用例实测精确率 95.9% → 99.0%(错命中 9 → 2,覆盖率 92.5% → 85.8%)。默认关闭,开启后不推翻季度/媒体类型/关联条目改选;配置页「匹配裁决层」卡片可调开关、双阈值与各来源权重 #2552026-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 集) #2552026-09-21修复 bangumi-data 命中不校验放送日期导致的错标:与请求日期相差超过 365 天时改为未命中,交由 Archive / API 继续解析(宁可漏标不能错标) #4 #255
2026-09-21修复集数定位误用「衍生」关系边:
鬼灭之刃第 28 集曾错标到鬼灭广播(广播节目,89 集),现排除该边;同时补上favorite字段的反序列化 #2552026-09-21修复类型冲突时同名动画漏标:archive 精确匹配只命中真人剧时(
凡人修仙传动画条目均带后缀),补召回同名动画候选 #2552026-09-21修复 infobox 花括号别名列表未解析:98.9% 的
别名字段使用花括号 block 格式却只识别 bullet,导致别名被当作一整个脏字符串,含空格的别名永远匹配不上(需重建 FTS5 索引生效) #16 #2552026-09-21修复空白原始标题(Emby 缺
OriginalTitle时传入" ")顶掉正确匹配分支的问题,emby/plex 源头统一为None#2552026-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.jscatch 分支未重置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-31bangumi_archive.reload_config()异常时降级避免 API 500 与调度器报错2026-07-31任务超时/失败时触发
scheduler_job_failed通知2026-07-31notify-airing-today段补全notification_types关联2026-07-31修复启动时 Archive
.tmp残留子目录未清理 #2202026-07-31修复 Archive SSE
cached为 None 时 AttributeError #2202026-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再插 #2172026-07-30修复
try_get_episodes/try_get_related_subjects在 archive 不完整时静默返回空数据 #2102026-07-29修复
bangumi-archive段被误归入多账号导致前端读不到 enabled 状态 #2102026-07-29修复
import_local路径穿越漏洞 (CWE-22) #2152026-07-29修复 Replay API 探测始终不可达 #210
2026-07-29修复 Replay
trigger_immediate_run防抖未使用time.monotonic()#2142026-07-29修复重试时因信息缺失导致匹配错误的问题,完善输入持久化 #206
2026-07-24修复多用户模式保存配置失败的问题 #201
2026-07-17修复升级后首次启动误删历史同步记录的问题 #195
2026-07-17修复 Dockerfile/release-zip/.dockerignore 引用
config.ini的问题 #1942026-07-17修复
season=1时改选无季度后缀的第一季候选 #2102026-07-29修复匹配记录详情点击报错 —
getMethodBadge函数未定义 #1972026-07-17修复
config零值被当作 falsy 的问题 #1992026-07-17修复多次保存导致的密钥丢失问题 #201
2026-07-17修复 Trakt 同步时 TMDB 映射不支持季度感知查询导致无职第三季匹配错误 #204
2026-07-23修复集匹配季度边界检测与续集链计数 #210
2026-07-29修复登录测试与
apiFetch returnResponse未生效导致登录页报错 #2192026-07-31修复 P0-P2 前端问题,
fetch → apiFetch全量迁移 #2192026-07-31修复
getSourceColor与mappings showLoadingbug #2192026-07-31测试接口可选跳过用户名校验(仅对测试来源生效) #199
2026-07-17
🚀 优化
- bangumi-data 全表扫描消除重复
strptime与未命中路径的二次扫描(后者此前把同一次扫描跑了两遍) #2552026-09-21 - 日志文件超过 20MB 自动轮转,保留最近 2 份备份(
log.txt.1、log.txt.2)2026-08-09 - 同步路径日志收敛:单集标记、匹配细节、网络诊断等大量细节下移为
DEBUG,默认INFO下日志噪音显著降低2026-08-09 BangumiApi实例按用户缓存,避免重复构造httpx.Client#2102026-07-29- Archive 标题索引后台构建 + 磁盘缓存,消除首次查询 111s 阻塞 #210
2026-07-29 - 优化 Archive 导入性能,临时文件统一到
data_dir/.tmp/并解压后立即删 zip #2202026-07-31 - FTS5 trigram 替代内存索引 + 磁盘阈值上调至 4GB #217
2026-07-30 - 移除死表并按 type 过滤导入,单库体积降至约 0.8GB #217
2026-07-30 - 优化首页时间线海报异步加载 #191
2026-07-15 - 列表查询去除
match_trace+ retention 自动清理 + config 模板化 #1942026-07-17 e2e-tests提速 + 失败捕获 + 补关键用例 #2192026-07-31
♻️ 重构
- 匹配管线引入契约层:统一
SubjectRef/EpisodeRef形状与 Archive / API / bangumi-data 三方 adapter,各策略命中一律产出候选;不改判定顺序、阈值与终止条件 #2552026-09-21 - 共享标题正则收敛至
utils/title_patterns.py(YEAR_RE/SEASON_SUFFIX_PATTERNS/extract_year),消除同目的正则的多处副本 #2552026-09-21 - 去重同目的常量(GitHub 反代镜像原有 3 份副本、UA/超时/TTL 在公告模块重复定义、
EP_TYPE_*与EPISODE_TYPE_*并存),并补齐RELATION_ID_*/PLATFORM_*具名常量 #2552026-09-21 - 通知系统重构 + 调度器状态卡修复 + 死代码清理 #219
2026-07-31 - 拆分
config.html巨石模板为 12 个子模板 #2192026-07-31 - 引入
ConfigForm库实现前端自动序列化与配置注入 #2192026-07-31 - 配置保存统一联动改为遍历 SectionMeta 驱动 #219
2026-07-31 - 前端通知类型动态加载,消除硬编码复选框 #219
2026-07-31 - 拆分
app.js与style.css按功能模块/分区 #2192026-07-31 - 抽取
BangumiApi工厂与写映射 helper #2102026-07-29 - 提取文本处理字典常量到
utils/text_constants.py统一管理 #2192026-07-31 - 集成
bangumi/common常量,消除关联/条目/收藏类型硬编码 #2192026-07-31 - 修复
core↔utils、utils↔services分层违规 #2102026-07-29
📚 文档
- 拆出独立的
bangumi-replay.md,明确 Replay 与 Archive 解耦但功能互补 #2102026-07-29 - 新增常见同步失败原因文档 + 重试弹窗加宽并链接文档/issues #192
2026-07-15 - 修正
mark_api_unreachable过时注释 #2102026-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负责生成基线。改匹配逻辑前后各跑一次,避免静默改变既有行为 #2552026-09-21 - 引入 Playwright E2E 测试基础设施 #219
2026-07-31 - 修复
conftest优先用config.example.ini而非config.ini#2102026-07-29 - 修复
bangumi-archive.enabled=True卡死测试 +asyncio.run污染事件循环 #2102026-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/#2102026-07-29 - Archive 数据目录迁移到
./data/archive并清理旧索引缓存 #2102026-07-29
完整提交历史
本页仅汇总主要变更,完整提交记录可在 GitHub Commits 查看。
