Files
MediaOrganizer/docs/adr/0004-pipeline-execution-contract.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.6 KiB
Raw Permalink Blame History

流水线执行契约:识别池、结局账本与错误分类

主流水线(scan → 识别 → AI → link)重构为三个新契约:识别池(MEDIA_WORKERS 默认 4)——process_video 与 process_audio 共用同一 worker 池,子进程产出 key\tvalue 行由父进程合并(bash 子 shell 无法写父关联数组,这是唯一并行契约);结局账本——MEDIA_OUTCOME_MAP 记录每条目结局(identified/fallback/skip_type/skip_unidentified/request_failed/pending_ai),跳过与失败条目不进入目的映射,register_* 层原子完成"映射+账本+计数器";错误分类——区分"查询无结果"(可恢复,跳过继续)与"请求失败"(计入失败,连续 ≥5 次或失败率 ≥50% 时终止),网络请求改为递增重试(2^n 封顶 16s,TMDB_CURL_RETRY/AI_CURL_RETRY 分别控制次数,共享实现)。

运行级汇总在结尾列出各分类数量与文件清单(每类前 10 条,automated 全量入日志文件);退出码分级:0=全部成功、1=运行期错误、2=用法错误、3=部分失败(skip>0)。回退命名仅限"AI 尽力后仍失败"(无 AI → 显式 skip_unidentified),其条目在汇总中记为"降级成功"。

Considered Options: 后台 job 各自写回(无法共享关联数组,需临时文件合并——正是所选方案的机制);完整 per-file 状态机(bash 关联数组收益有限);全失败即终止(网络抖动即死);无 AI 时也回退命名(批量伪命名污染库且被幂等锁死,跳过可逆——下次运行自动重试)。