先定义什么才算“完成”

Concitech AI 日报会整理模型、产品、研究、开发工具和行业变化。若只把“生成了 Markdown”当作完成,系统很容易发布缺少英文版、日期错位、没有原始来源或正文过短的页面。这样的页面数量再多,也不能帮助读者判断信息是否可靠。

因此,发布条件被写成可以由程序判断的约束:文件名必须是同一个日期下的中文和英文成对文件;标题、摘要、作者、分类、封面、发布时间和条目数量必须存在;正文不能短到只剩标题式摘要;每期还必须包含至少三个可追踪的外部来源链接。条件没有全部满足时,构建直接失败。

验证器只能拦住结构问题。内容是否准确,仍然需要编辑判断和读者核验原始来源。

来源链接放在对应条目里

每条新闻摘要都会尽量指向发布者原文、官方文档、论文或项目页面。来源链接放在对应条目里,而不是统一堆到页尾;读者可以立刻判断摘要谈的是哪份材料,也能跳过编辑判断,直接查看第一手信息。

仅仅“有链接”仍然不够。内容验证器只能检查链接数量和格式,不能保证来源没有更新、撤回或改变表述。因此,编辑摘要会避免把推测写成已经发生的事实,并在原始材料缺少关键细节时保留不确定性。页面提供的是筛选与上下文,不代替原始来源。

中英文版本成对发布

日报使用 PT 日期作为编辑归属日,同时记录北京时间发布时间。我实际踩过的坑是把一个仅表示日期的值交给时区转换,结果路由日期、页面显示日期和归档日期对不上。现在日期就是日历字符串,不再经过可能跨日的 UTC 转换。

中文和英文内容也必须成对进入内容目录。验证器会比较文件名日期、frontmatter 语言以及分类集合;任何一侧缺失,整期都不会构建。这样做会牺牲一次“先发中文版”的速度,却避免归档中出现只有一半可用的版本,也避免搜索引擎看到互相矛盾的语言页面。

失败时保持旧版本可用

发布脚本先检查源文件完整性,再导入临时文件,验证通过后才替换目标内容。构建还会检查封面是否存在、是否含有危险 HTML、每个页面是否只有一个 H1,以及文章结构化数据是否成功输出。任何一步失败,都应该让当天版本停在发布前,而不是把半成品推上生产环境。

工作树有未处理改动、远端无法安全快进或双语源文件不完整时,自动流程会停止。我宁可补发一天,也不想让错误页面进入缓存、搜索索引和订阅源,之后再追着多个版本收拾。

仍要人工判断的部分

可以复查的实现依据