247 KiB
Scert 整改任务执行清单
2026年10月2日19:34 证书导入异步化回归完成,等待复审
需求沿用已确认的 Linux 完整清单,先开发及自动回归,再统一部署,不处理 Windows。本批修改前已确认工作区干净并推送 09616e7 基线,无额外待提交文件。
- 生产证书导入接入已有异步任务执行器,应用直接执行已有任务,不嵌套创建任务;返回 202 后继续导入和部署。
- 上传副本转交工作线程,拒绝提交、排队取消、正常关停、执行异常及正常结束均回收文件;响应写出前完成所有权转交。JSON 源文件不在清理范围内。
- 导入提交与执行前复核证书管理及部署权限;不要求 DNS 权限,导入任务的通用重试返回 409,不重放已回收上传文件。
- 完整报告增加 certificate_imported 标志,与任务终态同事务持久化;保留已导入但部署失败或部分成功的真实状态,不存储源文件路径及私钥内容。
- 前端展示任务编号并跟踪结果,不把 202 当作已导入;响应断开后沿用原幂等键找回任务,刷新可恢复保存标志,撤权清除缓存结果。
- 原生 Linux 专项、全后端测试及 go vet 通过;新增导入专项重复二十次通过,耗时 29.448 秒。第一轮测试误用取消路由的失败记录保留,按真实 DELETE 和 202 契约修正后通过。
- 最新前端 260 项全部通过、零跳过,生产构建通过;清单、Linux 测试记录和接口说明同步更新。本批不创建辅助验收脚本,不清线上数据库,不部署。
- [!] 进程强制终止后的上传残留清理、真实浏览器上传及生产流程尚未验收;普通重复回归不替代竞争检测。第二台磁盘剩余约 863MB,Scert、Nginx、MySQL 保持 active。
- [!] 历史版本恢复的真实实现目前明确拒绝恢复,与 P1-02 清单存在差异;该项继续保留,不能以模拟测试宣称完成。其余长操作、升级、通知重置、三库、备份恢复及完整生产门禁仍未关闭。
2026年10月2日19:01 排队任务执行前权限复核
需求沿用已确认的 Linux 全清单,先开发及自动回归,再统一部署;不缩减范围、不处理 Windows。本批修改前已推送基线 657a9c0,工作区干净。
- P0-07/P2-03 子项:异步任务取得执行槽后,重新核查当前账户、域名归属及操作权限;不把提交时权限或历史项目快照作为执行授权。校验失败不调用签发或部署工作流,以事务保存失败任务、尝试及审计。
- 旧代码负向回归复现排队期间撤权后仍执行外部操作;新增覆盖停用账户、撤销成员/操作权限、移动或删除域名、授权服务故障及缺失依赖。
- 手动重试使用本次操作者和实时重试权限;正常申请/部署、首次操作者停用但有效新操作者重试均保留。修复后两组共二十八个子场景通过,AUTHORIZATION_AFTER_EXIT=0。
- 原生 Linux 全后端回归与静态检查通过,AUTHORIZATION_FULL_EXIT=0、AUTHORIZATION_VET_EXIT=0;新增专项重复二十次通过,耗时 74.602 秒。普通重复测试不替代竞争检测。
- 清单、Linux 测试记录及接口说明已同步;本批代码保存提交,不含运行产物。本批未部署,未取得竞争检测或生产验收通过结论。
- 后续继续导入、恢复、校验异步化及上传文件生命周期;升级、通知重置、三库、备份恢复及整体门禁仍保持未关闭。
2026年10月2日18:35 后台收尾一致性执行入口
需求沿用已确认的 Linux 全清单,不处理 Windows,不缩减原始范围。先开发及自动回归,再统一正式部署;本批不清线上数据、不创建辅助验收脚本。
- 修改前基线
cf3bc7a已提交并推送;第一次推送认证失败,重试后成功。 - 已取回上一批后台取消修复的全后端测试与静态检查结果:BACKGROUND_FULL_EXIT=0、BACKGROUND_VET_EXIT=0;第二台 Scert、Nginx、MySQL 均 active,隔离 MySQL 已退出。
- [!]
4e8d509的受限竞争检测达到十分钟限制,Result=timeout、REPORT_BOUNDED_RACE_EXIT=1,不计通过。第一台任务已停止,无残留编译测试进程,既有服务保持 active。 - 新增后台完整报告与收尾故障回归;旧实现缺少重试报告,并在报告、结果、尝试或审计写入失败后出现部分保存,BACKGROUND_ATOMIC_BEFORE_EXIT=1。
- 将后台任务终态、尝试、完整报告、逐服务器结果和完成审计统一到事务;失败重试保存报告但任务保持 retry_wait,等待取消不覆盖历史尝试,保存失败不继续外部操作。
- 增加无活动尝试的失败/取消收尾;存在活动尝试时拒绝单独收尾。应用、仓储和 HTTP 原生 Linux 关联回归通过,BACKGROUND_ATOMIC_AFTER_EXIT=0。
- 本批全后端回归、静态检查通过,BACKGROUND_ATOMIC_FULL_EXIT=0、BACKGROUND_ATOMIC_VET_EXIT=0。五处故障注入验证完整回滚,开始审计失败不执行外部操作,完成审计失败保留中断现场。
- 新增收尾和取消专项重复二十次通过,BACKGROUND_ATOMIC_REPEAT_EXIT=0;应用 48.982 秒、仓储 49.985 秒。进度文档及接口说明同步更新,本批随代码提交保存。
- [!] 其他长操作、升级 502、恢复证据、系统通知重置、三库首次 Web、备份恢复与最终验收仍未关闭。本批尚未部署。
下方 18:11 的回归运行态已由本节取回的终态替代;历史记录保留,不作为当前阻塞重复计算。
2026年10月2日18:11 当前执行入口
本节为当前状态,下方时间段保留历史过程。需求沿用已确认的 Linux 全清单:先完成开发和自动回归,再统一正式部署;不清线上数据库,不以测试脚本替代产品验收。
- 完整报告与完成审计原子化已保存并推送为 4e8d509;任务、尝试、完整报告、逐目标结果和完成审计在 HTTP 异步收尾路径共用事务,任何一项失败全部回滚。
- 第二台隔离源码第三轮仓储、HTTP、数据库关联回归全部通过,REPORT_THIRD_EXIT=0。前两轮失败日志保留;不将修复前失败抹去。
- 最新前端 256 项全部通过,零失败、零跳过;生产构建通过。覆盖页面刷新读取完整验证与恢复报告、重试报告隔离及旧响应兼容。
- 完整报告批次
4e8d509的全后端测试与 go vet 在第二台串行、低资源运行通过,REPORT_FULL_EXIT=0、REPORT_VET_EXIT=0;未部署本批代码。 - 后台工作流四个取消场景在旧代码全部复现失败:部分成功、恢复未确认、恢复失败被取消状态掩盖,已恢复场景的逐服务器结果丢失。修复为保留真实结果并用有限时、独立于取消的上下文保存结果;四场景重复二十次通过,BACKGROUND_CANCEL_AFTER_EXIT=0。
- [~] 上述后台修复的最新全后端回归与静态检查运行中;后台报告、尝试和审计尚未全部统一到同一事务,不能按 HTTP 路径的结果标记整项关闭。
- 新增第 20 号报告迁移实库回归:第二台独立 MySQL 8.0.46、回环监听、严格 TLS,建表前/建表后/已有大中文报告三条恢复路径,以及五类结构冲突全部通过,REPORT_MYSQL8_EXIT=0。
- 新报告迁移的 MySQL 5.7、PostgreSQL 当前版本实库复核;三库生产 Web 门禁仍未完成。
- [~] 第一台启动独立受限竞争检测:内存上限 512MB、CPU 上限 50%、最长十分钟,不使用此前无限制负载,尚无通过结论。
- [!] 竞争检测、其他长操作异步化、关停与重启 502、历史恢复证据、系统通知重置、三库首次 Web、备份恢复及最终验收仍未关闭。
校正:17:30 的“完成审计尚未与上述事务统一”属于当时状态,现已实现且关联回归通过;17:11 的推送超时和竞争测试运行态也不是当前状态,推送已成功,先前竞争检测中断退出 130。
2026年10月2日17:30 完整异步报告整改入口
需求已沿用既定清单确认:异步执行后必须保留完整部署、站点验证与恢复报告;不能仅由逐目标成功推断整个任务成功。本轮仍只处理 Linux 开发与自动回归,不清线上数据,不部署。
- 上轮终态事务与取消一致性整改已提交为
8a8b1a5,本轮已成功推送,解除此前远程同步超时。 - 接续记录确认上轮普通专项重复二十次通过;竞争检测已中断退出一百三十,不能记为通过。本轮已轮询原 SSH 会话,返回空闲提示符,不重新启动无限制负载。
- [~] 增加完整报告三库迁移;报告、逐服务器结果及任务与尝试终态共同提交,保存失败整体回滚。
- [~] 前端优先读取最新尝试的持久化报告,保留站点验证与恢复状态;旧历史不伪造验证结论。
- 新增报告写入故障、事务回滚、重试隔离、权限、脱敏、刷新恢复和迁移回归。
- 在第二台隔离源码运行最新全量后端回归与静态检查;本机运行前端测试和构建。自动回归不替代正式部署验收。
- [!] 完成审计尚未与上述事务统一;竞争检测、其他长操作、关停与重启边界、历史恢复证据、通知重置、三库首次 Web、备份恢复与最终验收仍未关闭。
2026年10月2日17:11 异步收尾一致性整改
本节接续 16:47 的任务,不缩减原始 Linux 上线范围;本批仍未部署。
- 修复动态安装模板仍为三十秒的遗漏:动态模板和分发单元统一停止预算一百八十秒,原生 Linux 两种路径的断言通过。该预算不等于已证明所有关闭路径无中断。
- 新增任务和执行尝试的同事务终态保存;第二条写入失败、尝试缺失、跨任务尝试、过期尝试和重复终态均拒绝部分提交。覆盖数据库触发器注入失败后的回滚。
- 取消请求不覆盖已完成、部分成功、回滚失败或未确认的真实结果;收尾状态读取或逐服务器结果保存失败不发布成功;终态事务失败保留中断记录供启动恢复。
- 第二台隔离 Linux 四个关联包首次回归通过;最新完整 go test -p 1 ./... -count=1 与 go vet -p 1 ./... 均通过。新增仓储用例使用隔离 SQLite,不冒充三数据库完整流程通过。
- [~] 异步、终态事务、动态和静态服务配置专项重复二十次运行中;普通重复回归不能替代竞争检测。
- [!] 第一台竞争检测尚无可靠结果;本机和第二台新增 SSH 连接都未完成握手,原会话无输出。已向原会话发送中断信号,但未确认远端停止,不重复启动负载、不推断原因、不记通过。
- 已补充异步接口接线说明,记录 202、取消语义、查询结构、权限、错误及未完成边界;不修改 Smail API 参考文档。
- [!] 开发基线提交
9e666be已保存在本地,推送两次均连接超时,尚无远程同步成功证据;不进行强制推送。 - 后续继续完整验证与恢复报告持久化、完成审计与结果跨记录一致性、其他长操作异步化及关停边界;原有恢复、通知重置、三库首次 Web、备份恢复及统一验收门禁不变。
2026年10月2日16:47 异步开发与自动回归进度
本节更新下方 15:43 的早期状态。范围仍为 Linux;先完成开发和自动回归,再统一正式部署验收。开发回归使用隔离源码与临时数据库,不清理线上业务数据。
- 申请、首次部署、重试持久化任务与尝试后返回 202;后台上下文不依赖浏览器连接,保留项目授权、幂等键和任务历史。
- 已实现任务取消收尾、关闭时拒绝新工作、有限执行槽、超时和异常终态;补充排队取消、队列满、异常脱敏和审计保存失败回归,等待竞争检测及复审。
- 前端已接入任务查询、最近尝试的逐服务器结果、刷新后查看及撤权清缓存;查询失败不自动重新提交,提交成功不等于部署成功。
- 本机前端 252 项测试全部通过,生产构建通过;第二台隔离 Linux 全后端测试与 go vet 通过。上述结果均非正式部署验收。
- [~] 第一台使用现有编译器运行异步专项竞争检测,重复二十次;第二台缺少编译器、第一台首次缺少离线依赖的记录保留,不将环境失败计作产品用例失败或通过。
- [~] 复核发现静态 systemd 单元已增加停止预算,但动态安装模板仍为三十秒;下一步同步模板并增加一致性测试。
- 补齐异步查询结果契约、持久化失败及取消提交竞态的复核;其他长操作仍需逐项整改。
- [!] 本批代码未部署,重启 502、两条缺证据历史事务、系统通知与密码重置、三数据库首次 Web 流程、备份恢复及最终生产门禁仍未关闭。
2026年10月2日15:43 长任务异步整改入口
需求确认:正式申请、部署与重试不能等待整个工作流结束才响应;沿用持久化任务与权限边界,不以增加代理超时替代异步执行。仅处理 Linux,开发回归不清理线上业务数据;首次初始化验收另行清库执行。
- [~] 拆分任务提交与后台执行,持久化后返回任务编号,浏览器断线不取消已接收任务。
- 服务关闭拒绝新任务并等待取消收尾;进程重启保留中断历史,不自动重复签发或部署。
- 保留任务权限、幂等键、并发互斥、取消及重试历史,覆盖竞态测试。
- 前端显示已提交状态并查询任务终态,刷新后可继续查看,不把提交成功当部署成功。
- 原生 Linux 自动回归、正式构建部署及超过反代超时窗口的实机验证。
- [!] 其他长操作、历史缺证据事务、系统通知、三数据库首次 Web 流程与最终生产门禁仍未完成。
2026年10月2日15:31 P0-10 实机负向恢复与重试
需求确认:复用既有证书和业务配置验证正式候选,不清库、不新签发、不创建辅助验收脚本、不伪造事务或手工释放锁。仅还原本次受控注入,历史缺证据事务继续保留。
- 真实部署旧文件摘要不匹配:任务 e3a9e1c8-c930-4fa0-b2aa-2730da019503 首次失败,产品拒绝回滚并保留本次锁;整个第二台目标目录的路径、权限、内容摘要与注入后快照一致。
- 真实启动恢复锁归属不匹配:对同一事务受控改变锁标识,产品明确拒绝接管;目录完整快照未变。恢复注入后由产品完成两台事务回滚,未手工删锁、改库或改终态。
- 正式接口恢复标准配置后,同一任务第二次尝试双机成功;第一次失败记录保留,成功后再重试返回 409,无第三次尝试。双机文件摘要一致,本次锁及临时事务文件无残留。
- 双机本地 SNI 严格 TLS 通过、内部端口仅回环,第一台 Scert、Nginx、xmail 均 active;第二台普通公网域名健康检查及首页恢复 200。
- [!] 15:21:56 长部署请求被 Nginx 超时返回 504,而任务在 15:22:37 才失败;需要整改长任务提交与状态查询,不能把延长超时当作完整异步任务实现。
- [!] 15:24 受控服务重启观测到一次 502;单实例中断事实保留。两条旧恢复事务仍缺可信证据,未关闭。以上局部证据等待复审,不代表 P0-10 或总体生产门禁通过。
2026年10月2日15:15 管理证书正常轮换复核
需求确认:仅 Linux;不开放 Scert 公网端口,不降低 TLS 校验,不以人工维护替代产品验收。本轮仍为保留数据的升级复核。
- 14:58 按 root 维护边界修复代理与上游旧证书接线:使用现有有效正式材料,未改写旧事务;该步骤属于环境维护,不算自动协调成功。
- 15:03 正式 Web 设置触发管理续期,任务 a1c7ffd8-5623-4740-9deb-b7cdef88c3f2 于 15:03:31 成功;应用协调与辅助事务均为 committed,关联标识一致。
- 现场核验代理与上游新叶证书指纹一致,到期时间为 2026-12-31 06:04:52 UTC;普通域名首页及 readyz 严格 HTTPS 均返回 200,Nginx 配置检查通过。
- 15:14 经正式系统设置恢复续期阈值六天、临近阈值十天,并只读确认持久化结果;没有重复触发任务。Scert 仍只监听回环 8443,辅助私钥 root:root 0600。
- [~] 本项为正常轮换局部证据,等待独立复审;故障恢复矩阵、多目标部分失败与重试幂等、历史事务、通知重置闭环、三数据库首次 Web 流程及备份恢复仍未全部通过。
2026年10月2日14:52 管理证书协调实机检查
需求确认:公网只走 Nginx 80/443;双层证书不一致时必须在签发前拒绝,不清库、删锁或改写历史事务制造通过。本轮为保留数据的升级复核,不替代首次初始化验收。
- 第二台独立 Nginx 辅助程序已于 14:26 升级到
7ba4046对应正式候选;程序摘要已复核,策略、历史事务及引用摘要保持不变。此项更新下方 14:20 的旧版本待办。 - 通过正式系统设置将续期阈值临时调整为八十八天、临近阈值九十天,策略更新自动唤醒调度;未重复点击立即续期。真实管理任务在 preflight 阶段失败,辅助服务被 socket 实际启动,未进入签发阶段。
- 通过相同页面恢复原阈值六天、十天,现场持久化配置已确认;业务域名仍关闭自动续期,旧辅助事务与引用摘要未变化。
- [!] 第二台代理实际证书到期时间为 2026-12-24,上游实际证书到期时间为 2026-12-28,叶证书指纹不同。首页及 readyz 的严格 HTTPS 成功不能替代双层身份一致性。
- [~] 下一步:按 root 维护边界核查历史终态与证书来源,安全修复现有接线基线,再走产品续期协调;不得关闭证书校验或篡改旧记录。
- [~] P0-10、三数据库首次 Web 流程、系统通知、备份恢复及整体生产验收继续未通过。
2026年10月2日14:20 候选构建与双机升级
- T2-F 构建:7ba4046 干净检出正式构建 Linux amd64 包,source_dirty=false,发布路径与包内摘要检查通过,全量 Go 模块校验通过。
- 前端原生 Linux 测试:二百四十项通过,一项 Windows 专用用例跳过,无失败;不把跳过记作通过。
- 候选程序拒绝通配地址、非回环 IP 和 localhost,均在创建配置之前退出;双机升级后仍只监听 127.0.0.1:8443,公网 Web 仍由 Nginx 80/443 提供。
- 双机核心三程序已通过正式归档安装,并与包内程序逐字节一致;第二台普通域名 HTTPS 首页、readyz 与第一台跨机 readyz 检查通过。
- [!] 第二台首次误用无执行权限的构建工作目录安装器,退出 126,安装未发生;已恢复旧服务,再从正式归档完成升级。原失败日志保留,额外停服不隐去。
- 独立 Nginx 辅助程序仍为 431fd043,需要按独立升级流程完成版本配套及实际协调验证;普通安装器不会安装它,不声称全组件已统一版本。
- [~] T2-F 业务实机负向恢复复审仍待完成;P0-10、升级可用性、系统通知闭环、三数据库首次流程及备份恢复门禁不放行。
2026年10月2日13:59 当前任务入口
需求确认:不允许额外公网端口、未知归属文件误删或绕过安全校验;测试失败必须保留证据,不能降低验收门槛。
- T2-G:十个测试文件共二十一行调整,将重置状态、敏感配置与 SQLite 数据库隔离到临时目录;不修改产品行为,不写正式安装目录。
- 完整 Git 检出叠加测试隔离修复后,原生 Linux 全后端测试退出零;源码归档缺 Git 元数据造成的发布边界失败已定位,未跳过检查。
- T2-D:第一台竞争检测因依赖下载连接停留在 SYN-SENT,保留原日志并中断,退出 130;使用三端摘要一致的缓存归档复测,恢复及事务场景竞争检测重复二十次通过,退出零。
- 完整 Git 检出上的全后端 go vet 通过,输出 CHECKOUT_VET_EXIT=0。
- 双机现场监听核查:Scert 均为 127.0.0.1:8443,Nginx 提供 80/443;服务均运行中,未新增公网端口。
- T2-F:测试隔离修改提交后,从干净源码正式构建,再进行部署与业务实机恢复复审。
- [~] P0-10 及整体生产门禁仍未通过;本轮不是清库首次流程,也不等于三数据库生产验收。
2026年10月2日13:41 当前任务入口
- T2-E:已复现上传碰撞误删;修复为独占创建确认、摘要落库与整组临时文件预检,碰撞、变更及旧日志缺归属证据均保留现场。
- T2-E 回归:三包原生测试、恢复及事务用例重复二十次、全后端 go vet 通过;可信半份私钥清理及无残留临时文件的旧事务兼容路径保留。
- [~] T2-G:全后端原生测试暴露旧测试污染正式路径的问题;修复测试临时路径,并用包含构建文件的完整仓库重新执行。
- T2-F:新候选正式构建、双机部署及业务实机恢复复审仍待完成。
- [!] 总体生产门禁不放行,历史缺证据事务不得伪造记录或删锁。
2026年10月2日13:30 当前执行入口
需求确认:仅 Linux,沿用 P0-10 恢复安全和生产门禁;未知归属不得自动接管,公网只走 Nginx 80/443,不放宽校验,不使用辅助脚本作为验收依据。
- T2-A:恢复前核验完整锁、备份及目标身份;SSH 认证前核验服务器证据,已验证阶段支持部分解锁重入。
- T2-B:原实现负向复现;修复后部署、仓储、应用三包原生 Linux 测试及 go vet 通过,恢复新用例重复二十次通过。
- T2-C:真实回环密码 SSH/SFTP 的五个场景通过;测试数据库使用临时目录,不提权写入正式安装路径。
- [!] T2-D:竞争检测因缺少 gcc 未执行成功;普通重复测试不是其替代验收。
- [~] T2-E:带事务日志上传碰撞的路径所有权核查。
- T2-F:本批修复的干净提交正式构建、部署及业务实机恢复复审。
- [~] P0-10 整项仍进行中;历史缺证据事务、升级 502、系统通知投递、三数据库清库首次 Web 流程、备份恢复和统一复审继续保留。
2026年10月2日12:54 双机安全升级当前入口
本节覆盖下方本轮执行态记录;历史失败和未通过门禁继续保留。
- Linux 非回环监听防护、六包原生回归、监听用例重复 20 次和 go vet 已完成;源码提交
1150c39已推送。 - 正式构建使用专属 TMPDIR 后通过原有路径扫描;未更改扫描器或跳过检查。发布清单 source_dirty=false,四个二进制均为同一提交并带 trimpath。
- 正式发行程序实测拒绝 0.0.0.0、::、非回环 IP 及 localhost,退出码均为 1,没有创建初始化配置文件。
- 第二台 12:48、第一台 12:51 均通过正式安装器完成配套升级;Type=notify 和状态通知生效,Scert 均仅监听 127.0.0.1:8443。
- 双机主程序摘要一致,包内校验全部通过;双向 IPv4 探测对方 8443、3306、33060 均未连接成功。不扩大为所有来源或 IPv6 外部探测结论。
- 第二台严格域名 HTTPS 首页及 readyz 返回 200,HTTP 返回 301 跳转 HTTPS,后续连续 10 次 readyz 成功;Nginx 配置摘要及主进程未变。第一台未新增管理站点,其 Nginx、MySQL、Xmail 主进程未变。
- [!] 单实例停机升级窗口仍有 502:跨机 60 次采样出现 7 次 502、2 次连接超时。启动通知已验证,但不能当作零中断整改完成。
- [!] 本轮未清库、未执行首次 Web 全流程。P0-10、系统通知实发、三数据库首次流程及最终生产验收保持未通过。
2026年10月2日12:42 当前安全整改入口
- Linux 默认及空值回退使用回环地址;CLI、初始化及正式应用入口拒绝实际非回环监听,保留旧配置经安全环境覆盖启动的兼容性。
- Linux 非特权用户执行 config、bootstrap、cli、app、serviceready、servicehost 六包完整回归通过;新增监听用例重复 20 次通过;六包 go vet 通过。
- 修正旧代理端口持久化测试写入正式配置目录的问题,明确写入测试临时目录;隔离源码补齐 deploy 目录后重跑,首轮失败不计通过。
- [~] 准备从干净提交重新正式构建;使用专属临时目录,避免通用 /tmp/ 路径与安装器禁止目录规则误匹配,仍检查真实构建路径。
- 新版配套部署、systemd 通知、严格 HTTPS 及跨机端口复核待进行;线上仍为此前候选。
- [!] 生产门禁未放行,P0-10、邮件实发与三数据库完整首次流程保持待办。
2026年10月2日12:35 公网监听风险收口
需求确认:Linux 管理服务不能直接暴露公网,仅允许回环监听并经 Nginx 的 80/443 访问;不能仅依赖防火墙阻挡错误监听。本节作为新增安全整改入口,不覆盖历史未完成门禁。
- 双机只读检查:Scert 均监听 127.0.0.1:8443,MySQL 均为回环监听;第一台探测第二台 8443、3306、33060 未连接成功,仅作为该来源的 IPv4 证据。
- 第二台 Nginx 上游为回环 HTTPS,保留证书及域名校验。
- Linux 默认及空值回退改为回环地址;配置加载后的有效监听地址、初始化入口及正式应用入口均增加非回环拒绝检查,等待原生回归。
- [~] 原生 Linux 正负向监听用例及关联包回归;历史配置可由既有 systemd 环境覆盖为回环地址,不能因校验时机错误导致安全的旧部署无法升级。
- [!] 正式构建两次失败:首次为外加 GOFLAGS 被禁止,移除后第二次被发布路径检查拦截。尚未产生可部署正式包,未改线上程序,不跳过检查。
- 修复构建环境后重新生成干净提交的候选包、配套升级并复核监听与 HTTPS。
- [!] P0-10、系统通知实发、三数据库清库完整 Web 流程及总体生产验收仍未通过。
2026年10月2日12:19 当前复核入口
本节覆盖下方启动通知整改的早期执行态记录;未验证项目不升级为复审通过。
- 启动通知代码、正式与初始化生命周期、静态 unit 和动态安装模板已完成,等待部署复审。
- 修复本轮发现的旧 CLI 测试路径隔离问题:备份恢复、DNS 诊断及 SQLite 并发快照的测试配置全部显式指向临时目录,不再继承 Linux 正式安装路径。
- 第二台 Linux、Go 1.26.6、非特权 nobody 用户执行 serviceready、servicehost、bootstrap、cli 四包完整回归通过;关键启动与取消用例重复 20 次通过;四包 go vet 通过。
- systemd-analyze verify 返回零;隔离传输目录中的 unit 权限已收紧为 0644。主机已有 snapd 的无关配置警告原样保留,不修改其他服务。
- 12:18 线上只读复核:Scert 与 Nginx active,Scert 仅监听 127.0.0.1:8443,正常域名严格 HTTPS readyz 返回 ready。
- 本轮新代码的正式候选构建、配套部署与真实重启窗口复测尚未进行;线上仍为原候选,不将旧服务采样当作新版本验收。
- [!] T4 不标复审通过;P0-10、Smail 实发、三数据库清库完整 Web 流程及最终生产门禁仍未完成。
2026年10月2日启动通知整改任务入口
需求确认:不新增公网端口,Scert 继续回环监听并经 Nginx 80/443 访问;仅 Linux,密码 SSH 与严格主机指纹校验,不关闭 TLS 校验,不创建辅助验收脚本。
- 启动通知代码已实现:正式 HTTPS 接收循环启动后报告状态;本机通道或 HTTP 已退出时拒绝通知;通知失败不启动续期并退出。
- 初始化阶段在 HTTPS 开始接收时报告等待配置状态;业务 readyz 仍返回 503,不把监听成功当作初始化完成。
- 安装模板与分发 unit 同步为 Type=notify、NotifyAccess=main、TimeoutStartSec=90;保留回环绑定与原有沙箱约束。
- [~] Linux 隔离单元回归:复用既有 Go 1.26.6 工具链,使用独立源码目录和测试临时数据,不触碰现有业务数据库。
- 最新正式候选构建部署、重启窗口与 Nginx 严格 HTTPS 复测;单上游重启停机窗口不能仅靠启动通知消除。
- [!] 本节不代表 T4 整体验收通过;P0-10、邮件及三数据库首次生产流程继续保留未完成状态。
2026年10月2日当前任务入口
补充阻塞证据(11:50):T5 所用 web.solit.cn 的权威 DNS 返回 NXDOMAIN,第二台严格 HTTPS 请求解析失败;需要当前有效 Smail 入口及正式系统通知授权配置。其他任务仍可继续,不将邮件阻塞扩大为全部任务停止。
需求确认:仅 Linux;Scert 回环监听,经 Nginx 80/443 访问;SSH 仅密码认证;不关闭 TLS 校验,不创建辅助验收脚本,不额外远端备份,不删除文件或篡改历史恢复证据。历史记录保留,以本节为当前进度入口。
- T1 第二台现有正式证书与运行态复核:20 次严格 TLS readyz 成功,访问日志均为 200;证书域名匹配,有效期至 2026年12月24日。等待复审,不代表续期轮换通过。
- T2 第一台跨机探测第二台 8443、3306、33060 均超时,80、443 可连接;本地代理探测不纳入公网端口结论。等待复审。
- T3 第一台角色核对:未配置 odacm.cn 管理站点,默认站点证书不匹配不作为 Scert 签发失败证据,不擅自新增管理站点。
- [~] T4 启动窗口整改:502 已定位为上游尚未监听,仍需整改和重启复测。
- [!] T5 系统通知:实际授权参数与独立凭据尚未配置,真实投递、验证码重置和新密码登录未完成;不得猜测或绕过 Smail 权限。
- [~] T6 P0-10 负向矩阵、历史恢复证据及三数据库完整 Web 流程。
- T7 正式候选包清库首次验收、缓存清理和统一复审。
总体仍为 P0-03 完成、等待复审。详见 Linux生产流程测试记录同日补充;本轮只读诊断不计作清库生产验收。
2026年10月2日 SSH 登录凭据安全边界复审
本节不记录任何口令、RAM 密钥、令牌、Cookie 或私钥内容。SSH 服务器连接只允许密码认证;HTTPS 证书私钥仍是证书业务材料,不作为 SSH 登录凭据。
- SSH 工厂在连接前强制校验密码认证,非密码认证不能进入连接流程。
- 禁用的兼容服务和重载连接函数不再提供密钥登录提示或可用回退路径。
- 前端部署服务器页面使用“服务器指纹”描述主机校验信息,HTTPS 证书导入明确区分证书私钥。
- 未创建辅助脚本、未做远端备份、未删除历史迁移和兼容文件。
- [~] 仍待完成:候选包双机重新部署、第二台正式域名证书、三数据库 Web 首次流程、Smail 发信和密码重置闭环。
当前总体验收仍为 P0-03:完成,等待复审。
2026年10月1日 SSH 私钥登录禁用复审记录
本节只记录非敏感代码证据,不记录服务器口令、RAM 密钥、数据库密码、令牌或私钥内容。用户已明确禁止 SSH 私钥登录,生产部署继续使用 SSH 密码认证。
- 后端拒绝私钥引用、私钥认证和认证方式回退,服务器模型及 SSH 工厂仅允许密码认证。
- 前端服务器配置不提交
private_key_ref,不调用 SSH 私钥接口,私钥管理组件不再挂载。 - 前端 241 项测试和生产构建通过;后端
go test ./...、go vet ./...通过。 - TLS 证书私钥导入与远程证书私钥路径保持不变,未误删证书部署所需功能。
- 代码提交
df99136已推送,等待复审。 - [~] 仍待完成:Linux amd64 干净包部署、清库后的首次初始化、Smail 系统账户发信、验证码密码重置、三数据库 Web 流程和最终生产门禁。
当前总体验收仍为 P0-03:完成,等待复审,本节不能单独作为生产部署验收通过依据。
2026年10月1日前端私钥安全边界整改
本次仅记录代码和测试状态,不记录服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。针对“生产页面不允许出现私钥入口”的要求,已完成以下整改:
- 移除管理页面中的 SSH 私钥导航、私钥列表、私钥录入、私钥文件读取、私钥口令和命令复制入口。
- 前端不再请求或提交 SSH 私钥接口和私钥引用;服务器配置统一提交 SSH 密码认证。
- 历史
SSHKeyModal文件保留但不再挂载,不作为生产页面入口,不删除历史文件。 - 前端回归测试 241 项全部通过,生产构建通过。
- 本项完成,等待复审;不扩大为 P0-10、三数据库 Web 流程或总体生产验收通过。
- [~] 后端历史私钥兼容结构暂保留,待独立评估数据迁移和删除兼容能力的影响。
2026年10月1日公网入口安全加固复核
本次只记录非敏感安全证据,不记录服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。用户要求不得出现绕过 Nginx 的高风险直连入口,本轮已对双机完成现场加固:
- [✓] 第一台服务器撤销公网
8443、9998、9999防火墙放行;Scert 仍只监听127.0.0.1:8443,Nginx 继续承接80/443。 - [✓] 第二台服务器针对宽范围防火墙规则,在最前面增加
8443、9998、9999的拒绝规则;未删除其他业务服务,不影响 Nginx 反代链路。 - [✓] 双机
3306、33060仍仅回环监听;两台 Nginx 配置测试均通过,核心服务未因加固重启或异常。 - [✓] 外部 HTTPS 复核:第一台管理域名返回 200,第二台管理入口按当前认证策略返回 401;两台服务器的
8443、9998、9999直连请求均无法建立 HTTPS 会话。 - [✓] 本轮未创建辅助验收脚本、未清理或改写历史恢复证据、未修改数据库内容;邮件协议端口按 Smail 系统账户职责保留,不作为 Scert 管理入口。
- [~] 该安全入口子项完成,不能扩大为 P0-10、三数据库 Web 流程或总体生产验收通过;其余任务按下方看板继续推进。
2026年10月1日历史恢复事务现场核查
本次使用第一台服务器的 SQLite 数据库只读查询和目标证书目录只读核对,不改变数据库、锁或证书文件。
- [✓] 仍存在且仅存在两条
recovery_required事务;两条记录指向同一托管证书目录,状态和阶段均保持recovery_required。 - [✓] 两条事务的恢复证据字段均为空对象;记录中的锁路径当前没有对应锁目录,证书链文件仍为 644,私钥仍为 600,目标目录没有临时文件或备份文件残留。
- [!] 现场不足以证明历史锁归属、恢复执行者和安全回滚顺序;产品已按保守策略拒绝自动接管,不能据此人工改成已恢复或成功。
- [✓] 已清除第一台已结束临时测试单元和一次性重置激活器的 systemd failed 标记,仅保留 journal;未删除单元文件、事务记录或历史证据。
- [~] T3 历史事务核查继续阻塞,等待可验证的现场来源;P0-10 和总体生产验收状态不变。
2026年10月1日加速执行任务列表
本节为当前执行看板,任务状态按 [ ] 未开始、[~] 进行中、[x] 已完成等待复审、[✓] 复审通过、[!] 暂缓或阻塞标记。任务清单不记录任何认证信息,Windows 环境按要求排除。
需求确认
- Linux 双服务器生产部署和验收,不处理 Windows。
- 公网只保留 Nginx 80/443,内部管理、数据库和测试端口不得外放。
- P0-10 必须覆盖负向恢复、锁归属、文件摘要、多服务器部分失败和重试幂等。
- 三数据库必须走完整 Web 生产流程;清库后首次初始化、系统发信、密码重置和改密登录必须闭环。
- 历史恢复事务只接受可证明的现场证据,不手工改库、删锁或伪造恢复记录。
执行顺序
- [✓] T0:双机基础服务、严格 TLS、Nginx 入口和内部端口范围。
- [✓] T1:MySQL 5.7.44 实机与正式 CLI 实库复核。
- [~] T2:P0-10 负向恢复矩阵、锁归属及摘要不匹配实机验证。
- [~] T3:历史
recovery_required事务逐笔证据核查。 - [~] T4:SQLite、MySQL、PostgreSQL 完整 Web 流程。
- [~] T5:清库后首次初始化、Smail 系统账户发信、验证码重置和新密码登录。
- T6:干净 Linux 候选包重新部署、缓存清理及最终生产门禁复审。
- [!] T7:Windows 环境及无法由本机证明的公网平台限制不纳入本轮验收。
当前结论
局部测试已通过,但总体仍为 P0-03 完成,等待复审;在 T2 至 T6 全部取得对应实机证据前,不得宣布生产验收完成。
2026年10月1日进度更新(MySQL 5.7 实机复核)
本次记录不包含服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。当前总体验收仍处于 P0-03 完成待复审,不能以局部数据库通过替代生产验收。
- 第二台 Linux 实机 MySQL 5.7.44 隔离实例全套测试通过,退出码为 0;覆盖迁移、DDL 中断恢复、数据保留、严格 TLS、重启持久化、连接池断线恢复、重试和历史范围迁移。
- 第一台 Linux 实机正式发行程序 CLI 的 MySQL 5.7 实库测试通过,退出码为 0;官方 MySQL 客户端及
mysqldump互操作、对象权限、目录可见性、快照与恢复规划均已复核。 - 测试实例使用非 root 用户和回环监听,未连接线上 MySQL 8.0,未重启或修改 Smail,公网仍只使用 Nginx 80/443。
- 已修正 MySQL 5.7 正常关闭耗时造成的测试夹具误报:等待上限由 15 秒调整为 30 秒,提交
a139e6b已推送;修复后专项与完整数据库测试均通过。 - [~] 待复审:P0-10 剩余负向窗口、锁归属和摘要不匹配,历史恢复事务证据,完整三数据库 Web 矩阵及最终清库首次流程。
- [!] 暂缓或阻塞:系统账户 SMTP 真实投递、验证码密码重置闭环、改密后重新登录闭环,以及第一台公网平台限制;不得宣称总体生产验收完成。
当前有效安全任务结果(2026年10月1日22:50)
- [✓] 需求确认:所有合法用户名、邮箱均使用同一公开处理提示,不披露账号存在性、角色、命令、重置地址或凭据。
- [✓] 开发:公开路由绑定独立通用提示处理器,不执行历史账户分类逻辑;使用独立响应结构,只输出标题、说明、处理动作,并设置no-store。
- [✓] 回归:七类标识一致性、输入格式、未知字段、尾随JSON、超大请求和初始化边界通过;旧实现实际失败。后端全量测试、vet、build及重置专项race通过,前端242项通过。
- [✓] 发行:源码51ab0a6已推送,source_dirty=false的正式Linux归档通过密码SSH安装双机;归档和包内摘要全部校验通过。
- [✓] 实机:第二台公网无凭据五类标识响应相同;第一台独立访问同一公网接口四类标识响应相同;第一台本机严格TLS四类标识响应摘要相同。页面不显示账号身份或重置链接。
- [✓] 收尾:服务健康、严格TLS、内部端口、任务保留、历史事务、邮件服务均复核;未新增辅助验收脚本、未清库或改密码。
- [!] 该账户枚举子项关闭,不代表系统通知、实际密码重置、其余P0-10、完整数据库Web流程或最终生产门禁通过。
当前有效安全任务(2026年10月1日22:31)
- [✓] 只读复核当前正式候选:内部端口回环、严格上游 TLS、临时重置入口关闭及最终部署事务已提交。
- [!] 公开密码重置账户枚举已实机复现:无登录凭据即可区分超级管理员和未知账户。既有“不泄露维护命令”回归未覆盖此风险。
- 统一合法标识的公开查询响应;补充已知用户名、已知邮箱、未知用户名、未知邮箱的一致性测试,并复核无重置会话或其他副作用。
- 整改后构建正式候选、部署并复测。当前仅发现和记录风险,尚未修复,不扩大既有安全通过结论。
当前有效任务看板(2026年10月1日22:22,启动恢复与多目标负向实证)
需求确认:不降低 TLS 校验、不手工释放恢复锁、不补造恢复证据;复用已有有效证书,通过正式导入、部署和任务重试执行。本轮不重复签发、不清库、不创建辅助验收脚本。
- [✓] T5-6-6 基线与入口:核对双机正式候选、有效新旧证书;确认历史版本恢复接口已停用,使用正式导入入口复用旧证书,未直接改托管文件。
- [✓] T5-6-6 缺口复现:不同证书切换后真实 SIGKILL;文件及运行证书恢复,但启动恢复仅核验一次而留下指纹不符状态及锁,保留真实失败记录。
- T5-6-6 开发:
00aeedc复用有限次严格 HTTPS 核验,覆盖回滚和提交证书切换、持续不符、空指纹、校验失败、取消及截止时间。后端全量、静态检查、构建、前端 241 项通过。 - T5-5 正式候选:干净源码 Linux amd64 包完成构建与路径检查,密码 SSH 上传并核验包内摘要,双机通过正式安装器升级,程序哈希一致。
- [✓] T5-6-6 实机:修复版真实不同证书中断后自动恢复双机文件和运行证书,两个新事务自动回滚,无本次残锁,无人工状态修补。
- [✓] T5-6-6 重试:同一任务两次失败历史保留,第三次正式重试双机成功;成功后重复请求为 409。
- [✓] T5-6-7 多目标部分失败:第二台成功重载到新证书、第一台配置校验失败;第二台自动恢复运行证书,第一台未重载且文件回滚,两个事务均 rolled_back。后续恢复标准配置,正式部署当前证书双机成功。
- [✓] T5-5 安全与收尾:两台配置均恢复 nginx -t 与 nginx -s reload;内部端口回环监听、六次公网跨机探测超时、严格 TLS、证书私钥匹配、邮件服务及无活动任务复核通过。
- [~] T5-6 其余负向窗口与锁归属/摘要不匹配实机、T5-8 历史缺证据事务仍未闭环。
- [!] 系统发信闭环、第一台公网平台限制、MySQL 5.7 和完整三库 Web 等剩余门禁、最终清库首次验收未完成;Linux 总体生产验收不放行,Windows 不在本轮范围。
当前有效任务看板(2026年10月1日21:43,运行证书自动恢复)
需求确认:不允许仅回滚磁盘文件就认定服务恢复;只有重新校验旧配置、重载并核验实际 HTTPS 证书后,才能释放本次锁和标记恢复成功。使用真实不同的新旧证书,保留失败历史;不开放内部公网端口,不关闭 TLS 或 SSH 主机身份校验。
- [✓] T5-6-1 基线:核对双机旧证书文件摘要、实际 TLS 指纹、证书与私钥对应关系,无活动任务后通过正式接口申请一次新证书。
- [✓] T5-6-2 缺口复现:旧候选出现文件已回滚、运行证书仍为新证书;任务如实失败并保留锁。通过已有启动恢复机制核验并恢复旧证书,未手工改库或删锁。
- T5-6-3 开发:提交
2e6d992将重载失败的目标纳入待恢复事务;新增退出码失败、连接返回错误及三类恢复证据不足回归,五个场景通过,后端全量与前端 241 项通过。 - T5-5 正式候选:干净源码构建 Linux amd64 包,两台通过密码 SSH、完整性检查及正式安装器升级;本轮保留数据,不冒充清库首次测试。
- [✓] T5-6-4 双机不同证书失败恢复:两台均观测到新证书生效,随后自动回到旧证书;恢复校验成功,事务已回滚,文件摘要及实际 TLS 一致,无本次残锁,主进程未重启。
- [✓] T5-6-5 原任务重试:任务
87166c03-5501-482f-a4f6-db83ffc87a05的首次失败记录保留,第二次尝试双机成功;成功后重试返回 409。两台重载命令均已恢复为标准 Nginx 命令。 - [✓] T5-5 端口:双机内部服务只监听回环;六次跨机公网内部端口探测均超时,管理入口保持严格 TLS 反代,第一台邮件服务正常。
- [~] T5-6 其余负向窗口、不同证书进程崩溃、多目标部分失败及 T5-8 历史证据缺失事务继续推进,本项局部通过不等于 P0-10 全部完成。
- [!] 系统发信闭环、第一台测试域名公网限制、MySQL 5.7 与完整三库 Web 等剩余门禁以及最终清库首次流程未完成。此前已完成的数据库迁移、独立正式 CLI 备份恢复和 Linux 原生构建证据继续有效;Windows 不在本轮范围。
- [!] 总体 Linux 生产验收未放行。
当前有效任务看板(2026年10月1日21:12,双机安全接口候选)
需求确认:公开页面和接口均不得暴露可执行维护命令或入口名称;只推进 Linux。本节覆盖下方本项待构建、待部署的历史记录,不扩大为整个密码重置流程验收通过。
- T4-3-1:公开查询与状态接口使用通用联系管理员标识,修复提交
9c58c5b已推送。 - T4-3-2:整个公开响应的命令信息检查、入口和令牌字段检查、无重置 Cookie 回归,以及前端 241 项、后端全量测试、静态检查和构建通过。
- T4-3-3:干净源码正式 Linux 候选完成双机密码 SSH 安装,全部包内校验通过,线上程序哈希一致。
- T4-3-4:第二台隔离浏览器页面查询和公开接口复核完成;第一台使用实际管理证书作信任锚,在校验 IP SAN 的回环连接中验证接口与就绪状态。
- T5-5 端口子项:双机内部服务回环监听,两服务器互测公网内部端口超时,第二台严格 TLS 反代保持;既有邮件服务不受影响。
- [!] T4-3 实发闭环:两服务器查询邮件管理域名均为 NXDOMAIN;真实系统通知 SMTP、验证码收件、新密码登录仍需完成。
- [~] T5-6:继续部署负向恢复、多目标部分失败、历史恢复事务及重试幂等,保留现场,不修改业务数据伪造成功。
- Linux 最终清库首次流程、数据库矩阵、备份恢复与完整业务验收尚未补齐。
- [!] Windows 实机工作按用户要求不在本轮执行;整体 Linux 生产验收保持未放行。
当前有效任务看板(2026年10月1日,密码重置页面安全信息收敛)
- T4-3 安全页面子项:公开密码重置页面不再显示 Linux、Windows、本机管理命令或
Scert-admin入口名称。 - T4-3 接口子项:超级管理员查询只返回通用本机安全维护说明,不返回重置入口、会话令牌、验证码或命令文本。
- T4-3 回归子项:前端 241 项测试、后端全量测试、
go vet ./...、go build ./...、生产前端构建及差异检查通过。 - [~] T4-3 实机子项:最新候选包尚未重新部署并清理浏览器缓存复测;Smail SMTP 和超级管理员新密码登录闭环仍待生产验证。
- [!] 当前结论:密码重置页面安全信息整改完成,整体生产验收继续保持未放行。
当前有效任务看板(2026年10月1日,可信恢复证据候选已完成双服务器基础回归)
- T5-5 构建与安装:正式 Linux amd64 候选包已构建并校验,已使用密码 SSH 安装到
45.136.13.241。 - T5-6 正常路径子项:一个域名绑定两台服务器,连续两次部署均两台推送成功、配置校验及 reload 成功、站点 HTTPS 校验通过;服务重启后管理入口保持可用。
- T5-7 代码子项:恢复证据、锁 owner、文件摘要和目标证书指纹已持久化,重启不会接管无可信证据的历史事务。
- [~] T5-6 负向实机子项:进程中断、锁 owner 不匹配、文件摘要不匹配、负向 HTTPS 恢复、部分目标失败和重试幂等仍需验证。
- [~] T5-8 历史现场核查:两条历史
recovery_required事务保留原状,等待逐笔核查,不直接改库或删锁。 - T4-3:清库后的首次初始化、Smail 系统 SMTP、超级管理员密码重置和新密码登录。
- T7:
8.137.23.95独立回归、SQLite/MySQL/PostgreSQL 三数据库、Linux/Windows 双平台、备份恢复、公网 DNS/ACME 和最终生产门禁。 - [!] 当前结论:核心代码与 Linux 双服务器正常部署已通过;整体生产验收未放行。
当前有效任务看板(2026年10月1日,回滚事务终态整改)
- T5-5 构建子项:源码
8899f7a已从干净克隆正式构建 Linux 候选;二十三项产物及二十二个包内文件校验通过,五个执行入口为可执行权限。 - [~] T5-5 恢复子项:启动恢复仅检查锁目录存在,且没有持久化站点恢复基线;不能直接重启接管旧锁。本批未部署,继续整改归属证明、恢复核验和历史现场处理。
本批收尾记录:后端 go test ./...、go vet ./...、go build ./... 通过;go test -race ./internal/deployment ./internal/app ./internal/repository -count=1 三个包通过。条件跳过用例不算通过,尚未部署,不提升生产门禁。
需求确认:沿用原始四十四项要求,继续完整生产整改;先修复明确代码缺陷,再构建候选并执行生产流程。运维使用密码登录,产品保留自动公钥部署能力。以下为当前状态,下方快照只作历史证据。
- T5-1:以双目标回归复现恢复核验成功但事务写为需要恢复,修复不可达的已回滚分支。
- T5-2:已核验恢复只将事务记为已回滚,不将原失败任务改为成功;恢复失败或锁释放失败仍保留需要恢复状态。
- T5-3:补充双目标恢复核验、恢复失败、锁释放失败和部分目标失败的持久化接口回归。
- T5-4:后端全量、静态检查、构建及专项竞态检查;最终命令结果见本批收尾记录。
- T5-5:规范构建新候选;旧部署事务先核对归属与恢复证据,不人工改库,不直接清理现场。
- T5-6:正式页面多域名多服务器部署、负向恢复、锁收尾及重试幂等实机复测。
- T4-3:清库后的首次初始化、系统 SMTP、超级管理员密码重置和新密码登录。
- T7:三数据库、双平台服务、备份恢复、公网 DNS 与 ACME、最终生产门禁。
- [!] 本批仅代码与回归整改,线上版本未变。整体生产验收未放行;P0-03 的历史局部复审不能替代 P0-10 与其他门禁。
本轮任务看板(2026-09-30,最新候选已完成双服务器基础部署)
- T2 子项:识别 Smail
notify:系统通知账号,固定系统通知发件身份并禁止 HTTP 通道发送。 - T2 子项:超级管理员验证码只发送绑定邮箱;系统通知账号只走 SMTP,SMTP 未启用时返回明确错误。
- T2 子项:通知专项测试、后端全量测试、
go vet、go build和差异检查通过。 - T4-1:提交本轮实现,编译正式 Linux amd64 候选包,并完成归档及包内完整性校验。
- T4-2:使用密码 SSH 将候选包安装到
8.137.23.95和45.136.13.241,两台服务基础健康检查通过。 - [~] T4-3:按清库后的生产首次流程验证 Smail SMTP 验证码、超级管理员密码重置和新密码登录。
- [~] T5:继续验证多服务器、多域名、证书推送、失败恢复、重试幂等及任务状态持久化。
- T7:三数据库、Windows 服务、清库首次初始化、公网 DNS/ACME、备份恢复和最终生产上线结论。
- [!] 总体验收位置不变:P0-03 完成,等待复审;基础部署通过不等于完整生产验收通过。
当前任务看板(2026-09-30 17:39 UTC,恢复标准 Nginx 重载命令后正式页面复测)
- 已通过正式服务器配置页面将临时
/usr/bin/true重载命令恢复为nginx、-s、reload,并保存成功。 - 正式页面重新部署
scert-multi-20260930.apmmk.cn成功,页面显示 1 台推送成功、站点 HTTPS 校验通过,服务器结果显示配置校验与 reload 成功。 - 未创建辅助验收脚本,未修改主机指纹校验,Git 工作区保持干净。
- [~] 继续执行 P0-10 负向实机验证:后置 HTTPS 失败自动恢复、进程崩溃事务接管、多目标部分失败及重试幂等仍未通过。
- [!] 第二台真实服务器、一个域名多服务器、三数据库、双平台服务、备份恢复和最终清库首次生产流程仍待完成,不能标记完整生产验收通过。
当前任务看板(2026-09-30 16:55 UTC,陈旧部署锁清理后正式页面复测)
需求确认:继续按生产页面完成现场复测;清理只针对已确认为空且无活动任务的陈旧锁目录,不删除业务数据、证书、私钥或配置,不以人工清理结果替代自动恢复验收。
- 通过 SSH 核查三个目标锁目录为空,确认无活动部署进程及活动任务后,使用
rmdir安全清理;证据目录中的历史锁未删除。 - 正式页面重新部署
scert-multi-20260930.apmmk.cn成功,页面显示 1 台推送成功、站点 HTTPS 校验通过,域名状态恢复正常。 - 复核
Scert、Scert-storage.socket、nginx为 active,公网/readyz为 200;两个域名 HTTPS 为 200,目标证书和公网证书指纹一致,目标托管目录无部署残留。 - 运行概览显示进行中任务为 0,最新任务状态为已完成;本次未创建辅助验收脚本。
- [~] 继续执行 P0-10 负向实机验证:后置 HTTPS 校验失败自动恢复、进程崩溃事务自动接管仍未通过;本轮人工清理陈旧锁后的正常部署不计入自动恢复通过。
- [!] 第二台真实服务器、一个域名多服务器、三数据库、双平台服务、备份恢复和最终清库首次生产流程仍待完成,不能标记完整生产验收通过。
当前任务看板(2026-09-30 23:55,密码部署公钥并切换密钥复测)
需求确认:继续按生产方式验证 SSH 认证闭环;密码只用于本次公钥部署,后续部署必须使用加密托管私钥,不在页面或日志中记录密码。
- 服务器配置通过密码 SSH 保存后,自动生成并使用服务器专属托管私钥,部署公钥到远端授权文件。
- 自动使用托管私钥执行回连命令验证,正式页面显示“已部署并验证”;托管指纹与远端授权公钥指纹一致。
- 自动切换为私钥认证后,再次部署第二域名成功,页面显示证书推送、配置校验、reload 和站点 HTTPS 校验全部成功。
- [~] 当前单服务器 SSH 认证闭环完成,待第二台真实服务器复测;后置 HTTPS 失败恢复和进程崩溃恢复仍是 P0-10 阻塞项。
- [!] 未创建辅助脚本,未关闭主机指纹校验,未将密码或密钥材料写入文档;完整生产验收仍未放行。
当前任务看板(2026-09-30 23:42,正式候选正常部署复测)
需求确认:加快明日上线准备,但不缩减既定生产门禁;本轮完成当前候选在正式页面上的双域名正常部署复测,保留所有未验证阻塞项。
3cc8fb6正式候选已通过密码 SSH 部署到测试服务器,Scert.service、目录 socket、Nginx 和管理入口就绪检查均正常。- 正式页面登录和第二域名部署复测通过:页面显示 1 台推送成功、站点 HTTPS 校验通过;配置校验、reload 和服务器结果均成功。
- 两个域名公网 HTTPS 返回 200;目标证书与公网证书指纹一致;活动任务为零,目标目录无残留部署锁。
- [~] P0-10:继续执行后置 HTTPS 校验失败自动恢复和进程崩溃事务恢复的正式负向实机测试;本轮正常路径不计入负向恢复通过。
- [!] 今天无法诚实标记完整生产验收通过。第二台真实服务器、一个域名多服务器、三数据库、双平台服务、备份恢复和最终清库首次流程仍待完成;若第二台服务器及测试条件明日可用,先完成这些门禁再给出上线结论。
当前任务看板(2026-09-30 22:56,锁冲突测试已收尾)
需求确认:继续完整整改与生产验收;本批先补齐部署后 HTTPS 校验失败的事务恢复,不以提示改善代替恢复能力。修改前检查点 c623e2d 已推送。
- 新诊断版本
6efc890已正式构建部署;锁冲突页面提示与任务结果查询接口均已核实。 - 测试锁移回受限证据目录后,正式页面重新部署成功,任务 179bb071-486d-4356-8ba2-e15ce1164eb5 为 success;两站点 HTTPS 200、证书指纹正确,目标目录无残留锁。
- [~] 将事务旧文件与部署锁保留至站点校验完成;失败时恢复各服务器文件、校验和重载,并核对部署前可信站点证书。
- 增加多目标、取消、恢复失败及诊断回归,正式构建部署复测。
- [!] 进程崩溃事务自动恢复、第二台真实服务器、三数据库、双平台服务、备份恢复和最终清库首次流程仍未完成。
以下时间章节保留历史记录,最新状态以本节为准。
当前任务看板(2026-09-30 22:35,中断恢复实测与诊断整改)
需求确认:沿用完整 P0-10 与生产验收范围。修改前检查点 b27eedc 已推送;本轮验证部署中断、遗留锁、人工核查后的恢复,并修正公开诊断,不把诊断改善当作远端事务自动恢复。
- 真实部署执行中 SIGKILL 主进程,systemd 自动重启;任务、尝试恢复为 failed,阶段 service_restart,审计写入,没有悬挂或误报成功。
- 实测直接重试被遗留锁拒绝;核实无活动任务、远程延迟进程结束及新旧文件一致后,将三个锁和三个事务旧文件移入受限证据目录,未删除现场;产品重新部署成功,两站点正常。
- 新增固定阶段错误码和中文安全诊断,覆盖连接、目录、锁、上传、替换、校验、回滚、运行态未确认及清理;接口和持久化结果只放行固定诊断,保留底层受保护证据。
- 中断任务提示不再要求直接重试,明确执行结果未确认及关联资源核查;正式回归修复前失败、修复后通过。部署、仓储、应用和接口四包测试通过。
- 接口读取与前端诊断回归通过;后端全量测试、静态检查、部署/仓储/应用/接口四包竞态均退出零,前端 240 项通过。
- [~] 提交当前修复,使用干净源码正式构建及部署复测。
- [!] 当前线上仍为 91e1123;新诊断尚未部署。远端崩溃事务没有自动恢复,P0-10 整项未完成。
- 第二台真实服务器、三数据库矩阵、Linux 原生与 Windows 服务、备份恢复和最终清库首次生产流程继续保留。
以下带时间章节为历史证据,当前状态以上节为准。
当前任务看板(2026-09-30 22:18)
需求确认:沿用已确认完整整改范围;新包正式安装、DNS 复测、旧证书负向与恢复、单机多域名依次推进,不缩减多服务器、数据库和最终首次流程验收。修改前检查点 7d0ce94 已推送。下方各时间章节保留为历史证据,当前状态以本节为准。
91e1123干净源码正式构建和清单核对完成,密码上传完成;正式安装器部署,线上主程序哈希一致,服务及重新登录正常。- 产品 DNS 权限检查连续四次返回 200,三十六位十六进制随机记录名、写入、读取、清理均成功;不以失败重试充当连续成功。
- 正式页面申请新证书完成签发;无操作重载时公网仍提供旧有效证书,六次身份校验后任务和尝试失败,页面没有误报成功。
- 已恢复 nginx 正常重载,通过正式页面部署已有证书成功;新公网、目标、托管指纹一致,Nginx worker 更新,HTTPS 正常。
- 单机双域名实机通过:新域名完成真实 DNS-01 和签发;独立目标目录由产品创建,旧域名文件不变。补齐独立 Nginx 站点并等待真实 DNS 缓存到期后,正式页面部署成功,两个域名均为正常 HTTPS。
- 精确解除第二域名的服务器关联不影响第一域名,服务器记录保持一条;已经重新关联第二域名,不以此替代多台服务器验收。
- [~] 下一任务为在真实部署执行中中断主进程,核对重启后的任务、尝试和远端现场;先使用已有证书,避免重复申请。修改前检查点
380adf2已推送。 - 三数据库矩阵、Linux 原生构建及 Windows 服务验收。
- P0-12 备份恢复和其余既定整改门禁;最终清库、清缓存、完整首次生产流程。
- [!] 第二台真实服务器缺失,不能用同机多条记录替代;后置 HTTPS 校验失败没有自动运行态恢复证据。
当前阻塞修复(2026-09-30 21:45,随机 DNS 探测记录名)
需求确认:修复真实申请链中随机探测记录名格式错误,不绕过权限验证;补正式回归、重建部署并复测,随后继续 HTTPS 身份与多域名验收。
- 新候选正常部署通过;真实重载后主动返回失败,原文件 inode、哈希和权限恢复,无残留锁;恢复正常命令后重新部署成功。
- 再次申请在 DNS 授权探测阶段返回 InvalidRR.Format,未生成第二张证书;产品权限接口相邻两次验证一成功一失败,失败记录首标签以连字符结尾。
- 将记录名随机后缀与 TXT 随机值分离,十八字节随机数完整编码为三十六个小写十六进制字符;保留 TXT 随机强度和精确清理规则。
- 新增四类域名各三十二次正式回归及格式错误脱敏诊断回归,修复前失败、修复后通过;DNS 包测试、静态检查和竞态通过。
- 后端全量测试与静态检查退出 0。
- 正式构建、部署后权限探测及签发复测。
- [!] 同域名旧有效证书的公网负向验证尚未执行到 HTTPS 阶段;不能将本次 DNS 失败计入 HTTPS 验收。服务器重载命令已恢复正常。
当前执行任务(2026-09-30 21:33,最新候选实机复测)
需求确认:沿用已确认范围,核对最新正式包、密码 SSH 正式安装、复测部署身份与状态、推进单机多域名和失败恢复,并同步真实证据;不新增辅助验收脚本,不以升级复测替代清库首次验收。修改前检查点 03e10e1 已推送。
- 应用、接口、部署专项竞态均退出 0;前端 239 项、后端全量及静态检查通过,补齐上一批收尾状态。
fc57b8e规范克隆正式 Linux 构建成功,source_dirty=false;23 项清单和 22 个实际归档文件校验通过,五个执行入口权限为 0755。- 密码上传并核对远端 SHA256SUMS,停止主服务及目录服务 socket 后用正式安装器升级;主服务、目录 socket 恢复 active,readyz 为 ready,管理页面重新登录成功。
- [~] 正式页面部署已有证书,验证新字段和实际站点指纹;继续失败状态与恢复验证。
- 单机多域名、真实多服务器、任务恢复、三数据库及最终清库首次初始化。
- [!] 第二台真实服务器尚缺;本轮未清库,不提升完整生产验收状态。
当前整改任务(2026-09-30,部署后 HTTPS 校验)
需求确认:沿用已确认生产验收范围,先消除成功误报,再推进真实失败恢复;不以状态文案修改替代恢复能力。修改前检查点 1b2b45d 已推送。
- 先写回归并复现旧有效证书误通过、校验失败报告仍成功。
- 从实际证书文件计算待部署指纹,先校验私钥和完整链一致性;缺失或损坏时不执行远端写入。
- 旧指纹、空指纹重试后仍不匹配则失败;元数据缺失或陈旧不影响从文件核对;取消不接受迟到成功。
- 区分单台推送与站点验证,校验失败整体报告失败;任务、尝试、接口和页面不再宣称完成,不伪造回滚。
- 本地 TLS 握手回归、任务持久化和接口回归已加入;前端全量 239 项及生产前端构建通过。
- 后端全量测试和静态检查通过。
- [~] 应用/接口/部署竞态检查正在收尾,不以尚未退出的进程声明全通过。
- 提交后从规范克隆构建正式新候选,并推进尚未完成的实机测试。
- [!] 线上暂未更新;后置校验仍在文件部署事务之外,自动恢复、多服务器和完整生产门禁不提升状态。
最新执行结果(2026-09-30 21:07)
需求确认:沿用已确认范围,完成最新构建整改的正式发布验证并同步证据,不用本地通过替代生产部署验收。本批修改前检查点 7c727d3 已推送。
- 在已有规范独立克隆获取并签出 9e89eda,使用新输出目录,保留历史发布包。
- 正式入口完成 Windows amd64、Linux amd64 双目标构建;发布清单记录干净源码及后端、前端 LF 检查结果。
- 清单 33 项大小及校验和、两个平台 SHA256SUMS、实际压缩包文件集合与内容全部核对通过;Linux 执行入口权限通过。
- 同一克隆后端全量测试、静态检查、发布模块专项、前端 237 项测试通过;检查结束后源码及锁文件无变化。
- 更新总清单 P0-04 正文、执行清单、支持矩阵和 Linux 测试记录,明确本地包身份及未部署边界。
- [~] 后续继续单台多域名、重载失败、后置 HTTPS 校验失败及任务恢复实机验收。
- Linux 原生构建、双平台服务、三数据库和清库首次初始化仍待完成。
- [!] 第二台真实服务器尚未落实;完整生产验收仍未放行。
构建换行整改任务更新(2026-09-30)
- 已实现拒绝非规范换行,不替换用户中文源码;记录后端、前端检查策略及文件数量。
- 正式回归覆盖 LF、无换行、二进制、中文和换行文件名、CRLF、混合换行、空输出、截断、无效格式、未知状态及非 Git 目录。
- 实际 Git 夹具验证:Git diff 无差异时仍能拒绝 CRLF;正式工具链退出 1,不安装依赖、不生成锁文件、不改写源码。
- 工具链 31 项和前端全量 237 项通过,规范克隆工具链检查通过。
- [~] 提交后完整构建验证;Linux 原生构建、双平台服务、数据库与生产业务门禁仍未完成。
最新任务状态(2026-09-30 20:53)
- [✓] P0-03 按本项范围完成复审,不再与整体生产验收混为一谈。源码与产物隔离、独立克隆构建、忽略规则、索引与实际部署包边界均有本轮证据。
- 配置校验失败回滚及恢复后的再次部署完成实机验证,具体步骤与证据见《Linux生产流程测试记录》20:53 章节。
- [~] P0-04 构建输入换行一致性整改。需求确认:正式构建不能仅依赖 Git 干净状态判断输入一致;只检查并拒绝非规范换行,不自动改写用户中文文件;补充正常、异常、二进制、空输出与命令失败回归。
- 完成上述开发后重新构建验证,明确新包身份;本轮独立克隆包未部署,不能与线上包哈希混用。
- 继续多域名复用、重载失败、后置 HTTPS 校验边界、任务恢复、三数据库与清库首次初始化。
- [!] 第二台真实服务器仍缺;整体生产验收没有放行。其余任务保留原状态,不因 P0-03 复审而自动提升。
最新任务清单(2026-09-30 20:06,签发成功后的交叉复核)
需求确认:沿用已确认生产验收范围;先核对真实成功路径,再用现有证书验证失败回滚,不创建辅助验收脚本、不修改禁止操作的业务域名。
- 正式候选
0bb427d已构建部署;主程序本地与远端校验和一致,管理入口健康。 - 正式页面申请生产证书成功;任务 fbefdb52-7fc0-4942-8512-850b0869c07d 与持久化部署结果成功。
- 核对版本化托管目录与目标目录三个文件校验和、私钥权限、Nginx 配置检查与重载日志。
- 核对服务器及外部客户端 HTTPS、证书指纹和两台权威 DNS 的挑战清理结果。
- [~] 通过正式页面配置可控的校验失败,再部署已有证书,检查错误报告、文件回滚、部署锁释放及恢复后成功路径。
- 一台服务器多域名生产推送及任务恢复验收。
- [!] 第二台真实服务器待落实;三数据库、清库首次初始化及最终生产门禁仍未完成。
本轮仅升级针对性复测,不提升总体验收状态,不报缺少逐项依据的百分比。详细证据见 Linux生产流程测试记录同日章节。
最新执行记录(2026-09-30 19:43,DNS 超时现场与补偿)
需求确认:精确限定授权域、临时 TXT 必须可核对清理、不得绕过权限验证、真实证书推送继续推进。基线提交 7d059e0 已推送。
- 实机排查:系统 DNS/SOA 与阿里云 HTTPS 可达;产品权限检查闭环通过,页面新域名保存成功。
- 缺陷整改:纠正查询搜索模式;新增创建响应丢失后的独立取消上下文补偿,最长十秒,不自动重试创建。
- 专项回归:响应丢失、错误名称/值/托管区/类型、空 ID、多条结果、不完整分页、未发现记录、查询失败、删除失败、取消、明确拒绝和共享 ACME 排除;页面保留待核对记录提示。
- [~] 最终全量检查与新正式包部署;实机补偿功能尚未复审,不替代本地测试。
- [~] 新子域独立解析准备完成,下一步签发、目录创建、推送、校验重载和公网 TLS。
- 回滚、多服务器、三数据库及完整首次初始化门禁仍未完成;总体验收仍为 P0-03 完成待复审。
最新执行记录(2026-09-30 19:20,SSH 自动部署阻塞已通过一次实机复测)
- 两批修复已中文提交推送;7147532 为实际部署源码提交。
- 全量后端测试、静态检查、构建及部署/接口/应用竞态检查通过。
- 正式包由干净提交构建,通过密码上传与包内校验;安装器先拒绝仍运行的证书目录 socket,停止该 socket 和服务后正常升级,再恢复 socket 与主服务。
- 页面保留并重新编辑既有失败服务器,PUT 返回 200;状态 deployed、错误为空、私钥认证方式和两项成功时间均经接口复读确认。
- 目标 SSH 日志确认密码、公钥认证先后成功;公钥文件及 sshd 配置通过只读核对,未输出私钥或密码。
- 三份清单/记录已同步本轮本地和实机证据;不再使用未经逐项统计的完成百分比。
- 后续继续真实证书推送、Nginx 校验/重载/回滚、多对多、任务恢复和三数据库验证。
- [!] 第二台真实服务器仍缺失;总体验收保持 P0-03 完成待复审,不以本项成功提前升级整项状态。
19:13 执行补充:有界重试源码与回归完成
- 只在公钥安装后私钥回连处接入重试,保留原私钥认证方式和已登记主机指纹,最多五次尝试。
- 恢复、耗尽、非可重试错误、取消路径回归及后端全量测试、静态检查、构建通过。
- [~] 第二批竞态检查仍在运行;提交后构建正式包,继续密码 SSH 部署复测。
- 远端更新服务器返回 200 与密钥状态 deployed 尚未确认,不新增生产放行或复审通过项。
19:10 执行补充
- 部署、接口、应用包竞态检查全部通过,退出 0。
- 精确远端日志确认:私钥回连处于 SSH 重载与恢复监听之间,相差约 17 毫秒;没有发现本次失败需要通过关闭校验或改用密码部署来解决。
- [~] 当前新增任务:公钥安装后短暂连接拒绝的有界重试,覆盖成功恢复、耗尽、认证拒绝和上下文取消。
- 本批修复提交后再开始该项修改;远端部署与生产验收仍待执行。
最新执行记录(2026-09-30 19:08,单次 SSH 协商)
本轮沿用已确认需求:密码连接自动部署密钥,严格校验主机指纹,复用既有服务器记录,不以辅助脚本或单元测试代替真实生产验收。总体验收仍为 P0-03:完成,待复审。
- 修改前中文基线提交
189b798已推送。 - SSH 默认改为单次多算法协商;指纹不匹配再回退,认证失败停止重连;显式算法列表兼容行为保留。
- 新增四个叶子回归场景,专项测试及后端全量测试、静态检查、构建通过。
- [~] 部署、接口、应用三个包的竞态检查正在运行。
- 密码 SSH 只读检查确认远端 Scert、SSH 正常运行;不算自动密钥登录成功证据。
- 提交修复、构建正式候选并部署,验证更新既有服务器接口返回 200、密钥状态 deployed、错误为空、部署与测试时间有值。
- 继续证书目录创建、证书推送、Nginx 校验与重载、失败回滚、真实多对多和三数据库验收。
- [!] 第二台真实服务器缺失仍未解决;本轮不新增复审通过项,不再使用未经逐项统计的完成百分比。
最新执行记录(2026-09-30 15:26,版本与日志只读核对)
P0-03 保持完成,待复审。 本轮仅排查既有失败现场,没有新建测试资源、清理数据库或重启服务。
- 已通过密码 SSH 确认 Scert 服务处于运行状态。
- 已对比远端主程序与本地正式候选的 SHA-256,结果一致;当前失败不是两者文件不一致造成的。
- 已读取既有日志,确认服务器新增、更新曾返回 502,耗时分别为 25 毫秒、19 毫秒;没有将读取历史日志算作重新通过测试。
- [~] 已发现公钥转换、内置安装命令与参数校验的源码疑点;下一步用正式回归用例确认,不用辅助脚本替代验收。
- 尚未完成代码修复、重新部署、密钥回连和真实证书推送;不新增复审通过状态。
最新执行记录(2026-09-30,远端密码 SSH 自动公钥部署阻塞)
总体验收继续保持 P0-03:完成,待复审。本批只登记生产 HTTPS 和密码 SSH 实机证据;自动公钥部署失败,不能替代真实证书推送验收。
- 执行:通过
https://odacm.cn登录并读取域名、服务器资源列表。 - 执行:按正式页面添加授权测试服务器,登记主机指纹并保存密码认证配置。
- 证据:从目标机外部密码 SSH 直连成功,目标机 ED25519 指纹与登记值一致。
- [!] 阻塞:Scert 添加服务器流程自动部署 SSH 公钥返回 502,资源状态明确为失败;尚未开始证书上传、Nginx 校验或重载。
- [~] 继续执行:定位自动公钥部署失败原因,修复后重新走页面流程并验证密钥登录。
- 尚未执行:第二台真实服务器、多服务器证书推送、真实 DNS/ACME、三数据库实机和最终生产验收。
- [!] 状态约束:不标记
[✓],总体验收仍为 P0-03:完成,待复审。
最新执行记录(2026-09-30,域名与服务器多对多统一回归)
总体验收继续保持 P0-03:完成,待复审。本批仅登记多对多专项开发复核和自动化测试结果,不替代真实数据库、真实服务器和生产部署验收。
- 需求复核:一个域名可选择多台服务器,一个服务器可显示并复用于多个域名。
- 后端复核:
domain_servers联合主键、同项目校验、当前域名绑定替换、显式清空和其他域名关联保留均符合需求。 - 安全复核:重复 ID 去重、跨项目拒绝、共享路径冲突保护、失败审计与事务回滚均有测试覆盖。
- 页面复核:域名编辑多选服务器;服务器卡片显示当前关联的全部托管域名。
- 自动化验证:后端仓储/HTTP/应用专项测试通过;前端全量 231 项测试通过。
- [~] 继续执行:三数据库实机矩阵、真实多服务器证书推送、HTTPS/DNS/ACME、密码 SSH 和生产流程。
- 尚未执行:本轮多对多功能的远端生产部署门禁和最终复审。
- [!] 状态约束:不标记
[✓],总体验收仍为 P0-03:完成,待复审。
最新执行记录(2026-09-30,P0-10 崩溃恢复边界修复)
总体验收继续保持 P0-03:完成,待复审。本批登记任务恢复边界修复和本地自动化证据,不替代真实服务器、真实数据库和生产部署验收。
- 仓储层:恢复任务尝试时先按恢复前活动任务范围更新,再收敛父任务状态。
- 回归覆盖:历史
service_restart任务与本次活动任务使用相同完成时间时,历史任务尝试保持原状态。 - 自动化门禁:后端全量测试、静态检查、差异检查均通过。
- [~] 继续执行:P0-10 的 DNS 验证、重试幂等、跨数据库实机矩阵和统一复审。
- 尚未执行:P0-12、真实三数据库生产数据清理、密码 SSH、远端多服务器部署、HTTPS/DNS/ACME 和最终生产门禁。
- [!] 状态约束:不标记
[✓],总体验收仍为 P0-03:完成,待复审。
最新执行记录(2026-09-30,P0-10 部署结果查询闭环)
总体验收继续保持 P0-03:完成,待复审。本批只登记代码开发和本地回归证据,不替代真实服务器、真实数据库和生产部署验收。
- 数据库:0016
task_deployment_results已在三种数据库迁移目录登记并通过迁移目录一致性测试。 - 应用层:统一证书任务工作流保存每台服务器的部署结果,覆盖失败和部分成功结果。
- 接口层:
GET /api/v1/tasks/:id/deployment-results已注册并按项目任务可见范围返回结果。 - 安全性:失败部署消息统一脱敏;管理员、项目成员、项目外账户、未登录请求和撤权后的旧会话均已专项验证。
- 自动化门禁:后端全量测试、静态检查、差异检查均通过;当前批次提交为
126cb6d、40d2b61、79e57cd。 - [~] 继续执行:P0-10 的 DNS 验证、任务崩溃恢复、重试和跨数据库实机矩阵。
- 尚未执行:P0-12、真实三数据库生产数据清理、密码 SSH、远端多服务器部署、HTTPS/DNS/ACME 和最终生产门禁。
- [!] 状态约束:不标记
[✓],总体验收仍为 P0-03:完成,待复审。
最新执行进度(2026-09-29)
总体验收位置仍为 P0-03:完成,待复审。 本轮完成任务中心剩余一批边界修复和本地回归,不代表远端生产环境已验收。
- 幂等键重放对全部活动状态统一返回冲突。
- 管理证书任务与业务证书任务均执行同类活动任务保护。
- 域名删除保护覆盖证书申请、校验、部署、导入、恢复和自动续期任务。
- 重启恢复的任务尝试更新范围已限定为本次写入
service_restart失败状态的任务。 - 本轮专项及全量本地测试通过,前端生产构建通过。
- [~] 继续审查剩余任务入口、三数据库实机矩阵和跨平台服务流程。
- 尚未执行生产服务器清库、重新部署、浏览器清缓存、密码 SSH 及最终验收。
- [!] 当前总体验收仍停留在 P0-03:完成,待复审,不得提前标记
[✓]。
最新进度摘要(2026-09-29 继续开发)
总体验收位置仍为 P0-03 完成,待复审。 本轮继续推进 P0-10 任务事务链,不把局部代码或专项测试视为整项复审通过。
- HTTP 证书申请任务补齐“开始执行”审计;开始审计与终态审计均关联任务创建人、项目和任务 ID。
- 开始审计写入失败时,任务和任务尝试收敛为失败并停止证书申请;专项回归测试已覆盖该异常路径。
go test ./internal/httpapi已通过;尚未据此升级 P0-10 或总体验收状态。- [~] P0-10 的 DNS 验证任务、批量部署结果、崩溃恢复、重试幂等及其他长耗时入口仍需继续审查。
- P0-12 备份恢复、三数据库实库矩阵、浏览器清缓存、密码 SSH、远端部署和生产验收尚未执行。
- [!] 不新增
[✓]复审通过项,总体验收继续保持 P0-03 完成,待复审。
最新任务批次(2026-09-29 继续开发)
总体验收仍保持 P0-03 完成,待复审;本批只补齐 P0-10 任务创建人和审计归属,不代表生产部署验收通过。
- HTTP 证书工作流上下文已传递当前已认证操作者;证书部署、导入、恢复、校验任务不再默认丢失创建人。
- 任务开始、完成审计已写入任务创建人;后台续期无认证操作者时保持空值,不使用请求身份以外的信息填充。
- 创建人归属回归测试已通过;专项测试为
go test ./internal/app ./internal/httpapi ./internal/repository,并通过git diff --check。 - [~] P0-10 仍需继续审查 DNS 验证任务、批量部署
partial_success、崩溃恢复、重试和其他同步长耗时入口。 - P0-12、三数据库实库矩阵、浏览器、密码 SSH、远端部署和生产验收尚未执行。
- [!] 总体验收位置不变:P0-03 完成,待复审。
最新任务批次(2026-09-29 继续开发)
总体验收仍保持 P0-03 完成,待复审;本批代码已完成,统一测试已完成本地自动化部分。
- 证书导入、恢复、校验入口已接入应用任务工作流,提交
b899751。 - 当前证书部署、导入、恢复、校验工作流已接入任务取消上下文,可由任务中心取消实际执行上下文。
- 已新增任务取消绑定回归用例;专项测试、后端全量
go test ./...和git diff --check已通过。 - 已核对任务创建、尝试记录、审计收尾、取消状态和 HTTP 响应的一致性;本批等待复审。
- 三数据库矩阵、浏览器、密码 SSH、远端部署和生产验收尚未执行。
- [!] 不升级总体验收位置;P0-10 仍在开发中,P0-12 尚未开始。
最新任务批次(2026-09-29 23:48)
本节优先于下方历史批次;总体验收保持 P0-03 完成,待复审。
本批需求确认:沿用已有域名与服务器多对多模型,继续补齐 P0-10 状态模型的业务保护,不扩大为新一轮页面重构或生产验收。
- 上一批代码已提交并推送
2b9d82d,工作区检查无遗留修改。 - [~] 将域名删除互斥范围从排队中、运行中扩展到等待重试、取消中。
- 添加各证书任务类型与活动状态的删除拒绝用例,并检查域名、服务器关联与审计不受拒绝操作影响。
- 添加终态任务允许删除域名的用例,确保部分成功不被误判为活动任务。
- 开发完成后运行专项检查并同步四份文档的证据;尚未通过整项复审。
- [~] 后续继续 P0-10 其余任务链与 P0-12;生产构建、三库矩阵和实机统一验收保持待办。
当前执行位置(2026 年 9 月 29 日 16:55):总体验收仍在 P0-03,P0-07 并行开发
开发位置与验收状态分开记录: 按用户当前口径,总体验收仍处于 P0-03 完成待复审;P0-04~P0-06 并非未开始,仍有开发或验证未收尾;P0-07 作为并行开发批次继续推进,但不代表总体验收已越过 P0-03。总项状态以《Scert整改合并优化清单》首节为准,下方批次记录保留其历史时间和证据范围。
18:22 进度更新(2026 年 9 月 29 日)
- 已提交并推送
802109e、114514b:任务路由项目隔离、证书任务入口判权、typed-nil 依赖处理及 HTTP 测试夹具修复。 - 后端
go test ./...当前本地运行通过;该结果不替代 PostgreSQL/MySQL 矩阵、浏览器、远端部署和生产验收。 - [~] P0-07 继续推进任务执行、其他业务资源写入和统一权限链;总体验收仍停在 P0-03。
本批需求:域名新增、修改、删除使用真实项目授权,服务端确定归属,成功变更与审计同事务;保留任务及资源引用保护,不通过全局管理员身份绕过项目权限。继续先开发、后统一测试。
- 已提交并推送
5180c7d:项目授权域名写入仓储、成功事务审计、应用接线及回归夹具。 - 已提交
82448c9:更新域名使用项目可见资源读取;任务创建在事务内锁定域名,与删除流程共用资源锁。 - 已提交并推送
e36794a:审计失败时新增、修改、删除均回滚的 SQLite 专项测试。 - HTTP 与仓储专项测试已运行:
go test ./internal/repository、go test ./internal/httpapi均通过。 - [~] 完整后端、前端、三库矩阵、竞态检测、构建、浏览器、SSH/HTTPS 和远端部署仍待统一执行;专项测试通过不等于生产验收。
- [!] P0-03 总体验收仍缺最终复审与生产证据,P0-07 不能据局部结果升级为复审通过。
2026 年 9 月 28 日:多对多表单保存收尾(21:54 接续)
需求确认:沿用已确认的多对多及同项目边界,先开发后统一测试。本批修复创建域名后关联失败的重试状态,限制服务器候选范围,并防止读取关联失败被误当作空数组提交。
- 核对上一批
e220053已提交推送,工作区干净;确认资料与关联仍是两个独立请求,不宣称跨请求原子性。 - 已拆分
DomainForm.js,创建资料成功后保留域名标识并更新列表;关联失败重试不再次创建,资料未改时只重试关联,资料改动时更新既有域名。创建结果不明时禁止盲目重试,并提示关闭表单刷新确认。 - 已接入同项目候选过滤,未知归属不默认为默认项目;保存期间防重复及防切换,编辑前重新读取关联,失败时禁用保存并提供重读按钮;旧读取响应不污染新表单。
- 已补齐真实组合式状态、管理页接线及模板回归源码,覆盖共享、清空、失败重试、项目过滤、并发点击、卸载与不确定结果;已同步总清单及交接边界,仅做源码与差异检查。
- 跨请求原子性、创建请求服务端幂等键、跨页面刷新后的不确定结果恢复仍未实现;不得把本地表单重试保护描述为完整幂等事务。其他资源写入授权及部署安全边界继续按原始清单推进。
- [!] 本批不运行测试、构建、浏览器或部署,待开发阶段完成后统一执行。
2026 年 9 月 28 日:域名与服务器多对多(21:32 接续)
需求确认:一个域名允许关联多台服务器,一台服务器允许关联多个域名;修改、清空某个域名的关联不改变其他域名的关联。沿用同项目授权边界,关联保存不触发 SSH 或证书推送。先开发,完成后再统一测试。
- 核对现有联合主键及页面多选;保留多对多模型,不增加服务器或域名单边唯一约束。修改前检查点
f38e290已提交推送。 - 已补齐两个域名共享两台服务器、重复去重、局部修改、清空及失败保留的仓储与 HTTP 回归源码;旧关联格式用例改为真实账户、项目成员和授权仓储,不靠全局管理员绕过权限。
- 已补齐同一服务器记录当前绑定的远程路径冲突保护:默认按域名与证书类型分目录,关联保存、服务器修改和部署预检均检查实际规范化路径;固定路径冲突拒绝,单域名固定路径兼容。新增路径及工作流回归源码,待统一测试。
- 页面增加多选复用悬浮提示及 Vue 模板用例;已同步模型、第三版接口交接、总清单对应条目、开发清单、基础规格、审查记录、发布记录与支持矩阵第二十六节。
- 已进行源码检查、Go 格式化和差异检查;不将格式正确视为编译或行为验证。源码与文档精确提交,状态以 Git 记录为准,未提交运行产物或凭据。
- 同一主机的多条服务器记录、配置变化与在途任务、远端符号链接和解绑遗留文件的路径占用仍待整体部署整改;本批只完成当前绑定的多对多与路径预检,不宣称覆盖这些边界。
- [!] 本批仅开发,不运行测试、构建、浏览器、SSH 或部署;已有通过记录不得用于本批验收。
2026 年 9 月 28 日:先开发、后统一测试(20:57 接续)
需求确认:按照用户最新指令先完成开发,再集中运行测试。沿用 P0-06/P0-07 的既定需求,不缩减原始 44 项,不将未测试的源码记为复审通过。本阶段不清库、不部署、不创建辅助验收脚本。
- 核对当前分支和交接差异;生命周期候选已在
dcca17e,两处测试修正另以检查点fd767b2提交推送。 - 生命周期收尾源码已完成,待统一测试:领域、接口及失败审计统一项目标识校验;项目与成员操作共享忙状态,补充控制字符和表单渲染用例。
- 资源读取隔离源码已完成,待统一测试:域名、服务器、绑定列表及证书元数据入口根据真实资源归属判权,列表在 SQL 内过滤。
- 正式应用依赖已接入;缺少授权仓储拒绝读取,不退回旧全量列表;无权限与不存在统一拒绝,内部错误不向客户端透传。
- 模型、第三版接口交接及实际进度文档已同步;SQLite/MySQL、HTTP 和前端新增回归用例仅编写,不执行。
- 绑定写入已接入真实项目授权与事务审计,候选检查点为
f38e290;随后补齐多对多及路径预检,详见首节,均待统一测试。保存关联不触发 SSH 或部署。 - [!] 统一测试推迟至开发阶段完成之后;构建、浏览器和生产验收均未执行,旧证据不能证明新代码。
历史补记:上一批完整前端 210 项通过且生产构建成功;MySQL 5.7 组合通过,MySQL 8.0 的三条审计故障注入用例因业务账户无建触发器权限失败。夹具改由隔离实例管理员建触发器,未提高业务权限,修正后尚未运行。新增非法项目 ID 回归已复现失败,详见 artifacts/project-lifecycle-20260928/invalid-id-before.jsonl。以下 20:47 及更早记录仅为历史快照。
2026 年 9 月 28 日:项目生命周期与审计(20:21 开始,20:47 同步)
需求确认:继续 P0-06/P0-07,补齐项目创建、资料修改和空项目删除的正式入口;项目不是用户分组。创建仅允许当前有效超级管理员,修改沿用项目管理员实时权限;删除仍遵守默认项目与域名、服务器、成员引用保护,不自动删除业务资源或成员,不清理现有业务数据。名称允许重名,标识由服务端生成且不可修改。所有成功变更与审计同事务,失败记录不泄露请求正文。
- 核对上一批提交
61652f0与干净工作区;浏览器工具问题不阻止本批源码整改。 - 已确认本批权限、引用及事务审计需求;修改前任务检查点
dcede93已提交推送,行为正确性仍须后续测试证明。 - [~] 项目生命周期仓储、实时判权、事务审计及失败回滚已有实现;首轮局部测试通过,随后补充的跨数据库回滚及非事务引擎边界尚待运行,不以 HTTP 层检查代替仓储实时授权。
- [~] 项目创建、编辑、删除 API、失败审计及真实应用接线首轮通过,包含非法字段、确认、引用、缓存和审计失败回滚;新增会话验证后停用/降权及请求取消审计测试尚待执行。
- [~] 页面已接入创建、编辑、二次确认删除与能力提示;局部组合式逻辑及模板回归通过,完整前端与真实浏览器尚未验证。
- [~] 首轮仓储/HTTP/应用组合共 136 个叶子通过、5 条条件跳过,退出 0;项目页面与生命周期专项 35 项通过、0 失败、0 跳过,退出 0。完整回归、MySQL 双版本、竞态及构建尚待执行;PostgreSQL 当前实库和生产验收仍单独保留。
- [~] 已同步总清单顶部及 P0-06/P0-07 的实际进行中状态;模型和验证记录待本批实现及测试后更新,本次只提交进度文档,不夹带未验证代码、运行包、业务库、凭据或日志。
20:47 证据:artifacts/project-lifecycle-20260928/api-first.jsonl 与 frontend-first.log。首轮结果仅证明执行时的候选及对应测试范围;此后新增测试尚未执行,全部源码仍在工作区,未发布部署。旧批次正式包与回归结果不得套用于当前代码。
原始 44 项及其验收标准不缩减。删除引用冲突必须明确提示且不产生部分删除,授权能力提示不能替代服务端每次检查。
2026 年 9 月 28 日:项目页面浏览器验证(19:57 开始,20:15 同步实际进展)
需求确认:使用已提交的项目入口与成员页面,在最新正式构建上验证实际页面、权限操作和布局;不以 SSR 代替浏览器,不扩大为生产验收。正式首次初始化必须经过临时 HTTPS 身份核对、数据库验证、DNS 权限验证和管理证书配置,不通过手工改库或关闭 TLS 校验绕过。
- 19:57 核对基线
a11315d已提交推送、工作区干净且未启动 Scert;后续构建采用已推送的干净检查点5f9af32,主程序于 20:02:26 启动。初始未启动状态不再代表当前运行状态。 - 已有正式脚本构建 Windows 服务端与 Web 成功,运行副本位于独立目录;发布清单 10 个产物、压缩包内 9 个文件、实际运行的主程序及 4 个 Web 文件均校验一致,版本命令退出 0。
- 临时 HTTPS 指纹与可信本机日志一致,主机名校验通过;核对后仅对该临时入口接受浏览器证书例外,未关闭全局 TLS 校验、未安装根证书。浏览器已到达真实的未认证初始化入口。
- 浏览器验证公开状态返回 200,受保护配置返回 401,无效令牌兑换返回 401,之后配置仍为 401;响应包含禁止缓存保护。未兑换真实令牌或创建业务数据。
- 首次初始化后端专项 128 个叶子通过、0 失败、4 条平台条件跳过,退出码 0;三条符号链接权限和一条 Unix 文件权限条件未满足,不能作为对应边界实机通过。
- [!] 浏览器文件工具拒绝访问 Scert 工作区中的一次性地址文件,原因是工具配置的工作区范围不包含当前项目。未尝试绕过;尚未取得合法初始化会话,数据库、DNS 与管理入口证书步骤未执行。
- 验证管理员与普通项目管理员入口、角色授予撤销、分页、撤权拒绝及桌面布局。
- 已按真实范围同步总清单、开发清单、基础规格、审查记录及支持矩阵第二十五节;没有发现并修复新的产品源码问题,未运行的验收不勾选。
证据目录仍为 artifacts/project-members-ui-20260928/,新增正式发布完整性记录及初始化专项日志;浏览器响应另作脱敏记录,不保存真实令牌。运行包、日志、数据库和凭据均不进入源码提交。后续先恢复当前项目专用工具的正常文件访问配置,继续合法初始化;该工具阻塞不阻止项目生命周期、资源授权等后续源码整改。
原始 44 项及验收标准不变。若本机生产式初始化的外部前置条件未满足,明确记录相应缺口并继续其他可执行整改,不将替代环境测试写成完整端到端通过。
2026 年 9 月 28 日:项目入口与成员页面(19:17 开始,19:54 回归完成,等待复审)
需求确认:承接现有成员接口,提供当前账户可见项目的入口和成员管理页面;普通用户担任项目管理员时也必须能够进入,不放开整个管理员控制台,不暴露无权限的项目或全站账户目录。保留原始 44 项范围,本批子项不等于 P0-07 整项完成。
- 核对真实工作区、成员接口、账户可见性和普通用户工作台;上一批结果只作为基线。
- 保存本批任务清单;修改前检查点
af77981已提交推送,命令行认证失败后经 Git 专用工具成功推送。 - 新增服务端过滤的可见项目分页接口,实时检查账户状态与项目角色,不写死默认项目;项目和成员响应禁止缓存,最后修改后的专项与完整回归已通过。
- 新增独立拆分的项目成员页面,接入管理员导航和普通用户工作台;账户建议沿用已有可见性边界,未知账户使用明确的账户 ID,不开放全站搜索。账户页补充可分享的账户 ID。
- 支持每页 5、10、15、30 位成员、多角色授予/撤销、冲突刷新和撤权清空;切换项目、分页及卸载后的旧响应隔离已覆盖正式前端测试。
- 前端完整回归 198 项通过、0 失败、0 跳过;包含真实 Vue 模板渲染而非浏览器测试,前端生产构建通过。首轮导航测试三处失败保留,不覆盖历史日志。
- 最后源码专项 83 个叶子通过、4 条外部 MySQL 条件跳过;完整后端 1700 个叶子通过、54 条条件跳过,均无失败。静态检查、模块校验及双平台构建退出码均为 0;证据使用新建的最终日志,不以缓存保护修改前的记录代替。
- MySQL 5.7/8.0 三轮成员/目录组合各 195 个叶子通过、0 失败、0 跳过,退出码均为 0;含 SQLite 用例,不称纯 MySQL 测试。
- 最后源码三轮专项竞态 249 个叶子通过、0 失败、12 条外部 MySQL 条件跳过,退出码 0;不称全仓库或实库竞态通过,不用上一批记录替代。
- 同步总清单 P0-07 对应说明、执行清单、模型、开发清单、审查记录、基础规格与第二版接口交接,补齐支持矩阵第二十四节及最终候选哈希;旧批次明确标为历史,不再用顶部新增记录掩盖对应条目的过时说明。提交和推送状态以 Git 记录为准,产物及隔离数据库不纳入提交。
- 本批真实浏览器验收、项目创建编辑、完整资源隔离、排队任务重判、PostgreSQL 当前实库、Linux 原生和生产验收仍保留待办。
2026 年 9 月 28 日:项目成员接口与分页(19:10 同步,本批回归通过,等待复审)
本批于 18:42 进入实施,接续 bf10eb5,不再重复数据库驱动选型;原始 44 项及验收标准不缩减。源码修改前检查点为 4618670,接口实现与修复候选已随 3857dac 提交推送,随后增加正式边界测试并重跑回归。不清理业务库,不新增辅助验收脚本。
- 确认需求:接入现有成员事务仓储,操作者只取服务端验证的会话;用户分组和全局管理员角色不隐式授予项目权限。
- 增加成员列表分页与授予/撤销接口;同一用户的多个项目角色合并显示,列表不返回邮箱、密码摘要或分组,应用实际接线测试通过。
- 成员查询在读取数据的 SQL 内判权;专项验证跨项目、会话验证后撤权/停用均拒绝,合法空列表与未授权区分处理。
- 成功变更沿用事务审计,失败请求补充有界审计;验证取消请求仍记录失败、审计存储故障不伪报持久化,不记录请求正文或原始数据库错误。
- 首轮审计失败误报 409 已通过精确唯一键冲突分类修复;最后专项 62 个叶子通过、3 条实库条件跳过,退出码 0,首轮失败证据保留。
- MySQL 5.7/8.0 三轮成员组合各 171 个叶子通过、0 失败、0 跳过;含 SQLite 和错误分类用例,两个版本依次执行。
- 完整后端 1679 个叶子通过、53 条条件跳过;Windows 独立程序历史备份/升级/成员恢复路径、静态检查、模块校验与双平台构建通过,顺序进程退出码 0。
- 仓储、HTTP 与应用接线三轮成员专项竞态 186 个叶子通过、0 失败、9 条外部 MySQL 条件跳过,退出码 0;不称全仓库或实库竞态通过。
- 同步总清单、模型、接口交接及支持矩阵第二十三节,说明错误、分页和授权边界;Smail 参考接口文档保持原样。
- 成员管理页面、项目入口、全部业务资源授权及排队任务重判继续后续交付;本批接口通过不等于完整权限隔离或生产验收。
2026 年 9 月 28 日:数据库最终候选(18:36,回归完成,等待复审)
- 确认继续解决运行时和迁移阻塞,不删减原 44 项;源码修改前检查点
0edde01已推送。 - 读取 5.7 初始化日志与 8.0 崩溃证据,确认两次内存分配失败;按可执行程序和隔离数据目录核验并停止两个残留测试进程,保留全部文件,不影响本机其他数据库服务。
- 核查官方 WAL-reset 修复说明和驱动版本源码,选择
sqlite v1.59.0/libc v1.75.7,实测引擎 3.53.4;旧 v1.40.1 测试降为中间证据。 - 最后源码取消查询与 WAL 完整性专项各 10 次通过,共 30 个叶子;服务并发关闭另重复 30 次通过。最终专项文件为
sqlite-verified.jsonl,初版sqlite-final.jsonl仅为中间证据。 - 在资源受限机器上以
GOMAXPROCS=2、go test -p 1依次完成 MySQL 5.7/8.0 三轮原组合,各 531 个叶子通过、0 失败、0 跳过,退出码均为 0;不降低 TLS、不减少用例,包含 SQLite 用例。 - 最终完整后端 1635 个叶子通过、52 条条件跳过;Windows 独立程序历史备份/升级/成员恢复通过,静态检查、模块校验和双平台构建成功,最终顺序进程退出码为 0;Linux 仅交叉构建。
- 最终三轮扩大竞态
race-final.jsonl:831 个叶子通过、0 失败、15 条外部 MySQL 条件跳过,退出码为 0;不使用旧驱动的 828 个叶子通过数替代,也不把普通 MySQL 实库组合称为竞态验证。 - [!] 旧索引元数据不一致根因未关闭;保留失败证据及生产门禁,不以重跑成功宣称修复。
- 成员 Web/API、失败请求审计、全部业务入口与任务重判、PostgreSQL 当前实库及生产验收继续后续实施。
当前证据目录仍为 artifacts/runtime-migration-20260928/;最终批次为 backend-final.jsonl、mysql57-final.jsonl、mysql80-final.jsonl、sqlite-verified.jsonl、service-close-final.jsonl 与 race-final.jsonl,不覆盖旧失败记录。具体运行结果见支持矩阵第二十二节。原始 44 项状态不升级,下方章节按各自时间保留为历史。
2026 年 9 月 28 日:运行时与迁移回归(13:05 同步,双版本实库仍有阻塞)
本节是 13:05 的历史快照,当前进度以首节为准。彼时事务审计源码已保存到检查点 83a3ada,不是正式验收发布;以下实现、失败和待办按当时状态保留,不覆盖最新结果。
- 确认本次进度同步需求:核对实际源码状态、日志与进程退出码,同步总清单和执行清单,不用历史通过结果代替当前验证。
- 新增正式 SQLite 取消查询文件释放回归,旧驱动复现失败;候选
modernc.org/sqlite v1.40.1下 direct/prepared 各 10 次通过,服务并发关闭连续 30 次通过,等待复审。 - Windows 构建与当前完整后端通过:1634 个叶子通过、0 失败、52 项条件跳过;后续静态检查和模块校验成功,顺序进程退出码为 0。
- 扩大范围三轮竞态累计 828 个叶子通过、0 失败、15 项条件跳过,进程退出码为 0;跳过项不计通过。
- [!] MySQL 5.7 三轮组合累计 530 个叶子通过、1 个失败、0 跳过,包含 SQLite 用例;成员迁移重试测试有一次隔离实例初始化失败,进程退出码为 1,不能用后两轮通过覆盖失败。
- [!] MySQL 8.0 组合已完成 247 个叶子通过,但数据库包发生运行时内存分配失败,组合进程退出码为 1;中断用例不算通过,三轮完整验证未完成。
- [~] 已强化预期 MySQL 故障码 1644、消息及历史索引字段顺序断言。旧 Error 1280 与索引元数据不一致根因仍未关闭,重复未复现不能标记修复完成。
- 定位初始化和内存分配失败、复核索引异常,确认最终驱动选择,对最终候选完成双版本与完整回归,再同步其他专项文档并提交源码。
- 接入成员 Web/API、分页、失败审计、全部资源入口授权及任务重判;完成 PostgreSQL 当前实库、Linux 原生与生产验收。
最新证据目录:artifacts/runtime-migration-20260928/,核对文件为 sqlite-cancel-after.jsonl、service-close-after.jsonl、backend.jsonl、race.jsonl、mysql57-after.jsonl、mysql80-after.jsonl;相关进程退出码均已取回。旧失败日志保留,不创建辅助验收脚本,不清业务库、不进行远端部署。
原始 44 项仍为:[✓] 0、[x] 3、[~] 27、[!] 3、[ ] 11。上述子项结果不升级 P0-05/P0-06/P0-07/P1-09 总项,生产部署验收未通过。
2026 年 9 月 28 日:项目成员变更事务审计(12:48 同步,验证存在阻塞)
上一批成员基础及最终验证已提交并推送为 b3909d8。本批继续 P0-07/P1-09,不把仓储能力当作完整项目管理界面或业务隔离。
- 确认需求:成功授予/撤销必须记录项目、实际操作者、目标账户、角色、动作及时间;权限变更与审计同事务提交,审计失败必须回滚权限变更。
- 已将既有授权谓词、成员写入和成功审计接入同一事务;保留实时账户与项目管理员校验,不依赖会话中的缓存角色。审计失败或未实际写入时回滚,MySQL 成员表和审计表不是 InnoDB 时拒绝变更,不自动迁移历史表引擎。源码仍未提交,实现完成待复审。
- 已补充正常变更、重复与拒绝操作、审计故障回滚、自我撤权、历史保留、取消上下文、存储边界及并发重复操作用例;最新仓储专项 41 个叶子通过、0 失败、3 项条件跳过。
- 最新三次竞态累计 123 个叶子通过、0 失败、9 项条件跳过;随后静态检查和模块校验成功,顺序进程退出码为 0。
- [!] MySQL 5.7 最新专项 176 个叶子通过、1 个失败、0 跳过(包含 SQLite 用例);
TestHistoryScopeMySQLMigrationRetry/version报索引idx_audit_project_history的 Error 1280,根因未确认。顺序进程退出码为 1,MySQL 8.0 最新验证未启动,不能以早期验证代替。 - [!] 本批中间版本完整后端 1630 个叶子通过、1 个失败、52 项条件跳过;
TestDesktopConcurrentTransitionAndIdempotentClose关闭后 SQLite 文件仍占用。最新独立重复 10 次中 8 次通过、2 次失败,退出码为 1,后续构建及最新完整回归未执行。不得跳过此测试或用上一批 1623 个通过替代当前证据。 - 将本批实现、真实测试结果和两个阻塞同步至总清单与本执行清单;未将任何总项提升为完成或复审通过。
- 修复并复核两个阻塞,完成最后修复后的双版本实库及完整后端验证,再统一同步其他专项文档、提交并推送本批源码。
- 成员管理 Web/API、分页、失败请求审计、资源授权入口及任务重判继续后续接入;当前不新增对外路由。
证据目录:artifacts/project-member-audit-20260928/。本次核对 targeted-verified.jsonl、race-verified.jsonl、mysql57-verified.jsonl、service-close-repeat.jsonl 及中间版本的 backend.jsonl;进程退出码已取回。不存在最新 mysql80-verified.jsonl 或 backend-verified.jsonl 的通过证据。P0-05/P0-06/P0-07/P1-09 保持 [~],全部 44 项及其验收标准不变;生产部署验收未通过。
2026 年 9 月 28 日:项目成员与实时判权(已完成子项待复审)
修改前检查点 4f1900d 已推送。需求沿用 P0-06/P0-07:项目成员独立于用户分组,支持六类项目角色;普通管理员不自动获得所有项目权限;普通用户不能读取完整私钥。系统级权限仍由有效超级管理员承担。
- 核对原始范围和当前模型,确认不向旧用户或默认项目自动授予成员权限。
- 第 14 号迁移、成员授予/撤销及实时判权实现;多项目、多角色、禁用账户、未知操作默认拒绝。仅有效超级管理员拥有系统级跨项目能力,普通用户仍不能读取完整私钥。
- 两项目隔离、撤权和降权、父记录引用、迁移失败重试通过;MySQL 5.7/8.0 各 242 个叶子通过、0 失败/跳过(命令同时包含 SQLite 用例)。
- 复现并修复本批 SQLite 负行号误拒绝、扩展唯一索引替换可删除关联账户、空邮箱被误当唯一冲突三个边界;保留失败证据
replacement-before.jsonl和empty-email-before.jsonl,最后修复后重新执行全部本批验证。 - 最终完整后端 1623 个叶子通过、0 失败、51 项条件跳过;Windows 独立产品程序包含历史备份升级与新增成员多角色的备份恢复,恢复后重新验证授权和跨项目拒绝。
- 三次竞态合计 633 个叶子通过、0 失败、18 项条件跳过;
go vet ./...和go mod verify退出码为 0。最终证据为*-verified.jsonl,原*-final.jsonl只作最后空邮箱修复前的中间证据,详见支持矩阵第二十一节。 - 接入所有业务资源入口、资源真实项目解析、排队任务执行/取消/重试重判;当前基础模块不代表 Web/API 已隔离。
- 同步总清单、执行清单、模型、基础规格、开发清单、审查记录、支持矩阵和运维边界;本批代码与文档同批提交。P0-05/P0-06/P0-07 总项继续保持
[~]。
成员管理 Web/API、角色变更审计和所有业务调用链仍未交付;不开放不完整的项目管理入口。删除有成员的项目或账户必须先显式撤销关系,不能用删除身份再重建的方式继承旧权限。已有历史用户与用户分组不自动回填项目角色。
本批仅操作隔离测试库;不清理生产业务数据,不创建辅助验收脚本,不将新表或单项测试代替完整生产验收。
2026 年 9 月 28 日:任务/审计范围快照(本批实现与回归完成,等待复审)
修改前检查点 5237e8d 已推送。当前批次接续模式 12,不改写旧迁移,不删除历史任务,不给已删除资源伪造默认项目,不伪造操作者。
- 已实现三库模式 13 及历史回填;任务、审计保存范围快照,管理证书使用明确系统范围,未知历史保留未知。
- 已实现业务任务从实际域名项目创建、尝试关联校验及历史读取;HTTP 操作者取自服务端会话,工作流审计关联实际任务。
- 当前专项重测通过:
HistoryScope|TaskAPI|AuditLogResponse|SQLiteBusinessUpgradePreservesDependentObjects,覆盖仓储、数据库、接口三包;未配置外部 MySQL 的条件用例不算实库通过。 - 补充资源删除/项目变更后新尝试拒绝、历史孤儿读取、HTTP 与工作流任务和身份关联断言;正常管理续期必须有开始和收尾审计,故障注入场景只校验实际可写入记录,不强行要求被拒绝的开始审计存在。
- 正式回归复现登录初版身份漏记/错记及自身账户更新后身份丢失;修复为本次已验证身份或写入前身份快照,登录失败不冒用旧 Cookie。改密审计保留实际身份,后续请求仍拒绝旧会话。
- MySQL 5.7/8.0 专项各 135 个叶子通过;完整后端 1514 个叶子通过、49 项条件跳过;三次竞态共 258 个叶子通过、6 项条件跳过;最新 Windows 程序两条备份恢复路径、静态检查和模块校验通过。日志及统计边界见支持矩阵第二十节。
- 同步总清单、执行清单、模型与接口字段、基础规格、开发清单、审查记录、支持矩阵及运维边界;本节与源码同批提交。
- 剩余资源关联、项目成员授权和撤权重判、跨项目越权验证、PostgreSQL 当前实库、Linux 原生与生产门禁。
范围快照没有项目外键,不用于授权,也不保证任意直接 SQL 写入的正确性。回填会正常执行既有更新触发器;若触发器拒绝,迁移失败,不绕过触发器。P0-05、P0-06、P0-07 仍为 [~]。
2026 年 9 月 28 日:资源归属与替换约束复核
已提交的第 11 号迁移(源码 7284958)
- 域名、服务器保存
project_id、owner_id、created_by、updated_by;历史资源回填默认项目,未知所有者和操作者保留空值,不编造历史身份。 - HTTP 从服务端会话填写归属,拒绝客户端伪造归属字段;普通更新保留项目、所有者和创建者,仅更新操作者。原 CLI 更新保持原归属,不重新开放已停用业务入口。
- 绑定替换在同一事务校验域名、服务器及项目一致性;失败保留旧绑定。MySQL/PostgreSQL 新增外键;SQLite 不重建业务表,以触发器保护引用且保留原有对象。
- 重新读取上一批最终日志:后端 1432 个叶子通过、含父项 1562 条,0 失败、47 项条件跳过;竞态三次共 114 个叶子通过、6 项条件跳过。不能把无测试文件包的 skip 事件算作测试跳过。
- 上一批 MySQL 5.7.44/8.0.45 专项各 37 个叶子通过、0 失败、0 跳过;每条命令包含 SQLite 用例,不能称为 37 个纯 MySQL 用例。Windows 独立程序含普通项目的资源和绑定备份恢复通过;当时程序是未提交源码构建,不称干净发行包。
本轮新增修复(修改前检查点 cad238a)
- 正式回归复现 20 个失败叶子:递归触发器关闭时,主键或隐藏行号冲突可通过
UPDATE OR REPLACE/INSERT OR REPLACE删除被引用行;外键开关不能消除此缺口。保留artifacts/resource-replacement-20260928/before.jsonl。 - 新增第 12 号迁移;SQLite 增加目标行替换保护和插入后引用检查,防止隐式删除绕过。MySQL/PostgreSQL 沿用外键,仅统一模式登记;不改写第 11 号历史迁移。
- 专项覆盖四种连接开关组合、十类替换、正常编辑、无引用替换及负行号后自动插入;版本登记故障、触发器重名及既有无效引用必须完整回滚并可修复重试。
- 修复源码已提交为
92c844f;完整后端 1480 个叶子通过、47 项条件跳过,三次竞态共 255 个叶子通过、6 项条件跳过,MySQL 双版本专项各 83 个叶子通过且无跳过。独立 Windows 产品程序两条路径均通过;构建来自当批未提交工作区,不称干净发行包。最终证据见支持矩阵第十九节。 - 同步合并清单、基础规格、开发清单、关系模型、测试记录、支持矩阵和运维说明;保留历史批次,不用新结果覆盖旧失败记录。
- 任务、尝试与审计的项目关系继续实施;管理证书任务目前使用
management-certificate特殊资源 ID,必须明确系统范围,不能伪造业务域名满足外键。历史已删除资源的任务和审计需要保留且区分未知归属,不自动删除。 - PostgreSQL 当前实库、完整资源成员授权、Web/API 越权、Linux 原生、完整发行包、服务重启和生产门禁。
本轮优先封堵已复现的数据完整性缺口,再接下一批任务/审计关联。P0-06、P0-07、P0-05 总项均不提升;原始 44 项及验收要求不变。
2026 年 9 月 28 日:项目根实体最终验证结果
本节更新下方启动阶段记录;详细命令与限制见《构建版本与数据库支持矩阵》第十八节。
- 项目根实体、三库第 10 号迁移与仓储实现;默认项目保护、资料保留和错误语义专项通过。
- SQLite 历史模式 0~10 的升级覆盖(模式 1~10 含代表性业务),项目迁移失败回滚和重试通过;三套迁移目录、登记和嵌入检查通过。
- MySQL 5.7.44、8.0.45 各 8 个叶子用例通过,0 失败、0 跳过;包含严格 TLS 实连下的项目 CRUD 和 DDL 部分成功后的重试。
- 54 个项目/迁移叶子用例连续 3 次竞态检测通过;外部 MySQL 用例在该命令中条件跳过,已由上述实库专项分别执行。
- 最终后端全量 1409 个叶子通过,含父项 1535 条通过记录,0 失败、46 项条件跳过;静态分析与模块校验通过。
- 当批 Windows 产品程序通过 2 条独立 CLI 恢复路径,核对默认项目与普通项目、历史业务、凭据及证书;不是完整发行包或实机服务验收。
- PostgreSQL 原生项目实库验证;全部资源归属回填、关联约束、项目成员权限、Web/API、Linux 原生运行及完整生产门禁。
P0-06、P0-07 均保持 [~]。当前完成的是项目根实体,不是统一项目资源模型或权限隔离;不更改原始 44 项范围。
2026 年 9 月 28 日:P0-06 项目根实体实施
- 重新核对干净工作区和 P0-06/P0-07 原始要求;修改前检查点
adb7d7f已推送。 - 新增项目模型、三库
0010_projects.sql、统一登记与嵌入、项目 SQL 仓储;旧迁移文件未改写。 - 本地专项验证项目校验、CRUD、默认项目保护、中文及四字节字符、取消上下文、缺失对象、重复写入、关闭重开,以及 SQLite 迁移回滚重试和历史业务保留。
- [~] 完整后端与 MySQL 5.7/8.0 隔离实库回归正在执行,证据目录
artifacts/project-model-20260928/;跳过项不算通过。 - PostgreSQL 实库专项、资源项目字段与历史回填、关联及引用删除约束、项目成员权限、接口越权、Web 页面和生产验收。
需求确认、实体关系与后续验收条件见《项目资源关联模型.md》。本批只建立项目根实体,未将现有资源视为已经分配到默认项目;P0-06/P0-07 和全部 44 项范围不缩减,均不提升为整项完成。
本清单依据《Scert整改合并优化清单.md》建立,用于跟踪实际代码整改、自动化验证、隔离环境验证和生产验收。
当前日期:2026 年 9 月 27 日
状态定义:
[ ]未开始;[~]进行中;[x]已完成,等待复审;[✓]复审通过;[!]暂缓或存在阻塞。
一、执行规则
- 代码实现、自动化测试、隔离环境验证和生产验收分开记录。
- 构建成功、接口返回 HTTP 200 或单元测试通过,不直接等同于生产验收通过。
- 真实 DNS、ACME、HTTPS、SSH 主机指纹、备份恢复和远程部署必须保留可复核证据。
- 不使用
-k、--insecure、跳过 SSH 主机指纹或强制 IP TLS 的方式替代正式验证。 - 不将密码、RAM 密钥、Token、私钥、真实证书或 Cookie 写入代码、文档、日志和 Git。
- 每个任务完成后先标记为
[x],复审和对应范围的验收证据齐全后才能标记为[✓]。
逐项规格入口:《整改任务规格与验收约定.md》。P0/P1/P2/P3 分别见《基础整改任务规格.md》《核心能力任务规格.md》《运维验收任务规格.md》《增强能力任务规格.md》,共 44 项;每项具备全部原定字段及独立六阶段状态。汇总状态、原始清单状态与规格同步更新;原始清单的需求和验收标准仍保留为基准,不随局部实现缩减。
二、当前基线证据
| 项目 | 当前事实 | 证据或命令 | 结论 |
|---|---|---|---|
| Git 工作区 | main 与 Scert/main 同步,工作区干净 |
git status --short --branch |
已建立基线 |
| 后端模块 | backend/go.mod 声明 Go 1.26.6,模块内实际使用 go1.26.6 |
在 backend 执行 go version、go env GOVERSION GOTOOLCHAIN |
GOTOOLCHAIN=auto;根目录的 1.26.2 不代表后端构建版本 |
| Node.js | v24.19.0 |
node --version |
已记录 |
| npm | 11.17.0 |
npm.cmd --version |
已记录 |
| Vue | 锁文件实际版本 3.5.41 |
frontend/package-lock.json |
已记录 |
| Vite | 锁文件实际版本 6.4.3 |
frontend/package-lock.json |
已记录 |
| 数据库驱动 | SQLite、MySQL、PostgreSQL 均有代码和迁移目录 | backend/internal/database/ |
正式支持范围仍需确认 |
| SSH | 已有主机指纹、密钥部署和安全测试代码 | backend/internal/deployment/ |
远程实机仍需复核 |
| 生产门禁 | 现有文档明确正式验收尚未全部通过 | doc/生产部署与运维说明.md |
不能宣称生产放行 |
三、P0 基础整改和阻塞项
| 编号 | 状态 | 任务 | 当前问题 | 下一步交付 | 验证证据 |
|---|---|---|---|---|---|
| P0-01 | [x] | 明确产品范围 | 正式发布仅含 Web/服务端,桌面源码保留;CLI 已收敛且实际 Windows 产物验证通过 | 等待最终复审;Windows/Linux 实机安装仍归对应验收项 | 双平台归档及 SHA256、独立克隆、命令树及实际退出码 |
| P0-02 | [x] | 建立完整任务清单 | 44 项逐项规格、原始编号名称、字段、六阶段、引用和汇总状态核对通过 | 等待最终复审,随实现同步状态和证据 | 四份规格、统一验收约定及 fab98d1 独立克隆 |
| P0-03 | [x] | 整理源码、构建产物和部署产物 | 全仓库及子目录规则、目录说明、正式回归和独立克隆构建校验通过 | 等待最终复审,后续提交继续执行边界检查 | 正式 Go 回归、完整索引、双平台 33 项清单及解包校验 |
| P0-04 | [~] | 统一开发和构建版本 | 精确工具链、安装策略、发布前后校验、系统清单及固定换行已实现,双独立克隆和完整自动化通过 | Linux 原生构建与双平台实际运行环境记录,不以交叉编译替代 | 94237b8、175 项前端测试、后端完整回归、4 个 Web 文件一致、33 项清单和解包校验 |
| P0-05 | [~] | 确认数据库正式支持矩阵 | 保留 MySQL/SQLite 既有证据;修复历史模式带数据升级,增加事务回滚和独立 Windows 程序备份恢复 | 继续旧发行包实际数据升级、完整发行包、真实服务重启、Linux 原生和取消边界;其余数据库及生产门禁不缩减 | fd2810b SQLite 专项 71 个叶子用例;27 个升级/恢复用例连续 3 次竞态检测通过;支持矩阵第十七节 |
| P0-06 | [~] | 建立统一领域模型 | 已有域名、证书、任务、服务器等实体,项目和部署关联仍需审查 | 补齐资源关系图、外键/归属和任务关联 | 模型文档、迁移检查、接口测试 |
| P0-07 | [~] | 增加项目级权限和资源隔离 | 用户组和角色已有实现,项目级资源边界未闭环 | 为证书、DNS、服务器、任务和审计补齐项目归属及越权测试 | 权限矩阵、接口越权测试 |
| P0-08 | [~] | 完善凭据和主密钥生命周期 | 已有凭据存储与测试,轮换、恢复、删除和失效证据不完整 | 补齐创建、轮换、恢复、删除、脱敏和不可恢复边界 | 安全测试、日志审查、恢复演练 |
| P0-09 | [~] | 强化 SSH 主机身份验证 | 已有指纹校验和安全测试,人工确认、更新与远程公钥部署需逐项复核 | 完成指定服务器上的密码部署、公钥登录和指纹复核 | 指纹、授权文件、公钥登录日志 |
| P0-10 | [~] | 统一任务、部署和回滚事务模型 | 部署事务已有实现,不代表所有长操作、项目关联和八类状态已经实现 | 将申请、部署、回滚、重试统一关联任务记录 | 事务测试、失败回滚证据 |
| P0-11 | [!] | 建立生产验收门禁 | 现有自动化证据不能替代 DNS、HTTPS、ACME 和远程验收 | 固化准入清单、证据目录和阻塞规则 | 生产验收记录逐项复核 |
| P0-12 | [~] | 完成备份和恢复方案 | 已有 CLI 备份恢复,自动备份、列表、下载、确认和审计仍需逐项核查 | 补齐完整备份能力并进行隔离恢复演练 | 隔离数据库恢复报告 |
四、P1 核心产品能力
| 编号 | 状态 | 任务 | 当前判断 | 主要验收 |
|---|---|---|---|---|
| P1-01 | [~] | 统一证书中心 | 已有证书申请、导入和列表能力,统一详情和状态仍需复审 | 申请、导入、续期、部署、回滚 |
| P1-02 | [~] | 证书详情和版本管理 | 已有证书相关模型,版本、SAN 和历史展示需复核 | 版本切换、SAN 变化、旧证书保留 |
| P1-03 | [~] | ACME 和 DNS 管理 | 已有多 DNS Provider 和 DNS 账户能力,真实授权范围需复核 | Production/Staging、DNS-01、泛域名、CNAME |
| P1-04 | [~] | 任务中心 | 已有任务和执行记录基础,取消、重试和日志展示需复核 | 长任务、失败重试、取消、执行历史 |
| P1-05 | [~] | 续期策略 | 已有续期相关代码,重复申请保护和调度验收需补齐 | 到期阈值、锁、幂等、失败保留旧证书 |
| P1-06 | [~] | 服务器和部署目标中心 | 已有服务器管理和 SSH 密钥展示 | 服务器归属、验证、密钥登录、部署目标 |
| P1-07 | [~] | 多服务器部署策略 | 已有部署客户端和回滚测试 | 多目标顺序、失败回滚、部分成功状态 |
| P1-08 | [~] | 通知中心 | 已有 Smail 系统账户发信接入方向 | 成功、失败、重试、脱敏和系统账户调用 |
| P1-09 | [~] | 审计中心 | 已有审计仓储和接口基础 | 登录、密码、凭据、证书和部署危险操作 |
| P1-10 | [ ] | 证书监控仪表盘 | 页面和监控口径尚未完成复审 | 到期、失败、部署状态、异常统计 |
| P1-11 | [~] | 备份恢复页面 | CLI 和文档已有,Web 操作和权限需补齐 | 备份列表、恢复确认、审计和失败保护 |
| P1-12 | [~] | API 契约和权限矩阵 | 已有后端接口说明文档,需与实际路由同步 | 接口字段、角色、项目和错误码一致 |
五、P2 Web、运维和验收
| 编号 | 状态 | 任务 | 当前判断 | 主要验收 |
|---|---|---|---|---|
| P2-01 | [~] | 统一 Web 页面结构 | 已按页面拆分,仍需逐页检查一页完整显示和中文布局 | 桌面页面、响应式、导航和空状态 |
| P2-02 | [~] | 统一中文显示和错误信息 | 已有中文界面,需扫描 HTML 实体和英文残留 | 页面、接口、日志错误信息 |
| P2-03 | [~] | 长操作任务化 | 部分部署/证书操作已有任务基础 | 页面不阻塞、刷新可恢复、任务状态可追踪 |
| P2-04 | [~] | 幂等和重复操作保护 | 已有部分锁和事务测试 | 重复提交、并发操作、幂等键 |
| P2-05 | [~] | 日志、指标和追踪 | 有日志和任务记录,Request ID/脱敏需复核 | 请求 ID、任务 ID、敏感信息审查 |
| P2-06 | [~] | 接口和前端测试 | 已有后端及前端测试,覆盖面需按清单补齐 | 全量测试、关键页面、越权和失败路径 |
| P2-07 | [~] | 升级、降级、卸载和回滚 | 已有安装器和发布说明,实机闭环未完成 | 升级、降级、卸载、失败恢复 |
| P2-08 | [!] | Windows Service 实机验收 | 当前证据不足以标记通过 | 安装、启动、升级、卸载和日志 |
| P2-09 | [!] | Linux systemd 实机验收 | 有 unit 和历史测试,当前版本需重新核对 | 安装、启动、重启、日志、Nginx、回滚 |
| P2-10 | [~] | 安全基线 | 已有 SSH、凭据和数据库安全测试,仍需完整门禁 | TLS、Cookie、CSRF、越权、路径和命令注入 |
六、P3 后续增强
| 编号 | 状态 | 功能 |
|---|---|---|
| P3-01 | [ ] | 多租户支持 |
| P3-02 | [ ] | API Token 管理 |
| P3-03 | [ ] | Webhook 事件订阅 |
| P3-04 | [ ] | 更多 DNS Provider 插件 |
| P3-05 | [ ] | 证书标签和批量操作 |
| P3-06 | [ ] | 多实例高可用 |
| P3-07 | [ ] | 分布式任务队列 |
| P3-08 | [ ] | Prometheus 指标接口 |
| P3-09 | [ ] | OpenAPI 自动生成 |
| P3-10 | [ ] | 移动端适配 |
七、本轮执行记录
2026-09-27:建立整改执行基线
- 已检查
main分支和工作区,当前无未提交代码变更。 - 已确认 Go、Node.js、npm 和前端锁文件实际版本。
- 已确认数据库代码同时包含 SQLite、MySQL 和 PostgreSQL 适配,但正式支持矩阵尚未统一。
- 已发现桌面二进制和桌面前端构建入口仍在 Git 索引中,暂不直接删除,列入 P0-03 复审。
- 已补强
.gitignore,覆盖桌面构建产物、部署暂存目录、发布/证据目录和本地数据库/密钥文件。
八、下一轮优先顺序
- 继续 P0-04 工具链固定、锁文件安装策略及构建机/运行机版本记录;独立安装仍有 esbuild 脚本批准策略警告,不自动批准绕过审查。
- 继续 P0-05 三数据库正式版本矩阵、真实迁移和恢复验证,明确非跳过证据。
- 推进 P0-06/P0-07 领域模型和项目隔离;用户分组不能替代项目权限。
- 继续定位 SSH 公钥自动部署实机失败阶段,完成密码安装和密钥登录双路径验收。
- 将生产验收门禁与当前远程部署、DNS、HTTPS 和 ACME 证据逐项对应;P0-01/P0-02/P0-03 保持待最终复审,不重做已取得的同提交证据。
2026-09-27:自动化基线验证
| 验证项 | 命令 | 结果 |
|---|---|---|
| 后端单元和集成测试 | go test -p 1 -count=1 -timeout=3m ./... |
通过 |
| 后端静态检查 | go vet -p=1 ./... |
通过 |
| Go 模块完整性 | go mod verify |
通过 |
| 前端测试 | npm.cmd test |
150 项通过,0 失败 |
| 前端生产构建 | npm.cmd run build |
通过 |
| 前端生产依赖审计 | npm.cmd audit --omit=dev --audit-level=high |
0 个漏洞 |
以上结果仅证明当前代码在本地自动化层通过,不替代 Windows Service、Linux systemd、真实 DNS、ACME、HTTPS、SSH 和备份恢复验收。
2026-09-27:P0-03 生成物索引清理
- 已确认
desktop/scripts/build-frontend.mjs从根目录frontend/dist重新构建并复制桌面资源。 - 已将
desktop/desktop.exe和desktop/frontend/dist/index.html从 Git 索引移除;本地文件仍保留,未物理删除。 deploy/tests/install-linux-test.py保留为可复用测试代码。- 本项仍需在独立克隆中验证正式发布包和生成物边界;按 P0-01 的范围调整,不再以桌面构建作为正式门禁。
2026-09-27:P0-04、P0-05、P2-07 版本和迁移保护
- 纠正工具链误报:
backend模块内实际为 Go1.26.6,GOTOOLCHAIN=auto。没有降低模块版本要求。 - 新增《构建版本与数据库支持矩阵》,区分本地代码检查、SQLite 实测和外部数据库实机验收。
- 新增迁移目录/嵌入/版本登记一致性检查,以及七类反例测试。
Migrate拒绝新版数据库和不连续的迁移历史,避免旧程序误用更新后的数据库。- 数据库定向测试通过:五类异常历史拒绝后原数据不变;SQLite 从 0~9 版本升级并重复执行通过。
- 仅使用测试临时库,没有访问或清空外部业务数据库。三种数据库兼容性不能据此标记全部通过。
2026-09-27:P0-01 正式发布范围收敛
- 依赖:原始整改清单 P0-01,已推送的
8b33282作为修改前检查点;未删除桌面源码或本地生成物。 - 涉及文件:
build/build-release.ps1、backend/internal/releasearchive/verify_test.go、根目录及各模块 README、生产和历史测试文档。 - 正式发布已移除 Wails 调用和桌面打包;清单新增
delivery_scope=[web,server],兼容字段desktop_requested=false。 - 旧参数
SkipDesktop仅警告并兼容,显式设假也不能恢复桌面构建;传入DesktopDirectory在构建前报错。 - 保留路径扫描、Go
-trimpath、文件及归档 SHA256、拒绝覆盖旧输出、源码提交和脏状态记录。 - 已通过 PowerShell 语法解析、
go test -count=1 -timeout=3m ./internal/releasearchive ./cmd/scert-release、git diff --check。 - 发布范围验证已完成,证据见下节;这仍是构建层验证,不代表 Windows/Linux 实机安装验收。
- 历史业务 CLI 的执行入口及最终产物检查已由后续批次完成,见本节末尾的范围验收记录。
2026-09-27:双平台和独立克隆发布验证
- 源码提交:
25fd4cf,已推送。默认双平台构建成功,manifest.json的source_dirty=false、delivery_scope=[web,server]、desktop_requested=false、路径检查通过。 - 输出:
build/release-scope-20260927-25fd4cf/。清单共 33 项(31 个包内文件、2 个归档),逐项文件长度和 SHA256 匹配。 - 真实解包核对:Windows 9 个文件、8 条包内校验和;Linux 22 个文件、21 条包内校验和。解包内容与清单一致,无桌面产物。
DesktopDirectory反例返回退出码 1,且没有创建输出目录。- 独立克隆:
build/checkout-scope-20260927-25fd4cf/。执行npm.cmd ci --no-audit --no-fund、npm.cmd test,150 项通过;显式-SkipDesktop:$false构建双平台通过,33 项清单的长度和 SHA256 再次匹配。 - 独立克隆保留
desktop/main.go,不包含desktop/desktop.exe或桌面 dist。跟踪清单没有.runtime、node_modules、dist、可执行文件、数据库或私钥后缀文件;克隆工作区仍干净。 npm ci提示 esbuild 的安装脚本尚未列入批准清单,但命令、前端测试及构建均退出成功;未自动批准额外脚本。可复现安装策略仍归 P0-04 后续审查。
2026-09-27:CLI 运维范围收敛
- 依赖 P0-01 正式范围;涉及
backend/internal/cli/root.go、根命令/范围/运维测试、README 和《命令行运维范围说明》。 domain、server、ssh-key、renew、deploy不再注册业务实现;仅保留隐藏的中文迁移提示,返回错误,不解析或回显旧凭据参数。- 保留初始化、服务启动、状态、证书诊断、DNS 诊断、配置、日志、备份恢复及系统服务运维;服务端自动续期未更改。
- 新增命令树白名单和 11 类旧入口拒绝测试;用无效配置和模拟凭据证明拒绝先于配置读取,配置内容不变且没有新增运行数据。
- CLI 定向测试、后端全量
go test -p 1 -count=1 -timeout=3m ./...和go vet -p=1 ./...已通过。使用测试临时目录,没有清空或连接生产数据库。 - 本批实际 Windows 可执行文件的帮助和旧入口退出码已在后续干净发布包中验证;Linux 安装及服务运行仍需独立实机验证。
2026-09-27:CLI 实际产物复核修正
d90ddaa已推送并完成干净工作区双平台构建,产物位于build/release-scope-20260927-d90ddaa/。- 实际 Windows 可执行文件的默认帮助仅显示运维命令;旧
domain add返回退出码 1,没有执行旧业务。 - 实测发现框架先输出英文
Error:,入口随后又输出中文错误,造成重复提示。已设置根命令SilenceErrors=true,由Execute统一输出中文错误;新增无重复输出断言。 - 修正后 CLI 和发布模块定向测试及静态检查通过;最终复核使用修正后的
885478a干净发布包,没有用之前的二进制代替。
2026-09-27:P0-01 范围验收记录
| 验收点 | 当前证据 | 结论 |
|---|---|---|
| 正式范围只有 Web 和服务端 | 根 README、构建/部署说明、当前执行清单和历史范围声明一致;无额外 CI 或发布入口调用 Wails | 本地复核通过 |
| 桌面历史源码保留 | 桌面目录及开发说明仍在;原本机桌面二进制和 dist 未物理删除 | 符合不删除要求 |
| 双平台实际发布包 | build/release-scope-20260927-885478a/;源码 885478a7e0dfc3832cdd094ed388891c41062eb9,source_dirty=false |
构建层通过 |
| 清单及归档一致 | 33 项长度和 SHA256 一致;Windows 解包 9 文件/8 校验项,Linux 22 文件/21 校验项,均无桌面产物 | 构建层通过 |
| Linux 可执行权限 | 归档内 scert、scert-admin、scert-nginx、scert-storage 和安装器均为 0755 |
归档层通过,不代表 Linux 已运行 |
| 实际 CLI 帮助 | 从最终 Windows ZIP 解出的 scert.exe help 返回 0,仅公开运维入口 |
本机执行通过 |
| 实际旧 CLI 拒绝 | domain、server、ssh-key、renew、deploy 均返回 1;仅一条中文错误,无模拟凭据回显,无运行目录创建 |
本机执行通过 |
| 自动化回归 | 最终应用代码通过后端全量测试、全量 vet 和 go mod verify;前端独立克隆 150 项通过,源码未再修改 |
本地自动化通过 |
| 归档测试范围 | Linux 测试改用 scert-storage,不再要求桌面;Windows 测试逐项核查实际平台文件,不再仅判断 Web 入口存在 |
发布模块测试和 vet 通过 |
P0-01 标记 [x] 已完成,等待复审,不标记生产放行。整体 44 项整改未完成:P0-02 执行规格、P0-03 全仓库边界、三数据库实机验证、项目权限、统一任务、备份页面及生产门禁等仍需继续。上述输出均在忽略目录内,没有提交二进制、运行数据或辅助测试脚本。
2026-09-27:P0-02/P0-03 规格与产物边界验收记录
本批从北京时间约 17:40 开始,基线 96883b3;修改前已推送中文检查点 61b8cac。实现提交为 fab98d1069c29729959c031ce6cf112512751017,随后仅更新本批证据与状态。没有 SSH、真实 DNS、生产数据库清理或浏览器操作,也没有删除工作区既有文件、添加临时辅助验收脚本。
| 验证项 | 实际结果 | 边界 |
|---|---|---|
| 44 项执行规格 | P0 12、P1 12、P2 10、P3 10;编号和名称与原始清单一致,每项有 12 个必需字段及独立六阶段 | 规格齐全不代表 44 项功能完成 |
| 结构和引用 | 显式依赖编号、既有文件路径、汇总状态核对通过;拟新增路径明确标注 | 使用只读核对,没有生成辅助脚本 |
| 目录及忽略边界 | 新增发布、证据、测试及辅助目录说明;通用二进制、归档、缓存、补丁、数据库旁路和私钥规则;公共 CA 和迁移仍保留 | 忽略规则不是内容级秘密扫描器 |
| 正式边界回归 | source_boundary_test.go 在隔离 Git 仓库核对根/子目录规则和所有受跟踪路径,屏蔽调用者 Git 配置 |
不依赖 .git/info/exclude,不把已有被跟踪产物自动放过 |
| 后端完整回归 | go test -p 1 -count=1 -timeout=3m ./...、go vet -p=1 ./...、go mod verify 均通过 |
当前 Windows 主机自动化,不是 Linux 平台专用代码实机测试 |
| 边界测试开销 | 改为一次空字节分隔的批量 Git 查询;发布模块完整回归约 2.48 秒,独立克隆约 3.75 秒 | 保持相同路径及索引断言,避免逐文件启动 Git 的约 32 秒开销 |
| 独立克隆 | git clone --no-local --no-hardlinks 到 build/checkout-boundary-20260927-fab98d1/,当前提交及规格齐全 |
不共享源仓库硬链接或专属排除配置 |
| 干净前端安装与测试 | 克隆内 npm.cmd ci --no-audit --no-fund 成功,npm.cmd test 150/150 通过,0 跳过 |
esbuild 安装脚本批准策略警告仍属 P0-04,不自动放行 |
| 双平台候选 | 克隆内正式脚本输出至 release/boundary-20260927-fab98d1/,Web、Windows amd64、Linux amd64 构建和路径检查通过 |
source_dirty=false,范围为 web/server,无桌面产物 |
| 实际清单与解包 | 33 项 manifest 长度/SHA256 一致;Windows 9 文件/8 校验项,Linux 22 文件/21 校验项全部一致,无额外包内文件 | 本批没有将包部署到远端运行 |
| 构建后源码边界 | 独立克隆安装依赖、构建和解包后 git status --short 为空,发布及证据输出由仓库规则忽略 |
没有二进制、归档、数据库、密钥进入本批提交 |
本批将 P0-02、P0-03 标记为 [x] 已完成,等待复审。连同 P0-01,共 3 项处于待复审状态,不标为 [✓]。其余任务及全部生产门禁继续保留,整体整改目标尚未完成。
2026-09-27:P0-04 固定工具链、安装策略与重复构建记录
本批北京时间约 18:12 开始。先核查当前工作区,没有待提交改动;修改前检查点 5fdb5e4,主要实现 410ce75;发现换行差异后检查点 510a854,修复后最终候选为 94237b8e7da37f6242fa115aaf60fef0a88392c2。所有代码提交已推送,后续仅补充本批证据文档。
本批没有 SSH、真实 DNS、浏览器、生产数据库清理或外部数据库连接;只使用正式构建入口和正式回归。没有增加临时辅助验收脚本,没有删除既有发布包和证据目录。npm ci 按正式安装语义重建对应克隆的前端依赖目录。
| 验证项 | 实际证据 | 边界 |
|---|---|---|
| 精确工具链 | 模块内 Go 1.26.6;Node 24.19.0、npm 11.17.0;Vue 3.5.41、Vite 6.4.3、插件 5.2.4 |
不升级依赖图,只固定已有版本并检查声明与锁文件一致 |
| 安装策略 | .npmrc 与正式命令均显式禁用安装脚本;构建包含开发及平台可选依赖 |
esbuild 安装警告不再被误当作脚本未执行的证明 |
| 真实安装正反对照 | 离线本地依赖和根项目的生命周期标记在正式安装下均不出现,主动放行对照能出现;环境尝试关闭限制仍被命令行覆盖 | 使用正式 Node 回归中的隔离夹具,不是对生产服务的攻击测试 |
| 嵌套 npm 回归 | 首次完整测试暴露用户级白名单被 npm 导出后导致项目安装拒绝;修复为仅隔离子进程该变量,随后 175 项全部通过 | 未改用户 npm 配置,未开启脚本绕过错误 |
| 发布前拒绝 | 版本、锁文件、策略、外部 esbuild、Go 覆盖等拒绝回归;实际 PowerShell 入口拒绝后未创建发布目录 | 前端 175 项中含 25 项工具链回归,0 跳过 |
| 换行问题与修复 | 410ce75 在 CRLF 克隆中产生不同 Web 哈希;.gitattributes 固定文本 LF,正式 Go 测试实际签出 true/false/input 三种配置且保护二进制原样 |
没有用终端脚本批量改写中文源码或重写主工作区 |
| 最终候选完整回归 | 94237b8 独立克隆中 go test -p 1 -count=1 -timeout=3m ./...、go vet -p=1 ./...、go mod verify 均通过;前端 175/175 通过 |
PostgreSQL 真实测试未显式启用,跳过的数据库集成门禁不算实机通过 |
| 双独立克隆 | 分别用 core.autocrlf=true/false 与 --no-local --no-hardlinks 创建;两份均按新策略干净安装 |
不共享源仓库硬链接或专属排除配置;构建机和工具缓存相同,不称两台独立机器 |
| 前端重复构建 | 两份克隆输出共 4 个文件,路径与 SHA256 全部一致;5 份依赖/策略输入哈希也全部一致 | 不宣称带时间戳的全部发布归档逐字节一致 |
| 构建机证据 | Windows 11 Home China,系统 10.0.26200,amd64,PowerShell 5.1.26100.9444 |
manifest 不含用户名、主机名或本地绝对路径;Linux 原生构建尚未验证 |
| 最终候选清单 | source_dirty=false,dependency_install=npm-ci,dependency_scripts=disabled;33 项长度和 SHA256 全部正确 |
正式范围仅 Web/服务端,没有桌面产物 |
| 实际解包 | Windows 9 文件/8 条包内校验,Linux 22 文件/21 条包内校验;逐项与 manifest 一致且无额外文件 | 包已解出但未在远端或 Windows Service 中安装运行 |
| 源码边界 | 两份克隆安装、构建和解包后 Git 工作区均干净 | 构建产物及证据没有进入源码提交 |
最终候选与证据路径:
build/checkout-toolchain-lf-20260927/
release/toolchain-94237b8/
artifacts/toolchain-94237b8/
build/checkout-toolchain-lf-control-20260927/frontend/dist/
P0-04 保持 [~] 进行中;代码实现与自动化阶段标 [x],Windows 隔离构建证据已齐,但 Linux 原生构建、双平台实际运行系统及最终复审未齐。不得据此宣称 44 项整改或生产部署验收完成。下一批继续 P0-05 的真实数据库版本、迁移与恢复矩阵;不清空现有共享 MySQL 服务中的业务库。
2026-09-27:P0-05 双版本 MySQL 隔离迁移与编码修复
本批北京时间约 18:39 开始,修改前检查点 fd4929c,代码候选 ee9ac857a9855fd1993deb3b03498ca921a5b559,均已推送。使用本机 MySQL 程序启动全新独立实例,没有连接、停止或清空原有 MySQL57/MySQL80 服务,没有 SSH、DNS、浏览器或生产部署操作;没有新增临时辅助脚本。
首次 MySQL 5.7.44 实测在第 7 号迁移报 1064。实际原因是嵌入 SQL 文件头存在 UTF-8 BOM,原解析器将其直接发给数据库,也使字段重入匹配失败。修复仅在解析入口去掉文件头编码标记,保留 SQL 字面量内部字符;没有批量改写迁移文件和中文。新增两项常规编码回归及正式隔离实库测试。
| 验证项 | 本批结果 | 证据边界 |
|---|---|---|
| MySQL 5.7.44 | ee9ac85:48 项子测试通过,0 失败、0 跳过;包测试约 29.8 秒 |
Windows 本机独立真实数据库,不是远端生产实例 |
| MySQL 8.0.45 | 同候选:48 项子测试通过,0 失败、0 跳过;包测试约 42.8 秒 | 单独初始化与验证,没有以 5.7 代替 8.0 |
| 空库及历史升级 | 0~9 共 10 个起点,重复迁移无报错 | 历史结构由仓库旧迁移构造,不声称覆盖全部历史程序导出的生产库 |
| 迁移中断重入 | 9 份迁移共 29 个语句边界逐一落盘后重入,包括 DDL 全部执行但版本号未写入 | 模拟已落盘的中间状态,不是电源故障或操作系统崩溃演练 |
| 结构和数据 | 每条成功路径的表引擎、字符集、字段、默认值、索引与全新迁移快照一致;中文哨兵和用户、域名、服务器关联保留 | 不替代所有应用业务或权限 API 回归 |
| 连接安全 | 严格 TLS;不可信 CA、错误主机名、明文连接均被对应校验拒绝;业务账户无跨库及账户表权限 | 测试注册的 TLS 信任不等于正式配置、证书轮换及连接 UI 已验收 |
| 异常迁移历史 | 缺首项、缺中间项、零、负数和新版历史全部拒绝,保留数据、不创建业务表 | 不删除迁移记录绕过版本检查 |
| 冷重启 | 正常停止独立数据库,重新启动并重新打开应用连接后,数据和结构一致 | 不等于 Windows Service、systemd 或在线断线恢复验收 |
| 环境收尾 | 所有本测试启动的数据库已正常退出;原服务仍运行,进程号未变;随机监听已关闭,bootstrap 文件为空 | 数据目录和日志留在被忽略的产物目录,未删除既有文件或提交产物 |
| 常规回归 | 同候选 go test -p 1 -count=1 -timeout=3m ./...、go vet -p=1 ./...、go mod verify 全部通过 |
常规测试默认跳过外部实库门禁;MySQL 以本批两份显式运行日志为准,PostgreSQL 未启用;前端未改,本批未重跑前端 |
开发阶段曾在保留旧连接池后重启数据库,首次迁移收到 invalid connection。此项作为在线断线恢复待办保留,没有用自动重试掩盖 SQL 执行结果不确定性。最终冷重启用例明确关闭并重新打开应用连接,不将其算成该待办通过。TLS 反向测试也修正了错误码假设:账户的 REQUIRE SSL 可先返回认证拒绝,测试同时检查全局安全传输开关及严格证书错误类型,没有放宽加密要求。
正式命令在 backend/ 执行,设置各版本独立的 SCERT_MYSQL_TEST_BIN 和共用产物根 SCERT_MYSQL_TEST_ROOT,然后运行 go test -count=1 -v -timeout=8m -run '^TestMySQLRealMigrations$' ./internal/database。每次运行自行新建数据目录与随机端口,完整参数见《构建版本与数据库支持矩阵.md》。最终非跳过日志:
artifacts/mysql-matrix-20260927/mysql57-ee9ac85.log
artifacts/mysql-matrix-20260927/mysql80-ee9ac85.log
P0-05 从 [!] 调整为 [~],并未标记完成;P0-04 剩余门禁和全部 44 项原始范围保持不变。下一步需继续处理在线数据库连接恢复、MySQL 备份恢复及完整业务初始化,再补 PostgreSQL 当前候选和 SQLite 并发锁证据。
2026-09-27:P0-05 Windows MySQL 在线连接恢复
整改前检查点 f0a9475;实现候选 9cf3a3b。新增正式 Go 回归首先在未修复代码的 MySQL 5.7.44 重现:保留应用池、重启独立数据库后,第一条业务写入返回 invalid connection。没有用额外健康请求、重开应用池或业务重试绕过问题。
[x]根因与修复:Windows 驱动空闲检查缺位;在业务发送前增加单次最多 2 秒的复用探测,失败淘汰连接。Linux 不增加额外往返;查询、写入及提交错误保持原样。[x]安全边界单测:探测截止时间、取消、失败关闭、仅在写入前替换连接,以及查询、写入、提交不确定时不自动重放。[x]双版本隔离实库:每个版本原有 48 项迁移及安全测试,加 7 项连接恢复、预编译、参数转换和事务测试,合计 55 项通过,0 失败、0 跳过。[x]后端回归:go test -p 1 -count=1 -timeout=3m ./...、go vet -p=1 ./...、go mod verify通过;Linux 数据库测试包交叉编译通过。本批没有改前端,未重跑前端测试。[ ]尚缺:Linux 实库恢复、真实网络提交确认丢失演练、MySQL CLI 备份恢复、正式 Web 初始化和业务回归;不能用上述测试替代服务部署验收。
实现、命令、行为成本及更完整的覆盖边界见《构建版本与数据库支持矩阵.md》第六节。最终日志位于 artifacts/mysql-matrix-20260927/mysql57-9cf3a3b.log、mysql80-9cf3a3b.log,测试产物不提交。共享 MySQL 服务不在测试操作范围。
本批只关闭 Windows 隔离环境中已复现的首次请求故障,不把 P0-05 或全部 44 项标记完成。下一批继续 MySQL 备份恢复的实库一致性与失败回滚门禁。
2026-09-27:P0-05 MySQL 基本备份恢复与指定失败回滚
共享夹具重构 07429ad 已通过双版本原有 55 项回归;本批修改前检查点 ac205e2,产品修复及正式测试候选 7bfd400。
[x]修复前实证:MySQL 5.7.44 禁用空闲连接时,跨语句会话变量丢失,恢复返回 1048;DECIMAL 被导出为十六进制字面量,基本恢复返回 1264。两者都先由正式 Go 测试复现。[x]修复:恢复全过程使用同一连接,出错即返回,不通过换连接重放;根据列类型将 DECIMAL 保存为精确文本,二进制数据仍用十六进制字面量,不经浮点转换。[x]新增 10 项双版本实库子测试:固定会话;两种空闲连接配置下的基本恢复、出错停止、提前取消;同进程正式备份恢复命令成功、SQL 导入失败、证书恢复失败。验证中文与特殊字符、二进制、DECIMAL、NULL、微秒时间、自增、外键,以及数据库、配置、加密凭据和证书文件的恢复或回滚。[x]候选最终复测:5.7.44、8.0.45 各 65 项子测试通过,0 失败、0 跳过;8 个本批实例已退出,端口关闭,初始化口令文件清空,共享 MySQL 进程不变。[x]后端全量go test -count=1 ./...、go vet ./...、go mod verify通过;Linux CLI 测试包交叉编译通过,未执行 Linux 实库。前端未修改,未重跑。[ ]下一步:MySQL 并发写入下一致性快照、视图/触发器/生成列等对象完整性、官方工具互操作、独立发行命令及真实网络故障验证。历史 DECIMAL 备份没有自动修复,不能把新备份的回归结果用于旧档案。
正式测试和 JSON 证据命令见《构建版本与数据库支持矩阵.md》第七节;产物位于 artifacts/mysql-restore-session-20260927/,不提交。测试只创建独立 loopback 实例,未清理共享数据库,也没有新增辅助脚本。P0-05 仍为 [~],44 项目标保持原范围。
2026-09-27:P0-05 MySQL 跨表快照与备份失败边界
跨表快照修复 8d742fe 已提交并通过双版本回归。本批约 19:48 开始,修改前检查点 79d7042,产品与测试候选 73df576,均已推送。
[x]跨表快照:两种空闲连接配置下,用第二张表的真实写锁控制并发边界;修复前备份恢复出从未真实存在的(0,1),修复后恢复为同一快照的(0,0)。所有 InnoDB 表共享只读可重复读事务。[x]取消故障实证:首表已导出、第二张表等待元数据锁时取消,原实现返回取消错误后,首表 DDL 仍超过 5 秒被阻塞;两种目标文件状态均复现。修复为备份专用会话设置 5 秒的单次元数据锁等待上限,不修改数据库全局配置。[x]新增 10 项实库用例:拒绝 MyISAM/视图;中途取消、SQL 中断、锁超时各覆盖目标文件不存在与已存在;临时文件冲突;发布重命名失败。检查错误类别、不发布残缺备份、保留既有文件、清理本次临时文件及失败后释放首表元数据锁。[x]最终候选复测:Windows MySQL 5.7.44、8.0.45 各 77 项子测试通过,0 失败、0 跳过。全量后端测试、go vet ./...、go mod verify通过;Linux CLI 测试包交叉编译通过,未在 Linux 运行。前端未修改,未重跑。[x]收尾:本批目录中 18 个隔离实例均退出,已记录端口无监听,初始化口令文件为空;共享 MySQL 进程保持不变。测试数据、随机测试密钥及日志仅留在忽略目录,不提交。[ ]后续:对象完整性、官方工具互操作、独立发行命令、Linux 实库与正式业务初始化;继续 PostgreSQL、SQLite 剩余矩阵及全部 44 项整改。
证据为 artifacts/mysql-backup-boundaries-20260927/mysql57-73df576.jsonl 和 mysql80-73df576.jsonl;命令和限制见《构建版本与数据库支持矩阵.md》第八节。这里验证的是指定锁等待和文件失败场景,不宣称任意查询取消都立即释放服务器资源,也不把临时拒绝视图等对象视为完整支持。P0-05 继续标记 [~],不作生产放行。
2026-09-27:P0-05 特殊列互操作与官方存储对象恢复
待提交代码审查已完成:f260b22 保留并修复 4 个有价值的源码和正式测试文件,无无用待提交文件被删除。本轮约 20:19 开始,检查点 6707059,恢复修复与正式测试候选 e6e6719,均已推送。
[x]特殊列:生成列不再写入计算结果,不可见列的非默认实际值不再遗漏,仅生成列表保留行数;修复扫描越界,用真实结构元数据比较,双版本官方工具双向验证通过。[x]存储对象恢复:先由真实官方导出文件复现 1064,再实现DELIMITER客户端拆句;保留复合语句、字符串和可执行版本注释,拒绝词法格式错误的部分执行。[x]正式对象用例:核对两个触发器的顺序与执行结果,核对过程、函数的定义、参数、权限上下文与实际调用,核对禁用事件的元数据并在独立实例显式启用后验证实际调度;源库没有被目标事件修改。[x]失败边界:不足权限返回数据库原始错误,不提升权限或继续后续例程;格式错误预检阻止此前建表语句执行。没有降低 TLS,也没有启用函数信任开关。[x]最终回归:MySQL 5.7.44、8.0.45 分别 85、87 个叶子用例通过,0 失败、0 跳过。后端全量测试、vet、模块校验通过;Linux 测试包仅交叉编译,前端未修改。[x]收尾:本批 22 个隔离实例退出,测试端口无监听,初始化口令文件为空;共享 MySQL 进程不变,产物没有提交。[ ]后续:自有导出对触发器、例程、事件、视图的完整性及有效权限检查;更多 SQL 模式、跨账户定义者、跨库引用和已启用事件恢复期间的调度隔离;独立发行 CLI、Linux 实库、PostgreSQL、SQLite 与正式业务部署。
证据:artifacts/mysql-pending-review-20260927/review-mysql57.jsonl、review-mysql80.jsonl;本轮为 artifacts/mysql-stored-programs-20260927/mysql57-review.jsonl、mysql80-review.jsonl。权限、官方工具选项、SQL 模式差异和准确计数口径见支持矩阵第九、十节。
已重新核对原始需求及执行清单,44 个任务编号全部保留。P0-05 仍为 [~],没有把某个导入方向通过等同于完整备份恢复或生产放行。
2026-09-27:P0-05 自有触发器备份、权限及文档进度同步
修改前检查点 d7f6ac1;实现与正式测试 3f6d5b8 已提交推送。本批从 20:42 开始,最终双版本复测于 21:45 结束,中间包含非持续执行时间,不把墙钟间隔当成测试耗时。
[x]实库复现:自有备份遗漏触发器;无TRIGGER权限时对象被隐藏,旧实现仍报告成功并覆盖已有备份。[x]导出修复:保存原始触发器定义和定义者,按真实执行顺序导出;保留 SQL 模式、字符集和排序规则,先恢复表数据再创建触发器。[x]权限预检:覆盖全局、库级、表级、精确授权遮蔽、启用及嵌套角色、未启用角色、动态权限与部分撤销。无可证明权限时失败并保留旧备份;歧义通配组合仍保守失败,后续需完善。[x]正式验证:Scert 与官方客户端分别恢复四个触发器,比较元数据并实际执行;覆盖名称与执行顺序相反、审计副作用、Latin-1 正文、分隔符冲突和创建时不同数据库排序规则。[x]最终专项:Windows MySQL 5.7.44 / 8.0.45 分别通过 97 / 104 个叶子用例,0 失败、0 跳过;后端全量测试、vet、模块校验通过;Linux 仅交叉编译。前端未修改、未重测。[x]测试收尾:累计 51 个独立实例退出,记录的测试端口无监听,初始化口令文件为空;共享 MySQL 进程未动。测试数据、随机密钥、日志和二进制不提交。[x]文档进度同步:原始清单只更新状态和进度说明,不修改需求与验收标准;执行清单、基础规格、支持矩阵、历史开发清单、审查记录和生产运维说明同步指向本批证据。[ ]后续:例程、事件、视图、完整对象清单权限、其他 SQL 模式、复杂授权组合、定义者迁移、独立发行命令、Linux 实库、PostgreSQL、SQLite 及正式业务部署。
证据目录:artifacts/mysql-native-triggers-20260927/,最终结果为 mysql57-final.jsonl、mysql80-final.jsonl;详见支持矩阵第十一节。全部 44 项范围不变,P0-05 保持 [~],本批不作生产放行。
2026-09-27:P0-05 自有存储过程与函数备份
实现前检查点 db7d132、未完成实现保存点 c4051c9 已推送。本批在保存点上修复 5.7 Latin-1 注释乱码,接续触发器子任务,全部 44 项和原验收标准不变。
[x]在独立 MySQL 5.7 实例复现例程遗漏,以及权限不足时仍成功覆盖原备份;复现证据为artifacts/mysql-native-routines-20260927/mysql57-before.jsonl。[x]增加原始例程定义导出、同名替换、创建元数据与编码保留;复用触发器的存储对象读写逻辑,先恢复数据和例程,再创建触发器。[x]增加完整例程可见权限检查;5.7 检查mysql.proc完整读取权限,8.0 检查有效SHOW_ROUTINE或全局SELECT,拒绝把隐藏对象当作不存在。[x]修复 5.7 注释双重编码,保留 8.0 声明头处理;增加字符集往返检查和错误上下文,五种无效元数据均明确拒绝且不写回部分转换结果。[x]正式回归覆盖两种恢复入口、重复恢复、输入输出参数、Latin-1 名称/注释/正文、元数据一致性、角色和部分撤销。最终 Windows 5.7.44 / 8.0.45 全专项分别通过 110 / 121 个叶子用例,0 失败、0 跳过;对应含父项记录为 125 / 136。[x]后端全量回归、vet、模块校验和 Linux CLI 测试包交叉编译通过;常规回归有 32 个条件测试跳过,不替代实库证据。前端未修改、未重测。[x]专项目录累计 90 个独立实例退出、167 个记录端口无监听、90 份初始化口令文件为空,共享 MySQL 进程未动;测试产物均不提交。[x]支持矩阵第十二节、基础规格、原始清单进度说明、历史开发清单、审查记录和生产运维说明同步更新;最终证据为artifacts/mysql-native-routines-20260927/mysql57-verified.jsonl、mysql80-verified.jsonl。[ ]事件、视图、完整表清单权限、其他 SQL 模式及剩余数据库/平台/生产门禁继续整改。
2026-09-27:P0-05 自有事件备份与恢复安全
[x]原始事件定义、定义者、计划、时区、启停状态及创建会话属性导出;数据、例程、触发器和外键检查先于事件恢复。[x]全局、库级、角色、部分撤销和授权遮蔽的 EVENT 可见权限检查;无权限空库也明确拒绝。[x]恢复前检查 PROCESS 权限、工作线程及调度状态;产品不修改全局调度器、不终止线程、不自动扩权。维护窗口仍由管理员保证。[x]Latin-1 事件名称与注释编码、无效元数据、已到期事件及恢复警告保护;失败保留既有备份。[x]修正旧触发器测试精确授权漏 EVENT,以及官方存储对象测试只等第一条事件更新的竞态,不放宽产品校验或原有业务断言。[x]最终源码3625e8b:Windows MySQL 5.7.44 / 8.0.45 完整专项分别 139 / 155 个叶子用例通过,含父项记录为 159 / 175,0 失败、0 跳过;后端无缓存全量测试、vet、模块校验通过。[x]最终证据为artifacts/mysql-native-events-20260927/mysql57-commit-final.jsonl、mysql80-commit-final.jsonl;对应测试端口无监听,初始化口令文件均为空,三个共享 MySQL 进程未动。源码、正式 Go 测试和运维文档已提交推送,产物不提交。[x]支持矩阵第十三节及关联任务文档同步进度;Windows 隔离证据不替代 Linux 实库或生产放行,全部 44 项范围不变。[~]下一子任务:视图自有备份与恢复,先复现现状并核对依赖、定义者、字符集、权限与官方工具互操作。[ ]完整表清单、其他编码/SQL 模式、跨库和跨服务器定义者、独立发行 CLI、Linux 实库及其余三库/业务/生产门禁继续保留。
P0-05 视图、完整清单与提交复核(源码 777c716)
[x]原始视图定义、创建字符集及排序规则导出;仅对本库视图依赖排序,反向删除、正向创建,不创建占位表或删除同名基础表。[x]先证明库级或全局 SELECT,防止把权限过滤后的表/视图清单当成完整备份;逐视图检查有效 SHOW VIEW,覆盖角色、部分撤销及授权遮蔽。[x]原始官方嵌套 CHECK OPTION 夹具在官方客户端复现 1368;Scert 对连续且闭合的最终视图块按依赖排序,原文件 SHA256 不变,并独立验证成功恢复。[x]补充复杂查询、宽视图、失效视图、目标同名基础表、无效计划及会话上下文保护;不跨业务语句重排,不承诺任意 SQL 或全局 DDL 原子回滚。[x]修正视图、事件、触发器测试的 SELECT 前提;例程测试分开验证定义可见与完整清单可读,仍检查拒绝时原备份不变,并验证补足读取权限后成功导出。[x]原 15 个待提交文件均为正式实现或测试,另修正 3 个旧测试;分为d95ecfa、777c716提交并推送。没有删除文件,没有提交产物、密钥或数据库。[x]5.7 / 8.0 完整专项分别 176 / 202 个叶子用例通过,常规后端、vet、模块校验和 Linux 测试包交叉编译通过;证据、失败历史与收尾结果见支持矩阵第十四节。[x]本批同步原始清单、开发清单、审查记录、分级规格、支持矩阵及运维说明;上述事件段的剩余项为当时记录,当前视图和完整清单进展以本节为准。[~]下一子任务:SQLite 文件库的多连接/多实例并发、写锁等待与取消、事务回滚及重连后的会话配置;先核对现有实现,再复现实际缺口。[ ]MySQL 其他编码/SQL 模式、跨服务器定义者、并发 DDL/授权变化、独立发行 CLI、Linux 实库、PostgreSQL 当前复测和生产门禁。全部 44 项及 P0-05 总状态不变。
P0-05 SQLite 连接池、并发与锁(源码 af831ae)
本节保留上一批执行记录;当前恢复进展补充在下节及支持矩阵第十六节,不将历史待办误认为本批已完成。
[x]修改前检查点6cab85d已推送;正式回归先复现扩容、零空闲连接、连接替换和 DSN 参数四类忙等待丢失,保留失败日志。[x]每条物理连接入池前配置默认 5000 毫秒忙等待和 WAL;失败关闭连接,不依赖初始化时恰好选中的连接。[x]为带截止时间的执行、查询、预处理、事务启动及逐行读取缩短等待预算,结束后恢复;状态不确定时淘汰连接,不重放业务 SQL,不把执行后清理错误转成自动重试信号。[x]真实文件库验证读写隔离、读事务快照、双连接池 200 次并发写入、三子进程就绪后释放写锁并完成 150 次写入、事务回滚及关闭后重新打开。[x]活动 WAL 下的未提交/已提交两类快照内容及完整性验证通过;已有 CLI 备份恢复回归继续通过,不等同于独立发行命令或生产恢复验收。[x]Windows SQLite 3.49.1 专项与竞态检测各 42 个叶子用例通过,0 失败、0 跳过;26 个核心用例重复 10 次通过;后端全量、vet、模块校验和 Linux 测试包交叉编译通过,详见支持矩阵第十五节。[~]无截止时间的手动取消仍可能等待原生忙等待结束(本批约 5 秒);继续核查取消边界、完整业务升级恢复和真实服务重启,不将现状记录测试算作缺口已经修复。[ ]Linux 原生运行、独立发行 CLI、PostgreSQL 当前实库复测、MySQL 剩余项及双平台生产门禁;P0-05 和全部 44 项总范围不变。
P0-05 SQLite 异常退出及业务恢复(源码 6db5d7b)
本节为上一批记录,当前历史模式升级及独立 Windows 程序证据见下节;未完成项按当前证据区分,不覆盖历史结果。
[x]修改前检查点5e5abf2已推送;子进程提交 WAL 后不关闭数据库直接退出,复现恢复返回成功但数据仍为旧值,保留wal-before.jsonl。[x]服务维护锁内由 SQLite 合并日志并切换到 DELETE 模式,关闭连接后确认 WAL/SHM/回滚日志不存在;占用、孤立日志及非普通路径均拒绝恢复,不手动删除日志。[x]成功恢复和证书资产失败回滚均核对原有已提交 WAL 数据进入恢复前快照;不再依赖残留 WAL 偶然恢复原数据。[x]通过正式备份/恢复命令处理器验证当前全部业务表及模式、迁移记录、自增序列、资源关联、用户密码和分组、DNS 归属、加密凭据、真实证书/私钥与重复恢复。[x]SQLite 专项 55 个叶子用例、恢复专项 13 个用例连续 5 次竞态检测通过;后端全量 1368 条叶子通过记录,0 失败、43 项条件跳过,vet/模块校验及 Linux CLI 测试包交叉编译通过。[ ]带历史业务数据的跨版本升级、独立发行二进制命令、真实服务重启、Linux 原生运行、断电/磁盘故障、取消边界及其余数据库/平台与生产门禁;本批不调用外部 DNS、SSH 或邮件服务,全部 44 项范围不变。
P0-05 SQLite 历史模式升级及独立程序(源码 fd2810b)
[x]修改前检查点0e16d28已推送;模式 1、2、3 写入历史任务后均复现迁移 4 失败,保留upgrade-before.jsonl。[x]固定物理连接,在同一事务内重建任务表并记录版本;保留原始业务列、行号、索引、依赖视图和触发器,外键检查通过后提交,恢复连接原外键设置。[x]模式 1~9 的代表性数据升级及重复执行;外键开关、生成列、级联关联、依赖对象、版本记录失败、临时名称冲突和外键冲突后的回滚重试均通过。[x]干净提交构建的独立scert.exe实际执行历史模式 3 备份、正式应用入口升级、旧备份恢复后再升级,以及升级后备份恢复;核对完整表/模式、资源绑定、用户密码、加密凭据及证书。[x]SQLite 专项 71 个叶子用例,27 个升级/恢复用例连续 3 次竞态检测;后端全量、静态/模块检查和 Linux 测试包交叉编译通过,证据见支持矩阵第十七节。[ ]旧发行包产生的实际历史数据与配置升级、完整发行包安装、真实服务重启、Linux 原生执行、取消边界及其余数据库/平台和生产门禁。历史模式由现有迁移文件构造,不冒充旧发行二进制运行证据;全部 44 项范围不变。
本轮开发进度(2026-09-29 17:50)
按总体验收口径,当前仍为 P0-03 完成待复审;本轮只推进 P0-07 的项目审计读取权限,未将局部开发或自动化测试标记为复审通过。
- 审计日志路由改为登录后的项目资源路由,不再依赖全局管理员路由作为唯一入口。
- 新增项目审计读取仓储,在 SQL 查询中按实时账户状态、全局角色、项目成员角色和日志范围过滤。
- 普通项目成员仅可读取其拥有 `audit.read 能力项目的项目审计;不能读取其他项目或系统范围日志。
- 超级管理员和全局管理员保留系统审计读取能力;账户停用后不再返回日志。
- 新增撤权立即生效、跨项目隔离和全局管理员范围回归测试。
- 已通过 go test ./... 和 go vet ./...;这只证明本地自动化验证通过,不代表生产部署验收通过。
- [~] 任务读取、任务取消/重试、证书签发/导入/部署、DNS、SSH 及其他资源写入的完整项目权限链仍待开发。
- [!] PostgreSQL/MySQL 矩阵、浏览器、Linux/Windows 服务、远端 SSH、HTTPS/DNS/ACME 和生产验收仍未执行。
下一步:继续补齐任务与证书/部署权限链,完成开发阶段后再统一运行三库、浏览器和远端生产流程测试。
???????2026-09-29 18:38?
???????????? P0-03 ???????????? P0-07??????????????????????
- ??????????????????????????????????????
- ??????
certificate.manage???????certificate.private_key.read?????????deployment.execute?????????deployment.rollback? - ????????????????? HTTP ?????
go test ./internal/httpapi???? - [~] ????SSH ???DNS?????????????????????????????? SSH?HTTPS/DNS/ACME ????????????
本轮开发进度(2026-09-29 18:57)
按总体验收口径,当前仍为 P0-03 完成待复审;本轮仅推进 P0-07 项目资源权限开发,局部测试通过不代表生产部署验收通过。
[x]服务器新增、修改、删除接口已纳入认证后的项目资源路由。[x]服务器写入前按真实项目成员关系校验server.manage,更新和删除先读取当前账户可见的服务器。[x]已补充无项目权限新增、修改、删除服务器的拒绝回归测试,确认拒绝后原资源不变。[x]本批代码已提交并推送:服务器权限隔离提交747e897,拒绝回归测试提交fbb516e。[x]go test ./...、go vet ./...及 HTTP API 专项测试通过。[~]SSH 私钥归属与服务器引用隔离、DNS 账户项目使用权限、续期及其他任务写入权限仍在开发。[!]PostgreSQL/MySQL 矩阵、浏览器验收、Linux/Windows 生产部署、远端 SSH、HTTPS/DNS/ACME 和odacm.cn实机验收尚未执行。
下一步继续开发剩余资源权限链,完成开发阶段后再统一执行三数据库、浏览器、远端部署和生产流程测试。
本轮开发进度(2026-09-29 19:06)
总体验收位置继续保持 P0-03 完成待复审。本轮完成 P0-07 的 SSH 私钥项目归属开发,但尚未进行三数据库、浏览器、远端服务器或生产流程验收。
[x]SSH 私钥加密载荷和安全元数据记录项目归属;历史未记录归属的私钥兼容归入默认项目。[x]服务器新增、修改时按服务器项目校验 SSH 私钥引用,跨项目引用被拒绝。[x]自动生成的服务器 SSH 密钥写入服务器所属项目。[x]SSH 私钥列表、新增、删除接口按项目归属和server.manage权限过滤与校验。[x]已补充 SSH 私钥服务项目隔离专项测试;本批提交56c88c3已提交并推送。[~]DNS 账户项目归属与使用权限、续期任务及其他任务/资源写入权限仍在开发。[!]PostgreSQL/MySQL 矩阵、浏览器验收、Linux/Windows 生产部署、远端 SSH、HTTPS/DNS/ACME 和odacm.cn实机验收尚未执行。
下一步继续开发 DNS 账户及任务相关权限链,开发阶段结束后统一执行生产构建、部署和验收流程。
本轮执行状态(2026-09-29 19:30)
- 总体验收位置:P0-03 完成待复审。
- P0-07 DNS 项目权限批次: DNS 账户项目归属、凭据使用权限、项目归属修改授权和前端项目归属展示已完成,等待复审。
- 自动化验证: 后端 HTTP API/配置专项通过,前端 230 项测试通过,前端生产构建通过;这些结果不等同于生产部署验收。
- 仍在开发: 续期任务、证书导入/部署、任务执行/重试及其他资源写入的完整实时授权和拒绝副作用验证。
- 尚未执行: PostgreSQL/MySQL 矩阵、浏览器清缓存验收、远端密码 SSH、HTTPS/DNS/ACME 和生产部署流程。
本轮开发进度(2026-09-29 19:50)
按用户要求,总体验收位置继续保持 P0-03 完成待复审;本轮完成“域名与服务器多对多部署关联”开发,不将本地测试结果视为生产验收通过。
[x]保留并验证域名绑定多台服务器的事务模型,单次替换只影响当前域名,不覆盖其他域名的服务器关联。[x]新增服务器反向读取关联域名的项目资源接口:GET /api/v1/servers/:id/domains。[x]服务器关联域名读取按实时账户状态、项目成员权限、服务器项目和域名项目同时过滤,未知或越权资源统一拒绝。[x]管理页面在服务器卡片展示当前托管的全部域名,解绑一个域名时不影响同服务器的其他域名。[x]新增多对多反向关联回归测试;后端go test ./...、go vet ./...、前端 230 项测试和前端生产构建通过。[~]P0-07 其他任务执行、证书部署、续期、审计完整覆盖及跨数据库矩阵仍待继续开发或复审。[!]浏览器清缓存验收、远端密码 SSH、HTTPS/DNS/ACME、Linux/Windows 服务和生产部署验收仍未执行。
下一步:继续完成开发阶段剩余权限与部署闭环,之后统一按生产流程编译、部署和测试;验收位置仍以 P0-03 为准。
最新进度追加(2026 年 9 月 29 日)
- 已完成失败证书任务重试开发:支持 failed、cancelled 两种状态,拒绝成功、排队、运行中及非证书申请任务重试。
- 已完成 task.retry 权限、项目可见任务读取、证书管理、部署执行和 DNS 凭据使用的重试前复核;事务内防止并发重复重试。
- 已完成后端全量测试与静态检查、前端 230 项测试、生产构建及差异检查。
- 已提交 35260bc、aa587d3,最后一次远程推送成功。
- [~] P0-07 继续进行;待完成三数据库矩阵、浏览器、SSH/HTTPS、远端部署和生产门禁。
- [!] 总体验收仍停在 P0-03 完成,待复审,不能将局部测试结果写成生产验收通过。
本轮开发进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审,本轮仅推进 P0-07 的同步证书申请权限闭环,不将局部自动化测试结果视为生产部署验收通过。
[x]无任务仓储的同步证书申请路径已补齐项目资源可见性、certificate.manage、deployment.execute与 DNS 凭据使用权限校验。[x]已补充项目证书权限不足、DNS 凭据使用权限不足及权限拒绝后不调用证书工作流的回归测试。[x]当前候选后端go test ./...、go vet ./...通过;该结果仅代表本地自动化验证,不代表三数据库、浏览器、远端服务器或生产部署验收通过。[~]P0-07 其他资源写入权限、三数据库矩阵、浏览器清缓存验收、密码 SSH、远端部署及 Linux/Windows 生产服务仍需继续开发或复审。[!]总体验收不得升级,P0-03 仍为“完成,待复审”。
下一步继续执行前端回归与生产构建,再提交并推送本轮测试代码;完成开发阶段后,统一进行三数据库、浏览器、远端服务器和生产部署测试。
本轮开发进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮继续推进 P0-07 项目任务权限闭环,不将局部测试结果视为生产部署验收通过。
- 项目任务取消入口新增
task.cancel实时项目权限校验,权限拒绝时不会调用取消写入,也不会改变任务状态。 - 已补充缺少任务取消权限的 HTTP 回归测试;任务取消、工作流任务保护及成功证书任务回归测试通过。
- 已确认域名与服务器多对多部署关联仍按既有事务模型工作:一个域名可绑定多个服务器,一个服务器可关联多个域名,解绑单个域名不影响其他关联。
- [~] P0-07 仍需继续补齐续期、证书导入/部署、其他任务写入权限及三数据库矩阵。
- [!] 浏览器清缓存验收、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和生产部署验收尚未执行。
下一步继续完成开发阶段剩余权限闭环,再统一执行生产构建、部署和验收;总体验收位置仍以 P0-03 为准。
本轮开发进度(2026-09-29,续)
总体验收位置继续保持 P0-03:完成,待复审;本轮完成手动批量续期入口的全局权限收紧,不将局部权限测试结果视为生产部署验收通过。
- 手动批量续期接口
/api/v1/renewal/run改为仅超级管理员可执行,普通管理员请求在进入续期工作流前返回 403。 - 已补充普通管理员不得触发续期工作流的 HTTP 回归测试;续期成功、错误脱敏及权限拒绝专项测试通过。
- 已复核服务器新增、修改、删除及域名—服务器多对多绑定:均按项目归属和写权限判定,绑定事务继续校验同项目、路径冲突和失败审计。
- 已复核单域名证书导入、部署、恢复、同步申请以及任务申请、重试、取消的项目权限链路;任务取消和手动批量续期的本轮缺口已补齐。
- [~] P0-07 仍需继续完成三数据库生产矩阵、浏览器清缓存验收、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务及最终生产门禁。
- [!] 总体验收不得升级,P0-03 仍为“完成,待复审”。
下一步完成开发阶段剩余非权限项后,再统一执行生产构建、部署和实机验收。
本轮开发进度(2026-09-29,续)
总体验收位置继续保持 P0-03:完成,待复审;本轮完成全局系统设置与 DNS 管理权限收紧,不将局部自动化测试结果视为生产部署验收通过。
- 普通管理员保留系统设置、DNS 服务商目录和 DNS 账户归属信息的读取能力。
- 系统设置修改、DNS API 在线测试和阿里云 DNS 权限检查统一限制为超级管理员。
- 前端普通管理员进入系统设置时改为只读,并隐藏全局续期执行按钮;后端继续保留权限拒绝保护。
- 新增后端全局配置权限回归测试和前端普通管理员操作保护测试;前端 230 项定向测试通过,DNS、设置和续期定向后端测试通过。
- [~] P0-07 仍需继续完成三数据库生产矩阵、浏览器清缓存验收、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务及最终生产门禁。
- [!] 总体验收不得升级,P0-03 仍为“完成,待复审”。
下一步继续审查剩余资源权限联动,开发阶段完成后统一执行生产构建、部署和实机验收。
22:44 统一回归进度(2026 年 9 月 29 日)
- 前端全量回归
npm.cmd test -- --runInBand:231 项通过,0 失败。 - 后端全量回归
go test ./...:通过;go vet ./...:通过。 - 前端生产构建
npm.cmd run build:通过;本轮权限回归测试会话已修正并提交853a7cd、93a190f。 - [~] P0-07 仍需三数据库矩阵、浏览器清缓存、密码 SSH、远端部署及生产矩阵验证。
- [!] 总体验收位置继续保持 P0-03 完成待复审,本轮自动化回归通过不等于生产部署验收通过。
本轮开发进度(2026-09-29 23:21)
[x]P0-08 已完成敏感凭据禁用/启用、元数据状态返回、主密钥缺失保护和主密钥轮换;轮换失败时保留旧主密钥恢复路径。[x]已补充凭据生命周期、主密钥缺失和主密钥轮换后的重新打开读取测试;go test ./...与go vet ./...通过。[x]本轮代码已提交并推送:bac67b6。[~]P0-09 继续核对 SSH 主机指纹、密码登录后公钥部署及私钥回连验证;人工更新指纹审计和实机密码 SSH 验证仍待完成。[~]P0-10、P0-12 仍待继续开发审查和统一回归。[!]总体验收位置保持 P0-03 完成,待复审;本轮本地自动化测试通过不构成生产部署验收通过。
本轮开发进度(2026-09-29 23:58)
- P0-10 补齐任务状态模型:支持
partial_success、retry_wait、cancelling状态,任务更新、取消、重试等待、活动任务互斥和服务重启恢复均纳入统一状态范围。 - 批量部署一成一败时,HTTP 任务、任务尝试和审计记录统一保存为
partial_success,新增对应回归测试。 - 已通过
go test ./internal/repository ./internal/app ./internal/httpapi、go vet ./...和git diff --check。 - 本轮代码已提交本地提交
c9a82e6;已按要求尝试推送,但远程返回Authentication failed,因此不把远程推送结果作为验收依据。 - [~] P0-09、P0-10、P0-12 仍需继续开发审查;三数据库、浏览器清缓存、密码 SSH、远端部署和生产矩阵尚未统一执行。
- [!] 总体验收位置继续保持 P0-03 完成,待复审;本轮代码开发和自动化测试不构成生产部署验收通过。
进度追加(2026-09-29,本批结果)
本节追加本批实际结果;此前摘要中同一子项的“进行中/待验证”为历史状态,以本节为准。总体验收位置仍为 P0-03 完成,待复审,没有新增复审通过项。
本批需求确认:补齐活动任务对域名删除的保护,更新清单证据;继续先开发、后统一测试,不启动生产验收。
- 已完成,等待复审:P0-10 域名删除保护覆盖申请、校验、部署、导入、恢复任务的
queued、running、retry_wait、cancelling状态。 - 已完成,等待复审:新增 SQLite 仓储回归,验证部署任务处于
retry_wait、cancelling时返回域名忙错误;改为partial_success后不再阻止合法删除。保留原有运行中申请任务保护和审计失败回滚用例。 - 已完成,等待复审:本批仓储专项测试通过;接续的
go test ./...全量测试会话已确认退出码为 0;提交前差异检查通过。以上仅为本地自动化证据,不代表三数据库实库或生产验收。 - 已完成,等待复审:代码已提交并推送
96c8f44(完善活动任务删除保护),本批未进行远端部署、运行数据库清理或浏览器测试。 - 未开始:补全五种证书任务类型与四种活动状态的组合覆盖,以及拒绝删除时关联和审计不变的专项断言;本批新增用例未覆盖全部组合。
- 未开始:补全
failed、cancelled终态的专项删除用例;不得将本批success、partial_success路径外推为所有终态均已验证。 - [~] 进行中:P0-10 其余长任务取消、重试、幂等、崩溃恢复及 P0-12 备份恢复仍需继续整改,不标记整项完成。
- 未开始:开发收尾后,统一执行当前候选的生产构建、SQLite/PostgreSQL/MySQL 矩阵、浏览器清缓存、密码 SSH、远端部署和平台服务验收。
下一步优先补齐上述开发缺口和测试用例,再推进剩余任务链;原始整改范围不缩减,总体验收不得因本批测试通过而升级。
本轮开发进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅推进 P0-10 域名删除保护矩阵,不将专项测试结果视为整项复审或生产部署验收通过。
- 已完成,等待复审:域名删除保护已覆盖
certificate_issue、certificate_validate、certificate_deploy、certificate_import、certificate_restore五类证书任务,以及queued、running、retry_wait、cancelling四种活动状态。 - 已完成,等待复审:每个活动状态拒绝删除时,回归测试确认域名仍存在、当前域名与服务器关联仍存在;共享同一服务器的其他域名和服务器本身不受影响。
- 已完成,等待复审:补充
success、failed、cancelled、partial_success终态场景,确认活动任务清空后可以合法删除目标域名,并保留其他域名及服务器关联。 - 已完成,等待复审:
go test ./internal/repository与后端全量go test ./...均通过,git diff --check通过。 - 已完成,等待复审:本轮代码已提交并推送
14d5e53(补齐活动任务删除保护矩阵测试)。 - [~] 进行中:P0-10 其他长任务取消、重试、幂等、崩溃恢复及任务尝试记录仍需继续审查,不能因本批通过而关闭整项。
- 未开始:P0-12 备份恢复、三数据库生产矩阵、浏览器清缓存、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和最终生产门禁。
- [!] 总体验收不得升级:仍处于 P0-03 完成,待复审,当前没有新增
[✓]复审通过项。
下一步继续审查 P0-10 剩余任务执行链和 P0-12 备份恢复;开发阶段完成后,再统一执行生产构建、部署和实机验收。
本轮开发进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮只推进 P0-10 任务幂等并发保护,不代表整项复审或生产部署验收通过。
- 已完成,等待复审:新增
task_idempotency数据表及 SQLite、PostgreSQL、MySQL 三套 0015 迁移;历史非空幂等键在迁移时建立登记。 - 已完成,等待复审:任务创建在同一事务登记幂等键,数据库层拒绝同一域名同一幂等键的并发重复任务,避免仅依赖单进程互斥锁。
- 已完成,等待复审:接口在并发创建冲突后回读已存在任务并返回重放结果,不再把可恢复的幂等冲突直接返回为普通创建失败。
- 已完成,等待复审:新增并发重复幂等键回归测试;
internal/repository、internal/database、internal/httpapi及后端全量go test ./...均通过,git diff --check通过。 - [~] 进行中:P0-10 其余长任务取消、重试、任务尝试记录、崩溃恢复,以及证书校验、导入、部署、恢复入口是否全部纳入任务中心仍需继续审查。
- 未开始:P0-12 备份恢复、三数据库实库矩阵、浏览器清缓存、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和最终生产门禁。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
本轮下一步继续审查任务中心剩余入口和备份恢复;开发阶段收尾后,再统一执行生产构建、实机部署和验收。
本轮开发补充(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮完成服务重启恢复审计链开发,不代表 P0-10 整项复审或生产部署验收通过。
- 已完成,等待复审:服务重启恢复会为每个
queued、running、retry_wait、cancelling任务写入task_recovery失败审计,并保留任务、项目和创建人归属。 - 已完成,等待复审:恢复事务新增审计写入失败回滚保护;审计数量与实际恢复任务数量不一致时,任务、尝试和审计全部回滚。
- 已完成,等待复审:新增重复恢复与审计失败回滚测试;专项恢复测试、后端全量
go test ./...和git diff --check均通过。 - [~] 进行中:P0-10 的 DNS 验证、批量部署结果、其他入口任务事务链、重试幂等及跨数据库实机验证仍需继续审查。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署和最终生产门禁仍未执行。
- [!] 总体验收不得升级:当前仍处于 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
本轮执行记录(2026-09-29,P0-10 任务取消入口)
- 已完成,等待复审:修正 HTTP 任务取消入口,使其与仓储层支持的四种活动状态保持一致。
- 已完成,等待复审:覆盖
retry_wait、cancelling的任务及任务尝试取消回归;管理证书和自动续期任务继续拒绝通用取消。 - 已完成,等待复审:后端定向测试、全量测试、静态检查和差异检查通过。
- [~] 进行中:P0-10 仍需继续审查其他任务入口、重试、幂等、恢复和跨数据库行为。
- 未开始:P0-12 备份恢复以及最终生产流程门禁。
- [!] 总体验收保持 P0-03:完成,待复审,没有新增
[✓]。
最新执行摘要(2026-09-29 继续开发)
总体验收位置继续保持 P0-03 完成,待复审。本轮完成开发阶段的证书任务并发保护、DNS 验证阶段进度记录,以及域名与服务器双向多对多部署关联的回归核验;不代表生产部署验收通过。
- 已完成,等待复审:同一域名的同类活动证书任务增加仓储层并发保护,重复创建返回冲突,避免并发任务绕过入口检查。
- 已完成,等待复审:DNS 凭据权限验证、逐域名验证和证书申请阶段会同步任务阶段及中文进度信息。
- 已完成,等待复审:一个域名可关联多个部署服务器,一个服务器可关联多个域名;关联读取、解除单个关联、项目权限和共享路径冲突已有回归覆盖。
- 已完成,等待复审:后端多对多专项测试通过;前端 231 项测试全部通过,生产构建通过。
- [~] 进行中:P0-10 其余长任务取消、重试、崩溃恢复、实机数据库矩阵和统一复审仍需继续执行。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署和最终生产门禁仍未执行。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
最新验证摘要(2026-09-29)
- 已完成,等待复审:双向多对多部署关系专项回归通过;一个域名支持多个服务器,一个服务器支持多个域名。
- 已完成,等待复审:后端
go test ./...、前端 231 项测试、前端生产构建和git diff --check均通过。 - [~] 进行中:生产实机部署、三数据库矩阵、浏览器清缓存、密码 SSH、HTTPS/DNS/ACME 和服务重启恢复仍待执行或复核。
- [!] 总体验收位置继续保持 P0-03:完成,待复审,不得提前升级。
最新实机部署与验收进度(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审;本轮完成 Linux amd64 候选包部署、HTTPS 健康检查、服务重启恢复和浏览器缓存清理后的页面复核,不将这些结果提前标记为最终生产验收通过。
- 已完成,等待复审:基于提交
4229f44构建的 Linux amd64 发布包已通过 SHA-256 校验并部署到授权测试服务器;发布清单确认source_dirty=false。 - 已完成,等待复审:
https://odacm.cn/healthz和https://odacm.cn/readyz均返回成功;Nginx 配置检查通过并处于运行状态。 - 已完成,等待复审:HTTPS 证书主题为
odacm.cn,SAN 包含odacm.cn,签发方为 Let's Encrypt;未关闭 TLS 校验。 - 已完成,等待复审:
Scert服务重启后保持active (running),重启后健康检查和就绪检查仍成功;重启后的日志未复现证书目录权限错误、路径所有者不可信或 HTTPS 证书读取失败。 - 已完成,等待复审:清理浏览器缓存后重新登录,首页显示当前用户、邮箱、服务状态、版本、SQLite 数据库和反向代理 HTTPS 等基本信息;中文显示正常。
- 已完成,等待复审:超级管理员访问
/api/v1/ssh-keys返回200和空列表,不再出现“无权管理此项目的服务器”;私钥内容未通过接口返回。 - 已完成,等待复审:域名配置页面的部署服务器选择支持多选,并明确显示一个域名可关联多个服务器、一个服务器可关联多个域名;5、10、15、30 条分页选项可见。
- [~] 进行中:远端数据库当前为空,现场只有一台可用测试服务器,尚未用虚构数据替代第二台真实服务器;双向多对多的生产数据关联、实际证书推送和回滚仍需具备真实目标后复核。
- [~] 进行中:三数据库生产矩阵、真实 DNS/ACME 申请、真实多服务器证书推送、最终生产门禁仍需继续执行。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
最新执行记录(2026-09-29,P0-10 任务取消入口)
- 已完成,等待复审:HTTP 任务取消入口已支持仓储层定义的四种活动状态。
- 已完成,等待复审:覆盖
retry_wait、cancelling的任务和任务尝试取消回归;自动续期和管理证书任务仍由工作流控制。 - 已完成,等待复审:后端定向测试、全量测试、静态检查和差异检查通过。
- [~] 进行中:P0-10 仍需继续审查其他任务入口、重试、幂等、恢复和跨数据库行为。
- 未开始:P0-12 备份恢复以及最终生产流程门禁。
- [!] 总体验收保持 P0-03:完成,待复审,没有新增
[✓]。
最新进度追加(2026-09-29,P0-10 通用取消入口状态一致性)
总体验收继续保持 P0-03:完成,待复审;本轮补齐通用仓储取消入口,不代表 P0-10 统一复审或生产部署验收通过。
- 已完成,等待复审:通用
CancelTask取消任务时,任务尝试同步覆盖queued、running、retry_wait、cancelling四种活动状态。 - 已完成,等待复审:新增四种活动状态的仓储回归测试,确认任务及任务尝试均进入
cancelled并记录完成时间。 - 已完成,等待复审:
go test ./...、go vet ./...、git diff --check均通过。 - [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 P0-03:完成,待复审,没有新增
[✓]复审通过项。
最新执行记录(2026-09-29,P0-10 证书任务入口回归)
总体验收继续保持 P0-03:完成,待复审;本轮完成证书任务入口的开发阶段回归,不代表生产部署验收通过。
- 已完成,等待复审:导入、恢复、校验入口均通过统一证书任务工作流,任务终态和尝试记录可核验。
- 已完成,等待复审:无效证书任务执行配置在任务创建前被拒绝,不产生空任务或空尝试记录。
- 已完成,等待复审:应用、HTTP、仓储专项测试、
go vet和差异检查通过,提交9741721已推送。 - [~] 进行中:DNS 验证任务、批量部署结果、崩溃恢复、重试幂等、三数据库实机矩阵和统一复审。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署及最终生产门禁。
- [!] 总体验收不得升级,仍为 P0-03:完成,待复审,没有新增
[✓]。
本轮开发进度(2026-09-29,P0-10 空部署目标防护)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅继续完成 P0-10 批量部署边界防护,不代表 P0-10 统一复审通过或生产部署验收通过。
- 已完成,等待复审:批量部署目标为空时显式返回失败,不再把 0 台服务器错判为部署成功。
- 已完成,等待复审:证书工作流在域名未关联任何部署服务器时提前失败,不调用远程部署。
- 已完成:新增应用层与部署层回归测试;
go test ./...、go vet ./...和git diff --check均通过。 - [~] 进行中:P0-10 其余任务入口、失败回滚结果持久化、跨数据库矩阵、崩溃恢复与统一复审仍需继续。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署、真实 DNS/ACME 和最终生产门禁仍未完成。
- [!] 总体验收不得升级:当前仍为 P0-03:完成,待复审,本轮没有新增
[✓]复审通过项。
本轮开发进度(2026-09-30,P0-10 证书任务启动取消竞态)
本轮按“先开发、后统一测试”执行,总体验收保持 P0-03:完成,待复审。
- 已完成,等待复审:证书申请任务在启动状态更新、启动审计期间收到取消时,统一停止后续执行器调用。
- 已完成,等待复审:取消响应为 HTTP 409,父任务及任务尝试保持
cancelled,覆盖启动错误竞态。 - 已完成:新增
TestTaskAPICancellationDuringStartupDoesNotExecuteCertificate,并通过go test ./...、go vet ./...、git diff --check。 - 已完成,等待复审:代码提交
415d504已在本地生成;推送因Authentication failed未确认远端收到。 - [~] 进行中:P0-10 其他任务链、DNS、跨数据库实机、崩溃恢复、重试幂等及统一复审。
- 未开始:P0-12 备份恢复、浏览器缓存清理、密码 SSH、远端部署及最终生产门禁。
- [!] 当前不得升级验收状态,仍为 P0-03:完成,待复审,不得新增
[✓]。
本轮执行记录(2026-09-30,P0-10 DNS 验证取消与临时凭据回收)
本轮按“先开发、后统一测试”执行,总体验收仍保持 P0-03:完成,待复审。
- DNS 验证上下文在测试前已取消时不调用服务商适配器,且不保存临时凭据。
- DNS 凭据保存成功后请求被取消时,已删除临时凭据并阻止令牌发布,避免未绑定密钥残留。
go test ./...、go vet ./...、git diff --check已通过;本轮仅完成本地开发与自动化回归。- [~] 继续执行:DNS 清理失败、令牌生命周期、初始化回滚、任务链、三数据库实机矩阵和统一复审。
- 尚未执行:P0-12、真实生产数据库清理、密码 SSH、远端部署、真实 HTTPS/DNS/ACME 和最终生产门禁。
- [!] 不新增
[✓];总体验收继续为 P0-03:完成,待复审。
本轮执行记录(2026-09-30,P0-10 DNS 临时凭据清理失败可重试)
本轮按“先开发、后统一测试”执行,总体验收仍保持 P0-03:完成,待复审。
- 单个 DNS 临时凭据回收失败后保留验证令牌,修复为可重试清理。
- 批量 DNS 临时凭据回收失败后仅恢复失败会话,受保护正式凭据仍不受影响。
go test ./...、go vet ./...、git diff --check已通过;本轮仅完成本地开发与自动化回归。- [~] 继续执行:DNS 过期清理、初始化回滚、令牌生命周期、任务链、三数据库实机矩阵和统一复审。
- 尚未执行:P0-12、真实生产数据库清理、密码 SSH、远端部署、真实 HTTPS/DNS/ACME 和最终生产门禁。
- [!] 不新增
[✓];总体验收继续为 P0-03:完成,待复审。
本轮执行记录(2026-09-30,P0-10 DNS 过期凭据清理重试)
本轮按“先开发、后统一测试”执行,总体验收仍保持 P0-03:完成,待复审。
- 过期 DNS 会话删除临时凭据失败时恢复原会话,避免清理失败造成不可重试残留。
- 清理重试成功后令牌仍不可用,验证会话不会因补偿清理重新获得授权。
go test ./...、go vet ./...、git diff --check已通过;本轮仅完成本地开发与自动化回归。- [~] 继续执行:DNS 初始化回滚、令牌消费、任务链、三数据库实机矩阵和统一复审。
- 尚未执行:P0-12、真实生产数据库清理、密码 SSH、远端部署、真实 HTTPS/DNS/ACME 和最终生产门禁。
- [!] 不新增
[✓];总体验收继续为 P0-03:完成,待复审。
本轮执行记录(2026-09-30,P0-10 DNS 清理状态与容量边界)
本轮开发仍处于 P0-03:完成,待复审,未进入生产部署验收通过状态。
- 待清理凭据:保存失败或请求取消后的删除失败引用进入重试集合,后续操作自动执行补偿清理。
- 容量边界:过期会话清理失败并等待重试期间,继续计入会话容量,避免并发超限。
- 验证结果:
go test ./...、go test -race ./internal/setup、go vet ./...、git diff --check已通过。 - [~] 继续执行:初始化回滚、令牌消费、任务链、三数据库实机矩阵、生产环境测试和统一复审。
- [!] 本地自动化验证不得替代密码 SSH、远端部署、真实 DNS/ACME 和最终生产门禁;不得新增
[✓]。
本轮开发进度(2026-09-30,P0-10 数据库验证取消与清理状态收敛)
总体验收位置继续保持 P0-03:完成,待复审。本轮完成数据库验证生命周期的取消边界、凭据清理串行化和单个令牌回收状态收敛;仅代表本地开发验证,不代表生产部署验收通过。
- 已完成,等待复审:数据库验证在凭据保存前、配置解析前、连接验证后和令牌生成前检查请求取消,取消请求不再发布验证令牌。
- 已完成,等待复审:临时凭据删除操作串行化,避免并发清理同一引用产生状态竞态。
- 已完成,等待复审:单个数据库令牌回收失败时恢复可重试会话,成功时移除过期状态;过期清理失败仍保持令牌不可用并保留内部重试状态。
- 已完成:
go test ./internal/bootstrap、go test -race ./internal/bootstrap通过;本轮提交6711c9b、14833be已推送。 - [~] 进行中:P0-10 初始化回滚、任务链、重试幂等、三数据库实机矩阵和统一复审仍需继续。
- 未开始:P0-12、真实生产数据库清理与初始化、密码 SSH、远端多服务器部署、真实 HTTPS/DNS/ACME、Linux/Windows 服务和最终生产门禁。
- [!] 不得标记
[✓];总体验收仍为 P0-03:完成,待复审。
本轮更新(2026-09-30,expiredCleaning 状态保护)
总体验收位置仍为 P0-03:完成,待复审。本轮完成数据库过期清理的执行状态和批量接管边界,仅作为本地开发和回归验证证据,不等同于生产验收通过。
- 过期会话开始清理时记录
expiredCleaning,避免单项清理与批量清理重复删除。 - 批量清理可接管失败后尚未执行的过期清理,但不接管正在执行的清理。
- 新增批量接管失败过期清理的回归测试,专项测试和竞态测试均通过。
- [~] P0-10 其他任务、跨数据库实机矩阵和统一复审继续进行中。
- 真实生产数据库、密码 SSH、远端部署、HTTPS/DNS、ACME、Linux/Windows 服务和最终生产门禁仍未完成。
- [!] 不新增
[✓],不以本地结果代替生产验收。
本轮开发进度(2026-09-30,P0-03 SSH 公钥部署阻塞修复)
总体验收继续保持 P0-03:完成,待复审,本轮仅完成 SSH 公钥部署实现修正与本地回归,不代表生产部署验收通过。
- 已完成,等待复审:修正公钥安装脚本的
fmt.Sprintf参数传递,确保实际编码公钥被写入远端。 - 已完成,等待复审:修正
authorized_keys追加逻辑,使用真实换行,不再写入字面量\\n。 - 已完成,等待复审:补充公钥读取失败、密码连接关闭失败的 SSH 阶段日志。
- 已完成:新增公钥安装脚本回归测试;
go test ./...、go test -race ./internal/deployment ./internal/httpapi ./internal/app、go vet ./...、go build ./...、git diff --check均通过。 - [~] 进行中:需重新构建正式候选包并部署到实机,通过现有失败服务器记录复测密码连接、公钥写入、私钥回连和状态持久化。
- 未开始:证书文件推送、Nginx 配置校验/重载、失败回滚、真实多服务器部署和最终生产门禁。
- [!] 第二台真实服务器仍不可用,不以虚构数据替代多服务器生产验收。
- [!] 总体验收不得升级:仍为 P0-03 完成,待复审,没有新增
[✓]。
本轮实机阻塞修复进度(2026-09-30,Ed25519 公钥编码)
总体验收继续保持 P0-03:完成,待复审。实机日志已确认前一轮 502 的真实根因,本轮完成代码修复和专项回归,尚未重新部署复测。
- 已定位:
AuthorizedPublicKey将ssh.Signer.PublicKey()错误再次传给ssh.NewPublicKey,导致ssh: unsupported key type ssh.ed25519PublicKey。 - 已完成,等待复审:改为直接使用
ssh.MarshalAuthorizedKey(signer.PublicKey())输出授权公钥。 - 已完成:新增 Ed25519 私钥授权公钥读取及指纹一致性测试;
go test ./internal/sshkey ./internal/deployment ./internal/httpapi通过。 - [~] 进行中:重新执行全量检查、构建 Linux amd64 候选包、部署并通过现有服务器记录复测。
- 未开始:证书推送、Nginx 配置校验/重载、失败回滚、真实多服务器部署和最终生产门禁。
- [!] 总体验收不得升级:仍为 P0-03 完成,待复审,没有新增
[✓]。
本轮任务看板更新(2026-09-30,双 Linux 候选服务健康复核)
- T1 固化主清单、执行清单和生产门禁矩阵;当前总体验收位置仍为 P0-03,相关清单已同步本轮证据。
- [~] T2 审查并补齐 P0-10 任务恢复、重试和幂等运行态缺口;本地专项测试已持续通过,统一复审仍未完成。
- T3 完成全量 Go/前端测试、构建和静态检查;正式候选构建前源码工作区为干净状态。
- T4 编译正式候选包并部署到两台 Linux 服务器;两台服务器服务、Nginx、存储 socket 均恢复正常。
- [~] T5 验证一域名多服务器、多域名单服务器、失败回滚和重试幂等;两台服务器的
/readyz已返回 200,但真实业务部署证据和失败恢复证据仍需补齐。 - T6 更新整改主清单、执行清单、Linux 测试记录和数据库支持矩阵;本轮实机健康检查结果已写入相关文档,等待复审。
- T7 输出最终上线结论;在 T5、三数据库矩阵、Windows 服务、清库初始化、公网 HTTPS/DNS/ACME 和备份恢复门禁完成前,不标记全量生产验收通过。
本轮现场证据摘要
8.137.23.95(ikun1):Scert=active、nginx=active、Scert-storage.socket=active、内部/readyz=200。45.136.13.241(yc):Scert=active、nginx=active、Scert-storage.socket=active、内部/readyz=200。odacm.cn首页当前返回 HTTP200,但本机解析为198.18.0.109,尚不能作为公网 DNS 指向测试服务器的证据。- 本轮只读复核未修改远端数据库、DNS、证书或 Smail 服务。
总体验收仍为 P0-03:完成,待复审,本轮没有新增 [✓]。
本轮任务看板更新(2026-09-30,多服务器 HTTPS 逐台校验代码完成)
- T1 主清单、执行清单和生产门禁矩阵已同步当前证据。
- [~] T2 任务恢复、重试和幂等仍需结合实机失败场景统一复审。
- T3 多服务器 HTTPS 校验代码已接入;全量
go test ./...、go vet ./...和差异检查通过。 - [~] T4 需要使用最新提交重新构建正式 Linux amd64 候选包并部署到两台服务器,不能沿用旧候选包作为本轮代码证据。
- [~] T5 逐台验证一域名多服务器、单服务器多域名、真实证书推送、Nginx 校验/重载、失败回滚和重试幂等;第一台服务器的真实 Nginx 站点配置仍需补齐并复核。
- T6 整改主清单、执行清单和 Linux 测试记录已追加本轮代码证据。
- T7 三数据库、Windows 服务、清库初始化、公网 HTTPS/DNS/ACME、备份恢复和最终上线结论仍未完成。
- [!] 总体验收继续保持 P0-03:完成,待复审,不能以自动化测试或页面提示替代生产验收。
任务看板更新(2026-10-01)
- T2 部署事务锁获取失败终态修复:补齐锁冲突、锁归属写入失败和锁阶段持久化失败的事务收尾逻辑。
- T2 回归测试:新增无锁持有冲突和部分锁持有冲突测试,确认已有锁保留、本次锁释放、事务最终状态正确。
- T3 本地后端全量回归:
go test ./...通过。 - [~] T4 最新候选包重新构建及双 Linux 服务器部署复核。
- [~] T5 双服务器业务部署、失败回滚、重试幂等和恢复证据仍需使用最新候选包复审。
- T7 三数据库矩阵、Windows 服务、清库初始化、公网 HTTPS/DNS/ACME、SMTP、备份恢复和最终上线结论。
- [!] 总体验收不得升级,当前仍为 P0-03:完成,待复审。
本轮提交:1fad8db(代码修复)、d315179(回归测试)。
最新实机复核(2026-10-01,最新候选包双服务器业务部署)
本轮使用密码 SSH 和正式管理接口复核,未创建辅助验收脚本,未修改远端数据库内容,未关闭 TLS 校验。Windows 环境按当前上线范围暂不处理。
- 最新候选包已安装到
8.137.23.95和45.136.13.241;两台服务器的Scert、Scert-storage.socket、Nginx 均为active。 - 两台服务器的
https://127.0.0.1:8443/readyz均返回 HTTP200。 - 已验证域名
scert-multi-20260930.apmmk.cn同时绑定两台服务器;服务器端反向查询也能看到该域名。 - 已验证服务器
45.136.13.241同时托管scert-20260930.apmmk.cn和scert-multi-20260930.apmmk.cn;满足一台服务器多个域名的关系模型要求。 - 使用最新候选服务重新执行证书部署,返回
total=2、success=2、failed=0,两台服务器均报告“证书部署、配置校验并 reload 成功”,verification_status=success。 - 两台服务器目标证书文件均已写入
/ssl/scert-multi-20260930.apmmk.cn/single/,证书 SHA-256 指纹均为43:06:3C:07:26:D3:43:62:B2:54:CE:28:B6:6D:7E:B6:37:E0:0B:16:5F:68:EC:0D:07:FC:ED:0D:F2:C6:4A:D2的同一证书(记录中保留冒号格式时以 OpenSSL 输出为准)。 - 两台服务器均执行
nginx -t成功,并通过本机 SNI HTTPS 请求返回 HTTP200。 - 已确认历史失败部署任务的失败结果持久化了各服务器状态和备份标识;最新候选服务启动后未再产生新的空归属
acquiring事务。 - [!] 现有历史
recovery_required事务仍缺少可信恢复证据,未直接改库伪造成功;相关现场保留人工核查状态。 - [~] 失败回滚的真实双服务器故障注入、任务级重试幂等、真实公网 DNS/ACME、Smail 系统账户 SMTP、三数据库矩阵和备份恢复仍需继续。
当前任务看板
- T1 主清单、执行清单和 Linux 实机记录已同步。
- T2 部署锁获取失败、空锁恢复和事务终态修复已完成并部署复核。
- T3 最新 Linux amd64 候选包双服务器安装及基础健康检查完成。
- T4 一域名多服务器、单服务器多域名关系和最新候选证书部署成功。
- [~] T5 真实失败回滚、重试幂等和历史恢复证据统一复审。
- [~] T6 公网 DNS/ACME、Smail SMTP、数据库生产矩阵和备份恢复。
- T7 最终生产门禁和上线结论。
总体验收位置仍为 P0-03:完成,待复审,本轮不得标记全量生产验收通过。
2026-10-01 反向代理端口收敛记录
本节补充当前部署要求,不覆盖历史记录。当前仅处理 Linux;本轮是保留数据的端口配置复核,不代表清库首次初始化验收。
- 已完成,等待复审:两台服务器通过密码 SSH 核验,Scert 均仅监听
127.0.0.1:8443;没有0.0.0.0:8443或[::]:8443监听。 - 已完成,等待复审:Nginx 对外监听
80/443,两台服务器的nginx -t均通过;未修改邮件及其他既有站点。 - 已完成,等待复审:第二台管理入口
odacm.cn的 HTTP 请求返回 301 并跳转 HTTPS,反代/readyz和回环上游/readyz均返回 200;上游启用 SNI 和证书校验。 - 已完成,等待复审:从第二台服务器按正常 DNS 访问管理域名,连接地址为
45.136.13.241,HTTPS 就绪检查返回 200;该结果不是独立外部客户端的完整生产验收。 - 已完成,等待复审:静态 systemd 模板已提交并推送
48d10fe;动态生成的 Linux unit 同步回环监听约束,并补充模板与生成器回归断言。 - 已完成,等待复审:本地后端
go test ./...、go vet ./...和git diff --check通过;本机 Windows 测试不代替 Linux 专属用例执行。 - [~] 进行中:使用干净提交构建 Linux 候选包,核对安装后的默认 unit 和动态生成配置,并补充 Linux 专属用例证据。
- [!] 暂缓或存在阻塞:历史恢复事务、双服务器真实失败回滚与重试幂等、Smail SMTP、数据库生产矩阵、备份恢复及最终生产门禁仍未完成。
端口边界:不新增公网业务端口,不为内部 8443 添加防火墙或安全组放行规则。SSH 运维端口与其他已有服务不属于本次端口收敛的修改范围。总体验收保持 P0-03:完成,待复审,不新增全量验收通过结论。
反向代理端口收敛复核结果(2026-10-01 16:35,北京时间)
- 已完成,等待复审:构建提交
51f7f3e55cee16d3b747bea30e0382fca4b25dd1,发布清单source_dirty=false;Linux 包位于build/release-20261001-loopback/Scert-20261001-V0.1.0-linux-amd64.tar.gz。 - 已完成,等待复审:包 SHA-256 为
2953f52d252194fda7865e1ee06e548204fdfdb818dab28ce10611087ba94443;两台服务器上传后校验一致,包内SHA256SUMS全部通过。 - 已完成,等待复审:两台服务器均经官方安装器安装成功并启动,安装退出码均为 0;主服务、存储 socket 和 Nginx 均正常,主服务重启计数为 0。
- 已完成,等待复审:两台服务器
/scert/scert的 SHA-256 均为beeade4c38e1be7f8af29b42d08896ca4f9efcb782c3f0a278f58fd0abc9baae,与本地候选二进制一致;已安装的主 unit 自身包含回环监听设置,不再仅依赖 drop-in。 - 已完成,等待复审:在第二台 Linux 上执行仓库
internal/servicehost的编译测试程序,9 项全部通过,覆盖动态 unit 和发布模板回环约束;没有创建辅助验收脚本,此结果仅作为代码回归证据。 - 已完成,等待复审:本地前端 241 项测试通过,正式前端及 Linux 后端构建通过。
- 已完成,等待复审:升级后两台 Scert 均监听
127.0.0.1:8443,Nginx 仍对外监听80/443,nginx -t通过;未改动已有站点或新增公网放行规则。 - 已完成,等待复审:第二台回环上游按管理域名 SNI 和系统 CA 严格验证返回 200;第一台作为独立客户端按正常 DNS 访问
https://odacm.cn/readyz返回 200,连接地址为45.136.13.241。 - 已完成,等待复审:两台服务器交叉探测对方公网
8443均超时;结合实际监听地址确认该内部端口未对外监听,未据此声称其他已有服务端口全部关闭。 - [!] 边界说明:第一台内部管理服务沿用原有 IP 自签证书,使用测试域名和系统 CA 直连会失败;通过密码 SSH 核查证书及 IP SAN 后,以该证书作为显式信任文件访问回环上游返回 200,未关闭 TLS 校验。这仅是该机内部健康核验,不是第一台管理入口的公网受信 TLS 验收。
- [!] 边界说明:本轮保留数据库,没有执行清库首次流程;未额外制作数据备份,官方安装器自身保留升级前发布文件以支持失败回退。完整生产验收仍为 P0-03:完成,待复审。
部署重试阻塞修复进度(2026-10-01 16:51,北京时间)
本节为本轮当前状态说明,前文保留为历史记录。P0-03 的局部代码复审状态不代表整个项目的生产验收状态;本轮上线范围仅 Linux,不将 Windows 列为阻塞。
- [✓] 复审通过:双机服务保持回环监听 127.0.0.1:8443,由 Nginx 80/443 对外提供服务;本轮未新增公网业务端口。
- 已完成,等待复审:通过正式部署接口制造第一台 Nginx 校验命令失败,两台部署报告整体失败,恢复报告为 success;随后已恢复正常校验命令,双机 nginx -t 通过。该验证使用同一证书重部署,不代表不同新旧证书切换验收。
- 已完成,等待复审:定位部署重试自冲突。HTTP 重试已创建尝试并标记原任务运行,但应用装配再次调用创建任务的工作流,将自身判为同类活动任务。新增真实应用登录与路由装配回归,修复前稳定返回 502。
- 已完成,等待复审:拆分普通部署与已有任务执行回调,普通部署继续创建任务,重试只执行原始证书部署流程,保留权限、审计、尝试记录与事务关联。
- 已完成,等待复审:定向回归验证唯一父任务、失败后成功的两次尝试、原任务事务关联、并发重试 409、成功后重复重试 409;后端 go test ./... 与 go vet ./... 通过。
- [~] 进行中:竞态测试、干净提交构建、双机升级和真实失败任务重试复核。当前尚未取得修复后的实机成功证据。
- [!] 暂缓或存在阻塞:历史恢复事务、Smail SMTP、数据库生产矩阵、备份恢复与最终清库首次部署门禁仍未闭环,不宣称生产验收通过,不给缺乏依据的完成百分比。
现场失败任务标识:683ef23a-c912-4f46-b2a6-3ec11908808e。本轮保留其数据用于复现与修复验证,不属于清库首次流程;没有直接改库伪造状态,也没有创建辅助验收脚本。
本轮补充回归:应用装配测试同时核对双服务器结果归属于第二次尝试,以及开始和成功审计的操作者关联;缺少已有任务执行器时返回 501,不回退到创建任务入口,不改变原任务状态。后端全量测试与 vet 再次通过;app/httpapi/repository 竞态测试通过,补充用例的定向竞态测试通过;前端 241 项通过。实机复测尚待新包部署。
部署重试双机实测复核结果(2026-10-01 17:02,北京时间)
以下为本轮最新结果,更新前述“尚待实机复测”的状态;只关闭部署重试自冲突这一子项,不等同于完成全部生产门禁。
- [✓] 复审通过:修复提交
302111c8af已推送,发布清单 source_dirty=false;使用正式构建流程生成 Linux 包,并通过官方安装器升级两台测试服务器,安装及启动退出码均为 0。 - [✓] 复审通过:发布包 build/release-20261001-deploy-retry/Scert-20261001-V0.1.0-linux-amd64.tar.gz,SHA-256 为 0ad94de03e625eb5fd6789e1fa84f8cad8298e2487876f55d34e36f14df7c878;双机上传和包内 SHA256SUMS 校验均通过。
- [✓] 复审通过:两台 /scert/scert 的 SHA-256 均为 393ae5a1cfaf8e4442ec30e47950f020e6ab47adb47af7fdca45a36eb9486ed2;Scert 与 Nginx active,NRestarts=0。
- [✓] 复审通过:复用真实失败任务 683ef23a-c912-4f46-b2a6-3ec11908808e,通过正式重试接口同时提交两次请求,一个返回 200、双服务器部署成功并通过 HTTPS 校验;另一个返回 409,没有执行第二次部署。成功后再重试返回 409。
- [✓] 复审通过:原任务保留,未产生嵌套父任务;尝试记录只从 3 增加到 4,第 4 次为 success,两台部署结果均关联该次尝试 b9ca3a51-30af-4d2c-9655-758509140f5e。旧失败记录保留用于追溯。
- [✓] 复审通过:只读核对数据库,首次失败的两个事务均为 rolled_back;本次两个事务 20261001-085936.117414575-5eecfbb86709、20261001-085940.320149826-09d1cf34f629 均为 committed;开始及成功审计均关联原任务和实际操作者。没有直接修改数据库状态。
- [✓] 复审通过:两台证书目录均无残留锁及 scert-tmp 文件;nginx -t 通过,证书和证书链文件哈希一致。第一台通过带 SNI 和主机名校验的 TLS 连接核对第二台站点证书指纹,仍与部署前同一正式证书一致。
- [✓] 复审通过:升级后 Scert 仍仅监听 127.0.0.1:8443,Nginx 通过 80/443 提供 Web 服务;管理入口前端与 readyz 返回 200,第二台回环上游仍使用系统 CA 严格校验。没有开放额外公网业务端口,未关闭 TLS 或 SSH 主机校验。
- [!] 仍需处理:历史事务 20260930-231310.231207974-5bf9d1e37542、20260930-231313.144123222-ce71b1dfe14e 的恢复证据字段为 null,服务保留 recovery_required 并拒绝自动接管;本轮没有伪造历史证据或强改终态。
- 未开始:本轮修复后的最终清库首次部署验收。Smail SMTP、数据库矩阵及备份恢复等其余上线门禁仍需按原任务清单验证。
本轮运维使用密码 SSH,没有新建辅助验收脚本;没有额外制作远端数据备份。安装器自行保留升级前发布文件,未擅自删除。以上域名、服务器及凭据仅用于测试,不作为产品验收规则。
最新有效任务看板补充(2026-10-01 17:15,北京时间)
本节更新前文过时看板,保留历史证据。当前只处理 Linux,Windows 不在本轮范围内。
- [✓] T5-6 进程崩溃恢复子项:双机事务进入 reload_attempted 后终止主进程,systemd 自动拉起,启动恢复将两个事务回滚完成。双机无残留锁或临时文件,Nginx 校验和本机严格 HTTPS 均正常。
- [✓] T5-6 中断任务重试子项:恢复正常重载命令后,原任务 72f4222a-3706-419c-847c-0fcb55b436f2 重试成功;第二次尝试关联双机成功结果及两个 committed 事务,成功后再次重试为 409。
- [✓] 临时配置收尾:第一台 reload_command 已恢复为正常 nginx -s reload,未遗留 sleep 延迟;人工运维继续使用密码 SSH。
- [✓] 端口边界:双机只在本机监听 Scert 8443,Web 访问通过 Nginx 80/443;管理入口正常,未增加公网业务端口。
- [!] 第一台测试域名公网访问:HTTP 返回 403 及 Non-compliance ICP Filing 拦截页面,HTTPS 握手失败;本机严格 HTTPS 正常。此项不计公网验收通过,不绕过平台限制。
- [~] T5-6 其余负向场景:锁归属不匹配、文件摘要不匹配、负向 HTTPS 恢复及不同新旧证书切换继续待复核;本轮没有重复签发证书。
- [~] T5-8 历史现场:两条无可信恢复证据事务保持 recovery_required,禁止强改终态或伪造证据。
- T4-3 与 T7 剩余生产门禁:最终清库首次流程、系统 SMTP、超级管理员密码重置、数据库矩阵、备份恢复与升级回滚等按原清单继续执行。
本轮是保留故障证据的连续复测,不是清库首次初始化验收;没有创建辅助验收脚本,没有额外制作远端数据备份。整体生产验收仍未放行。
最新有效数据库整改进度(2026-10-01 17:45,北京时间)
本节沿用已确认需求并补充最新进度;前文各日期记录保留为历史证据,不再以旧版模式 14 推断当前代码状态。当前迁移最高版本为 18;只处理 Linux,不将本地交叉编译视作 Linux 原生构建。
- [✓] SQLite 正式 CLI 子项:修正写死模式 14 的过时断言,检查内嵌源码迁移序号及数据库历史连续性;增加幂等表、任务尝试、部署结果、部署事务与恢复证据的非空恢复样本。第二台 Linux 的历史备份、升级后备份两个恢复子场景通过,进程退出 0。测试修正提交
dbcdf05已推送。 - [✓] MySQL 8.0.46 仓储子项:第二台隔离实库的 9 个主测试、92 个子场景全部通过,无失败或跳过;涵盖项目、成员及资源相关仓储行为,不等同于完整 Web 验收。
- [✓] PostgreSQL 16.15 备份恢复子项:success、certificate、cancel、permission、inventory、authentication、tls 七场景通过,进程退出 0。六场景使用独立正式 CLI;cancel 是进程内确定性取消加真实数据库回退,不冒充独立 CLI 取消验收。
- [!] PostgreSQL 14.24 首次尝试:因工具版本低于当前备份入口要求而失败,保留失败记录;之后改用经官方签名索引验证的隔离 16.15 工具,不修改系统 APT 源、不安装全局 PostgreSQL 服务。
- [~] MySQL 中断恢复修复:原有实测发现模式 15~17 的四个中断边界因表已存在而失败。正在加入结构校验、可重入建表、事务内幂等回填与版本记录,并补充部分回填、数据冲突、字段和索引异常负向测试;新版实库回归尚在运行,不能提前标记通过。
- [✓] 网络边界只读复核:双机 Scert 仍只监听 127.0.0.1:8443,MySQL 只监听 127.0.0.1:3306;Web 由 Nginx 80/443 提供。没有增加公网服务端口。
- 待完成:MySQL 修复后的全量门禁、正式构建及双机部署;MySQL 5.7、本轮三库完整 Web 流程、系统发信及密码重置、备份恢复剩余矩阵、最终清库首次部署等。
本轮各实库测试创建自己的隔离数据库,未清空现有业务数据库;没有创建辅助验收脚本、没有额外备份远端业务数据。整体生产验收仍未放行。
最新有效复核结果(2026-10-01 18:02,北京时间)
本节更新 17:45 记录中的 MySQL 迁移修复及正式包部署状态;只关闭这些子项,不放行整体生产验收。
- [✓] MySQL 中断重入修复:提交
c6982ab827已推送。模式 15~17 恢复前校验字段、默认值、空值约束、排序规则、索引和存储引擎;模式 15 将幂等回填与版本标记放在同一事务,拒绝不一致历史,不覆盖冲突数据。 - [✓] Linux MySQL 8.0.46 最终实库回归:18 个部署迁移恢复与负向子场景、91 个完整迁移子场景,共 109 个子场景全部通过,无失败或跳过;临时单元已结束,退出 0。此前四个真实失败边界已复测通过。
- [✓] 本地质量门禁:后端 go test -count=1 ./...、go vet ./... 通过;database 和 cli 两个包竞态测试通过;前端 241 项通过。未启用的本地外部数据库测试不因此视为通过。
- [✓] 正式构建:仅生成 Linux 包,source_dirty=false,23 项 manifest 产物哈希与大小核对一致;此为交叉编译,不冒充 Linux 原生构建。归档 SHA-256 为 c075297e9f8f76f4ebb8fa28d43a4099ca853a3619212d5e7f51e78d4b0e9e4d。
- [✓] 新正式程序回归:SQLite 历史与升级后备份恢复两个子场景通过;PostgreSQL 16.15 七场景再次通过,独立 CLI 与进程内取消的范围区分不变。
- [✓] 双机部署:官方安装器安装及启动成功,主程序 SHA-256 均为 39b70a1a11148982baeb699bae749f7e2988a2fba02b001c0da740ba8b86f36d;服务 active、NRestarts=0,Nginx 校验成功,管理入口首页及 readyz 正常。双机仍为 Scert 回环监听、Nginx 80/443 对外,无新增公网业务端口。
- 停服保护现场:安装器先后拒绝主服务及目录 socket 尚未停止的操作;完整停服后重试成功,失败记录保留。这是停服升级,不宣称零中断。
- [~] MySQL 备份恢复剩余实库矩阵:已启动 scert-mysql-cli-20261001-1801,运行中,尚无最终结论。该套测试主要调用正式命令与维护实现的进程内入口,不能冒充全部独立发行 CLI 验收。
- [!] 其余限制仍有效:第一台测试域名公网平台拦截、两条无可信恢复证据历史事务、MySQL 5.7、完整 Web 流程、系统发信与密码重置、最终清库首次部署及其余原清单门禁尚未全部闭环。
最新接续状态与任务确认(2026-10-01 18:15,北京时间)
本节更新前文历史快照;旧章节中“当前有效”仅指其记录时点,不代表本轮状态。沿用原始四十四项需求,本次仅验收 Linux,Windows 不在本轮范围;不以历史 P0-03 局部状态代表全部生产门禁。
- 已完成,等待复审:MySQL 8.0.46 备份恢复矩阵单元
scert-mysql-cli-20261001-1801已真实结束,退出零;日志mysql-cli-release.log中二十一个主测试、一百三十六个子场景通过,零失败、零跳过。服务器日志开始时间为北京时间 18:01:26,结束为 18:06:49。 - 已完成,等待复审:本批矩阵覆盖备份快照、官方导入导出互操作、视图、触发器、例程、事件、权限和失败回退。主要调用进程内正式实现,不冒充独立发行程序全量验收。
- 已完成,等待复审:双机服务正常;Scert 仅监听回环 8443,MySQL 仅监听回环 3306;第二台的 33060 同样仅监听回环。Web 对外使用 Nginx 80/443,不新增公网业务端口,不修改第一台现有邮件端口。
- [!] 暂缓或存在阻塞:只读检查确认双机 Scert 均未启用 SMTP,主机、系统通知用户名、凭据引用均为空;缺少可用系统通知配置,不能宣称真实发信与邮件密码重置通过,不使用普通邮箱替代。
- [~] 进行中:复用仓库现有 MySQL 隔离实库测试,增加独立正式发行程序调用;保留严格 TLS、凭据加密存储、成功恢复及 SQL/证书失败回退断言,不创建辅助验收脚本,不接触业务数据库。
- 未开始:将新增测试编译到 Linux,在第二台隔离数据库中验证当前正式发行程序,再记录实际通过或失败结果。
- [!] 暂缓或存在阻塞:MySQL 5.7、完整三库 Web 流程、Linux 原生构建、其余部署负向场景、历史事务核查、系统发信与最终清库首次部署等仍未闭环;整体生产验收未放行。
MySQL 独立发行程序验收结果(2026-10-01 18:22,北京时间)
- 已完成,等待复审:新增仓库测试
TestMySQLRealReleaseBackupRestoreCommands,复用现有成功、SQL 失败、证书恢复失败场景;通过独立进程调用正式发行程序,不再依赖测试进程的 TLS 注册表。未创建辅助验收脚本。 - 已完成,等待复审:第二台 Linux 上单元
scert-mysql-release-cli-20261001-1818真实结束,退出零;三个子场景全部通过,耗时 33.85 秒,日志为/var/tmp/scert-db-matrix-20261001-1720/mysql-release-cli.log。 - 已完成,等待复审:验证对象为已部署候选同源的正式发行程序
/var/tmp/scert-release-mysql-reentry-20261001/scert,SHA-256 为39b70a1a11148982baeb699bae749f7e2988a2fba02b001c0da740ba8b86f36d;测试程序 SHA-256 为88ff0fec3f2ab9a14f89dd52f384a677ecfb450f679b077ec47e83649644eb09。 - 已完成,等待复审:隔离 MySQL 8.0.46 仅监听回环,使用严格 TLS;只在子进程中信任隔离证书,数据库密码通过加密凭据引用读取,未更改系统信任库。断言覆盖业务数据、审计数据、配置、主密钥、加密凭据、证书及失败后恢复前快照。
- 已完成,等待复审:本地后端全量测试、全量静态检查、CLI 竞态测试和差异检查通过。本地条件跳过不计实库通过;本批只修改测试,没有更换线上程序。
- [~] 进行中:准备在隔离目录使用固定工具链执行 Linux 原生正式构建,避免将 Windows 交叉编译包冒充 Linux 原生证据;不新增公网监听,不更改生产工具链或业务配置。
- [!] 暂缓或存在阻塞:上述三个独立 CLI 场景不代表全部数据库、Web 或生产流程验收通过;既有 SMTP 配置缺失、历史事务核查及其他未完成门禁继续保留。
2026-10-01 19:27 端口约束与原生部署复核
- 已完成,等待复审:Linux amd64 原生正式构建完成,归档哈希已核对。
- 已完成,等待复审:同一正式归档已通过官方安装器部署到双机,Nginx 保持运行。
- 已完成,等待复审:Scert、MySQL 和 MySQL X Protocol 均保持回环监听;公网项目入口仅使用 Nginx 80/443。
- 已完成,等待复审:绕过本机代理直连检查内部端口不可达,排除代理造成的端口探测误报。
- [!] 暂缓或存在阻塞:整体生产验收仍等待发信、密码重置、完整 Web 流程、历史事务和最终清库首次部署等门禁闭环。
2026年10月1日安全边界与反代复核
本轮只记录不含认证信息的实机结果;不记录服务器口令、RAM 密钥、数据库密码、邮件服务密码、私钥、令牌或一次性链接。用户要求的安全边界解释为:Scert 管理入口不得绕过 Nginx 对公网提供服务,公开入口只使用 Nginx 80/443。
- [✓] 双机
Scert.service、证书目录 socket、Nginx 和数据库服务均处于运行状态;两台 Scert 均只监听127.0.0.1:8443,数据库端口只监听回环地址。 - [✓] 双机 Nginx 配置检查通过;第二台
odacm.cn本机反代复核为 HTTP301跳转 HTTPS,/readyz返回 HTTP200和status=ready。 - [✓] 第一台已确认
8443、9998、9999的拒绝规则位于宽范围规则之前;第二台入站默认拒绝,邮件 Web 上游端口仅保留本机来源规则,不作为公网 Scert 管理入口。 - [✓] 本轮未停止或删除 Smail/PMail,不修改邮件协议端口;邮件 Web 继续由 Nginx 站点代理,Scert 验收只认
80/443。 - [!] Scert 日志仍保留两条历史
recovery_required事务的证据不足错误;不得清理、改写或伪造终态,P0-10 和总体生产验收继续阻塞。 - [~] 当前安全入口子项可复审;完整三数据库 Web 流程、系统账户真实发信、验证码重置、P0-10 负向实机矩阵和干净候选包最终门禁仍未完成。
2026年10月1日 SSH 密码认证实机复核
- [✓] 已完成,等待复审:两条历史部署服务器记录已通过正式服务器编辑接口切换为 SSH 密码认证,历史 SSH 私钥引用已清空,主机指纹、TLS 证书路径和密码凭据引用保留。
- [✓] 已完成,等待复审:两台部署服务器均使用 SSH 密码完成证书推送、Nginx 配置校验和 reload;两个托管域名均完成双服务器部署,站点 HTTPS 校验通过。
- [✓] 已完成,等待复审:生产 API 不提供 SSH 私钥路由,历史 CLI
ssh-key命令仅返回停用提示,不读取配置、不读取凭据、不执行远程操作。 - [✓] 已完成,等待复审:远端孤立 SSH 私钥密文记录已清理为零;SSH 密码凭据、TLS 证书私钥和业务数据保持不变。
- [✓] 已完成,等待复审:Scert 重启后重新登录并再次部署证书成功;Scert 仅监听
127.0.0.1:8443,数据库仅监听回环地址,公网入口仍仅为 Nginx80/443。 - [!] 暂缓或存在阻塞:整体生产验收仍受系统账户真实发信、密码重置完整闭环、三数据库完整 Web 矩阵、历史恢复事务核查、DNS/ACME 负向矩阵和最终清库首次部署等门禁限制。
2026年10月1日 SSH 密钥登录彻底停用复核
本次安全修复仅记录非敏感代码、构建和测试结果,不记录服务器口令、RAM 密钥、数据库密码、令牌或其他认证信息。根据“SSH 私钥登录不允许出现,安全风险太大”的要求:
- 删除部署客户端的 SSH 公钥部署接口,不再提供远程
authorized_keys写入能力。 - 删除远程
PubkeyAuthentication配置、SSH 服务重载和公钥安装脚本,不再通过 Scert 开启公钥登录。 - 保留证书部署使用的 TLS 证书私钥文件路径;该路径仅用于证书业务,不用于 SSH 登录。
- 后端全量 Go 测试、Go 静态检查、部署专项测试、前端 241 项测试和前端生产构建全部通过。
- 提交
7264149已使用中文提交信息并推送远程仓库。 - [!] 总体生产验收仍未通过;清库后的首次生产初始化、Smail 系统账户发信、密码重置闭环、三数据库 Web 矩阵、P0-10 负向矩阵和最终候选包实机复核仍需继续。
当前总体验收状态仍为:P0-03:完成,等待复审。本次修复不代表生产验收通过。
2026-10-01 SSH 私钥登录能力安全复核
当前总体状态仍为:P0-03:完成,等待复审。本轮安全整改不代表生产部署整体验收通过。
- 后端服务器模型、SSH 连接工厂、服务器 API 和服务器仓储已收敛为密码认证,未保留 SSH 登录私钥字段或部署路径。
- 新增数据库迁移 19,清理历史服务器记录中的 SSH 私钥引用和 SSH 密钥状态;历史表结构迁移文件仅用于兼容既有数据库,不代表当前能力重新启用。
- 敏感信息存储测试已改为 DNS 凭据场景,不再创建或读取
secret://ssh/key-*测试引用。 - TLS 证书业务的
private_key_path、证书上传、部署和回滚逻辑保持不变;该字段只用于证书私钥,不用于 SSH 登录。 go test ./...、三个 Go 命令构建和git diff --check已通过。- [!] 仍未完成清库后的三数据库 Web 首次初始化、Smail 系统账户真实发信、验证码重置闭环、P0-10 负向矩阵、双机失败重试和最终生产门禁,因此不得标记为整体验收通过。
2026-10-01 实机部署复核补充
- 使用正式 Linux amd64 候选包通过密码 SSH 安装到
45.136.13.241,安装器清单校验通过。 - 安装后
Scert、Scert-storage.socket、Nginx 均为active;Scert 和数据库保持回环监听,公网只保留 Nginx80/443。 nginx -t、严格 HTTPSodacm.cn/readyz、HTTP 到 HTTPS 跳转均通过。- SSH 服务端仅允许密码认证,关闭公钥认证;本轮没有生成或部署 SSH 私钥、公钥及
authorized_keys。 - [!] 生产整体验收尚未完成,仍受清库后的首次初始化、Smail 系统账户发信、密码重置闭环、三数据库 Web 流程、P0-10 负向矩阵及历史恢复证据复核限制。
任务状态:T3 已完成等待复审;T5、T6 继续进行;T7 未开始。总体状态仍为 P0-03:完成,等待复审。
服务重启复核补充
Scert重启后保持active,等待启动完成后回环和odacm.cn严格 HTTPS/readyz恢复正常。- [!] 重启瞬间 Nginx 可能短暂返回
502,原因是 Nginx 先于 Scert 上游恢复;这不是通过放开8443或关闭 TLS 校验解决的问题,是否要求无感切换仍列入最终生产门禁。 - [!] 两条历史
recovery_required事务仍缺少可信恢复证据,已保留现场,未删除锁、伪造证据或自动接管。
2026-10-01 双机密码认证候选包部署记录
- 已完成,等待复审:使用密码 SSH 上传正式 Linux amd64 候选包到
8.137.23.95和45.136.13.241,全程未使用-i、SSH 私钥、公钥或authorized_keys。 - 已完成,等待复审:两台均使用官方安装器完成停服升级,包内
SHA256SUMS全部通过,安装器未强制覆盖运行中的服务。 - 已完成,等待复审:两台
Scert、Scert-storage.socket、Nginx 均 active;Scert 仅绑定127.0.0.1:8443,数据库仅绑定回环地址,公网入口为 Nginx80/443。 - 已完成,等待复审:两台
nginx -t通过;第二台odacm.cn/readyz严格 HTTPS 返回 ready。 - 已完成,等待复审:两台 SSH 服务端均为密码唯一认证,明确关闭公钥认证;本轮没有生成、读取、上传或部署任何 SSH 私钥、公钥或
authorized_keys。 - [!] 暂缓或存在阻塞:第二台仍保留两条缺少可信恢复证据的历史
recovery_required事务;未删除锁或伪造恢复证据。 - [!] 暂缓或存在阻塞:第一台既有
php-fpm-82.servicefailed 与 Scert 无关,不能作为 Scert 通过依据,也不能在未授权范围内清理。
当前任务状态:T3 双机密码认证部署复核完成,等待复审;T5、T6 继续进行;T7 未开始。总体状态仍为 P0-03:完成,等待复审。
2026-10-01 当前日期候选包复核
- 已完成,等待复审:重新生成当前日期候选包
Scert-20261001-V0.1.0-linux-amd64.tar.gz,SHA-256 为56426C1BBCECA68B32D122E813A950D2EE345349F89C3178080BD313F6F77E8E,来源提交79bae3b且构建树干净。 - 已完成,等待复审:双机重新部署后运行二进制摘要与本地构建产物一致,服务、存储 socket、Nginx 和回环监听边界正常。
- 已完成,等待复审:后端 SSH 私钥 API 定向测试通过,返回 404;前端 241 项测试通过,其中包含服务器认证提示和 SSH 私钥入口不可达回归。
- 已完成,等待复审:第二台当前候选包重启恢复测试记录第 0、1 秒为 502,第 2 秒恢复 200,未通过开放 8443 或关闭 TLS 校验规避。
- [!] 暂缓或存在阻塞:短暂 502、两条历史恢复事务、清库后的三数据库流程、Smail 系统账户发信、密码重置闭环和 P0-10 负向矩阵仍未完成。
当前任务状态:T3 当前日期候选包复核完成,等待复审;T5、T6 继续进行;T7 未开始。总体状态仍为 P0-03:完成,等待复审。
2026年10月1日 Linux上线加速复核(当前执行记录)
本节是本轮目标的当前状态入口,只记录非敏感证据,不记录服务器口令、RAM 密钥、数据库密码、授权码、令牌或其他认证信息。Windows 环境不在本轮范围;公网邮件服务端口属于既有 Smail 服务,不作为 Scert 管理入口处理。
本轮需求清单
- 仅验证 Linux 双机:第一台
8.137.23.95,第二台45.136.13.241。 - Scert 服务器连接只使用 SSH 密码认证,不使用或新增 SSH 私钥、公钥、
authorized_keys和密钥登录流程。 - Scert 公网入口只经 Nginx
80/443;Scert8443和数据库端口保持回环监听。 - 不创建辅助验收脚本,不把辅助脚本作为验收依据。
- [~] 继续完成 P0-10 负向恢复矩阵和历史
recovery_required事务的可信证据核查。 - [~] 继续完成 SQLite、MySQL、PostgreSQL 三数据库的清库后完整 Web 首次流程。
- [!] Smail 系统通知 SMTP 当前未启用且未配置系统账户凭据,真实发信、验证码密码重置和改密登录闭环暂不能完成;不得猜测 SMTP 主机、账号或授权码。
- [~] 完成最终 Linux 候选包部署、浏览器缓存清理和生产门禁复审。
- [!] Windows 环境明确排除,不纳入本轮上线验收。
当前任务状态
- [✓] T0:双机 Scert、存储通道、Nginx 均为 active;Scert 仅监听
127.0.0.1:8443,数据库仅监听回环地址,公网入口为 Nginx80/443。 - T1:MySQL 5.7 隔离实例和正式发行程序 CLI 实库测试已有通过证据,等待整体验收复审;不能替代 Web 首次流程。
- [~] T2:P0-10 剩余负向窗口、锁归属不匹配、文件摘要不匹配和历史恢复证据仍在核查。
- [~] T3:三数据库完整 Web 流程尚未取得全部直接实机证据。
- [!] T4:Smail 系统账户发信凭据尚未配置,密码重置邮件和新密码登录闭环阻塞。
- [~] T5:候选包已在双机运行并通过健康检查;最终清库后的首次流程、缓存清理和统一门禁复审仍未完成。
- [!] T6:Windows 不在本轮范围。
本轮直接证据
- [✓] 两台服务器均通过密码 SSH 复核:Scert、存储 socket、Nginx active。
- [✓] 两台服务器均保持 Scert
127.0.0.1:8443、MySQL 回环监听;odacm.cn的/readyz返回 200 ready,HTTP 入口跳转 HTTPS。 - [✓] 生产页面 DOM 未出现 SSH 私钥、公钥或
authorized_keys,服务器配置只提交密码和主机指纹;/api/v1/ssh-keys返回 404。 - [✓] 本地 Go 全量测试、前端 241 项测试和 Vite 生产构建通过;工作区无未提交代码修改。
- [!] 当前
/api/v1/settings显示通知 SMTP 未启用且系统通知凭据未配置;该项需要从 Smail 系统通知页面取得真实授权配置后才能继续。
当前总体验收结论
总体仍为 P0-03:完成,等待复审,不能因为 T0、T1 和 SSH 安全整改通过而宣布生产验收通过。上线前必须补齐 T2、T3、T4、T5 的直接证据;其中 T4 受 Smail 系统账户授权配置阻塞。
2026年10月2日最新候选包部署执行记录
本节仅记录本轮非敏感执行结果,不记录任何认证信息。部署使用密码 SSH,未使用 SSH 私钥、公钥或 authorized_keys,未创建辅助脚本,未做远端备份。
- 候选包来源为提交
cc3ac06,Linux amd64 正式构建通过;source_dirty=false,归档 SHA-256 为e4623636c5021a99998ce04f4680ebd3d107c02fb4a118a17875fc84c7faeefa,包内校验全部通过。 - 第二台
45.136.13.241安装器成功执行并恢复 Scert、存储 socket、Nginx;启动后早期探测得到一次 502,等待后/readyz严格 HTTPS 返回 200 ready。 - 第一台
8.137.23.95安装器成功执行并恢复 Scert、存储 socket、Nginx;该机使用odacm.cn严格验证时因现有证书 SAN 不匹配而被拒绝,属于真实安全阻塞,不作成功处理。 - 两台公网入口和监听边界未放宽:Scert 8443、MySQL 3306/33060 仅回环;跨服务器直连探测均超时;Nginx 80/443 配置测试通过。
/api/v1/ssh-keys实测为 404,生产构建静态扫描未发现 SSH 密钥 UI 标记。- 后端
go test -count=1 ./...、go vet ./...和前端 241 项回归通过。 - [!] 安装器自身保留升级前发布事务目录,这是正式安装器的失败恢复保护,不是本轮额外远端备份;未删除历史事务目录。
当前未完成门禁
- [~] P0-10 负向恢复矩阵及历史
recovery_required可信证据。 - SQLite、MySQL、PostgreSQL 清库后的完整 Web 首次流程。
- [!] Smail 系统通知账户、真实发信、验证码、超级管理员重置密码和改密后重新登录闭环。
- [!] 第一台
odacm.cn证书 SAN 不匹配及启动早期短暂 502 的生产结论。
2026年10月2日 SSH 登录密钥入口移除复核
本轮按安全要求收紧产品边界:SSH 登录只允许密码认证,不提供私钥、公钥、密钥生成、授权文件写入或密钥登录管理能力。HTTPS 证书部署所需的证书私钥路径仍保留,二者用途不同。
- 删除未注册的 SSH 密钥 CLI 入口文件,正式 CLI 不再包含密钥管理命令。
- 删除未注册的 SSH 密钥 HTTP 处理文件,生产路由继续不注册相关接口,
/api/v1/ssh-keys保持 404。 - 删除未引用的前端密钥弹窗文件和遗留样式,生产页面不提供密钥管理入口、命令或授权文件提示。
- 保留服务器主机指纹校验、SSH 密码字段和 HTTPS 证书私钥路径;没有把证书私钥误当作 SSH 登录凭据。
- 后端
go test ./...全部通过;前端 241 项测试全部通过;Vite 生产构建通过;git diff --check通过。 - [~] 需要将最新候选包按正式安装流程部署到双机,并复核页面和 API 后再进入最终生产验收。
本轮不删除历史数据库迁移文件和禁用兼容测试;它们只用于既有数据库升级和安全回归,不会启用 SSH 密钥能力。总体生产验收仍未通过,既有证书 SAN、启动早期 502、Smail 系统账户发信和三数据库完整 Web 流程仍是门禁项。