Record editorial release verification and schedule policy

This commit is contained in:
Codex 2026-10-31 14:11:05 +08:00
parent 3a62bccbcd
commit d981a2aa4f
2 changed files with 85 additions and 2 deletions

View File

@ -0,0 +1,66 @@
{
"base": "4fb57e494de1796d314698c6317eb58bc1acbed1",
"commit": "3a62bccbcdb2da0630e8c192b5b758c264624514",
"branch": "codex/editorial-release-20261031",
"files": [
"AGENTS.md",
"app/Console/Commands/EditorialRelease.php",
"app/Http/Controllers/Api/Editorial/EditorialController.php",
"app/Http/Middleware/EditorialAuthentication.php",
"app/Models/Articles.php",
"app/Services/Editorial/ProcessApi.php",
"app/Services/Editorial/Publisher.php",
"app/Services/Editorial/ReleaseRunner.php",
"database/migrations/2026_10_31_150000_add_article_display_timestamp.php",
"docs/content/WRITING.md",
"docs/maintenance/EDITORIAL_API.md",
"docs/maintenance/EDITORIAL_RELEASE.md",
"docs/maintenance/EDITORIAL_RELEASE_2026-10-31.md",
"docs/maintenance/WEEKLY_TUTORIALS.md",
"tests/Feature/EditorialApiTest.php",
"tests/Feature/EditorialReleaseTest.php",
"tools/editorial/release.py",
"tools/editorial/ssh_askpass.py",
"tools/editorial/test_weekly.py",
"tools/editorial/weekly.py"
],
"backup_directory": "/root/backups/cfn-editorial-release-20261031",
"backup": {
"articles": 188,
"tables": 23,
"backup_sha256": "b1ccc19cdc5e43a85ad85cf9b656ef2da97cbb07b23d49283078004e85d292ac"
},
"checks": {
"environment": "production",
"editorial_base": "https://clashfreenode.com",
"public_api_enabled": false,
"credential_file_exists": false,
"articles": 188,
"article_core_preserved": true,
"display_values": 0,
"process_api_catalog": true,
"editorial_articles": 10,
"tags_preserved": true,
"http": {
"/": 200,
"/advanced": 200,
"/a/system-proxy-vs-tun.html": 200,
"/api/editorial/v1/catalog": 503
},
"local_wrapper_through_white_host": true
},
"head": "3a62bccbcdb2da0630e8c192b5b758c264624514",
"status": "M resources/views/components/generated-tags-cloud.blade.php\n?? data.ms/",
"tested_new_production_publication": false,
"tests": {
"php_tests": 30,
"php_assertions": 268,
"python_tests": 5
},
"automation": {
"id": "fna",
"check": "15:00 Asia/Shanghai daily",
"weekly_target": 3,
"starts_on": "2026-11-02"
}
}

View File

@ -1,5 +1,22 @@
# 文章发布封装实施记录(2026-10-31)
范围:经白色机的固定SSH传输、服务器进程内API调用、可恢复发布台账、发布回读、三篇/周且每日15:00检查的本机写作计划,以及新文独立展示时间。保留已有数据、图池、广告、并行改动和现行调度。不在正式站发布演练文章,不恢复test。
已通过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)。