88 KiB
Scert 整改、合并与优化清单
最新进度摘要(2026-09-29)
总体验收位置仍为 P0-03:完成,待复审。 本轮完成 P0-10 任务并发、幂等、域名删除保护和服务重启恢复边界开发,并已完成本地回归;局部开发结果不代表生产部署验收通过。
- 已补齐幂等重放对
queued、running、retry_wait、cancelling四类活动状态的冲突返回。 - 已补齐管理证书
management_renewal的活动任务保护,避免重复创建并发任务。 - 已补齐域名删除对
renewal_run活动任务的保护,终态任务仍不阻塞合法删除。 - 服务重启恢复只更新本次恢复任务对应的活动尝试,不再污染历史终态任务的尝试记录。
- 新增专项回归测试;后端
go test ./...、前端 231 项测试和前端生产构建均通过。 - [~] P0-10 其余长任务链、三数据库实机矩阵和统一复审仍需继续执行。
- 生产数据库清理、浏览器缓存清理、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和最终生产验收尚未执行。
- [!] 不新增
[✓]复审通过项,总体验收继续保持 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 任务归属链,不把局部代码或专项测试结果视为整项复审通过。
- 任务工作流从认证请求上下文读取创建人,并写入证书任务的
operator_id。 - 任务开始和完成审计使用任务自身的创建人;后台调度任务继续保留空操作者边界。
- 创建人和审计归属专项测试通过;尚未执行三数据库、浏览器、密码 SSH、远端部署和生产门禁。
- [~] P0-10 其余任务链、DNS 验证、批量部署、崩溃恢复、重试幂等和 P0-12 仍未完成。
- [!] 不新增
[✓]复审通过项,总体验收继续停在 P0-03 完成,待复审。
最新进度摘要(2026-09-29 继续开发)
总体验收位置仍为 P0-03 完成,待复审。 本轮只推进 P0-10 任务工作流,不把局部代码完成或专项测试通过视为生产验收通过。
- 证书导入、恢复、校验任务入口接入应用层,提交
b899751。 - 当前证书部署、导入、恢复、校验入口接入任务取消上下文,任务中心取消可触发执行上下文取消。
- 已补充取消绑定回归用例;专项测试、后端全量
go test ./...和git diff --check已通过,当前批次等待复审。 - [~] P0-10 继续检查剩余任务状态、审计、尝试记录、取消、重试与崩溃恢复的一致性。
- P0-12 备份恢复、三数据库实库矩阵、浏览器、密码 SSH、远端部署及最终生产门禁尚未执行。
- [!] 不升级总体验收,不新增
[✓]复审通过项。
最新进度摘要(2026-09-29 23:48)
总体验收位置:P0-03 完成,待复审。 本节为最新摘要,下方保留历史批次。开发子项完成不等于整项复审或生产验收通过,原始 44 项范围不缩减。
- 上一批任务部分成功处理、HTTP 响应及前端状态展示已提交并推送
2b9d82d;上一批后端全量测试会话已成功结束。 - 核对确认域名与服务器多对多实现已存在,继续保留同项目判权、共享路径检查及局部解绑约束。
- [~] P0-10 正在修复新增活动状态与域名删除保护未同步的问题;补充活动状态拒绝及终态放行回归用例。
- 本批专项验证结果待开发完成后登记,不沿用历史通过结论。
- [~] P0-10 其余任务事务链与 P0-12 备份恢复仍未完成,其他原始待办继续保留。
- 统一生产构建、三数据库、浏览器清缓存、密码 SSH、远端部署和生产验收仍待后续执行。
当前进度(2026 年 9 月 29 日 16:55 更新)
当前总体验收位置:P0-03 完成待复审;并行开发批次:P0-07
18:22 更新(2026 年 9 月 29 日)
- P0-07 任务列表、任务详情、任务尝试已接入实时项目权限读取;任务取消使用
task.cancel判权并在事务内同步任务尝试状态。 - 证书申请任务入口使用项目可见域名和
certificate.manage判权;撤权、停用账户和跨项目读取由当前专项测试覆盖。 114514b已提交并推送;后端go test ./...在当前本地环境全部通过。- [~] P0-07 仍需继续完成其他资源写入权限、任务执行链、三数据库矩阵、浏览器、SSH、部署和生产验收。
- [!] 总体验收位置仍为 P0-03 完成待复审,本轮开发和后端测试通过不构成生产验收通过。 按总体验收口径当前仍在 P0-03。 P0-01~P0-03 为完成待复审,尚未取得生产部署验收结论;P0-07 的域名授权属于并行开发批次,已经有局部源码和专项测试证据,但不能据此把总体验收位置或 P0-07 整项升级为完成。遵循“先开发、后统一测试”,不能把开发子项或局部测试误写为生产验收通过。
| 编号 | 整项状态 | 已完成的开发或历史验证 | 尚需完成 |
|---|---|---|---|
| P0-01~P0-03 | [x] 完成待复审 |
范围、任务规格、源码与产物边界已整理 | 最终复审及相应生产证据 |
| P0-04 | [~] 进行中 |
工具链及构建边界已实现,历史候选有 Windows 正式包核验记录 | 当前代码重新构建、Linux 原生及服务运行证据 |
| P0-05 | [~] 进行中 |
三库迁移至模式 14,已有部分数据库历史验证 | 当前改动统一回归、PostgreSQL 实库、未关闭兼容性问题 |
| P0-06 | [~] 进行中 |
项目生命周期、资源归属、多对多及共享路径预检源码 | 其他实体关联、完整业务调用链及统一验证 |
| P0-07 | [~] 并行开发 |
成员角色、项目入口、七个资源 GET 隔离、绑定 PUT 授权和事务审计;域名写入授权已提交 5180c7d、读取与任务竞态修复已提交 82448c9 |
统一全量测试、三库矩阵、其他资源和任务权限链、浏览器与生产验收 |
16:55 更新:域名新增、修改、删除已接入项目权限和事务审计;域名更新改用项目可见资源读取;任务创建与删除共用域名行锁;新增审计失败回滚测试。e36794a 已成功推送。go test ./internal/repository 与 go test ./internal/httpapi 均通过;完整后端、前端、数据库矩阵、浏览器、部署和生产验收仍未完成。实际任务步骤见《Scert整改任务执行清单》首节。
总项状态
| 状态 | 数量 | 当前含义 |
|---|---|---|
[✓] 复审通过 |
0 | 尚未通过生产部署验收 |
[x] 完成待复审 |
3 | P0-01、P0-02、P0-03 |
[~] 进行中 |
27 | 子项实现和局部验证不能替代整项验收 |
[!] 阻塞 |
3 | P0-11、P2-08、P2-09 |
[ ] 未开始 |
11 | P1-10 及 P3 的十项 |
本轮新增进展与下一步
- 21:54 接续完成多对多表单收尾源码:资料创建成功、关联失败后保留已创建标识及选择;未修改资料时只重试关联,修改资料时更新既有域名。编辑先读取真实关联,失败禁止保存并可重新读取;服务器候选按项目过滤,保存期间防重复及切换。新增组合式状态、管理页接线及模板回归源码,全部待统一测试。
- 表单层保护不等于跨请求原子性或服务端创建幂等:创建响应丢失时要求刷新确认,不自动重发;跨刷新恢复与整项权限、部署整改仍待完成。
- 生命周期收尾及七个资源读取入口已接入真实项目授权,候选已在
709c1ef;绑定写入授权与事务审计检查点f38e290已提交推送。后续源码仍需统一测试,不能套用此前通过记录。 - 本轮多对多子项源码已补齐:两个域名可共享两台服务器,修改或清空一方不删除服务器或另一方关联;保存需双方同项目及实时权限。共享路径冲突在绑定、服务器修改及部署前检查,页面以悬浮提示说明复用。
- 已新增多对多、路径冲突、失败保留、审计回滚和页面多选回归源码;仅进行源码检查、格式化与差异检查,不执行测试、构建、浏览器或远端部署。详细边界见执行清单首节及支持矩阵第二十六节。
- 其他资源增删改、签发/导入/部署、DNS/SSH、任务读取和执行/取消/重试、审计读取仍需继续接入项目授权。跨服务器记录指向同一主机、配置并发变更与在途任务的路径占用仍待整体部署整改,不以本批静态路径检查替代完整安全边界。
- [!] 按用户指令先开发再集中测试,原始 44 项大项状态不变;没有新增复审通过或生产验收证据。
- 16:55 已同步本轮 P0-07 域名授权开发、任务引用保护和审计回滚专项结果;总体验收仍停留在 P0-03 完成待复审,不新增复审通过项。
20:47 阶段记录(历史)
- [~] 20:47 补充:首轮仓储/接口/真实应用接线组合测试退出 0,136 个叶子用例通过、5 条实库条件跳过;覆盖创建、更新、删除、权限拒绝、引用保护、非法输入及审计失败回滚。随后新增的会话验证后停用/降权、取消请求审计和跨数据库回滚测试尚未运行,不能套用首轮结果。
- [~] 前端已接入创建、编辑、二次确认删除及权限能力提示;项目页面与生命周期专项 35 项通过、0 失败、0 跳过,退出 0。覆盖重复提交、切换/卸载隔离、冲突刷新、末页删除回首页等;这是组合式逻辑和模板测试,不是真实浏览器验收。
- 当前候选的完整后端、完整前端、MySQL 双版本、竞态检测和构建尚待执行;本批源码尚未提交。下方 20:36 记录保留为历史状态,不代表当前仍未开始页面开发或从未测试。
20:36 阶段记录(历史)
- 核对当前工作区和执行清单:20:21 已开始项目生命周期与事务审计整改,修改前检查点为
dcede93;上批正式包验证记录已随61652f0提交。 - [~] 项目创建、编辑、删除仓储和成功变更事务审计已开始编写;默认项目及资源/成员引用保护、失败审计与回滚测试源码已新增,尚未执行测试,不记为实现完成或验证通过。
- [~] 创建、编辑、删除 API 及应用接线已有未提交修改;项目目录新增创建、管理和删除能力字段。HTTP 边界、真实应用接线及目录能力测试仍待补齐,权限和事务行为尚待验证。
- 前端创建、编辑及二次确认删除尚未修改;后端与前端回归、数据库验证及本批正式构建尚未执行。
- [!] 上批成员页面真实浏览器验收仍未完成,具体工具限制见下方 20:15 历史快照;该限制不阻止本批源码整改。
20:36 历史记录:当时仅同步文档,另有 7 个未提交的后端源码/测试文件;这是当时的工作区快照,不是当前待提交数量。当前已继续开发,仍未清理业务库、调用 RAM、修改 DNS 或远端部署。上批测试与正式包证据不能证明新增代码通过,生产验收仍未通过。
历史批次进展(2026 年 9 月 28 日 20:15,正式包启动验证)
- 使用已有正式构建脚本从干净提交
5f9af32生成 Windows 服务端与 Web 发布包;清单中的 10 个产物、压缩包内 9 个文件、实际运行目录中的主程序及 4 个 Web 文件均通过大小或 SHA-256 对应校验,精确范围见支持矩阵第二十五节。 - 正式包主程序已在隔离目录实际运行并提供前后端;临时 HTTPS 证书与可信本机日志中的 SHA-256 指纹完全一致,主机名校验通过。仅对这个已核对的临时入口接受浏览器证书例外,不是正式证书信任验收。
- 浏览器已打开真实 Scert 页面:无会话读取初始化配置返回 401,无效一次性令牌兑换返回 401,之后仍不能读取配置;相关响应禁止缓存。仅覆盖初始化入口的未认证拒绝路径。
- 首次初始化后端专项重新执行:128 个叶子用例通过、0 失败、4 条平台条件跳过,进程退出 0;跳过项不能按通过统计。
- [!] 当前浏览器文件工具的工作区范围不包含 Scert,向浏览器传入本机一次性地址文件被拒绝;未绕过该限制,未输出真实令牌,未取得初始化会话。此项是本批工具阻塞,不新增或替代原始 44 项总项状态。
- 完成合法会话兑换、数据库与 DNS 验证、管理入口证书配置后,再验收项目入口、成员操作、分页、撤权与布局。外部前置步骤尚未执行,不记成已通过或已复现的产品故障。
- 项目创建编辑删除及事务审计、全部资源和排队任务权限、PostgreSQL 当前实库、Linux 原生及生产门禁继续保留。
20:15 批次没有修改产品源码、清理现有业务库、调用 RAM、修改 DNS、签发业务证书或进行远端部署;其正式包证据见支持矩阵第二十五节。当前进度以本文件顶部及执行清单首节为准,以下保留为历史快照。原始 44 项与验收标准不缩减,生产验收仍未通过。
历史进度快照(2026 年 9 月 28 日 19:54,项目入口与成员页面本批回归完成,等待复审)
- 已新增实时授权的可见项目分页接口,以及管理员和普通项目管理员均可使用的成员页面;不暴露全站账户目录,不写死默认项目。
- 前端完整回归 198 项通过、0 失败,包含模板渲染和旧请求隔离;前端构建通过,不等于浏览器或生产验收。
- 最后缓存保护修改后的专项 83 个叶子通过、4 条实库条件跳过;完整后端 1700 个叶子通过、54 条条件跳过,均无失败。静态检查、模块校验、Windows 构建和 Linux 交叉构建均退出 0。
- MySQL 5.7/8.0 三轮目录/成员组合各 195 个叶子通过,0 失败、0 跳过;包含 SQLite 用例,不称纯 MySQL 测试。
- 本批三轮专项竞态 249 个叶子通过、0 失败、12 条外部 MySQL 条件跳过,退出码 0;总清单对应条目及相关文档已同步。精确范围见《构建版本与数据库支持矩阵》第二十四节,不称全仓库或实库竞态通过。
- 真实浏览器、项目创建编辑、全资源与排队任务权限、PostgreSQL 当前实库、Linux 原生及生产验收仍未完成。
原始 44 项仍为:复审通过 0、完成待复审 3、进行中 27、阻塞 3、未开始 11。页面实现与本地回归属于子项进展,不升级 P0-07 整项状态,生产验收仍未通过。当前待办以本节、P0-07 对应条目及执行清单首节为准;下方各批次保留历史证据,不覆盖本节。
历史进度快照(2026 年 9 月 28 日 19:10,成员接口回归通过,等待复审)
本批继续推进成员接口、分页及失败审计;实现与错误分类修复已保存到检查点 3857dac,随后增加正式边界测试。已重新执行当前源码专项、双版本 MySQL、完整后端及构建,不用上一批数据库候选结果替代本批证据。本批不清理现有业务库、不进行浏览器或远端部署测试。
本批任务状态
- 确认进度同步范围:保留原始 44 项、验收标准和历史证据,按实际实现与验证结果更新,不以测试数量折算完成率。
- 成员列表、授予及撤销接口已接入应用依赖;列表按用户账户分页,每页支持 5、10、15、30 位成员,同一账户的多个角色不拆页。实际应用登录及读取默认项目的接线测试通过,等待复审。
- 列表查询内实时判权、服务端会话身份和失败请求审计已通过专项;补齐会话验证后撤权/停用、取消请求独立审计、审计存储失败、DELETE 额外输入拒绝等边界。成功变更继续使用事务审计。
- 首轮
focused-first.jsonl的审计错误误报 409 已修复;精确区分三类驱动的唯一键冲突与触发器等其他错误。修复后focused-boundaries.jsonl为 62 个叶子通过、3 条实库条件跳过,退出码 0;失败日志保留。 - MySQL 5.7/8.0 依次完成三轮成员组合,各 171 个叶子通过、0 失败、0 跳过,退出码均为 0;组合含 SQLite 和错误分类用例,不称纯 MySQL 用例。
- 当前源码完整后端 1679 个叶子通过、0 失败、53 条条件跳过;Windows 独立程序历史备份/升级与成员恢复路径、静态检查、模块校验、Windows 构建及 Linux 交叉构建通过,顺序进程退出码 0。跳过与交叉构建不作为实机验收。
- 仓储、HTTP 和实际应用接线三轮竞态共 186 个叶子通过、0 失败、9 条外部 MySQL 条件跳过,退出码 0;这是成员专项竞态,不是全仓库或实库竞态验证。
- 已补充成员接口交接与模型边界,保留 Smail 参考接口文档不混写。详细命令、结果与范围见《构建版本与数据库支持矩阵》第二十三节。
- 成员管理页面、项目入口、全部业务资源授权及排队任务重判继续后续交付;PostgreSQL 当前实库、Linux 原生、完整发行包和生产验收仍未完成。
原始 44 项状态汇总
| 状态 | 数量 | 说明 |
|---|---|---|
[✓] 复审通过 |
0 | 尚无整项通过最终复审 |
[x] 已完成,等待复审 |
3 | P0-01、P0-02、P0-03 |
[~] 进行中 |
27 | 包含本批继续实施的 P0-07,不把局部源码实现记为整项完成 |
[!] 暂缓或存在阻塞 |
3 | P0-11、P2-08、P2-09 |
[ ] 未开始 |
11 | P1-10 及 P3 的 10 项 |
本节是 19:10 的历史批次记录,表内总项数量仍有效,但本节尚未交付的成员页面与项目入口已在后续批次实现。当前子项状态以本文顶部、P0-07 对应条目及《Scert整改任务执行清单.md》首节为准,整体验收仍未通过。
历史进度快照(2026 年 9 月 28 日 18:36,数据库候选回归完成,整体验收未通过)
本节更新下方 13:05 快照。检查点 0edde01 已提交推送;当前驱动改为 modernc.org/sqlite v1.59.0,配套 libc v1.75.7,实测引擎为 SQLite 3.53.4。旧 v1.40.1 的 3.50.4 引擎处于官方 WAL-reset 缺陷影响范围,先前通过只作为中间版本证据,不作为最终候选放行。
- 核实两个资源失败:MySQL 5.7 初始化日志明确记录缓冲池内存分配失败;8.0 测试进程内存分配失败。已按程序路径和隔离数据目录验证身份,终止崩溃后残留的两个测试实例进程;未触碰本机其他服务,未删除文件。
- 最后源码的取消查询 direct/prepared 和 WAL 完整性专项各 10 次通过,共 30 个叶子;服务并发关闭另重复 30 次通过。最终专项证据为
sqlite-verified.jsonl,不是初版sqlite-final.jsonl。 - MySQL 5.7/8.0 保留原用例、严格 TLS 和三轮重复,按版本依次执行;各 531 个叶子通过、0 失败、0 跳过,进程退出码均为 0。组合含 SQLite 用例,不称纯 MySQL 用例;表完整性和索引字段顺序检查通过不代表旧异常根因已修复。
- 最终候选完整后端 1635 个叶子通过、0 失败、52 条条件跳过;Windows 独立程序历史备份/升级/成员恢复、静态检查、模块校验和 Windows/Linux 候选构建通过,最终顺序进程退出码为 0。交叉构建不是 Linux 原生验收。
- 最终候选三轮扩大竞态
race-final.jsonl:831 个叶子通过、0 失败、15 条条件跳过,进程退出码为 0;跳过的是未配置外部 MySQL 的条件测试,实库证据单列,不复用 v1.40.1 的旧竞态数字。 - [!] 旧 MySQL 5.7 Error 1280 根因仍未关闭,重复通过也不能自动关闭该问题。
原始 44 项:[✓] 0、[x] 3、[~] 27、[!] 3、[ ] 11。P0-04/P0-05/P0-06/P0-07/P1-09 仍为 [~];本批子任务完成不升级整项状态,不按测试数量折算完成百分比,生产验收未通过。
接下来优先补齐成员管理 Web/API、分页、失败请求审计、业务资源授权和排队任务重判;PostgreSQL 当前实库、Linux 原生、完整发行包与实机服务验收仍未完成。最新证据目录为 artifacts/runtime-migration-20260928/,详细命令与边界见《构建版本与数据库支持矩阵》第二十二节;下方按时间保留历史结果,不代表当前待办。
历史进度快照(2026 年 9 月 28 日 13:05,运行时与迁移回归批次)
本节与《Scert整改任务执行清单.md》同步。成员基础已提交并推送为 b3909d8,事务审计源码已保存到检查点 83a3ada;检查点不代表验证完成或正式发布。当前 SQLite 驱动升级、取消查询回归及 MySQL 故障断言强化仍未提交。以下状态依据本次重新读取日志并取回全部四个测试进程退出码的结果,不沿用上一批完整回归结论。
原始 44 项状态汇总
| 状态 | 数量 | 含义 |
|---|---|---|
[✓] 复审通过 |
0 | 尚无整项达到最终复审标准 |
[x] 已完成,等待复审 |
3 | P0-01、P0-02、P0-03 |
[~] 进行中 |
27 | 局部实现或局部验证,不等于整项完成 |
[!] 暂缓或存在阻塞 |
3 | P0-11、P2-08、P2-09 |
[ ] 未开始 |
11 | P1-10 及 P3 的 10 项 |
不按测试通过数量折算整体完成百分比;生产部署验收仍未通过。下方各项原始需求、验收标准及总项状态不缩减。
本批任务与证据
- 核对需求与任务范围:保留原始 44 项及验收标准,区分源码实现、隔离回归、实机部署和最终验收;本次仅同步进度,不增加代码改动或重启测试。
- SQLite 取消查询文件占用已由正式测试在旧驱动复现;升级候选
modernc.org/sqlite v1.40.1后,取消查询 direct/prepared 各重复 10 次通过,服务并发关闭重复 30 次通过。修复候选仍待复审,不宣称已完成全部平台验证。 - 当前候选完整后端
backend.jsonl:1634 个叶子通过、0 失败、52 项条件跳过;Windows 构建、后续go vet ./...和go mod verify成功,顺序进程退出码为 0。条件跳过不计通过。 - 扩大范围的三轮竞态
race.jsonl:累计 828 个叶子通过、0 失败、15 项条件跳过,进程退出码为 0。 - [!] MySQL 5.7 三轮组合
mysql57-after.jsonl:530 个叶子通过、1 个失败、0 跳过(包含 SQLite 用例);失败为TestMySQLRealProjectMembersMigrationRetry的隔离 MySQL 实例初始化失败。后两轮该用例通过不能抵消本批失败,进程退出码为 1。 - [!] MySQL 8.0 三轮组合
mysql80-after.jsonl:已完成 247 个叶子通过,但数据库包进程报fatal error: runtime: cannot allocate memory,组合进程退出码为 1。中断测试不能计为通过,双版本完整回归仍未完成。 - [~] 已强化 MySQL 迁移故障断言与三条历史索引检查,避免把意外错误当成预期故障。此前 5.7 的 Error 1280 与服务端索引元数据不一致仍未关闭;重复测试未再复现不等于根因修复。
- 继续定位 MySQL 初始化与测试进程资源失败,复核旧索引异常;完成最终依赖选择、最终版本回归及其他专项文档同步后再提交修复候选。
- 成员管理 Web/API、分页、失败请求审计、全部业务入口资源判权和排队任务重新判权尚未接入;PostgreSQL 当前实库、Linux 原生验证及生产门禁仍未完成。
最新证据目录:artifacts/runtime-migration-20260928/。本次没有浏览器测试、SSH 或生产部署,没有清理业务库。P0-05、P0-06、P0-07、P1-09 总项继续保持 [~]。以下 12:48 记录为修复前历史,不代表当前候选的完整后端仍然失败。
历史进度:项目成员变更事务审计(12:48 核对)
- 已实现成功授予/撤销项目角色与审计同事务提交;审计失败或未实际写入时回滚成员变更,保留实时操作者判权。MySQL 检查成员表与审计表均为 InnoDB,不自动修改历史库引擎。实现完成待复审,不代表全库兼容性验证通过。
- 已补充正常变更、拒绝操作、审计故障回滚、自我撤权、历史保留、取消上下文、存储边界及并发重复变更测试。最新仓储专项
targeted-verified.jsonl:41 个叶子通过、0 失败、3 项条件跳过;跳过项不计通过。 - 最新三次竞态专项
race-verified.jsonl:累计 123 个叶子通过、0 失败、9 项条件跳过;随后go vet ./...、go mod verify成功,顺序进程退出码为 0。 - [!] MySQL 5.7 最新专项
mysql57-verified.jsonl:176 个叶子通过、1 个失败、0 跳过(包含 SQLite 用例)。失败为TestHistoryScopeMySQLMigrationRetry/version,错误为索引idx_audit_project_history的 Error 1280;进程退出码为 1,后续 MySQL 8.0 最新验证未启动。根因未确认,不能使用早期日志代替最后修复后的双版本验证。 - [!] 本批中间版本完整后端
backend.jsonl:1630 个叶子通过、1 个失败、52 项条件跳过。失败为服务关闭后 SQLite 文件仍被占用;最新独立重复日志service-close-repeat.jsonl共 10 次,8 次通过、2 次失败,退出码为 1。该前置步骤失败后未执行最新完整回归,不能声称当前源码完整后端已通过;测试名称含 Desktop 不构成跳过公共运行时资源释放问题的理由。 - 成员管理 Web/API、分页、失败请求审计、全部业务入口资源判权和排队任务重新判权尚未接入;PostgreSQL 当前实库、Linux 原生验证及生产门禁仍未完成。
本批证据目录为 artifacts/project-member-audit-20260928/,保留初始失败和中间日志。P0-05、P0-06、P0-07、P1-09 总项继续保持 [~]。本次只同步文档,不修改源码、不清库、不执行远端部署;以下旧批次的通过数字仅作历史证据。
历史进度:项目成员与实时判权批次
- 第 14 号迁移及六类项目角色已实现;授予/撤销在单条数据库语句内核对操作者,判权每次读取实际账户状态和当前成员关系。用户分组、普通管理员身份及默认项目均不隐式授予权限。
- 两项目、多角色、撤权、账户停用和降权、普通账户私钥限制、成员引用及 SQLite 替换边界通过专项回归;MySQL 双版本与 Windows 独立程序升级/成员备份恢复通过。详细数字和证据见支持矩阵第二十一节。
- 空邮箱误拦截修复后重新验证:完整后端 1623 个叶子通过、51 项条件跳过;三次竞态共 633 个叶子通过、18 项条件跳过;MySQL 双版本专项各 242 个叶子通过(包含 SQLite 用例),静态检查和模块校验通过。最新证据为
*-verified.jsonl,没有执行生产部署或清库。 - 成员管理界面/接口、变更审计、全部业务入口资源判权和排队任务重新判权尚未接入;剩余资源关联、PostgreSQL 当前实库、Linux 原生与生产门禁继续实施。
本批交付的是成员与判权基础,不等于 Web/API 已完成项目隔离。P0-05、P0-06、P0-07 仍为 [~],原始 44 项与验收标准保持不变。下方为历史批次证据。
历史进度:任务/审计关联批次
- 已提交:域名、服务器项目归属及同项目绑定约束(模式 11);SQLite 替换操作引用保护(模式 12)。已验证范围见执行清单和支持矩阵第十九节。
- P0-06 本批子项:模式 13、任务/审计项目/系统/未知范围快照、任务与操作者关联、历史保留均已实现并通过本批回归,等待复审。登录错记身份及会话失效后漏记审计也已复现修复。
- 完整后端 1514 个叶子通过,0 失败、49 项条件跳过;三次竞态共 258 个叶子通过;MySQL 双版本专项各 135 个叶子通过且无跳过(包含 SQLite 用例);独立 Windows 产品程序两条历史升级/备份恢复路径通过。精确命令和限制见支持矩阵第二十节。
- 剩余资源项目关联、项目成员权限、跨项目 Web/API 越权验证及生产部署验收仍未完成。
P0-05、P0-06、P0-07 总项均保持 [~];本批字段与范围校验不等于项目授权完成。原始 44 项及其验收标准不缩减。最新细项见《Scert整改任务执行清单.md》首节;以下旧批次进度只作历史记录,不代表当前实现。
历史进度(按批次保留)
当前进度(2026 年 9 月 28 日):源码
7284958已完成域名、服务器的四项归属字段、三库第 11 号迁移及同项目部署绑定约束;不是只有项目根实体。下方项目根实体段落属于上一批历史记录。复核进一步复现 SQLite 替换冲突可绕过引用保护,已由92c844f新增第 12 号迁移修复并通过本批回归,不能只修改旧迁移使已升级库漏修。最新状态见执行清单与支持矩阵第十九节。任务、审计等剩余资源关联、成员权限及生产验收未完成,P0-06/P0-07 均保持[~],全部 44 项范围不变。
本批最终验证补充:项目根实体已通过 SQLite 专项、MySQL 5.7/8.0 实库、3 次竞态检测及完整后端回归;默认和普通项目也已进入独立 Windows 程序的备份恢复验证。下方“待汇总”为启动阶段快照,最新证据以执行清单的“项目根实体最终验证结果”及支持矩阵第十八节为准。项目资源归属、关联约束和权限隔离仍未实现,P0-06/P0-07 保持
[~]。
2026 年 9 月 28 日补充进度:P0-06 已进入项目根实体实施,新增项目模型、三库第 10 号迁移及仓储,本地专项通过;完整后端与 MySQL 隔离测试待汇总。当前资源尚未增加项目归属,不代表 P0-07 权限隔离完成。详细需求、后续关联和删除约束见《项目资源关联模型.md》,实际验证见《Scert整改任务执行清单.md》。全部 44 项原始要求及各项验收标准不变。
适用项目:
D:\Desktop\Scert
产品基准:Certimate + Certd
产品范围:Web 管理页面 + Windows/Linux 服务端
明确排除:Wails 桌面版
整改日期:2026 年 9 月 27 日
进度同步:2026 年 9 月 28 日 12:48。最新批次事实与阻塞见本文件顶部及《Scert整改任务执行清单.md》首节;历史批次记录不代表当前验证结果。本文件的需求和验收标准不因状态更新而缩减,四份分级任务规格中的总项状态不变;
[~]仅表示已有实现或正在整改,不表示整项完成。
当前专项:P0-05 已修复 SQLite 历史模式 1~3 存在任务数据时迁移 4 失败的问题,并验证模式 1~9 的带数据升级、依赖对象保留及失败回滚重试。源码
fd2810b的 SQLite 专项通过 71 个叶子用例,27 个升级/恢复用例连续 3 次竞态检测通过;干净提交构建的独立 Windows 程序完成历史模式备份、升级及恢复后再升级,证据见支持矩阵第十七节。此前 WAL 恢复证据保留在第十六节。旧发行包真实数据迁移、完整发行包安装、真实服务重启、Linux 原生执行、取消边界及其余数据库和生产门禁仍待完成;P0-05 保持[~],全部 44 项范围不变。
一、整改目标
将 Scert 整改为一个具备以下能力的 Web 化 SSL 证书运维平台:
- 证书申请、导入、续期、部署、回滚统一管理。
- 支持 ACME、Let’s Encrypt、DNS-01、泛域名和 SAN 证书。
- 支持 DNS 账户、CNAME 委派和 DNS 验证记录管理。
- 支持多服务器、多部署目标和远程证书部署。
- 支持任务调度、失败重试、任务日志和执行历史。
- 支持通知、审计、监控、备份和恢复。
- 支持用户、角色、项目和资源级权限隔离。
- 支持 Windows Service 和 Linux systemd 部署。
- 所有敏感凭据、SSH 主机身份和证书私钥均具备安全保护。
- 所有生产能力都有独立的实机验收证据。
二、范围确认清单
| 编号 | 项目 | 状态 | 处理方式 |
|---|---|---|---|
| S-001 | Web 管理页面 | [x] 已确定 | 保留并完善 |
| S-002 | Windows 服务端 | [x] 已确定 | 保留并进行实机验收 |
| S-003 | Linux 服务端 | [x] 已确定 | 保留并进行 systemd 验收 |
| S-004 | Wails 桌面版 | [ ] 未开始 | 从正式目标中移除,暂不开发 |
| S-005 | CLI 工具 | [ ] 未开始 | 作为可选运维工具保留 |
| S-006 | Certimate 能力 | [x] 已确定 | 重点吸收证书自动化、DNS 和部署能力 |
| S-007 | Certd 能力 | [x] 已确定 | 重点吸收 Web 控制台、任务、通知、审计和监控能力 |
三、状态标记
[ ] 未开始
[~] 进行中
[x] 已完成,等待复审
[✓] 复审通过
[!] 暂缓或存在阻塞
说明:
- 自动化测试通过只能标记为
[x]。 - 真实远程部署、DNS、HTTPS、备份恢复通过后,才能标记为
[✓]。 - 构建成功、接口返回 HTTP 200、单元测试通过,不等同于生产验收通过。
四、P0:基础整改和阻塞项
P0-01 明确产品范围
状态: [x] 已完成,等待复审
整改内容
- 从正式开发目标中移除 Wails 桌面版。
- 将桌面窗口、桌面托盘、桌面端自动更新、桌面端配置管理和桌面端 UI 测试标记为范围外。
- 保留 CLI,但明确 CLI 只用于初始化、运维诊断、数据库迁移、备份恢复、服务安装和卸载。
验收标准
- 任务清单中不再将桌面版作为正式交付目标。
- Web 和服务端成为唯一正式交付范围。
- 发布文档、测试文档和安装文档范围一致。
P0-02 整理项目任务清单
状态: [x] 已完成,等待复审
将现有任务拆分为:需求确认、代码实现、自动化测试、隔离环境测试、生产部署测试、最终验收。
每项任务至少增加:
任务编号
任务名称
优先级
当前状态
问题说明
涉及文件
依赖任务
整改内容
验证命令
实机验收步骤
验收证据
复审结果
相关文档:
doc/Scert开发任务清单.md
doc/全面审查测试与优化记录.md
doc/发布加固与实机验收记录.md
doc/生产部署与运维说明.md
P0-03 整理源码、构建产物和部署产物
状态: [x] 已完成,等待复审
位置说明: 本项不是当前开发卡点。当前主线已转到 P0-07 的业务资源写入授权;保留 [x] 是因为整项还需最终复审,不表示后续任务未开始。
建立明确目录边界:
backend/ 后端源码
frontend/ 前端源码
deploy/ 部署脚本
doc/ 项目文档
tests/ 测试代码
scripts/ 开发辅助脚本
release/ 发布包
artifacts/ 测试证据
以下内容不得进入正式源码提交:
.runtime/
.deploy-stage/
dist/
*.exe
*.tar.gz
临时补丁文件
浏览器运行缓存
数据库文件
真实证书私钥
真实凭据
远程部署临时文件
验收标准
- 源码、测试产物、部署产物和生产证据分离。
.gitignore覆盖构建、运行、数据库和敏感文件。- 不删除现有文件,只进行归类、忽略或迁移。
P0-04 统一开发和构建版本
状态: [~] 进行中
本轮补充(2026-09-28 20:15): 干净提交 5f9af32 已经通过 Windows 正式发布构建;本机核对发布清单、压缩包内容及运行副本一致,并实际启动主程序与 Web。证据见支持矩阵第二十五节;没有执行 Windows 服务安装、Linux 正式包原生运行或生产门禁,不能升级整项状态。
最新进度(2026-09-28): SQLite 依赖已固定为 v1.59.0/libc v1.75.7,运行时引擎 3.53.4;最终候选完整后端、模块校验及双平台构建通过。最终竞态与完整发行门禁按首节及支持矩阵第二十二节记录,不沿用中间驱动结果放行。
统一记录并固定以下版本:
Go 版本
Node.js 版本
npm 版本
Vue 版本
数据库驱动版本
Go 依赖版本
操作系统版本
编译目标
验证命令:
go test ./...
go vet ./...
npm.cmd test
npm.cmd run build
P0-05 确认数据库正式支持矩阵
状态: [~] 进行中
最新进度(2026-09-28): 三库代码迁移已至模式 14;最后源码 SQLite 取消查询/WAL 专项、Windows 独立程序备份升级恢复通过,MySQL 5.7/8.0 成员与历史范围组合各三轮通过。旧 MySQL 索引异常根因仍未关闭,PostgreSQL 当前实库、Linux 原生及三库完整生产路径未验收;不能据局部通过升级总项状态。
项目当前涉及 SQLite、MySQL、PostgreSQL,需要明确正式支持范围。
建议定位:
| 数据库 | 定位 |
|---|---|
| SQLite | 单机、开发、轻量部署 |
| MySQL | 正式生产支持,需确认版本 |
| PostgreSQL | 正式生产支持,需确认版本 |
整改内容
- 统一三种数据库的迁移脚本。
- 检查字段类型、索引、默认值和事务行为。
- 验证 MySQL 5.7/8.0 兼容性。
- 验证 PostgreSQL 版本兼容性。
- 验证 SQLite 并发和锁行为。
- 为每种数据库提供初始化、升级、回滚和备份恢复流程。
重点目录:
backend/internal/database/
backend/internal/database/migrations/mysql/
backend/internal/database/migrations/postgres/
backend/internal/database/migrations/sqlite/
P0-06 建立统一领域模型
状态: [~] 进行中
本轮补充(2026-09-28): 生命周期仓储、成功事务审计、默认项目与引用保护及前端操作已实现,收尾候选已在 709c1ef。模式仍为 14;域名与服务器沿用联合主键的多对多关系,新增共享绑定、去重、局部清空和路径冲突保护源码及回归用例。先开发后统一测试,不能以历史局部结果关闭本项。
最新进度(2026-09-28): 已实现域名/服务器项目归属、同项目绑定、任务/审计范围快照与项目成员关系;成员成功变更和审计共用事务。并非下列全部核心实体均已交付;剩余资源关联与业务调用链仍需补齐,具体模型见《项目资源关联模型》第七至九节。
建议统一核心实体:
users 用户
roles 角色
projects 项目
domains 域名
certificates 证书
certificate_versions 证书版本
certificate_orders 证书申请订单
dns_accounts DNS 账户
dns_delegations CNAME 委派
servers 服务器
deployment_targets 部署目标
deployment_records 部署记录
tasks 任务
task_attempts 任务执行记录
renewal_policies 续期策略
notification_channels 通知渠道
notification_records 通知记录
audit_logs 审计日志
backup_records 备份记录
验收标准
- 证书、任务、部署、通知和审计不再各自孤立。
- 所有核心资源可以关联到项目。
- 所有异步操作可以关联到任务和任务执行记录。
- 所有危险操作可以关联到审计日志。
P0-07 增加项目级权限和资源隔离
状态: [~] 进行中
当前子任务(2026-09-28 22:08): 多对多表单重试、项目候选筛选及读取失败保护已提交 6c0ae31,回归源码待统一运行。当前开始域名新增/修改/删除的路由、实时授权、事务审计及任务引用保护整改;此子项仅完成源码核对,业务修改尚未开始,不提前记为完成。
本轮补充(2026-09-28): 项目生命周期前后端、七个资源 GET 的读取隔离,以及域名绑定 PUT 的实时授权、失败审计和成功事务审计已有源码实现;缺依赖拒绝服务,不回退全量或未授权仓储。多对多仍要求同项目,不因共用服务器扩大授权。生命周期收尾、读取隔离及本轮绑定代码尚未统一测试,其他资源写入和任务权限链未闭环,P0-07 保持进行中。
本轮补充(2026-09-28 20:15): 正式包已进入浏览器的首次初始化入口,未认证及无效令牌拒绝路径已验证;工具文件访问范围阻止传入本机一次性地址,尚未取得初始化会话,因此成员页面、角色操作和布局都未进行真实浏览器验收。详见本文件顶部与支持矩阵第二十五节,不以启动页面代替项目权限验收。
历史进度(2026-09-28 19:54): 成员及可见项目入口当时的前端 198 项通过,后端专项 83 个叶子通过、4 条条件跳过,完整后端 1700 个叶子通过、54 条条件跳过;双版本 MySQL 三轮组合各 195 个叶子通过,三轮专项竞态 249 个叶子通过、12 条条件跳过,静态检查与双平台构建通过。证据见第二十四节,仅适用于该批候选,不覆盖此后的生命周期收尾、读取隔离和多对多修改。
建议角色:
项目管理员
证书管理员
部署管理员
DNS 管理员
审计查看者
只读用户
系统管理员
每个资源至少增加:
project_id
owner_id
created_by
updated_by
必须防止:
- 用户查看其他项目证书。
- 用户查看其他项目服务器。
- 用户操作其他项目部署目标。
- 用户读取其他项目 DNS 凭据。
- 普通用户查看完整私钥。
- 普通用户删除或回滚其他项目资源。
P0-08 完善凭据和主密钥生命周期
状态: [~] 进行中
统一管理 DNS API 凭据、SSH 私钥、SMTP 凭据、HTTP 通知密钥、数据库密码、ACME 账户信息和证书私钥。
增加以下能力:
凭据创建
凭据验证
凭据禁用
凭据轮换
凭据删除
凭据引用检查
主密钥变更
主密钥备份
主密钥恢复
安全要求
- 页面不能返回完整敏感凭据。
- 日志中不得打印私钥、Token、密码。
- 删除凭据前必须检查引用关系。
- 主密钥丢失时必须明确不可恢复或恢复流程。
- 证书私钥必须进入受保护存储。
P0-09 强化 SSH 主机身份验证
状态: [~] 进行中
- 保存 SSH 主机指纹。
- 首次连接要求确认指纹。
- 指纹变化时阻断部署。
- 支持人工更新可信指纹。
- 禁止跳过主机校验。
- 部署失败时记录主机、端口、用户和指纹摘要,但不得记录私钥。
必须阻断:
首次连接未确认指纹
远端主机指纹变化
目标主机与保存指纹不匹配
部署凭据失效
P0-10 统一任务、部署和回滚事务模型
状态: [~] 进行中
所有长耗时操作统一进入任务中心:
证书申请
证书续期
DNS 验证
证书部署
批量部署
远程备份
证书回滚
证书恢复
任务状态统一为:
待执行
执行中
成功
失败
取消中
已取消
等待重试
部分成功
每个任务需要包含任务 ID、任务类型、创建人、所属项目、开始时间、结束时间、当前步骤、执行日志、错误原因、重试次数和关联资源。
P0-11 建立生产验收门禁
状态: [!] 暂缓或存在阻塞
生产验收必须拆分为:
- 本地单元测试。
- 隔离环境测试。
- 数据库兼容测试。
- 真实 DNS 测试。
- 真实 ACME Staging 测试。
- 真实 ACME Production 测试。
- 真实远程 SSH/SFTP 测试。
- 真实 HTTPS/SNI 测试。
- Windows Service 测试。
- Linux systemd 测试。
- 备份恢复测试。
- 升级回滚测试。
不能使用以下方式代替生产验收:
-k
--insecure
强制 IP TLS
跳过 SSH 主机身份验证
仅使用 HTTP 200
仅使用构建成功
仅使用单元测试通过
P0-12 完成备份和恢复方案
状态: [~] 进行中
需要备份
数据库
证书元数据
证书版本
证书私钥
DNS 账户配置
服务器配置
任务配置
通知配置
主密钥配置
需要支持
手动备份
自动备份
备份列表
备份校验
备份下载
备份恢复
恢复前确认
恢复失败回滚
恢复审计
五、P1:Certimate + Certd 核心产品能力
P1-01 建设统一证书中心
状态: [~] 进行中
页面建议:
frontend/src/views/Certificates/
├── Certificates.vue
├── Certificates.js
├── Certificates.css
├── CertificateDetail.vue
├── CertificateDetail.js
├── CertificateDetail.css
└── components/
功能要求
- 证书列表。
- 按域名、项目、状态、到期时间筛选。
- 显示证书状态和剩余有效期。
- 查看证书链和 SAN 域名。
- 查看签发机构。
- 查看证书版本。
- 手动续期。
- 手动部署。
- 回滚版本。
- 导入已有证书。
- 删除无引用证书。
P1-02 完善证书详情和版本管理
状态: [~] 进行中
证书详情至少包含:
证书名称
主域名
SAN 域名
所属项目
签发机构
签发时间
到期时间
剩余天数
证书状态
申请方式
DNS 验证方式
当前版本
历史版本
部署状态
关联任务
关联服务器
证书状态建议:
待申请
申请中
有效
即将到期
已过期
申请失败
部署失败
已吊销
已禁用
P1-03 完善 ACME 和 DNS 管理
状态: [~] 进行中
支持:
- Let’s Encrypt Production。
- Let’s Encrypt Staging。
- DNS-01。
- HTTP-01。
- 单域名。
- 泛域名。
- SAN 证书。
- 多 DNS Provider。
- DNS 账户验证。
- DNS 账户禁用和轮换。
- CNAME 委派。
- TXT 记录添加、读取和清理。
页面建议:
frontend/src/views/DNSAccounts/
frontend/src/views/DNSDelegations/
P1-04 建设任务中心
状态: [~] 进行中
页面建议:
frontend/src/views/Tasks/
├── Tasks.vue
├── Tasks.js
├── Tasks.css
├── TaskDetail.vue
├── TaskDetail.js
├── TaskDetail.css
└── components/
功能要求:
- 任务列表和任务详情。
- 实时查看任务进度。
- 查看任务日志和执行步骤。
- 失败重试。
- 取消任务。
- 查看历史任务。
- 按项目、类型、状态筛选。
- 查看关联证书、服务器和部署记录。
P1-05 统一续期策略
状态: [~] 进行中
续期策略支持:
按剩余天数续期
按固定日期续期
按证书标签续期
按项目续期
按证书类型续期
续期失败自动重试
续期成功自动部署
续期后自动通知
必须防止:
- 同一个证书重复申请。
- 同一个证书并发续期。
- 续期任务重复部署。
- 失败后无限重试。
- 续期成功但部署状态未更新。
P1-06 建设服务器和部署目标中心
状态: [~] 进行中
页面建议:
frontend/src/views/Servers/
├── Servers.vue
├── Servers.js
├── Servers.css
├── ServerDetail.vue
├── ServerDetail.js
├── ServerDetail.css
└── components/
功能要求:
- 服务器列表。
- SSH 连接测试。
- 主机指纹管理。
- 服务器标签。
- 所属项目。
- 服务器分组。
- 部署路径配置。
- reload 命令配置。
- 部署后健康检查。
- 服务器启用和禁用。
P1-07 建设多服务器部署策略
状态: [~] 进行中
支持:
单服务器部署
多服务器并行部署
多服务器串行部署
按标签批量部署
部署失败停止
部署失败继续
失败后自动回滚
部分成功状态
部署后 HTTPS 检查
部署前备份
部署事务建议:
准备阶段
连接验证
远程备份
上传临时文件
权限校验
原子替换
执行 reload
HTTPS 验证
标记成功
失败回滚
P1-08 建设通知中心
状态: [~] 进行中
页面建议:
frontend/src/views/Notifications/
├── Notifications.vue
├── Notifications.js
├── Notifications.css
├── NotificationChannel.vue
└── components/
支持 HTTP Webhook、SMTP 邮件,以及任务成功、任务失败、证书即将过期、证书已过期、部署失败、服务异常和备份失败通知。
要求:
- 通知渠道可测试。
- 通知失败可重试。
- 通知内容不得包含私钥和敏感凭据。
- 通知发送记录可审计。
P1-09 建设审计中心
状态: [~] 进行中
最新进度(2026-09-28): 已增加任务/项目范围和实际操作者快照,成员成功授予/撤销与审计同事务,审计失败回滚成员变化;失败请求审计、完整接口接入及本节列出的全部危险操作覆盖仍未完成。不能把成功审计专项通过标为整个审计中心完成。
页面建议:
frontend/src/views/AuditLogs/
├── AuditLogs.vue
├── AuditLogs.js
└── AuditLogs.css
必须记录:
登录、退出、密码修改
用户创建、用户删除、角色变化
项目变化
证书申请、证书导入、证书删除、证书回滚
部署、回滚
凭据创建、修改、删除
服务器指纹变化
备份、恢复
系统设置修改
审计字段:
操作人
操作时间
操作类型
资源类型
资源 ID
项目 ID
客户端 IP
操作结果
失败原因
请求追踪 ID
P1-10 建设证书监控仪表盘
状态: [ ] 未开始
Dashboard 展示:
证书总数
有效证书
即将过期证书
已过期证书
申请失败证书
部署失败证书
今日任务数
失败任务数
服务器数量
异常服务器数量
最近审计事件
最近通知事件
到期时间建议:
超过 30 天:正常
7 至 30 天:提醒
1 至 7 天:警告
已过期:严重
P1-11 建设备份恢复页面
状态: [~] 进行中
页面建议:
frontend/src/views/Backups/
├── Backups.vue
├── Backups.js
├── Backups.css
└── RestoreDialog/
高风险操作必须:
- 二次确认。
- 输入确认文字。
- 显示影响范围。
- 恢复前自动备份。
- 恢复过程进入任务中心。
- 恢复结果写入审计日志。
- 恢复失败自动回滚。
P1-12 统一 API 契约和权限矩阵
状态: [~] 进行中
整理所有接口:
接口路径
请求方法
是否需要登录
允许角色
项目权限
资源权限
是否写审计日志
是否需要幂等键
是否可能返回敏感信息
错误码
重点文件:
backend/internal/httpapi/server.go
backend/internal/httpapi/middleware.go
backend/internal/httpapi/auth.go
backend/internal/httpapi/certificate_api.go
backend/internal/httpapi/task_api.go
backend/internal/httpapi/renewal_api.go
backend/internal/httpapi/users_api.go
backend/internal/httpapi/user_groups.go
backend/internal/httpapi/settings_api.go
backend/internal/httpapi/ssh_key.go
六、P2:Web 体验和运维优化
P2-01 统一 Web 页面结构
状态: [~] 进行中
建议目录:
frontend/src/views/
├── Dashboard/
├── Certificates/
├── Tasks/
├── DNSAccounts/
├── DNSDelegations/
├── Servers/
├── Notifications/
├── AuditLogs/
├── Backups/
├── UserManagement/
├── Settings/
├── SetupWizard/
└── Login/
每个页面建议拆分为页面 .vue、.js、.css 和 components/。
P2-02 统一中文显示和错误信息
状态: [~] 进行中
- 不允许出现 HTML 实体编码。
- 不允许出现英文状态值直接展示。
- 不允许出现空白错误提示。
- 不允许把后端堆栈直接展示给用户。
- 所有危险操作使用中文确认提示。
- 所有任务状态使用统一中文文案。
例如:
pending 待执行
running 执行中
success 成功
failed 失败
retrying 等待重试
cancelled 已取消
P2-03 所有长操作任务化
状态: [~] 进行中
以下操作不能长期阻塞 HTTP 请求:
证书申请
证书续期
DNS 验证
批量部署
远程备份
数据库恢复
批量删除
批量导入
统一返回 task_id,前端通过任务详情或轮询查看状态。
P2-04 增加幂等和重复操作保护
状态: [~] 进行中
增加:
幂等键
操作锁
任务去重
证书申请锁
部署锁
恢复锁
重复提交检测
重点防止重复申请、重复部署、刷新页面重复提交、定时任务重复续期和多实例并发处理同一证书。
P2-05 完善日志、指标和追踪
状态: [~] 进行中
日志增加请求 ID、任务 ID、用户 ID、项目 ID,并对敏感字段脱敏。
建议指标:
证书申请成功率
证书续期成功率
部署成功率
任务失败率
任务执行耗时
DNS 验证耗时
远程连接失败次数
通知失败次数
数据库错误次数
P2-06 完善接口和前端测试
状态: [~] 进行中
后端验证:
go test ./...
go vet ./...
前端验证:
npm.cmd test
npm.cmd run build
补充权限、越权、证书流程、重复提交、部署回滚、数据库迁移、凭据脱敏、登录、初始化向导、任务查询、部署确认、错误重试和权限显示测试。
P2-07 完善升级、降级和卸载流程
状态: [~] 进行中
需要提供:
升级前备份
数据库迁移
配置迁移
静态文件升级
服务重启
升级失败回滚
版本检查
卸载确认
卸载保留数据
卸载删除数据
P2-08 完成 Windows Service 实机验收
状态: [!] 暂缓或存在阻塞
验证安装、启动、停止、重启、开机启动、异常恢复、日志目录、配置目录、数据目录、卸载和升级。
相关文件:
deploy/install-windows.ps1
P2-09 完成 Linux systemd 实机验收
状态: [!] 暂缓或存在阻塞
验证安装、启动、停止、重启、开机启动、异常恢复、运行用户、日志输出、配置目录、数据目录、升级和卸载。
相关文件:
deploy/install-linux.sh
deploy/systemd/
P2-10 完善安全基线
状态: [~] 进行中
检查:
- 默认账户是否必须修改密码。
- 默认密码是否禁止继续使用。
- 登录失败是否限流。
- 会话是否支持失效。
- 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 | 移动端适配 | [ ] 未开始 |
八、推荐整改顺序
第一阶段:基础和安全
P0-01 产品范围
P0-02 任务清单
P0-03 工作区整理
P0-04 版本统一
P0-05 数据库支持矩阵
P0-06 领域模型
P0-07 权限隔离
P0-08 凭据生命周期
P0-09 SSH 指纹
P0-10 任务事务模型
第二阶段:核心业务
P1-01 证书中心
P1-02 证书详情
P1-03 DNS 管理
P1-04 任务中心
P1-05 续期策略
P1-06 服务器中心
P1-07 多服务器部署
P1-08 通知中心
P1-09 审计中心
第三阶段:运维和验收
P1-10 监控仪表盘
P1-11 备份恢复
P1-12 API 权限矩阵
P2-03 长操作任务化
P2-04 幂等保护
P2-05 可观测性
P2-07 升级回滚
P2-08 Windows Service 验收
P2-09 Linux systemd 验收
P0-11 生产验收门禁
九、第一版完成标准
以下条件全部满足,才能认为 Scert 第一版整改完成:
[ ] Web 页面覆盖证书、任务、服务器、DNS、通知、审计和备份
[ ] Wails 桌面版不再作为正式交付目标
[ ] 证书申请、续期、部署、回滚均进入任务中心
[ ] 证书、任务、部署和审计可以相互关联
[ ] 资源具备项目级权限隔离
[ ] DNS、SSH、SMTP 等凭据安全存储
[ ] SSH 主机指纹得到验证
[ ] 证书部署失败可以回滚
[ ] 任务支持失败重试和重复提交保护
[ ] 数据库迁移在正式支持数据库上通过
[ ] 备份和恢复在隔离环境通过
[ ] Windows Service 实机通过
[ ] Linux systemd 实机通过
[ ] HTTPS、SNI 和证书链验证通过
[ ] 真实 DNS 和 ACME 流程通过
[ ] 所有危险操作写入审计日志
[ ] 所有敏感信息不会出现在日志和页面中
[ ] 自动化测试通过
[ ] 生产验收证据完整
十、执行约束
- 未经授权不删除现有文件。
- 不将真实密钥、证书私钥、Token 和密码提交到 Git。
- 不使用
-k、--insecure、强制 IP TLS 或跳过 SSH 主机身份验证。 - 每次修改前先检查当前分支、工作区和未提交变更。
- 每完成一个任务,补充验证命令和验收证据。
- 代码标识符使用英文,界面、注释、文档和用户提示使用中文。
- 每次测试区分本地、隔离环境、测试环境和生产验收结果。
本轮开发进度(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????? ?????????????????????????????????????????????????
- P0-07 ????????SSH?DNS??????????????????????????????????????? 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 完成待复审。
[x]DNS 账户项目归属已加入配置、接口和管理页面。[x]DNS 凭据使用和项目归属修改已加入实时项目权限校验。[x]无权限修改配置的拒绝回归测试已补齐,确认原配置不被改变。[x]后端专项测试、静态检查、前端测试和生产构建通过。[~]P0-07 其他任务/证书/部署权限链继续开发。[!]三数据库、浏览器、远端服务器和生产部署验收仍未开始。
本轮开发进度(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 日)
- 失败或取消的 certificate_issue 任务已增加手动重试闭环:新增 task.retry 权限和 POST /api/v1/tasks/:id/retry 接口;重试前重新校验项目、证书、部署及 DNS 凭据权限。
- 重试在事务内更新实际操作者、任务状态和尝试编号,创建新的运行中尝试,并复用首次证书申请的执行、错误脱敏和审计流程;并发重复重试仅允许一个请求成功。
- 已补充仓储、HTTP、权限、并发和任务状态回归测试;前端运行概览增加“重试任务”入口,按钮与“取消任务”按状态互斥显示。
- 当前候选验证通过:后端 go test ./...、go vet ./...,前端 230 项测试、前端生产构建和 git diff --check 均通过。
- 本轮提交 35260bc、aa587d3 已提交;本轮最后一次推送成功。
- [~] P0-07 仍为并行开发,任务重试子项完成待复审;三数据库矩阵、浏览器、SSH、远端部署、生产部署和完整权限联动仍未完成。
- [!] 当前总体验收位置仍为 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 日)
- 前端全量测试 231 项通过,后端
go test ./...与go vet ./...通过,前端生产构建通过。 - 全局系统设置、DNS 在线检查、阿里云 DNS 检查和手动批量续期的超级管理员边界已完成回归;普通管理员只读和拒绝路径已覆盖。
- 本轮测试前提修正已提交
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-10 任务取消入口)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅补齐任务取消入口与任务状态模型的开发缺口,不代表 P0-10 整项复审通过,也不代表生产部署验收通过。
- 已完成,等待复审:任务取消 HTTP 入口与仓储层状态范围统一,支持
queued、running、retry_wait、cancelling四种活动状态。 - 已完成,等待复审:新增
retry_wait、cancelling任务及任务尝试的取消回归测试,确认任务和当前任务尝试均转为cancelled。 - 已完成,等待复审:管理证书续期和自动续期任务仍由工作流控制,继续拒绝通过通用任务接口直接取消。
- 已完成,等待复审:定向 HTTP 测试、后端全量
go test ./...、go vet ./...和git diff --check均通过。 - [~] 进行中:P0-10 其余任务入口、三数据库实机矩阵、崩溃恢复复核和统一复审仍需继续执行。
- 未开始:P0-12 备份恢复、最终浏览器清缓存、密码 SSH、远端部署和生产门禁仍未完成。
- [!] 总体验收不得升级:当前仍为 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-03 完成,待复审。本轮完成开发阶段的证书任务并发保护、DNS 验证阶段进度记录,以及域名与服务器双向多对多部署关联的回归核验;不代表生产部署验收通过。
- 已完成,等待复审:同一域名的同类活动证书任务增加仓储层并发保护,重复创建返回冲突,避免并发任务绕过入口检查。
- 已完成,等待复审:DNS 凭据权限验证、逐域名验证和证书申请阶段会同步任务阶段及中文进度信息。
- 已完成,等待复审:一个域名可关联多个部署服务器,一个服务器可关联多个域名;关联读取、解除单个关联、项目权限和共享路径冲突已有回归覆盖。
- 已完成,等待复审:后端多对多专项测试通过;前端 231 项测试全部通过,生产构建通过。
- [~] 进行中:P0-10 其余长任务取消、重试、崩溃恢复、实机数据库矩阵和统一复审仍需继续执行。
- 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署和最终生产门禁仍未执行。
- [!] 总体验收不得升级:当前仍为 P0-03 完成,待复审,本轮没有新增
[✓]复审通过项。
最新验证摘要(2026-09-29)
总体验收位置继续保持 P0-03:完成,待复审。本轮复核域名与服务器双向多对多部署关系,并完成本地自动化回归;不代表生产部署验收通过。
- 已完成,等待复审:后端全量
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 任务取消入口)
总体验收位置继续保持 P0-03:完成,待复审;本轮仅补齐任务取消入口与状态模型的一致性,不代表整项复审通过或生产部署验收通过。
- 已完成,等待复审:任务取消入口支持
queued、running、retry_wait、cancelling四种活动状态。 - 已完成,等待复审:新增
retry_wait、cancelling任务及任务尝试取消回归,确认任务和活动尝试均进入cancelled。 - 已完成,等待复审:管理证书续期和自动续期任务仍由工作流控制,通用任务接口继续拒绝直接取消。
- 已完成,等待复审:定向测试、后端全量
go test ./...、go vet ./...和git diff --check均通过。 - [~] 进行中:P0-10 其余任务入口、跨数据库实机矩阵、崩溃恢复复核和统一复审仍需继续。
- 未开始:P0-12 备份恢复、最终浏览器清缓存、密码 SSH、远端部署和生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 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:完成,待复审;本轮仅补齐证书导入、恢复、校验入口的任务中心回归约束,不代表 P0-10 统一复审或生产部署验收通过。
- 已完成,等待复审:
certificate_import、certificate_restore、certificate_validate入口均验证任务类型、任务尝试和终态审计记录。 - 已完成,等待复审:证书任务工作流在创建任务前拒绝空域名、空任务类型或阶段、零次执行和空执行器,避免无效任务落库。
- 已完成,等待复审:
go test ./internal/app ./internal/httpapi ./internal/repository、go vet ./internal/app ./internal/httpapi ./internal/repository和git diff --check均通过;代码提交并推送9741721。 - [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 P0-03:完成,待复审,没有新增
[✓]复审通过项。