Scert/doc/Scert整改合并优化清单.md

48 KiB
Raw Blame History

Scert 整改、合并与优化清单

当前进度(2026 年 9 月 28 日 20:47,项目生命周期已通过首轮局部测试,完整回归未完成)

总项状态

状态 数量 当前含义
[✓] 复审通过 0 尚未通过生产部署验收
[x] 完成待复审 3 P0-01、P0-02、P0-03
[~] 进行中 27 子项实现和局部验证不能替代整项验收
[!] 阻塞 3 P0-11、P2-08、P2-09
[ ] 未开始 11 P1-10 及 P3 的十项

本轮新增进展与下一步

  • [~] 20:47 补充:首轮仓储/接口/真实应用接线组合测试退出 0,136 个叶子用例通过、5 条实库条件跳过;覆盖创建、更新、删除、权限拒绝、引用保护、非法输入及审计失败回滚。随后新增的会话验证后停用/降权、取消请求审计和跨数据库回滚测试尚未运行,不能套用首轮结果。
  • [~] 前端已接入创建、编辑、二次确认删除及权限能力提示;项目页面与生命周期专项 35 项通过、0 失败、0 跳过,退出 0。覆盖重复提交、切换/卸载隔离、冲突刷新、末页删除回首页等;这是组合式逻辑和模板测试,不是真实浏览器验收。
  • 当前候选的完整后端、完整前端、MySQL 双版本、竞态检测和构建尚待执行;本批源码尚未提交。下方 20:36 记录保留为历史状态,不代表当前仍未开始页面开发或从未测试。

20:36 阶段记录(历史)

  • 核对当前工作区和执行清单:20:21 已开始项目生命周期与事务审计整改,修改前检查点为 dcede93;上批正式包验证记录已随 61652f0 提交。
  • [~] 项目创建、编辑、删除仓储和成功变更事务审计已开始编写;默认项目及资源/成员引用保护、失败审计与回滚测试源码已新增,尚未执行测试,不记为实现完成或验证通过。
  • [~] 创建、编辑、删除 API 及应用接线已有未提交修改;项目目录新增创建、管理和删除能力字段。HTTP 边界、真实应用接线及目录能力测试仍待补齐,权限和事务行为尚待验证。
  • 前端创建、编辑及二次确认删除尚未修改;后端与前端回归、数据库验证及本批正式构建尚未执行。
  • [!] 上批成员页面真实浏览器验收仍未完成,具体工具限制见下方 20:15 历史快照;该限制不阻止本批源码整改。

本次仅核对并同步进度文档,不执行产品测试、不修改产品源码、不清理业务库、不调用 RAM、不修改 DNS 或进行远端部署。当前工作区另有 7 个未提交的后端源码/测试文件,不纳入本次文档提交。上批测试与正式包证据不能证明这些新增代码通过;原始 44 项总状态不变,生产验收仍未通过。

历史批次进展(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 证书运维平台:

  1. 证书申请、导入、续期、部署、回滚统一管理。
  2. 支持 ACME、Let’s Encrypt、DNS-01、泛域名和 SAN 证书。
  3. 支持 DNS 账户、CNAME 委派和 DNS 验证记录管理。
  4. 支持多服务器、多部署目标和远程证书部署。
  5. 支持任务调度、失败重试、任务日志和执行历史。
  6. 支持通知、审计、监控、备份和恢复。
  7. 支持用户、角色、项目和资源级权限隔离。
  8. 支持 Windows Service 和 Linux systemd 部署。
  9. 所有敏感凭据、SSH 主机身份和证书私钥均具备安全保护。
  10. 所有生产能力都有独立的实机验收证据。

二、范围确认清单

编号 项目 状态 处理方式
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] 已完成,等待复审

建立明确目录边界:

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 20:36): 项目生命周期仓储、成功变更与审计同事务、失败审计及回滚测试源码正在编写;新增代码尚未执行测试。项目默认项和资源/成员引用保护仍需通过回归验证,不以已有成员事务测试代替本批生命周期验证。

最新进度(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 20:36): 项目创建/编辑/删除 API、应用接线及目录能力字段已有未提交实现;服务端实时判权、非法字段、删除确认、撤权及审计失败边界尚待测试。前端生命周期操作尚未修改,整体仍为进行中;下方测试数字仅适用于上批代码。

本轮补充(2026-09-28 20:15): 正式包已进入浏览器的首次初始化入口,未认证及无效令牌拒绝路径已验证;工具文件访问范围阻止传入本机一次性地址,尚未取得初始化会话,因此成员页面、角色操作和布局都未进行真实浏览器验收。详见本文件顶部与支持矩阵第二十五节,不以启动页面代替项目权限验收。

最新进度(2026-09-28 19:54): 成员列表、授予/撤销 API、事务及失败审计已实现;新增可见项目分页入口、管理员和普通项目管理员的成员页面、账户 ID 展示及禁止缓存保护。前端 198 项通过,最后源码后端专项 83 个叶子通过、4 条条件跳过,完整后端 1700 个叶子通过、54 条条件跳过;双版本 MySQL 三轮组合各 195 个叶子通过,静态检查、模块校验及双平台构建通过。本批三轮专项竞态 249 个叶子通过、12 条外部 MySQL 条件跳过,退出码 0;证据见支持矩阵第二十四节。真实浏览器、项目创建编辑删除、全部资源入口和排队任务执行/取消/重试重判仍未完成,P0-07 保持进行中;页面实现与本地回归不等于完整项目隔离或生产验收。

建议角色:

项目管理员
证书管理员
部署管理员
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 建立生产验收门禁

状态: [!] 暂缓或存在阻塞

生产验收必须拆分为:

  1. 本地单元测试。
  2. 隔离环境测试。
  3. 数据库兼容测试。
  4. 真实 DNS 测试。
  5. 真实 ACME Staging 测试。
  6. 真实 ACME Production 测试。
  7. 真实远程 SSH/SFTP 测试。
  8. 真实 HTTPS/SNI 测试。
  9. Windows Service 测试。
  10. Linux systemd 测试。
  11. 备份恢复测试。
  12. 升级回滚测试。

不能使用以下方式代替生产验收:

-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 流程通过
[ ] 所有危险操作写入审计日志
[ ] 所有敏感信息不会出现在日志和页面中
[ ] 自动化测试通过
[ ] 生产验收证据完整

十、执行约束

  1. 未经授权不删除现有文件。
  2. 不将真实密钥、证书私钥、Token 和密码提交到 Git。
  3. 不使用 -k、--insecure、强制 IP TLS 或跳过 SSH 主机身份验证。
  4. 每次修改前先检查当前分支、工作区和未提交变更。
  5. 每完成一个任务,补充验证命令和验收证据。
  6. 代码标识符使用英文,界面、注释、文档和用户提示使用中文。
  7. 每次测试区分本地、隔离环境、测试环境和生产验收结果。