Files
airz-uniapp/docs/后台内容增量发布清单.md
T
hujun b418969e92 refactor(login): move match-route logic to dedicated service and fix import
- 提取登录回跳、产品对比的路由匹配逻辑至独立的 match-route.uts 服务
- 修复登录页面导入对比服务的错误,改为导入新的 match-route 模块
- 保持原有的路由参数校验和跳转逻辑不变,仅重构代码结构
2026-10-12 09:28:09 +08:00

210 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 后台与内容增量发布清单
## 2026-10-08 最新security-r3已发布
按用户本轮“部署一版”授权,已在既有airz.hqling.cloud发布9运行文件:内容CSRF8文件(包含超管批量字段限制)与历史匹配列表/导出重试权限修复。版本20261008-security-r3,85源码/依赖摘要核对通过;AssessmentRecords线上已审阅变体保持。只同步fa_config id4/version value与site.php版本,其余配置及维护期26表业务数据/结构一致,无业务数据导入或权限/账号/策略/积分变更。
18:02:22完成私密备份、18:02:35发布、18:03:27恢复入口/worker,18:07:10最终复核(Asia/Shanghai)。20服务器HTTPS/22公网可信TLS检查及9文件定向恢复干跑通过;三服务active、活动评估/调用0、三队列0,worker心跳ready/idle且2秒新鲜。本次维护模型请求0,未触发生产评估或内容写入。12项发布工具文件/版本守卫与7语法检查通过;旧本地1794 PHP/63后台浏览器及主流程1666证据保持,不跨轮累计。
私密归档/root/airz-security-release-20261008-1791452975863保存before、site/Nginx原件、26表灾难备份及阶段回执;原入口恢复,临时凭据/站点暂存文件不存在,归档目录700/文件600核验,宝塔已退出关闭。后续回退须重新停写/核空闲/核after并保护后续数据;严禁整库覆盖。 [独立发布记录](D:/AAdesk/202609/airz/database/security-r3-release.md)和[回执](D:/AAdesk/202609/airz-backups/production-release/airz-security-release-1791452975863/release-receipt.json);部署连接方式见[生产部署连接](生产部署连接.md),面板入口/账号及DPAPI加密凭据保存于本机私密配置、仅当前Windows用户/SYSTEM可访问,后续直接复用,不在仓库保存明文密码。
小程序由用户自行部署,H5未发布;正式运营/真机/多设备和全模块签收未完成,RELEASE-001仍开发中/整体未验收,RELEASE-003阻塞、63任务/27页面保持。独立Linux测试机路线已取消,不再等待;本次既有worker恢复不替代Linux/systemd完整故障/守护验收。 进度1.98/1.08,开发文档v1.66/0.79。
下一项:收口已发布后端与用户自发小程序的候选版本及验收用例,固定源码摘要、已验证范围和外部阻塞;后续记录小程序发行版本/源码对应关系,不预填正式签收。
下方r2清单与授权属于历史批次,不重跑权限/FAQ/简介操作。
2026-10-08开发接续:r2增量演练后已补合成26表/8触发器全库与单独AES密钥实际恢复53项证据,见[进度0.91](开发进度.md)和[密钥演练](D:/AAdesk/202609/airz/database/key-recovery-rehearsal.md)。本轮零生产连接/worker/模型执行,不改变下方既有生产发布事实或冻结包/生产恢复守卫;正式验收待办,下一项队列进程生命周期。
## 2026-10-08 隔离实际部署与恢复开发证据
承接已执行r2生产发布,另以新合成环境完成157项开发检查:13文件/16节点/3模板/8FAQ/课程简介及版本的实际部署、文件/数据库提交前后/恢复过程异常退出、继续部署及定向恢复幂等、后续编辑与权限引用拒绝。恢复后合成密码变化、通知、积分、浏览量、已读时间、新配置和另一FAQ保持,26表列结构保持;71依赖/保护哈希通过,10本机HTTP请求及2正文检查通过。详见[进度0.90](开发进度.md)和[隔离演练说明](D:/AAdesk/202609/airz/database/release-rehearsal.md)。
MySQL3317/Redis6397/HTTP18177仅本机,自建进程已停止;零生产连接/worker/模型执行。冻结生产脚本/包保持,新工具仅接受显式隔离config,不重建历史生产before或导入生产私密dump,不放宽生产回退守卫。安全回执为[verification.json](D:/AAdesk/202609/airz-backups/release-rehearsals/airz-release-rehearsal-1791425757362/verification.json)、同目录cleanup.json及各场景command回执。本结果补实际恢复开发证据,不代表RELEASE-003整体、生产灾难恢复或正式验收完成;下方生产发布事实保持。
## 2026-10-08 已执行记录
用户明确授权后已按下列r2范围在生产维护窗口完成,最新对应开发进度1.79/0.89;下文10月7日的未部署/待授权文字保留为历史准备记录,不能作为当前状态。13运行文件、16权限节点/3模板、8FAQ首次导入、课程ID1 intro及资源版本同步均已执行,不绑定账号或改用户密码/策略。
09:35:21+08:00已完成停写/空闲worker与FPM停止、13源码/site/目标数据及26表完整备份;09:35:46发布,09:37:37恢复worker、原Nginx配置和公开入口,09:39:34最终复核。服务器私密归档/root/airz-admin-content-20261007-r2-20261008(目录700/文件600),完整数据库gz SHA256 be8791b009fb236bc6b0500b94f177ffb2906060d2d41fe7bbd3f6e1dbb4c09e;临时数据库INI/client cnf和站点暂存文件清理,宝塔专用会话退出关闭。
| 已执行项目 | 实际回执 |
| --- | --- |
| 文件 | 13 after等于冻结runtime包,84文件依赖/保护复核;线上AssessmentRecords.php保留原精确变体、.env保持 |
| 权限 | 节点ID134—149,模板ID6/7/8(运营v1/客服v2/技术v5),根1;总147节点/8组/1绑定,重复增量0;现有记录和绑定保持 |
| FAQ | 首次新增8行ID5—12,公开8条逐字段匹配冻结种子;无其他内容导入 |
| 课程 | ID1 intro更新,新version729e675e4e67da195fd7a77a47b9c1d838d60748d9763b2673317f3cb0f318b8;正文/3稳定ID/顺序/推荐/发布/已读保持 |
| 版本/缓存 | DB id4/version和site.php/version均20261007-admin-content-r2;仅目标字段,File __menu__精确缓存刷新,受影响模板缓存当次不存在,未清Redis |
| 验证/服务 | 22服务器HTTPS+20公网可信TLS检查、15表结构和26表数据通过;21非目标表/账号/绑定/策略/模型日志/进度保持;三服务active、三队列0、心跳idle且0秒;0模型调用 |
| 恢复 | 13源码before和新增权限/FAQ ID、课程/版本字段守卫干跑通过,未实际恢复;禁止整表/整库回退覆盖后续数据 |
安全执行回执:[release-receipt.json](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/execution-20261008/release-receipt.json)、[final-verification.json](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/execution-20261008/final-verification.json),同目录保留window/prepare/deploy/verify/rollback-check/resume/observe/public-smoke原始回执。runtime/maintenance/manifest/verifier均未改变,小程序未代发、H5未发行、正式业务/运营/真机验收保持待办。未提交/推送/PR;后续补隔离实际恢复演练,不重复生产执行。
更新:2026-10-07,对应开发进度1.78/0.88。已通过宝塔Playwright完成生产只读预检并形成r2具体计划;尚未部署、应用权限模板、导入FAQ或修改内容/账号。本批后端先行,小程序由用户自行发行,H5不随本批发布;实际生产写入须明确本批范围和维护窗口。
22:14:43、22:14:55(+08:00)重新通过宝塔终端执行冻结的内存只读脚本,r2的13项观察门禁全部通过:84文件before/属主/权限、15相关表、19权限计划、8缺失FAQ及7现有内容slug、课程ID1原版本/简介/正文/进度、环境/资源版本和策略均保持;三服务active、活动任务/调用和三队列0、心跳idle且0秒新鲜。原始主预检仍保留`ok=false`与既有换行/缺FAQ例外,复核不代替窗口内检查。临时`panel.private.json`与执行JS已删除,专用会话退出关闭;未停写/停worker、生产备份、发布或业务写入。具体范围、影响、备份和字段级恢复见[维护执行确认单](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/维护执行确认单.md),复核回执为同目录`preapproval-main.json`、`preapproval-supplement.json`、`preapproval-review-r2.json`。当前按用户提供的AGENTS.md第8节等待该批范围及维护窗口确认,不重复请求此前已完成发布的授权。
## 1. 基线与范围
本轮实测目标为 `https://airz.hqling.cloud`、`/www/wwwroot/xctai.cn`、数据库`127.0.0.1:3306/airz`,Python3.12.13/PHP7.4.33/MySQL5.7.44-log。Web运行目录`public`、API前缀`/api/v1`及根域名无PHP管理端沿既有记录。主预检时间2026-10-07 21:50:51+08:00,补充检查21:57:17+08:00;窗口内须复核哈希、活动状态和备份,不能把观察快照当作部署许可。
| 已有部署记录 | 本轮处理 |
| --- | --- |
| 2026-10-04:3716文件后端包,服务器归档 `/root/airz-backend-20261004` | 作为范围参考;本机未取得这一批完整生产文件快照,不能用Git提交代替当前线上基线 |
| 2026-10-05:7个反馈/消息文件与反馈5项结构增量 | 本轮7文件实际哈希全部匹配,反馈四字段/请求唯一键通过;候选包不重复覆盖 |
| 2026-10-07:两入口及登录验证码页面3文件 | 本轮3文件实际哈希全部匹配;保持根域名入口、API及旧链接308,不回退密码 |
| 用户随后自行修改admin密码 | 不使用旧临时凭据,不重置、不把账号备份整行恢复 |
| 小程序由用户自行发布 | 已上传版本没有可核对的源码哈希;前端变化清单是仓库参考差异,不等于已确认的小程序线上增量 |
本批覆盖0.63—0.85检查中仍未配套上线的后端修复:任务状态/租约/报告持久化及非法版本参数、后台资讯/FAQ类型隔离、编辑换行兼容、课程整篇阅读文案与搜索摘要、服务额度摘要。正式运营v1/客服v2/技术v5的应用层依赖必须保持完整,再单独预检和应用权限模板;脚本不自动分配账号。
明确排除积分表迁移或规则启用、供应商/短信/手机号换绑/人工客服/外部告警接入、收费模型调用、正式业务验收、H5发行和本轮小程序上传。现有演示产品/内容不在本批转换为真实业务资料。
## 2. 候选包与哈希
当前受限材料:`D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/`,ACL仅JUN/SYSTEM。r2归档含原13运行/7维护包、安全生产回执、换行差异审阅、实际权限/内容/资源版本计划和新manifest/verifier;不含.env、密码、会员记录、Token或完整私密备份。原`admin-content-release-prep-20261007`冻结材料保持,r2明确替代其未实测计划。
| 材料 | 内容 | SHA-256 |
| --- | --- | --- |
| [runtime.zip](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/runtime.zip) | 原13个精确运行文件,28706字节,包内容保持 | `c1c3adb13d82c89b2bf280911266b951a50da59b268e535962d2eca213477a91` |
| [maintenance.zip](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/maintenance.zip) | 原7个维护文件,20672字节;只执行明确批准步骤 | `576f36650b86e08b6d9f0ee5da34c0a48ba63c5787d4ae66dfeb8ad4f3cd2a59` |
| [manifest.json](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/manifest.json) | r2:13真实before/属主/权限,60匹配依赖+1审阅保留依赖、10保护文件 | `dad26e8d1e8067d840f9dc8ed0b7d062798239fb5d8736f26cba59a6c4aedca0` |
| [verify_release.py](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/verify_release.py) | 仅允许带可信审阅回执的精确线上换行变体;未知哈希/逻辑仍拒绝 | `5bcfed4dae360fde7c7a18d2dd737d30749cb5dd346acc058907526686260b0e` |
`frontend-source-reference.json`仍为28个仓库参考哈希,不等于小程序线上增量。r2的`content-maintenance-plan.json`改为首次导入8条FAQ和ID1课程简介维护;`permission-maintenance-plan.json`记录16节点/3模板、父组1,`resource-version-plan.json`记录DB/site版本具体before。计划均未应用,各包无新增依赖安装;维护包的纯库不覆盖站点。
`repositoryReferenceSha256`仍只作仓库参考。r2的13运行条目已标记`beforeHashConfirmedFromProduction=true`,来自当次服务器读取。`AssessmentRecords.php`线上22393字节与本机22389字节仅4行CRLF/LF差异,统一为LF后逐字节完全一致;保留线上SHA256 `6e294e8db263ad5a705ac308741f02fd1dfd12a191c9a20270d0039e49aecc71`,不纳入runtime。r2 verifier同时核对可信审阅哈希、精确线上/源码哈希及规范换行后哈希,未知变体或逻辑变更仍阻断;其他依赖/保护漂移不得绕过。
## 3. 13个运行文件
| 模块 | 相对后端根目录路径 | 配套行为 |
| --- | --- | --- |
| 评估 | `application/api/controller/v1/Assessments.php` | revisionId保留原始类型,非法数组交统一归属/版本校验 |
| 评估 | `application/common/library/AnalysisTasks.php` | 任务标识、状态/租约、发布事务及旧结果版本保护 |
| 评估 | `application/common/library/Assessment.php` | 报告和结果版本在发布事务内保持一致 |
| 评估 | `application/common/library/AssessmentStore.php` | 持久化写入校验、旧快照保护、无变化旧行不重写 |
| 内容 | `application/admin/controller/Acticle.php` | type排除写入,旧协议与结构化资讯兼容 |
| 内容 | `application/admin/model/Acticle.php` | 资讯/协议入口排除FAQ(type6) |
| 内容 | `application/admin/model/Faq.php` | FAQ入口限定type6 |
| 内容 | `application/admin/view/acticle/edit.html` | 旧类型字段只读 |
| 内容 | `application/admin/view/content/form.html` | 阅读时长、正文段落文案和操作名称 |
| 内容 | `application/common/library/ContentCatalog.php` | 搜索课程摘要显示阅读时长 |
| 内容 | `application/common/library/ContentPublication.php` | 编辑保存比较等价换行,保留旧正文/稳定段落ID和进度 |
| 内容 | `public/assets/js/backend/content-editor.js` | 段落按钮、排序/最后一段/30段上限交互 |
| 服务 | `public/assets/js/backend/servicestatus.js` | 会员额度摘要显示当前评估尝试上限;坏策略显示未知 |
仅runtime.zip可按此表覆盖站点路径;既有文件所有者、权限及新文件摘要须按发布回执保留。`.env`、`application/extra/site.php`、vendor/extend、上传目录、测试、数据库脚本、Git和前端编译产物不进入runtime包。
## 4. 必须核对的配套依赖
manifest中61个 `requiredExistingFiles`只读核对,不在runtime包中。缺失或哈希不同必须查明,不把它们默认视为已上线,也不为绕过预检覆盖整仓库。
| 依赖组 | 必须一起存在并匹配的主要能力 |
| --- | --- |
| 正式角色 | BusinessPermissions/BusinessPrivacy/BusinessMetadata、后台默认首页和Auth、只读记录trait、会员资料/消息白名单、模型密钥受控启停、日志/本人配置权限 |
| 内容 | ContentEditor trait、Finance/Faq控制器及表单/JS、LessonProgress、Content/Home/route、内容查询与公开API;前台课程保持整篇连续阅读、一次已读 |
| 排障重试 | Assessment控制器、Diagnostics/Retry/RetryAudit、两页面/assessment.js、AssessmentRecords、报告/匹配库、worker命令及任务job |
| 服务策略 | Servicestatus/Modelconfig、Service/AiUsageDiagnostics、策略Editor/专用Audit/页面JS、AiRuntimePolicy、三场景调用读取、DeepSeekClient、worker心跳、analysis配置 |
| 通用配置保护 | general/Config控制器、common/Config模型;不能撤保留行保护而留下通用CRUD或refreshFile写出策略 |
| 已部署保护项 | 7个反馈/消息文件(AdminLog同时依赖重试与策略专用审计)、3个无后缀入口文件 |
正式模板新建前,确认模板动作对应的控制器、DTO、审计和通用配置保护已部署。技术v5四字段策略权限不授环境开关、供应商URL、凭据新增/轮换、系统配置或管理员权限;多个角色取并集,绑定前核对每个账号的最终权限。
## 5. 生产只读预检
已使用用户提供的宝塔凭据,经缓存Playwright CLI进入终端完成三次有界只读检查。主脚本与独立PDO均在内存执行,无ThinkPHP初始化、上传/解压维护包、生产检查文件或业务写入;PDO会话只读事务,明确目标。终端画布无法读文本,改从实际Playwright WebSocket接收回执;直接刷新终端曾返回`ws_callback`缺项,通过面板首页→终端重新进入后恢复,未改面板或系统配置。首次导航证书不受信任,专用会话使用原配置`ignoreHTTPSErrors`,仅宝塔;没有改变公开站点TLS验证。
| 当次实测 | 结果与边界 |
| --- | --- |
| 84文件 | 13运行全部待更新;60依赖/10保护匹配;1依赖换行差异审阅保留。原主回执`ok=false`保留,不伪改为全通过 |
| 15相关表 | InnoDB、规定列类型/空值/显式排序规则、唯一键/声明外键全部通过;不是全库完整schema验收,不迁移积分 |
| 权限 | 当前131节点/5组/1绑定,唯一正常超管根1;实际缺16节点/3正式模板,共19项。无模板/绑定写入 |
| 内容 | 8 FAQ slug均0,type6总行0;4资讯/3课程slug各唯一;credit-basics为已发布/推荐ID1,原简介匹配参考,正文/稳定ID已记录,进度0 |
| 策略 | ai_runtime_policy缺行,合法沿环境默认:Flash/20次/3尝试,模型环境开启;只读解析.env,不代表供应商验证,不创建策略行 |
| 服务/活动 | analysis/FPM/Redis均active,观察PID2525192/2525169/552222;无processing/pending/streaming,三队列0,心跳idle且1秒新鲜 |
| worker日志 | unit stdout/stderr均journal;最近15分钟最多300条取样实际0条。无错误样本,不代表全时段无错误 |
| 资源版本 | DB fa_config id4/version=1.0.2,实际site.php=1.0.1;记录真实site/.env哈希,只在批准时精确同步版本字段 |
安全回执在r2归档`production-preflight.json`、`supplemental-db-probe.json`、`dependency-drift-review.json`和`review-summary.json`。原始预检因已审阅换行差异及FAQ不存在而未全通过;r2将差异和实际数据维护显式纳入计划,没有删门禁或覆盖线上。5类本机变体验证通过:已审阅精确变体接受、未知同逻辑换行哈希拒绝、逻辑变更拒绝、错误manifest拒绝、篡改审阅拒绝;合成文件逐项清理。窗口内仍须复核,不停写/停worker/备份/apply直到本批写入授权。
如后续需将维护材料落盘,须按当次授权准备私密目录(目录700/文件600),不放public;以下是原准备的独立包/脚本方式,不作为本轮已执行记录。预检要求已有Python3.9或以上、PHP7.4;先核对版本,不自动安装或升级系统运行时。核对源包、manifest和脚本SHA-256后再执行下例;示例目录需替换为当次确认目录。
```sh
python3 /root/airz-release-review/verify_release.py \
--package-dir /root/airz-release-review \
--manifest-sha256 dad26e8d1e8067d840f9dc8ed0b7d062798239fb5d8736f26cba59a6c4aedca0 \
--site-root /www/wwwroot/xctai.cn \
> /root/airz-release-review/file-preflight.json
```
预检逐文件输出safe哈希;13运行可待更新,60配套/10保护必须精确匹配,1配套允许上述已审阅精确变体。该脚本只证明文件条件,不检查数据库、服务空闲、备份、账号绑定或授权;`ok=true`不是部署许可。其他合法漂移先审阅并重建材料,不直接删漂移清单。
数据库配置从当次确认的服务器环境准备为私密显式INI;禁止在本机默认.env下加载框架、启动worker或跑正式库测试。服务器历史环境为127.0.0.1:3306/airz,实际`--target`须与当次配置完全一致。维护包在独立目录保留database/application相对结构,PHP路径沿现网 `/www/server/php/74/bin/php`。
```sh
/www/server/php/74/bin/php /root/airz-release-review/maintenance/database/migrate_admin_permissions.php \
--env /root/airz-release-review/private/production.ini \
--target 127.0.0.1:3306/airz
/www/server/php/74/bin/php /root/airz-release-review/maintenance/database/import_faq.php \
--env /root/airz-release-review/private/production.ini \
--target 127.0.0.1:3306/airz
/www/server/php/74/bin/php /root/airz-release-review/maintenance/database/import_content.php \
--env /root/airz-release-review/private/production.ini \
--target 127.0.0.1:3306/airz
```
以上不带`--apply`;导入脚本会使用锁/只读事务,但不插入业务行。权限预检按实际根角色、完整节点/索引/父层级/同名节点/模板规则核对。若有多个正常根角色,确认真实父ID后显式加`--parent-group-id`;不得照搬测试根37、60节点/3模板或63项增量。旧技术v1—v4和客服旧角色/绑定保留;同名现行模板漂移会阻断,不自动修复或补权。
还须只读核对:涉及行锁/成功审计的admin/admin_log/user/ai_chat/ai_chat_log/config/auth三表均为InnoDB;评估最新版本结构已存在;反馈四字段及唯一键、消息事件唯一键、课程进度表保持;无重复组或异常结构。积分字段/表不迁移。`ai_runtime_policy`缺行是兼容状态,沿环境默认;已有行只检查格式/有效策略,不为了开后台入口创建、删除或调整策略。
服务观察记录当次airz-analysis/php-fpm-74/Redis状态、进程及近期错误;确认处理中的评估/日志、queued/running预留和Redis三队列状态。只读查看LLEN/ZCARD/PING,不pop、恢复扫描、删队列或调用模型。尚有工作时不停止或升级worker,另行安排窗口。
## 6. 内容数据维护与账号分配
这两项是独立生产写入,不因代码包已准备而自动执行。
| 数据操作 | 明确边界 |
| --- | --- |
| 首次FAQ种子 | 本轮实测type6为0,8 slug全部不存在;批准后只补profile/password/phone/assessment/result/amount/files/draft八条已冻结FAQ,插入后记录新ID。重复导入保留后续已有记录 |
| FAQ `password`/`phone` | 两条现不存在,取消原“修改答案”计划;首次种子已经包含未开放短信登录/重设与手机号换绑的准确文案,不执行不存在ID的更新 |
| 课程 `credit-basics` | 实测ID1,只将intro改为“从自己的实际情况出发,建立一份清晰的申请前检查清单。”;baseVersion为009a6ac642d2be36f89a867dc42c0f4df9c86954f498fff0fb510f51f9cb6946。保留3个稳定段落ID/顺序/正文、推荐1、已发布及进度;旧版409须刷新 |
| 正式权限模板 | 批准后只补实际16节点/运营v1/客服v2/技术v5三模板,父组1,共19项;窗口计划有变立即停,不照搬隔离ID。不改历史模板/绑定,复检0项 |
| 后台资源版本 | 独立批准维护fa_config id4/version value从1.0.2及site.php version从1.0.1同步为20261007-admin-content-r2;核对before哈希,只改version字段,不调用refreshFile整体重建site.php |
| 实际管理员绑定 | 由超管明确每个运营/客服/技术账号及组,检查权限并集。先记录旧绑定和恢复办法,再单独确认分配;不创建默认弱口令账号、不换绑admin |
课程真实ID/版本/before已在r2计划,窗口仍须核对并保存私密原记录,按版本化入口只改intro。FAQ当前不存在,首次导入需独立批准;4资讯/3课程都存在,不执行import_content。计划不是可直接执行的SQL,不整条覆盖;课程仍整篇一次已读。
## 7. 获得具体发布授权后的顺序
1. 确认本批13文件、19权限增量、8 FAQ首次导入、ID1课程intro、资源版本同步及维护窗口的具体授权;实际账号绑定、密码/策略修改不在本批。窗口复核真实before/精确计划,变化即停止审阅。
2. 在批准维护窗口阻断相关API/后台写入,核对无活动评估、助手、产品解释和队列,停空闲worker。备份13旧文件、权限三表与绑定、内容候选行、保留策略行和全库灾难恢复资料;备份位置不公开。
3. 60配套/10保护精确匹配且AssessmentRecords仍为已审阅线上哈希后,按13清单同目录暂存、PHP7.4 lint、核对摘要与所有者后替换;不覆盖AssessmentRecords。任何before哈希变化停止;中途失败留维护状态,完整恢复已替换文件。
4. 按明确授权备份并apply正式权限增量,复检`changeCount=0`,保存新增ID/完整规则回执;源码/配套保护不完整时不得先授技术v5。
5. 按资源计划只同步DB id4/value与线上site.php/version为20261007-admin-content-r2,其余字段保持,不调用refreshFile、不用本机site.php覆盖。精确刷新FastAdmin __menu__及受影响模板缓存、PHP-FPM/OPcache;RequireJS取得新site.version,不清全Redis。
6. 仅执行批准的8 FAQ缺slug首次导入和ID1课程intro维护,按版本检查保留字段及审计,记录新FAQ ID。未批准的数据步骤跳过并明确尚待,不绑定账号、不重复导入其他内容。
7. 先做下节零模型调用烟测;恢复原worker/入口后观察队列、日志及心跳。worker重启只加载新源码,不手工消费测试任务或触发重试。
8. 后端通过后由用户重新编译、核对并发行完整当前小程序项目;记录实际源码/包哈希和版本。不能仅根据28参考文件选择发行,也不能把开发编译记为真机验收。H5单独安排。
## 8. 发布烟测与恢复
| 零收费烟测 | 预期证据 |
| --- | --- |
| 根域名/登录/验证码/旧入口/API | 无PHP菜单,旧GET/POST308保留方法,公开API200、私有匿名401、敏感路径404;密码保持用户现值 |
| 资讯/FAQ/课程/搜索 | type隔离和跨入口拒绝、旧协议保持、单篇正文阅读、搜索阅读摘要;只读阶段不保存真实内容 |
| 角色/DTO | 正式账号菜单/默认页、直接越权拒绝、掩码/附件/金额边界、排障正文隐藏;本人日志范围有效 |
| 评估历史 | 默认已发布版/显式历史版、非法版本参数404、no-store;只读不预留模型调用 |
| 服务/用量/策略 | 显示当前策略/尝试上限和真实状态;未探测/未知不假报健康;GET不写策略或预留 |
| 文件/数据完整性 | 13线上after哈希等于包,61配套/10保护保持;未授权内容/绑定/.env/策略/业务原记录摘要保持 |
实际内容保存、客服回复、技术策略保存、打开后撤权、成功重试等写场景已有0.82—0.85隔离证据。生产成功重试会被真实worker消费并可能收费,不能作为本批“零调用”烟测;需要生产写样例时另行明确合成账号/对象/队列、影响与清理,不能直接用真实会员做验证。
恢复时先阻断写入、等待空闲并停止worker;保存故障后的记录和安全回执。优先撤销新角色绑定/停用模板,逐文件按当次before备份恢复13文件并刷新缓存。入口、用户已修改密码、真实报告/评估/调用预留/通知/课程进度和上传保持。权限新增ID仅在无绑定/子组/其他角色引用、记录仍匹配新增回执时才可定向处理;不整表恢复三权限表或业务表。
策略原本未改就不回退;确有单独批准的策略变更时,走受控入口以新版本恢复已确认旧值并保留审计,不能删除保留行重新启用环境默认。内容只恢复批准字段,核对当前版本及后续编辑,课程正文/ID/已读时间不覆盖。数据库整库备份仅用于另行授权的灾难恢复,不用于撤销本次小范围发布。
原0.86的20包条目/语法/种子及四类拒绝证据保持,runtime/maintenance包逐字节未变,不重复业务全量检查。r2包、84后端/28前端源码验证通过;新增5类变体门禁验证通过,合成文件逐项清理。生产只读实测范围见第5节;无发布、业务写入、模型/worker调用、账号或策略修改、提交/推送/PR,正式运营/真机验收状态保持。宝塔登录/终端会话仅产生正常认证/访问审计。
验证与核对回执:[review-summary.json](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/review-summary.json)、[validation.json](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/validation.json)、[content-maintenance-plan.json](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/content-maintenance-plan.json)、[permission-maintenance-plan.json](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/permission-maintenance-plan.json)、[resource-version-plan.json](D:/AAdesk/202609/airz-backups/admin-content-release-reviewed-20261007/resource-version-plan.json)。后端维护记录见[部署记录](D:/AAdesk/202609/airz/deployment-baota.md)、[权限](D:/AAdesk/202609/airz/database/admin-permissions.md)、[评估排障](D:/AAdesk/202609/airz/database/admin-assessment.md)、[服务策略](D:/AAdesk/202609/airz/database/admin-services.md)、[内容](D:/AAdesk/202609/airz/database/content-publication.md)。