# i+1阅读推荐缺少源覆盖与Anki差分校准
- 候选 id:`i-plus-one-anki-source-coverage`
- 类型:`diagnostic-tool`
## 诊断流程样例\n\n### 输入\n- 日期:2026-05-10\n- 阅读产物目录:`Odyssey/0 收集箱/每日英语i+1阅读/`\n- Anki deck:`阅读词汇量`,collection:`~/Library/Application Support/Anki2/账户 1/collection.anki2`\n- 浏览器源:Chrome/Safari history export 或当前可配置的本地导出文件\n\n### 执行\n```bash\ncd /Users/bytedance/myCronTask/run/daily_i_plus_one_reading\n./run.sh --diagnose 2026-05-10\n```\n\n### 预期诊断输出\n| 检查项 | 成功信号 | 失败信号 | 建议动作 |\n|---|---|---|---|\n| source coverage | 至少 2 个昨日内容源可读,且有 rows/files 计数 | browser_history=missing 或 Odyssey stale | 在配置里声明 fallback,不把缺失源伪装成已使用 |\n| Anki diff | deck 可读,输出 known/new/ambiguous 计数 | collection locked 或 deck not found | 先关闭 Anki 或改走官方 Python API;确认 deck 名为 `阅读词汇量` |\n| 推荐可追溯 | 每篇推荐带 source_refs 和 new_concepts_from_diff | 只有模型估算的新概念数 | 阻断发布或在 Markdown 标注 degraded=true |\n\n### 示例结果\n- `browser_history`: missing,降级为不使用浏览器个性化。\n- `odyssey_daily`: present,读取 3 个昨日相关条目。\n- `anki_reading_vocab`: present,deck_notes=14678。\n- `concept_diff`: candidates=31,known=9,new=18,ambiguous=4。\n\n### 判定\n如果 `new >= 20` 且推荐 source_refs 完整,可以正常发布;如果 `new < 20` 或任一强依赖源缺失,则发布 degraded 版本,并在 Night Gym 报告里明确写出缺口。