# 文章发布封装实施记录(2026-10-31) 已通过Git提交、推送并部署正式cfn。功能HEAD `3a62bccbcdb2da0630e8c192b5b758c264624514`,基线 `4fb57e494de1796d314698c6317eb58bc1acbed1`,分支 `codex/editorial-release-20261031`。后续仅记录文档的提交不改变此功能版本。 范围:固定本机SSH→白色机VPS-001→业务服务器VPS-003,服务器进程内调用原有文章API,恢复台账/发布回读,新文独立展示时间,以及本机每周三篇、每日15:00检查的计划工具。没有部署白色机写作任务,没有修改SSH/网络/原定时器,没有恢复test。 ## 验证 - 隔离SQLite业务测试30项、268断言通过,覆盖原API、点赞、发布封装:冻结草稿、图片上传和SHA、真实模板渲染、未review拒发、并行版本冲突、锁互斥、过期权限拒绝、失败后配置恢复、已提交但响应丢失后按原UUID恢复、搜索pending只重试同步、正文回读检测外部改动。新文随机展示偏移冻结、0~21600秒范围、真实创建/年度点赞时间不改、旧文修改保留展示日期均通过。 - Python5项测试通过:三篇随机不同日期/每日15:00、漏跑回补、同日不连发、未决任务恢复和真实时间计数、跨周不积累未开始欠稿、固定白色机转发及主机核验。 - 本地指定可空字段迁移已完成;第一次沙箱连接MySQL被拒,按授权提升后执行成功。 - 正式站188篇文章的ID、slug、标题、正文、封面、栏目、创建/更新日期逐项保持;新增展示字段均为空,旧文显示不变。既有生成标签模板哈希和`data.ms/`并行目录保留。 - 真实业务服务器命令以nginx读取10篇编辑文章目录通过;本机新release.py经固定白色机链路调用同一目录也通过,未访问本机线上HTTP。 - 服务器侧HTTP:首页、/advanced、系统代理/TUN文章200;公网编辑目录503(保持关闭),公用编辑密钥文件不存在。进程内认证没有写入.env或凭据文件。 部署首次迁移因Git检出采用私有备份umask导致新代码文件不可被nginx读取,已自动回退;随后仅修正本次代码文件及路径的正常读取权限,沿原恢复点重试成功,私有配置/备份权限未放宽。未重置数据库或数据。 ## 回滚与边界 私有恢复点位于VPS-003 `/root/backups/cfn-editorial-release-20261031/`:Git bundle、原HEAD/工作区状态、标签模板原件、23表一致性数据库备份、文章核心字段快照、提交及验收回执。正常代码回退检出上述基线并清响应缓存,保留新增可空列与既有文章/发布历史;不执行drop列或整库覆盖。暂停周期任务使用automation_update ID `fna`。 调度已更新为每周三篇、北京时间每天15:00,自2026-11-02当周开始;首轮自动写作未执行。为避免污染正式内容,本次没有在生产发布演练文章;端到端写入/恢复在隔离测试验证,生产验证为真实SSH、命令、API目录和服务器HTTP。已完成服务器侧验收,未做线上页面验收。精确回执见[JSON](EDITORIAL_RELEASE_2026-10-31.json)。