fix: recover real news photos before scheduled draft delivery

This commit is contained in:
john
2026-10-21 05:57:53 +08:00
parent c4078d28e1
commit 101609b3df
6 changed files with 462 additions and 29 deletions
@@ -0,0 +1,25 @@
# 2026-10-21 早报自动配图恢复
## 现场
生产 c4078d2 的 10 月 21 日任务尝试 26 条新闻、解析到 0 张报道图片,但 `no-story-images` 只是 warning,仍创建成功草稿。微信正文只有二维码,封面来自页面自动缩略图。当天草稿已按用户要求单独修复,同一 media ID 读回验证通过;该内容修复不等于自动流程修复。
## 自动流程修复
- news002 的共同推送入口补图,覆盖定时、手动、重生成与已有当天页面。先尝试原报道页,再从原媒体首页的同题链接、标题搜索和官方 RSS 定位报道。标题匹配并拒绝冲突年份、首页、Google News 包装链接与站点品牌图;不拿不相关新闻图片凑数。
- 新闻图片落地到当日页面目录,保留原新闻标题、正文、来源和顺序。封面元信息指向真实报道图;微信封面、页面缩略图使用同一来源照片。
- 推送至少要求一张存在于本地的报道图,且最终微信正文仍含已上传的新闻图,封面必须来自新闻照片。二维码、默认图和仅有 URL 的无文件引用不能满足条件。图片不足不创建草稿,记录 failed。
- 定时推送不提前;设定时间之后提供 30 分钟自动重试窗口。无图错误的重试间隔至少 2 分钟,既有当日成功记录继续去重。
- 不承诺每条新闻都有图,也不承诺每天固定五张。照片必须确实由对应报道提供且可下载。无可用照片时保持失败,不伪造图片或把无图成功隐藏起来。
## 验证
90 项新闻配图、草稿服务、调度、搜索与微信转换相关测试通过。新增用例覆盖首页定位、官方 RSS、标题与年份冲突、搜索故障、BBC 品牌图过滤、真实上传及封面生成、上传失败不创建草稿、三种触发入口无图拦截、晚到重试与禁止提前推送。
使用当天未经人工补图的原 HTML 进行本地真实网络重放,在搜索未配置时自动取得 1 张符合条件的报道图,并通过图片存在性检查;最初试跑识别出的 BBC 语言首页品牌图已加入拒绝规则。生产搜索服务实测 HTTP 200 但结果为空,新闻引擎当日候选也是空,因此不能依赖搜索状态码保证图片获取成功。
本次未发布生产。启用需要测试后的明确上线批准、完整 main、CI 与正式整包发布。上线后须核验次日任务记录、微信原稿、封面和缩略图;不能用“auto push succeeded”日志代替内容核验。
## 范围与回滚
无数据库 schema 或配置变更。回滚本次提交即恢复旧流程;已生成的页面内容和草稿不回滚。当天内容修复备份在生产 `data/news-image-repair-1792532762135/`,本地验收在 `/tmp/memind-news-1021-repair/`。原工作区改动单独暂存,禁止混入本次提交或发布。