From d981a2aa4fa21abe4512ddd287a2f51f87b11197 Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 31 Oct 2026 14:11:05 +0800 Subject: [PATCH] Record editorial release verification and schedule policy --- .../EDITORIAL_RELEASE_2026-10-31.json | 66 +++++++++++++++++++ .../EDITORIAL_RELEASE_2026-10-31.md | 21 +++++- 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 docs/maintenance/EDITORIAL_RELEASE_2026-10-31.json diff --git a/docs/maintenance/EDITORIAL_RELEASE_2026-10-31.json b/docs/maintenance/EDITORIAL_RELEASE_2026-10-31.json new file mode 100644 index 00000000..536fcc89 --- /dev/null +++ b/docs/maintenance/EDITORIAL_RELEASE_2026-10-31.json @@ -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" + } +} diff --git a/docs/maintenance/EDITORIAL_RELEASE_2026-10-31.md b/docs/maintenance/EDITORIAL_RELEASE_2026-10-31.md index 4e428a4b..1640ce7a 100644 --- a/docs/maintenance/EDITORIAL_RELEASE_2026-10-31.md +++ b/docs/maintenance/EDITORIAL_RELEASE_2026-10-31.md @@ -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)。