# 日报自动化先验产物检查器
类型:`diagnostic-tool`
## 1.1 为什么值得做
该主题有明确价值:日报任务在配置缺失时依赖历史 raw 产物恢复账号名单,又在远端分页长跑后才发现目标日报和 raw 已经存在。把“目标日期产物是否已完成、raw/markdown 是否匹配、是否已有长跑进程”前置检查,可以减少重复抓取、节省请求额度,并把人工核实步骤固化成工具。
## 1.2 学习实验 / Before-After
## 诊断流程样例\n\n### 输入\n- 日期:`2026-05-18`\n- repo:`~/Documents/Codex/2026-04-21-https-github-com-haopenglau-skills/repo`\n- 目标:最近 1 个完整自然日推文日报\n\n### Preflight 步骤\n1. 读取 `skills.twitter-fetcher.users`;如果为空,扫描 `.codex_tmp` 最近成功 raw,恢复账号清单。\n2. 在 raw 目录查找 `2026-05-18` 对应文件,校验账号覆盖、文件更新时间、日期范围。\n3. 在 Odyssey 日报目录查找 `2026-05-18` markdown,确认正文引用的 raw 路径真实存在。\n4. 检查进程表或 lock 文件,识别是否已有同日期抓取任务还在分页。\n\n### 成功信号\n- 输出 `status: complete`\n- 返回 raw 文件路径和 markdown 文件路径\n- exit code 为 `0`,主流程直接回传日报,不再重新抓取。\n\n### 失败信号\n- `missing_raw_accounts` 非空:只补跑缺失账号。\n- `missing_markdown: true`:用已有 raw 生成日报。\n- `duplicate_running: true`:等待或接管已有任务,不启动第二个长跑进程。
## 1.3 落地动作
- 新增工具入口:在 twitter-fetcher skill 或 repo 内增加 `scripts/daily_automation_preflight.py`,CLI 形态为 `python scripts/daily_automation_preflight.py --date YYYY-MM-DD --repo <repo> --odyssey-root <path> --json`;默认日期为最近 1 个完整自然日。
- 明确输入来源:优先读 repo 配置里的 `skills.twitter-fetcher.users`;缺失时扫描 `.codex_tmp` 最近成功 raw 文件恢复账号名单;同时读取 Odyssey 日报目录、raw 抓取目录、当前运行中的抓取进程或 lock 文件。
- 核心检查步骤:校验目标日期窗口;比对账号名单与 raw 文件覆盖度;检查 raw 文件 mtime、日期字段和账号数;检查 Odyssey markdown 是否存在且引用对应 raw 路径;检测是否已有同日期长跑进程,避免重复分页抓取。
- 成功/失败信号与落地路径:exit 0 表示 raw+日报均已完成并输出路径;exit 2 表示缺 raw、缺 markdown 或账号覆盖不完整;exit 3 表示发现同日期任务仍在跑。落地时先作为每日自动化脚本的第一步,后续再封装进 `twitter-fetcher` skill 的 preflight 子命令和 LaunchAgent 日志。