Files
MediaOrganizer/docs/adr/0007-failure-cooldown-retry-backoff.md
Shuery c1ed1795c2
CI / lint + test + build (push) Canceled after 0s
docs: 重写 README、新增项目报告与开发工具配置
- README 现代化重写:徽章区、特性一览、统一 GitHub 提示块格式、修正版本号与 AI 默认值
- 新增 docs/PROJECT_REPORT.md 学术项目报告(含许可证合规分析与死链修复记录)
- 收录 23 份 ADR 架构决策记录与 CONTEXT.md 领域术语表
- 新增开发配置:.editorconfig / .shellcheckrc / .markdownlint-cli2.jsonc
- .gitignore 补充 mo_map/、检查报告、编辑器临时文件
- 新增 config.example.json 配置模板(不含真实密钥)
2026-08-14 22:41:40 +08:00

1.4 KiB
Raw Permalink Blame History

失败冷却(fail_cooldown.json):失败条目的重试退避

skip_unidentified(AI 尽力后仍失败 / 无 AI 密钥)与 request_failed(网络/密钥重试耗尽)条目在下次 cron 运行会被自动重试——语义可逆正确,但持续失败(密钥失效、站点长期不可达、源文件永久不可识别)会每轮全量重试同一批条目,浪费请求与 AI 额度。决定:引入 $CACHE_DIR/media_organizer/fail_cooldown.json({src: {retry_at, reason}}),上述两类条目登记冷却(默认 24 小时,FAIL_RETRY_COOLDOWN_HOURS 可配,0=禁用),冷却期内识别池入口直接跳过(结局 cooldown),过期后自动恢复重试。

边界语义:① 只冷却"尽力后失败"——skip_type(电影特典)无成本不冷却;② 源文件已消失的冷却条目不生效(不阻止新文件重试);③ --rerun 显式重跑绕过冷却(用户主动纠错不受退避限制);④ 冷却过期条目在 flush 时惰性清理,不单独维护过期任务;⑤ 冷却条目不计入退出码 3 的失败判定(冷却是"等待重试"而非"本次失败")。

Considered Options: 不冷却(原状)——每轮全量重试;永久跳过——破坏"可逆"语义,站点恢复后永不重试;按结局计数退避(指数)——过度设计,小时级固定冷却已覆盖 cron 场景。