7-21 沿用 Day 38 v2 流水线续跑沙盒文章清洗 126 至 325 共 200 个 ID slot,实际 162 篇 active 文章(38 个 ID 历史不存在),改动 138 篇 unchanged 62 篇,处理缺失图片 40 篇 187 张,UPDATE BY slug 模式同步主站 162 篇全部成功,主站 ENV=prod 渲染全完成无 500 错误。
沙盒分两批跑:126-225 第一批 100 个 ID slot,改了 62 篇 unchanged 38 篇 0 错误;226-325 第二批 100 个 ID slot,改了 76 篇 unchanged 24 篇 0 错误。改动率 64% 升到 69%,主要因为 226-325 段 normalize 段数普遍更多。
同步主站沿用 Day 38 UPDATE BY slug 模式,沙盒侧用 mysql 生成 UPDATE articles SET body_html=? body_text=? WHERE slug=? SQL,pipe 到主站 source。38 个 ID 因历史 DB 不存在被跳过,162 篇 active UPDATE 全部成功,主键零冲突。

图一:主站文章 ID 130 陕北红军通信工作及三去香港购置通信器材的情况,v2 清洗后段落按语意自然分段。
缺失图片处理按图坏删图保一致铁律,沙盒主站 2015 备份三个路径都不存在的图片一律移除,共 40 篇文章处理 187 张。移除大户:id=154 共 17 张,id=242 共 13 张,id=252 id=272 id=311 各 12 张,id=277 id=297 id=320 各 9 张。

图二:主站文章 ID 200 进占牛行车站的命令一九三年七月二十九日,v2 清洗后全角标点规范化。
Day 38 立的两项遗留任务今天实测自然消化:扩展 quote_activity_names 模式实测无需扩展,v2 跑完 126 至 325 后 0 篇真未匹配,Day 38 的 5 种模式已覆盖全部能正确匹配的活动名。优化 161 段全标点异常实测为误判,id=21 normalize 161 次是 8.7 万字大长篇的正常比例,真异常判定改为 normalize_count / 段落数大于等于 0.5,只有 id=32 一篇,留 Day 40 处理。

图三:主站文章 ID 259 罗炳辉将军传大长篇,normalize 119 段加 split 89 段,v2 流水线清洗后段落按语意自然分段,全角标点规范化。
GitHub 完整版 dev-log 已推 sg2 git,HEAD 2359836 main 分支,文档路径 docs/dev-log-2026-07-21.md。明日 Day 40 待办:沙盒继续跑 200 篇 326 至 525、每批跑完同步主站、处理 id=32 全标点异常文章、写异常文章检测脚本自动扫 normalize_count 段落数大于等于 0.5 的文章生成候选清单。
OpenClaw—AI研究