Scert/doc/基础整改任务规格.md

728 lines
77 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 基础整改任务规格
## 当前规格核对(2026-09-30 15:26,SSH 失败现场保留)
**总体验收仍为 P0-03:完成,待复审。** 开发子项的完成记录与生产验收结论分开管理。
- [x] 本轮只读确认密码 SSH 可用、Scert 正在运行,远端主程序与本地正式候选校验值一致。
- [~] 公钥转换和内置安装命令的源码疑点待专项回归确认;目前没有新的修复或验收通过结论。
- [ ] 后续按失败复现、代码修复、构建部署、密码安装、密钥回连、证书推送的顺序补齐证据。
- [!] 多服务器验收仍要求第二台真实目标服务器;保留当前失败现场,不以重复记录、辅助脚本或本地测试替代生产验收。
## 最新规格执行进度(2026-09-30,远端密码 SSH 阻塞)
**总体验收位置仍为 P0-03:完成,待复审。** 本轮规格实机复核已确认目标服务器的密码 SSH 和主机指纹本身可用,但 Scert 自动公钥部署流程返回 502,因此尚不满足密钥登录和证书推送的生产前置条件。
- [x] 规格实机:正式 HTTPS 入口登录、会话读取和资源列表读取通过。
- [x] 规格实机:目标机密码 SSH 连接通过,登记的 ED25519 指纹与目标机实际指纹一致。
- [!] 规格阻塞:Scert 自动部署公钥失败,服务器资源保留失败状态;尚未执行证书文件写入、Nginx 配置校验和重载。
- [~] 规格待修复:自动公钥部署、密钥登录验证和服务器保存成功路径。
- [!] 规格限制:现场只有一台真实可用服务器,不用虚构或重复服务器记录作为第二台真实服务器证据。
- [ ] 规格未验收:真实多服务器推送、三数据库实机、DNS/ACME、跨平台服务和最终生产门禁。
- [!] 不得把本轮实机局部结果标记为 `[✓]`;总体验收继续为 **P0-03:完成,待复审**。
## 最新规格执行进度(2026-09-30,域名与服务器多对多统一回归)
**总体验收位置仍为 P0-03:完成,待复审。** 本轮完成既有多对多规格的实现复核和自动化验证,尚未满足真实服务器生产部署和最终验收条件。
- [x] 规格实现复核:域名与服务器使用联合关联表,双方不设置单边唯一约束。
- [x] 规格实现复核:绑定按域名替换,允许多个服务器;服务器反向读取允许多个域名;清空只影响当前域名。
- [x] 规格验证:项目归属、路径隔离、重复去重、失败回滚和共享服务器场景已有后端测试。
- [x] 规格验证:域名多选及服务器反向域名展示已有前端测试,前端全量 231 项通过。
- [~] 规格待续:三数据库实机、真实 SSH 多服务器推送、HTTPS/DNS/ACME 和浏览器生产流程。
- [ ] 规格未验收:远端生产部署门禁、跨平台服务恢复和最终生产验收。
- [!] 不得把专项自动化测试标记为 `[✓]`;总体验收继续为 **P0-03:完成,待复审**。
## 最新规格执行进度(2026-09-30,P0-10 崩溃恢复边界修复)
**总体验收位置仍为 P0-03:完成,待复审。** 本轮补齐服务重启恢复中任务尝试的范围约束,并通过本地全量验证,尚未满足生产验收的实机条件。
- [x] 规格实现:恢复任务尝试依据恢复前活动状态的父任务筛选,不使用完成时间和阶段反查历史任务。
- [x] 规格验证:新增历史恢复任务时间碰撞测试,确认历史任务尝试不被错误收敛。
- [x] 规格验证:`go test ./...`、`go vet ./...`、`git diff --check` 通过。
- [~] 规格待续:DNS 验证、重试幂等、真实三数据库和统一复审。
- [ ] 规格未验收:远端密码 SSH、多服务器生产推送、HTTPS/DNS/ACME、平台服务和最终生产门禁。
- [!] 不得把本轮局部开发标记为 `[✓]`;总体验收继续为 **P0-03:完成,待复审**。
## 最新规格执行进度(2026-09-30,P0-10 部署结果持久化)
**总体验收位置仍为 P0-03:完成,待复审。** 本轮将批量部署结果的存储、查询、权限和错误脱敏纳入已完成开发范围,但尚未满足生产验收的实机条件。
- [x] 规格实现:任务尝试与每台服务器部署结果建立关联,支持结果序号、部署状态、消息和备份 ID。
- [x] 规格实现:SQLite、MySQL、PostgreSQL 均新增 0016 迁移,迁移目录及嵌入内容一致。
- [x] 规格实现:部署结果查询遵循任务项目可见范围,撤权后不再读取历史结果。
- [x] 规格实现:失败结果只返回通用中文提示,不泄露远端文件路径和底层错误。
- [x] 规格验证:`go test ./...`、`go vet ./...`、`git diff --check` 通过。
- [~] 规格待续:DNS 验证、崩溃恢复、重试幂等、真实三数据库和统一复审。
- [ ] 规格未验收:远端密码 SSH、多服务器生产推送、HTTPS/DNS/ACME、平台服务和最终生产门禁。
- [!] 不得把本轮局部开发标记为 `[✓]`;总体验收继续为 **P0-03:完成,待复审**。
## 最新进度摘要(2026-09-29)
**总体验收位置仍为 P0-03:完成,待复审。** 本轮完成 P0-10 任务并发与恢复边界的开发及本地验证,不改变生产验收前置条件。
- [x] 幂等重放活动状态统一覆盖 `queued`、`running`、`retry_wait`、`cancelling`。
- [x] 管理证书任务活动保护、自动续期删除保护和服务重启尝试范围保护已实现。
- [x] 相关专项测试、后端全量测试、前端 231 项测试和生产构建均通过。
- [~] P0-10 其他入口、跨数据库实机矩阵和统一复审仍需继续。
- [ ] 生产环境清理、远端编译部署、HTTPS/DNS/ACME、密码 SSH、平台服务和最终验收仍未执行。
- [!] 不新增 `[✓]` 复审通过项,总体验收继续保持 **P0-03:完成,待复审**。
## 最新进度摘要(2026-09-29 继续开发)
**总体验收位置仍为 P0-03 完成,待复审。** 本轮继续推进 P0-10 任务事务链,不把局部代码或专项测试视为整项复审通过。
- [x] HTTP 证书申请任务补齐“开始执行”审计;开始审计与终态审计均关联任务创建人、项目和任务 ID。
- [x] 开始审计写入失败时,任务和任务尝试收敛为失败并停止证书申请;专项回归测试已覆盖该异常路径。
- [x] `go test ./internal/httpapi` 已通过;尚未据此升级 P0-10 或总体验收状态。
- [~] P0-10 的 DNS 验证任务、批量部署结果、崩溃恢复、重试幂等及其他长耗时入口仍需继续审查。
- [ ] P0-12 备份恢复、三数据库实库矩阵、浏览器清缓存、密码 SSH、远端部署和生产验收尚未执行。
- [!] 不新增 `[✓]` 复审通过项,总体验收继续保持 **P0-03 完成,待复审**。
## 最新执行与补充约束(2026-09-29 继续开发)
总体验收位置继续保持 **P0-03 完成,待复审**。本轮补充 P0-10 任务归属不变量,不改变原始 44 项范围,也不提前进入生产验收。
- [x] 证书工作流通过上下文记录已认证请求的任务创建人,后台调度任务不得伪造登录操作者。
- [x] 证书任务开始、完成审计必须与任务的 `operator_id` 一致;任务资源范围仍由域名项目归属服务端确定。
- [x] 创建人归属专项测试通过;完整后端、三数据库实库、浏览器、密码 SSH、远端部署和生产门禁仍未完成。
- [~] DNS 验证任务、批量部署结果、崩溃恢复、重试和其他长耗时入口仍需继续补齐。
- [!] 本轮不得将总体验收升级为复审通过,当前仍为 **P0-03 完成,待复审**。
## 最新执行与补充约束(2026-09-29 继续开发)
总体验收位置继续保持 **P0-03 完成,待复审**。本轮开发不改变原始 44 项范围,也不提前进入生产验收。
- [x] 证书导入、恢复、校验已接入统一任务工作流,提交 `b899751`。
- [x] 当前证书部署、导入、恢复、校验任务已接入取消上下文,取消任务可以中止实际执行。
- [x] 已新增取消绑定回归用例;专项测试、后端全量 `go test ./...` 和 `git diff --check` 已通过,仍需复审。
- [~] 继续核对任务尝试、审计、取消终态、重试幂等和异常收尾。
- [ ] P0-12 备份恢复、三数据库、浏览器、密码 SSH、远端部署和生产门禁仍未验收。
- [!] 不得把本轮开发结果标记为 `[✓]` 复审通过。
## 最新执行与补充约束(2026-09-29 23:48)
总体验收位置保持 **P0-03 完成,待复审**;下方各时间点内容为历史记录,不以开发子项升级整项验收结论。
- [x] 上一批任务部分成功和前端状态展示已提交并推送 `2b9d82d`;已有域名与服务器多对多模型继续保留。
- [~] P0-10 补充不变量:申请、校验、部署、导入、恢复任务处于 `queued`、`running`、`retry_wait`、`cancelling` 时,禁止删除对应域名。
- [ ] 拒绝删除时必须保留域名、服务器关联与已有审计;终态 `success`、`failed`、`cancelled`、`partial_success` 不应永久阻止合法删除。
- [ ] 本批开发完成后以新增专项回归结果核对上述不变量,不能用已有普通运行状态用例替代。
- [~] P0-10 其余取消、重试、幂等、崩溃恢复和 P0-12 备份恢复仍需推进,原始规格范围不缩减。
- [ ] 三数据库、浏览器、密码 SSH、远端部署、平台服务与生产门禁仍待统一验收。
## 当前执行位置(2026-09-29 16:55 更新)
按总体验收口径当前仍在 **P0-03 完成待复审**。P0-01~P0-03 已完成待复审,P0-04~P0-06 仍有验证或开发未闭环;P0-07 为并行开发批次,局部代码和专项测试不能替代整项复审。域名新增/修改/删除项目授权、项目可见读取、任务引用锁保护及审计失败回滚已分别提交 `5180c7d`、`82448c9`、`e36794a`。
先开发、后统一测试;原始 44 项和六阶段验收标准均不改变。当前步骤以《Scert整改任务执行清单》首节为准,整项状态以《Scert整改合并优化清单》首节为准。下方旧批次的通过记录不得套用到当前候选。
> 当前开发补充(2026-09-29 18:22):P0-07 已完成任务列表、详情、尝试读取和取消的项目隔离接线,证书任务入口使用项目可见域名及 `certificate.manage` 判权;`114514b` 已提交推送,后端 `go test ./...` 当前本地通过。三数据库矩阵、浏览器、远端部署、生产验收及其他资源写入权限仍未完成,总体验收继续保持 P0-03 完成待复审。
> 当前开发补充(2026-09-28):已按用户确认补齐域名与服务器多对多源码,同项目内可双向复用,修改或清空一方不改变另一方;共享路径冲突在绑定保存、服务器修改及部署前检查。生命周期收尾、七个资源读取入口与绑定写入授权均待统一测试,其他业务资源及任务授权仍未闭环,六阶段及原始 44 项不缩减。服务器别名、在途任务与远端文件占用不由本批静态路径检查替代。详见执行清单首节、模型第十一/十二节和支持矩阵第二十六节;下方为历史证据。
> 当前开发补充(2026-09-29):域名写入已在事务内按真实项目成员权限判定,更新先读取项目可见资源,删除与证书任务检查保持同一资源锁;新增、修改、删除的成功审计与业务写入同事务,审计拒绝时业务回滚。`internal/repository` 与 `internal/httpapi` 专项通过,但完整后端、三库、浏览器、部署和生产验收仍未完成;总体验收仍按 P0-03 记录。
> 当前补充(2026-09-28 20:15):P0-04 已新增干净提交 Windows 正式发布构建、包内容与运行副本核验及实际启动证据;P0-07 的浏览器验证仅到达首次初始化的未认证入口,配置和无效令牌均被拒绝。浏览器文件工具工作区配置阻止传入一次性地址,尚未兑换合法会话,不能称成员页面、项目隔离或生产验收通过。初始化专项 128 个叶子通过、4 条平台条件跳过,完整范围见支持矩阵第二十五节。各总项及六阶段验收标准不变,下方为历史进度。
> 当前进度(2026-09-28 19:54):P0-07 的成员 API、成功事务审计、失败请求审计、可见项目分页入口和成员 Web 页面均已实现;普通项目管理员可从自己的工作台进入,项目和成员响应禁止缓存,账户建议不扩大原有用户可见性。最后源码专项、完整后端、前端、双版本 MySQL 组合及三轮专项竞态已通过,条件跳过和构建证据见支持矩阵第二十四节。真实浏览器、项目增删改、全业务资源及排队任务授权仍未交付或验收;P0-07 保持进行中,原始六阶段与生产门禁不变。下方未接入成员 Web/API 的表述仅对应历史批次。
> 当前补充(2026-09-28):P0-07/P1-09 的成功成员变更与审计同事务实现已在检查点保存,审计失败必须回滚;拒绝请求审计、成员 Web/API 和业务授权仍未交付。P0-04/P0-05 最终驱动候选的完整后端、SQLite 取消查询与 WAL 专项、双版本 MySQL 组合及 Windows 独立程序恢复已通过。精确结果、竞态与未关闭项见支持矩阵第二十二节,不沿用旧批次放行;各总项状态不升级。
> 本批进度(模式 14):P0-07 已实现项目成员与六类角色、按实时账户状态和关系判权、单语句授权变更;P0-06 增加成员引用约束。用户分组不隐式授予权限,普通用户不能读取完整私钥。成员 Web/API、审计和全部资源/任务授权链仍未接入;P0-05/P0-06/P0-07 保持 `[~]`。证据与边界见执行清单首节、模型第九节和支持矩阵第二十一节;下方为历史批次。
> 本批进度(模式 13):P0-06 已增加任务/审计的项目、系统和未知范围快照及任务关联;HTTP 身份、后台任务、历史删除资源与孤儿尝试按实际来源处理。范围保存与当前资源校验不是成员授权,P0-05/P0-06/P0-07 均保持 `[~]`。本批证据见执行清单首节及支持矩阵第二十节;下方模式 10~12 说明为历史批次,不覆盖本批结果。
> 当前进度:域名/服务器归属、三库第 11 号迁移及绑定约束已随 `7284958` 提交;第 12 号迁移已随 `92c844f` 修复 SQLite 替换绕过并通过本批回归,详细状态见执行清单和支持矩阵第十九节。下方根实体批次与 46 项条件跳过为历史数据;资源批次全量是 47 项条件跳过,不能混用。任务、审计、其他资源及成员授权仍未完成,P0-05/P0-06/P0-07 总项均保持 `[~]`。
> 2026 年 9 月 28 日最终验证:项目根实体的 SQLite、MySQL 5.7/8.0 实库及后端回归已通过,替代下方启动阶段“持续验证”的状态;仅该子项为 `[x]`。完整资源关联与 P0-07 权限隔离仍为 `[~]`。详细证据、46 项条件跳过及 PostgreSQL/生产缺口见支持矩阵第十八节。
## 2026 年 9 月 28 日实施补充
- [x] P0-06 新增项目根实体、三库第 10 号迁移与仓储,本地项目及 SQLite 历史升级专项通过。
- [~] 完整后端、MySQL 隔离验证及后续项目资源关联持续推进,详见《Scert整改任务执行清单.md》《项目资源关联模型.md》。
- [ ] PostgreSQL 项目实库验证、资源回填、跨项目关联保护、成员授权及危险操作审计关联仍未完成。
P0-06 与 P0-07 均维持 `[~]`,六阶段中的隔离、生产和最终验收不得因新增项目表提前勾选。P0-05 的旧证据只适用于原对应版本,模式 10 的完整数据库矩阵仍需重新验证。
本文件覆盖原始清单 P0 的全部 12 项。命令编号、六阶段定义和实机前置条件见《整改任务规格与验收约定.md》。文件路径相对仓库根目录;“拟新增”明确表示尚未存在,不作为现成功能证据。
## P0-01 明确产品范围
- 任务编号:P0-01;任务名称:明确产品范围;优先级:P0。
- 当前状态:`[x] 已完成,等待复审`。
- 六阶段:需求确认 `[x]`;代码实现 `[x]`;自动化测试 `[x]`;隔离环境测试 `[x]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:桌面源码和旧 CLI 业务入口曾与正式范围混淆。
- 涉及文件:`build/build-release.ps1`、`backend/internal/cli/root.go`、`backend/internal/releasearchive/`、根及各模块 README、《命令行运维范围说明.md》。
- 依赖任务:无;双平台安装证据由 P2-08、P2-09 补齐,不倒置为范围整改的代码依赖。
- 整改内容:只正式交付 Web/服务端;桌面窗口、托盘、更新、配置与 UI 测试全部范围外,保留历史源码;CLI 仅作初始化、诊断、迁移、备份恢复和服务管理,拒绝旧业务入口。
- 验证命令:V01、V05、V04;核对 manifest、归档内容、校验和以及实际程序帮助/拒绝入口退出码。
- 实机验收步骤:解包当前候选,确认没有桌面程序;分别在 Windows/Linux 运行帮助和运维入口;旧业务命令必须非零退出且不读凭据或生成运行数据;安装分别关联服务验收项。
- 验收证据:执行清单已记录 `885478a` 的干净双平台包、独立克隆与 Windows 实际 CLI 结果;Linux 实机尚缺,不能用归档权限替代。
- 复审结果:待最终复审,未生产放行。
## P0-02 整理项目任务清单
- 任务编号:P0-02;任务名称:整理项目任务清单;优先级:P0。
- 当前状态:`[x] 已完成,等待复审`。
- 六阶段:需求确认 `[x]`;代码实现 `[x]`;自动化测试 `[x]`;隔离环境测试 `[x]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:旧汇总表虽覆盖 44 项,缺逐项依赖、文件、命令、实机步骤和复审字段。
- 涉及文件:《Scert整改任务执行清单.md》、本文件、其余三级任务规格、《整改任务规格与验收约定.md》;关联《Scert开发任务清单.md》《全面审查测试与优化记录.md》《发布加固与实机验收记录.md》《生产部署与运维说明.md》。
- 依赖任务:P0-01;其余 43 项的业务完成不是本项文档补齐的前提。
- 整改内容:逐项补足 12 个原定字段及六阶段,原始清单保留;区分历史事实、规划和当前实证;维护汇总状态与规格一致。
- 验证命令:V01;按约定进行 44 项编号、必需字段、依赖、文件、状态和六阶段结构核对,并人工对照原始范围。
- 实机验收步骤:生产执行时按规格逐项登记提交、包哈希、环境与实际操作;抽查任何“通过”能回溯到对应证据。文档治理本身不触碰服务器或数据库。
- 验收证据:2026-09-27 对照原始清单核对全部 44 项编号和名称、必需字段、六阶段、显式依赖编号、既有文件及汇总状态;`fab98d1` 独立克隆包含全部规格,构建后工作区干净。详见执行清单本批记录;不将文档齐全称为 44 项业务完成。
- 复审结果:结构与范围核对通过,等待最终复审;本治理项未单独执行生产部署,实际业务按各任务门禁继续验证。
## P0-03 整理源码、构建产物和部署产物
- 任务编号:P0-03;任务名称:整理源码、构建产物和部署产物;优先级:P0。
- 当前状态:`[✓] 复审通过`(2026-09-30 20:53,仅源码与产物边界)。
- 六阶段:需求确认 `[x]`;代码实现 `[x]`;自动化测试 `[x]`;隔离环境测试 `[x]`;生产部署测试 `[x]`;最终验收 `[✓]`。
- 最新复审:当前部署源码 0bb427d 的独立克隆正式构建、发布模块完整测试、23 项清单校验、干净索引及实际远端包校验通过,详见《Linux生产流程测试记录》20:53 章节。下方早期未部署结论为历史证据;本项通过不提升其他任务或整体上线状态。
- 问题说明:既有忽略规则未覆盖根级二进制、通用归档、补丁和数据库旁路文件;开发机排除配置不能代表新克隆。
- 涉及文件:`.gitignore`、`backend/internal/releasearchive/source_boundary_test.go`、`release/README.md`、`artifacts/README.md`、`tests/README.md`、`scripts/README.md`、《仓库目录与产物边界说明.md》。
- 依赖任务:P0-01。
- 整改内容:建立八类目录及构建/运行边界,不删除现有文件;忽略产物和敏感文件但保留源码、迁移、部署测试及公开 CA;检测已跟踪违禁产物。
- 验证命令:V01、V05;`go test -count=1 ./internal/releasearchive -run TestRepositoryIgnore`,在 `backend/` 执行。
- 实机验收步骤:独立克隆只取源码,安装依赖并正式构建;确认工作区无新增产物入索引;部署只取发布白名单,不能携带浏览器缓存、数据库或本机凭据。
- 验收证据:`fab98d1` 后端全量测试、vet、模块校验通过;隔离 Git 核对根及子目录规则和完整索引;独立克隆完成发布模块测试、前端 150 项、双平台构建及 33 项 manifest/归档校验,产物未入索引,未删除现有文件。
- 复审结果:源码及产物边界复核通过,等待最终复审;没有执行远端生产部署,不代表生产能力通过。
## P0-04 统一开发和构建版本
- 任务编号:P0-04;任务名称:统一开发和构建版本;优先级:P0。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[x]`;自动化测试 `[x]`;隔离环境测试 `[~]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:精确工具链、禁用安装脚本、发布前后校验、构建机记录与换行一致性已实现,Windows 双独立克隆验证通过;Linux 原生构建与双平台运行环境证据仍缺。
- 涉及文件:`.gitattributes`、`backend/go.mod`、`backend/go.sum`、`backend/internal/releasearchive/source_boundary_test.go`、`frontend/package.json`、`frontend/package-lock.json`、`frontend/.npmrc`、`build/build-release.ps1`、`build/toolchain.mjs`、`build/toolchain.test.mjs`、《构建版本与数据库支持矩阵.md》。
- 依赖任务:P0-01、P0-03。
- 整改内容:记录并固定 Go、Node、npm、Vue、驱动和依赖版本、系统版本、编译目标;检查锁文件安装及构建环境差异。模块内实际 Go 版本优先,不按根目录工具版本降级模块。
- 验证命令:V02、V03、V04;模块内 `go version`、`go env GOVERSION GOTOOLCHAIN`;`node --version`、`npm.cmd --version`。
- 实机验收步骤:全新构建环境按固定版本安装依赖;验证锁文件不漂移;在双平台验收机记录系统版本和运行包版本,比较 manifest。
- 验收证据:最终候选 `94237b8` 独立克隆前端 175 项通过,其中 25 项工具链回归;后端全量测试、vet、模块校验通过;两份不同换行配置的克隆产生相同 4 个 Web 文件和 5 份版本输入哈希;33 项发布清单、双平台解包及包内校验全部通过,详见执行清单本批记录。
- 复审结果:Windows 构建与前端重复构建已验证;整体仍未完成,不能用交叉编译替代 Linux 原生构建或真实服务运行验收。
## P0-05 确认数据库正式支持矩阵
- 任务编号:P0-05;任务名称:确认数据库正式支持矩阵;优先级:P0。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[!]`;最终验收 `[ ]`。
- 问题说明:已修复迁移、连接恢复、MySQL 对象导出/恢复、SQLite 逐连接配置与 WAL 恢复;本批修复历史模式 1~3 有任务数据时迁移 4 失败,并补充独立 Windows 程序的升级及备份恢复。旧发行包实际数据升级、完整发行包、真实服务重启、Linux 原生、取消边界及剩余数据库/平台证据仍不足。
- 涉及文件:`backend/internal/database/`、其 `migrations/mysql/`、`migrations/postgres/`、`migrations/sqlite/`、`backend/internal/cli/`、《构建版本与数据库支持矩阵.md》。
- 依赖任务:P0-04。
- 整改内容:明确 SQLite、MySQL、PostgreSQL 支持版本;验证 MySQL 5.7/8.0、PostgreSQL 目标版本、SQLite 锁并发;逐库检查类型、索引、默认值、事务及初始化、升级、回滚、备份恢复。不能悄然去掉难测版本。
- 当前新增证据:SQLite 历史模式 1~9 的带数据升级、任务表依赖对象保留、失败回滚与解除阻塞后重试已完成;独立 Windows 产品程序的旧备份升级、恢复后再升级和升级后备份恢复已完成,详见《构建版本与数据库支持矩阵》第十七节。
- 当前剩余门禁:旧发行包实际数据与配置、完整发行包安装、真实服务重启、Linux 原生执行、取消边界、其余数据库/平台和生产门禁仍未完成;隔离模式夹具和交叉编译不替代这些证据。
- 验证命令:V06、V02;真实数据库测试按正式集成测试的参数运行并保存非跳过结果,不在命令行嵌入密码。
- 实机验收步骤:逐版本创建专用测试库;从空库初始化及历史版本迁移,注入失败检查事务;使用官方备份工具恢复并核对行数、资源关联和加密凭据;验证 TLS 和断线重连;只清理明确测试库。
- 验收证据:源码 `777c716` 在 Windows MySQL 5.7.44、8.0.45 完整专项分别通过 176、202 个叶子用例,0 失败、0 跳过;含父项记录为 201、227。新增视图与完整清单权限、复杂依赖、原始官方文件恢复及失败保护;详见支持矩阵第十四节,之前批次的例程、事件等证据保留追溯。
- 复审结果:上述 Windows 隔离范围通过,不等于生产放行。基础表仍只接受 InnoDB,不承诺并发 DDL 一致性;视图已在本批列明场景中验证,不再一概拒绝。官方文件仅对严格识别的连续最终视图块调整顺序;其他编码/SQL 模式、定义者迁移、独立发行命令、Linux 实库、PostgreSQL 当前复测、SQLite 并发锁及正式服务验收仍未完成。
本批补充证据(`af831ae`):Windows SQLite 3.49.1 专项与竞态检测各通过 42 个叶子用例,26 个核心用例连续重复 10 次通过;连接配置丢失和短截止时间等待超限已有先失败后通过记录。覆盖真实文件库双连接池、三子进程、事务快照、回滚、关闭重开及活动 WAL 快照。无截止时间的手动取消仍可能约 5 秒;这一记录不代表立即取消通过,也不替代完整业务升级恢复、真实服务重启或 Linux/生产验收。当前 SQLite 进展以支持矩阵第十五节及下方子任务为准。
### P0-05 触发器自有备份子任务进度
- `[x]` 复现自有备份丢失触发器,以及权限不足时隐藏触发器仍报告成功的问题。
- `[x]` 实现按执行顺序导出原始定义、定义者、SQL 模式、客户端字符集、连接和数据库排序规则;先恢复基础数据再创建触发器。
- `[x]` 全局、库级、表级、角色、部分撤销和授权遮蔽的可见权限预检;不能证明权限时失败并保留既有备份。
- `[x]` 最终候选 `3f6d5b8` 的 Windows MySQL 5.7.44 / 8.0.45 完整专项回归通过 97 / 104 个叶子用例,0 失败、0 跳过;官方客户端也验证了自有触发器文件。
- `[x]` 本批实现、最终复测、收尾与文档证据已核对;后端全量测试、vet、模块校验及 Linux 测试包交叉编译通过。细节见支持矩阵第十一节,不提升 P0-05 总状态,也不将交叉编译记为 Linux 实库通过。
- `[ ]` 例程、事件、视图、其他 SQL 模式、完整表清单权限及剩余三库/双平台矩阵;歧义通配授权目前保守失败,不能视为所有权限组合均完整支持。
### P0-05 例程自有备份子任务进度
- `[x]` 复现并修复存储过程、函数遗漏;保留定义者、参数、SQL 模式、创建字符集与排序规则,支持替换同名例程。
- `[x]` 不依赖过滤后的元数据空列表;完整查看权限不足时失败,保留已有备份并清理临时文件。
- `[x]` 修复 5.7 Latin-1 例程注释乱码,保留 8.0 声明头处理;新增五种元数据失败保护场景,错误保留中文上下文及底层原因。
- `[x]` 双版本正式实库全专项通过 110 / 121 个叶子用例,0 失败、0 跳过;完整后端回归、vet、模块校验及 Linux 测试包交叉编译通过。收尾与证据见支持矩阵第十二节;未执行 Linux 实库,不提升总状态。
- `[ ]` 事件、视图、完整表清单权限、其他 SQL 模式、跨服务器定义者迁移及生产恢复验收。本子任务不提升 P0-05 总状态。
### P0-05 事件自有备份子任务进度
- `[x]` 补齐事件原始定义、时区和计划、定义者、启停状态、创建会话属性,支持重复恢复与同名替换。
- `[x]` 全局/库级有效 EVENT 可见权限预检;无权限空库、未启用角色、部分撤销与通配遮蔽均有正式反例。
- `[x]` 恢复前检查 PROCESS、工作线程和调度状态;维护窗口由管理员维持,产品不改全局调度、不终止线程、不擅自禁用已有事件。
- `[x]` 编码元数据拒绝、过期事件与恢复警告保护,Scert 和官方客户端双路径互操作及真实事件执行。
- `[x]` 最终双版本完整专项、常规全量测试、静态检查及收尾验证通过,见支持矩阵第十三节;之前的失败证据保留,不与最终通过结果混用。
- `[~]` 视图自有备份与恢复;上方触发器、例程子任务的剩余项为当时记录,事件本批进展以此节为准。
- `[ ]` 完整表清单权限、其他 SQL 模式、跨库及跨服务器定义者、独立发行验证、其余数据库/平台与生产门禁;P0-05 总状态不提升。
### P0-05 视图与完整清单子任务进度
- `[x]` 完整库 SELECT 与逐视图 SHOW VIEW 检查;隐藏对象、角色、部分撤销、授权遮蔽失败时保留原备份。
- `[x]` 原始定义、创建编码、定义者和检查选项保留;依赖解析与拓扑排序,不以占位表规避视图依赖。
- `[x]` 原始官方文件的连续最终视图块受限排序;计划预检、会话上下文检查及原文件哈希不变验证。
- `[x]` 复杂/宽/失效视图、三条互操作路径和失败保护的 Windows 双版本实库证据,详见支持矩阵第十四节。
- `[~]` 下一步验证 SQLite 并发与锁;上方触发器、例程和事件段中的缺口是各批历史状态,当前进展以本节为准。
- `[ ]` MySQL 其他编码/SQL 模式、并发 DDL/授权变化、独立发行验证、剩余三库/双平台及生产门禁;P0-05 保持 `[~]`。
### P0-05 SQLite 并发与锁子任务进度
- `[x]` 逐连接初始化;短截止时间执行/查询/预处理/事务启动等待预算及配置恢复;不重试业务 SQL。
- `[x]` 多连接、多连接池和三子进程实际锁竞争;隔离、快照、事务回滚、连接重建与文件库关闭重开。
- `[x]` 活动 WAL 快照不包含未提交数据,提交后快照包含对应数据;专项、重复、竞态及相关后端回归通过。
- `[~]` 无截止时间取消的原生等待边界、完整业务升级恢复和服务重启;已记录的 5 秒行为不是已修复证明。
- `[ ]` 独立发行命令、Linux 实机、其余数据库复测及生产门禁;P0-05 不提升为完成。
### P0-05 SQLite 异常退出及业务恢复子任务
- `[x]` 源码 `6db5d7b` 修复残留 WAL 覆盖恢复主文件;恢复前快照包含已经提交的 WAL,恢复失败仍保留原业务数据。
- `[x]` 正式命令处理器核对当前全部业务表和模式、迁移历史、审计序列、用户密码/分组、任务和部署关联、加密凭据及真实证书私钥,重复恢复通过。
- `[x]` SQLite 专项 55 个叶子用例、恢复专项 13 个用例连续 5 次竞态检测通过;完整后端、静态及模块检查通过,证据见支持矩阵第十六节。
- `[ ]` 带业务数据的历史版本升级、独立发行命令、真实服务重启和 Linux 原生运行;异常进程退出不等于断电/磁盘故障,凭据可解密不等于外部 DNS/SSH/邮件服务已验收。
## P0-06 建立统一领域模型
- 任务编号:P0-06;任务名称:建立统一领域模型;优先级:P0。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:已有用户、域名、任务和服务器模型,项目、证书订单/版本及跨业务关联未闭环。
- 涉及文件:`backend/internal/domain/`、`backend/internal/database/migrations/`、`backend/internal/repository/`、`backend/internal/httpapi/`;拟新增领域关系说明及必要实体迁移。
- 依赖任务:P0-05 的支持矩阵;设计审查可先于实机完成。
- 整改内容:覆盖 users、roles、projects、domains、certificates、certificate_versions、certificate_orders、dns_accounts、dns_delegations、servers、deployment_targets、deployment_records、tasks、task_attempts、renewal_policies、notification_channels、notification_records、audit_logs、backup_records;定义外键、归属、引用删除策略、任务和审计关联。
- 验证命令:V06、V07;补关联完整性、迁移回填和删除约束测试。
- 实机验收步骤:迁移含历史资源的专用库,核对项目归属不丢失;从一次申请追踪订单、版本、任务、部署、通知和审计;删除仍被引用的资源必须拒绝。
- 验收证据:项目根实体、域名/服务器四字段、默认项目历史回填及事务绑定已有代码与 SQLite/MySQL 隔离证据;关系模型见《项目资源关联模型.md》。第 12 号迁移补强替换保护,完整任务/审计等关联、PostgreSQL 实库及生产闭环仍待补,当前结果见支持矩阵第十九节。
- 复审结果:未完成,禁止用相似名称替代缺失关联。
## P0-07 增加项目级权限和资源隔离
- 任务编号:P0-07;任务名称:增加项目级权限和资源隔离;优先级:P0。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:当前用户分组不等于项目及资源隔离,项目级授权仍需实现和审查。
- 涉及文件:`backend/internal/auth/`、`backend/internal/admin/`、`backend/internal/httpapi/`、`backend/internal/repository/`、`frontend/src/views/UserManagement/`;拟新增项目管理模块及迁移。
- 依赖任务:P0-06。
- 整改内容:资源增加项目、所有者、创建人及更新人;制定系统管理员、项目管理员、证书/DNS/部署管理员、审计与只读角色矩阵;列表、详情、写操作、导出与后台任务均检查项目归属,普通用户不能读完整私钥。
- 验证命令:V07、V06、V03;补跨项目 ID 枚举、伪造归属、任务访问与私钥导出拒绝测试。
- 实机验收步骤:建立两项目和最小权限成员;分别测试证书、服务器、目标、DNS、任务、审计的跨项目读写、删除与回滚;撤权后现有会话及排队任务必须重新判权。
- 验收证据:域名/服务器归属和 HTTP 拒绝伪造归属已覆盖;六类角色、实时判权及成功审计同事务已有仓储证据。本批成员分页、授予/撤销 API、实际应用接线和失败审计已通过专项及双版本 MySQL,完整后端、三轮成员专项竞态和构建通过,跳过与验证范围见支持矩阵第二十三节。成员页面、项目入口、全部资源跨项目读写和排队任务撤权重判仍待补,不能称项目隔离已完成。
- 复审结果:未完成。
## P0-08 完善凭据和主密钥生命周期
- 任务编号:P0-08;任务名称:完善凭据和主密钥生命周期;优先级:P0。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:加密存储已有基础,引用检查、禁用、轮换、主密钥变更和恢复链路证据不完整。
- 涉及文件:`backend/internal/secretstore/`、`backend/internal/sshkey/`、`backend/internal/config/`、`backend/internal/certificate/`、`backend/internal/database/credentials.go`、`backend/internal/httpapi/`。
- 依赖任务:P0-06、P0-07。
- 整改内容:统一 DNS、SSH、SMTP、HTTP、数据库、ACME 和证书私钥的创建、验证、禁用、轮换、删除与引用检查;实现主密钥变更、备份恢复和丢失边界;页面与日志永不返回完整秘密。
- 验证命令:V08、V07、V10;增加轮换中断、密钥丢失、被引用删除、禁用后使用及日志脱敏测试。
- 实机验收步骤:专用测试凭据轮换后确认新值生效、旧值失效;中断主密钥变更验证原子性;从受保护备份恢复;缺主密钥必须明确拒绝而非静默生成并丢失数据;检查输出与存储权限。
- 验收证据:已有 secretstore 与密钥测试;完整生命周期和恢复演练尚缺。
- 复审结果:未完成。
## P0-09 强化 SSH 主机身份验证
- 任务编号:P0-09;任务名称:强化 SSH 主机身份验证;优先级:P0。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[~]`;最终验收 `[ ]`。
- 问题说明:指纹校验已有测试,首次确认、变更更新以及自动公钥安装实机失败尚需定位。
- 涉及文件:`backend/internal/deployment/`、`backend/internal/sshkey/`、`backend/internal/httpapi/`、`frontend/src/views/Dashboard/ServerModal.vue`、`frontend/src/views/Dashboard/SSHKeyModal.vue`。
- 依赖任务:P0-07、P0-08。
- 整改内容:保存并确认指纹、变更阻断、人工更新留审计;未确认、目标不符、失效凭据全部阻断;命令依据具体服务器展示,支持密码安装公钥并用密钥验证登录,失败日志仅含安全摘要。
- 验证命令:V09、V07、V03;补首次未确认、指纹变化及各公钥部署阶段失败测试。
- 实机验收步骤:使用已确认主机指纹密码登录,按 password_connect、authorized_key_install、private_key_connect、private_key_command、private_key_exit 分阶段定位;验证 authorized_keys 权限和密钥登录;隔离 SSH 目标更换指纹后必须阻断,人工更新后再试。
- 验收证据:历史 SSH 身份只作连接线索,当前候选公钥自动部署成功、失败与恢复的完整证据待补。
- 复审结果:未完成,不跳过指纹换取成功。
## P0-10 统一任务、部署和回滚事务模型
- 任务编号:P0-10;任务名称:统一任务、部署和回滚事务模型;优先级:P0。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:部署事务不等于全部长操作都具备统一任务、执行尝试、取消和部分成功状态。
- 涉及文件:`backend/internal/domain/`、`backend/internal/repository/task_repository.go`、`backend/internal/deployment/`、`backend/internal/certificate/`、`backend/internal/httpapi/`;拟新增统一任务服务与必要迁移。
- 依赖任务:P0-06、P0-07、P0-09。
- 整改内容:申请、续期、DNS 验证、部署、批量部署、远程备份、回滚、恢复全部关联任务;统一待执行、执行中、成功、失败、取消中、已取消、等待重试、部分成功;记录项目、创建人、时间、步骤、日志、错误、次数和资源。
- 验证命令:V06、V09、V10、V07;补状态转换、崩溃恢复、任务尝试和事务边界测试。
- 实机验收步骤:执行长任务期间刷新、断网、取消和重启;验证状态及执行历史可恢复;批量目标一成一败时显示部分成功;回滚后证书版本、部署与任务结论一致。
- 验收证据:已有部署事务测试;统一八状态和全操作关联尚未验收。
- 复审结果:未完成。
## P0-11 建立生产验收门禁
- 任务编号:P0-11;任务名称:建立生产验收门禁;优先级:P0。
- 当前状态:`[!] 暂缓或存在阻塞`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[!]`;最终验收 `[ ]`。
- 问题说明:局部测试与历史部署不能证明当前候选具备全链路生产能力。
- 涉及文件:《发布加固与实机验收记录.md》《生产部署与运维说明.md》《全面审查测试与优化记录.md》、`build/`、`deploy/`、`artifacts/`。
- 依赖任务:P0-01 至 P0-10、P0-12、P1-01 至 P1-12、P2-01 至 P2-10 的对应交付;P3 留在完整目标中但不阻断第一阶段。
- 整改内容:分别建立单元、隔离、数据库、真实 DNS、ACME Staging、ACME Production、SSH/SFTP、HTTPS/SNI、Windows Service、Linux systemd、备份恢复、升级回滚 12 层门禁,每层独立结论。
- 验证命令:V01 至 V12 按层执行;实机命令取正式安装/运维说明并登记实际退出码,不能用空参数或跳过结果填通过。
- 实机验收步骤:从当前干净候选完成首次安装、初始化、真实签发、分发、正常 DNS 公网 TLS、重启、恢复和升级回滚;双平台及三库分别记录;任何缺口保留未通过。
- 验收证据:既有自动化及发布证据不覆盖全部 12 层;当前缺口由执行清单持续跟踪。
- 复审结果:禁止生产放行,任务规划和局部整改仍可继续。
## P0-12 完成备份和恢复方案
- 任务编号:P0-12;任务名称:完成备份和恢复方案;优先级:P0。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:现有 CLI/数据库恢复不是包含私钥、配置、主密钥与审计的完整产品备份方案。
- 涉及文件:`backend/internal/cli/backup_restore.go`、`backend/internal/database/`、`backend/internal/secretstore/`、`backend/internal/certificate/`、`backend/internal/httpapi/`;拟新增备份记录及调度服务。
- 依赖任务:P0-05、P0-06、P0-08、P0-10。
- 整改内容:覆盖数据库、证书元数据/版本/私钥、DNS/服务器/任务/通知/主密钥配置;支持手动、自动、列表、校验、下载、确认恢复、失败回滚与审计;定义一致性和受保护存储,不把秘密放测试证据目录。
- 验证命令:V06、V08、V10、V07;补备份损坏、版本不兼容、错密钥、部分恢复及审计测试。
- 实机验收步骤:每数据库创建完整资源并备份,向空环境恢复、解密并实际部署证书;损坏备份必须在修改前拒绝;恢复中断后可回到原状态;核对恢复前备份、下载授权、定时记录和审计。远端测试不做无关整机备份,产品备份能力不能因此省略。
- 验收证据:部分数据库恢复历史证据存在;全部资源、自动备份和失败回滚闭环待补。
- 复审结果:未完成。
## 本轮开发进度(2026-09-29 17:50)
按总体验收口径,当前仍为 **P0-03 完成待复审**;本轮只推进 P0-07 的项目审计读取权限,未将局部开发或自动化测试标记为复审通过。
- [x] 审计日志路由改为登录后的项目资源路由,不再依赖全局管理员路由作为唯一入口。
- [x] 新增项目审计读取仓储,在 SQL 查询中按实时账户状态、全局角色、项目成员角色和日志范围过滤。
- [x] 普通项目成员仅可读取其拥有 `audit.read 能力项目的项目审计;不能读取其他项目或系统范围日志。
- [x] 超级管理员和全局管理员保留系统审计读取能力;账户停用后不再返回日志。
- [x] 新增撤权立即生效、跨项目隔离和全局管理员范围回归测试。
- [x] 已通过 go test ./... 和 go vet ./...;这只证明本地自动化验证通过,不代表生产部署验收通过。
- [~] 任务读取、任务取消/重试、证书签发/导入/部署、DNS、SSH 及其他资源写入的完整项目权限链仍待开发。
- [!] PostgreSQL/MySQL 矩阵、浏览器、Linux/Windows 服务、远端 SSH、HTTPS/DNS/ACME 和生产验收仍未执行。
下一步:继续补齐任务与证书/部署权限链,完成开发阶段后再统一运行三库、浏览器和远端生产流程测试。
## 本轮规格落地状态(2026-09-29 19:30)
总体验收仍保持 **P0-03 完成待复审**。
- `[x]` DNS 配置资源具有明确项目归属,旧配置无归属时归入默认项目。
- `[x]` DNS 凭据读取和使用前按实时账户状态、项目成员关系及 `dns.credential.use` 判权。
- `[x]` DNS 项目归属变更按 `dns.manage` 判权,拒绝路径不读取凭据、不执行外部 DNS 操作、不保存新配置。
- `[x]` DNS 管理页面展示项目归属,账号标识继续脱敏。
- `[~]` 续期、证书导入/部署、任务执行/重试和其他资源写入权限规格仍在开发落地。
- `[!]` PostgreSQL/MySQL、浏览器、远端 SSH、HTTPS/DNS/ACME 和生产验收证据尚未形成。
> ???????2026-09-29 18:38???????? **P0-03 ?????**?P0-07 ?????????????????????????????????????? HTTP ?????????????SSH?DNS??????????????????????????????????
## 本轮开发进度(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: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 日)
- [x] P0-07 任务执行链新增失败证书任务重试能力,接口权限为 task.retry,仅允许 certificate_issue 且状态为 failed 或 cancelled 的任务。
- [x] 重试必须重新执行项目资源与关联凭据授权检查,并在同一事务内更新任务、创建新尝试和防止并发重复操作;审计动作使用 certificate_issue_retry。
- [x] 当前本地自动化验证已通过:后端全量测试、静态检查、前端 230 项测试和生产构建。
- [~] 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 项目任务权限闭环,不将局部测试结果视为生产部署验收通过。
- [x] 项目任务取消入口新增 `task.cancel` 实时项目权限校验,权限拒绝时不会调用取消写入,也不会改变任务状态。
- [x] 已补充缺少任务取消权限的 HTTP 回归测试;任务取消、工作流任务保护及成功证书任务回归测试通过。
- [x] 已确认域名与服务器多对多部署关联仍按既有事务模型工作:一个域名可绑定多个服务器,一个服务器可关联多个域名,解绑单个域名不影响其他关联。
- [~] P0-07 仍需继续补齐续期、证书导入/部署、其他任务写入权限及三数据库矩阵。
- [!] 浏览器清缓存验收、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和生产部署验收尚未执行。
下一步继续完成开发阶段剩余权限闭环,再统一执行生产构建、部署和验收;总体验收位置仍以 P0-03 为准。
## 本轮开发进度(2026-09-29,续)
总体验收位置继续保持 **P0-03:完成,待复审**;本轮完成手动批量续期入口的全局权限收紧,不将局部权限测试结果视为生产部署验收通过。
- [x] 手动批量续期接口 `/api/v1/renewal/run` 改为仅超级管理员可执行,普通管理员请求在进入续期工作流前返回 403。
- [x] 已补充普通管理员不得触发续期工作流的 HTTP 回归测试;续期成功、错误脱敏及权限拒绝专项测试通过。
- [x] 已复核服务器新增、修改、删除及域名—服务器多对多绑定:均按项目归属和写权限判定,绑定事务继续校验同项目、路径冲突和失败审计。
- [x] 已复核单域名证书导入、部署、恢复、同步申请以及任务申请、重试、取消的项目权限链路;任务取消和手动批量续期的本轮缺口已补齐。
- [~] P0-07 仍需继续完成三数据库生产矩阵、浏览器清缓存验收、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务及最终生产门禁。
- [!] 总体验收不得升级,P0-03 仍为“完成,待复审”。
下一步完成开发阶段剩余非权限项后,再统一执行生产构建、部署和实机验收。
## 本轮开发进度(2026-09-29 22:34)
- [✓] 全局系统设置读取与修改均收紧为超级管理员权限;普通管理员保留 DNS 服务商目录及授权范围内 DNS 账户归属信息的读取能力,不再读取全局系统配置。2026年10月4日完成读取隔离回归、第一台正式升级及内部复核,公共浏览器角色验收边界见《Linux生产流程测试记录》。
- [x] DNS 在线测试、阿里云 DNS 检查和全局批量续期已收紧为超级管理员操作;前端只读、按钮隐藏和后端拒绝路径均已补充。
- [x] 本批次已补充对应 HTTP 与前端回归测试,代码和进度记录已提交并推送 `ba6bd80`。
- [~] 后续仍需完成回归执行、正式构建、三数据库、浏览器清缓存、密码 SSH、远端部署及生产矩阵验证。
- [!] 本规格的总体验收位置仍为 **P0-03 完成待复审**;专项权限开发不能替代生产部署和最终复审。
## 统一回归结果(2026-09-29 22:44)
- [x] 前端 231 项测试、后端全量测试、`go vet ./...` 和前端生产构建均通过。
- [x] 本轮权限测试角色前提已同步为超级管理员,提交 `853a7cd`、`93a190f`;不改变普通管理员只读和后端拒绝规则。
- [~] 三数据库、浏览器清缓存、密码 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)
- [x] P0-10 补齐任务状态模型:支持 `partial_success`、`retry_wait`、`cancelling` 状态,任务更新、取消、重试等待、活动任务互斥和服务重启恢复均纳入统一状态范围。
- [x] 批量部署一成一败时,HTTP 任务、任务尝试和审计记录统一保存为 `partial_success`,新增对应回归测试。
- [x] 已通过 `go test ./internal/repository ./internal/app ./internal/httpapi`、`go vet ./...` 和 `git diff --check`。
- [x] 本轮代码已提交本地提交 `c9a82e6`;已按要求尝试推送,但远程返回 `Authentication failed`,因此不把远程推送结果作为验收依据。
- [~] P0-09、P0-10、P0-12 仍需继续开发审查;三数据库、浏览器清缓存、密码 SSH、远端部署和生产矩阵尚未统一执行。
- [!] 总体验收位置继续保持 **P0-03 完成,待复审**;本轮代码开发和自动化测试不构成生产部署验收通过。
## 进度追加(2026-09-29,本批结果)
本节追加本批实际结果;此前摘要中同一子项的“进行中/待验证”为历史状态,以本节为准。总体验收位置仍为 **P0-03 完成,待复审**,没有新增复审通过项。
本批需求确认:补齐活动任务对域名删除的保护,更新清单证据;继续先开发、后统一测试,不启动生产验收。
- [x] 已完成,等待复审:P0-10 域名删除保护覆盖申请、校验、部署、导入、恢复任务的 `queued`、`running`、`retry_wait`、`cancelling` 状态。
- [x] 已完成,等待复审:新增 SQLite 仓储回归,验证部署任务处于 `retry_wait`、`cancelling` 时返回域名忙错误;改为 `partial_success` 后不再阻止合法删除。保留原有运行中申请任务保护和审计失败回滚用例。
- [x] 已完成,等待复审:本批仓储专项测试通过;接续的 `go test ./...` 全量测试会话已确认退出码为 0;提交前差异检查通过。以上仅为本地自动化证据,不代表三数据库实库或生产验收。
- [x] 已完成,等待复审:代码已提交并推送 `96c8f44`(完善活动任务删除保护),本批未进行远端部署、运行数据库清理或浏览器测试。
- [ ] 未开始:补全五种证书任务类型与四种活动状态的组合覆盖,以及拒绝删除时关联和审计不变的专项断言;本批新增用例未覆盖全部组合。
- [ ] 未开始:补全 `failed`、`cancelled` 终态的专项删除用例;不得将本批 `success`、`partial_success` 路径外推为所有终态均已验证。
- [~] 进行中:P0-10 其余长任务取消、重试、幂等、崩溃恢复及 P0-12 备份恢复仍需继续整改,不标记整项完成。
- [ ] 未开始:开发收尾后,统一执行当前候选的生产构建、SQLite/PostgreSQL/MySQL 矩阵、浏览器清缓存、密码 SSH、远端部署和平台服务验收。
下一步优先补齐上述开发缺口和测试用例,再推进剩余任务链;原始整改范围不缩减,总体验收不得因本批测试通过而升级。
## 本轮开发进度(2026-09-29)
总体验收位置继续保持 **P0-03:完成,待复审**;本轮仅推进 P0-10 域名删除保护矩阵,不将专项测试结果视为整项复审或生产部署验收通过。
- [x] 已完成,等待复审:域名删除保护已覆盖 `certificate_issue`、`certificate_validate`、`certificate_deploy`、`certificate_import`、`certificate_restore` 五类证书任务,以及 `queued`、`running`、`retry_wait`、`cancelling` 四种活动状态。
- [x] 已完成,等待复审:每个活动状态拒绝删除时,回归测试确认域名仍存在、当前域名与服务器关联仍存在;共享同一服务器的其他域名和服务器本身不受影响。
- [x] 已完成,等待复审:补充 `success`、`failed`、`cancelled`、`partial_success` 终态场景,确认活动任务清空后可以合法删除目标域名,并保留其他域名及服务器关联。
- [x] 已完成,等待复审:`go test ./internal/repository` 与后端全量 `go test ./...` 均通过,`git diff --check` 通过。
- [x] 已完成,等待复审:本轮代码已提交并推送 `14d5e53`(补齐活动任务删除保护矩阵测试)。
- [~] 进行中:P0-10 其他长任务取消、重试、幂等、崩溃恢复及任务尝试记录仍需继续审查,不能因本批通过而关闭整项。
- [ ] 未开始:P0-12 备份恢复、三数据库生产矩阵、浏览器清缓存、密码 SSH、远端部署、HTTPS/DNS/ACME、Linux/Windows 服务和最终生产门禁。
- [!] 总体验收不得升级:仍处于 **P0-03 完成,待复审**,当前没有新增 `[✓]` 复审通过项。
下一步继续审查 P0-10 剩余任务执行链和 P0-12 备份恢复;开发阶段完成后,再统一执行生产构建、部署和实机验收。
## 本轮开发进度(2026-09-29)
总体验收位置继续保持 **P0-03:完成,待复审**;本轮只推进 P0-10 任务幂等并发保护,不代表整项复审或生产部署验收通过。
- [x] 已完成,等待复审:新增 `task_idempotency` 数据表及 SQLite、PostgreSQL、MySQL 三套 0015 迁移;历史非空幂等键在迁移时建立登记。
- [x] 已完成,等待复审:任务创建在同一事务登记幂等键,数据库层拒绝同一域名同一幂等键的并发重复任务,避免仅依赖单进程互斥锁。
- [x] 已完成,等待复审:接口在并发创建冲突后回读已存在任务并返回重放结果,不再把可恢复的幂等冲突直接返回为普通创建失败。
- [x] 已完成,等待复审:新增并发重复幂等键回归测试;`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 整项复审或生产部署验收通过。
- [x] 已完成,等待复审:服务重启恢复会为每个 `queued`、`running`、`retry_wait`、`cancelling` 任务写入 `task_recovery` 失败审计,并保留任务、项目和创建人归属。
- [x] 已完成,等待复审:恢复事务新增审计写入失败回滚保护;审计数量与实际恢复任务数量不一致时,任务、尝试和审计全部回滚。
- [x] 已完成,等待复审:新增重复恢复与审计失败回滚测试;专项恢复测试、后端全量 `go test ./...` 和 `git diff --check` 均通过。
- [~] 进行中:P0-10 的 DNS 验证、批量部署结果、其他入口任务事务链、重试幂等及跨数据库实机验证仍需继续审查。
- [ ] 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署和最终生产门禁仍未执行。
- [!] 总体验收不得升级:当前仍处于 **P0-03 完成,待复审**,本轮没有新增 `[✓]` 复审通过项。
## 最新开发证据(2026-09-29,P0-10)
- [x] 任务取消入口现在统一接受 `queued`、`running`、`retry_wait`、`cancelling` 活动状态。
- [x] 任务取消事务会同步结束对应的活动任务尝试;管理证书和自动续期任务不受通用取消入口控制。
- [x] 已通过后端全量测试、静态检查和差异检查。
- [~] P0-10 其他任务链与三数据库实机复核仍在进行。
- [ ] P0-12 备份恢复及最终生产门禁尚未开始。
- [!] 总体验收不得升级,仍为 **P0-03:完成,待复审**。
## 最新执行摘要(2026-09-29 继续开发)
总体验收位置继续保持 **P0-03 完成,待复审**。本轮完成开发阶段的证书任务并发保护、DNS 验证阶段进度记录,以及域名与服务器双向多对多部署关联的回归核验;不代表生产部署验收通过。
- [x] 已完成,等待复审:同一域名的同类活动证书任务增加仓储层并发保护,重复创建返回冲突,避免并发任务绕过入口检查。
- [x] 已完成,等待复审:DNS 凭据权限验证、逐域名验证和证书申请阶段会同步任务阶段及中文进度信息。
- [x] 已完成,等待复审:一个域名可关联多个部署服务器,一个服务器可关联多个域名;关联读取、解除单个关联、项目权限和共享路径冲突已有回归覆盖。
- [x] 已完成,等待复审:后端多对多专项测试通过;前端 231 项测试全部通过,生产构建通过。
- [~] 进行中:P0-10 其余长任务取消、重试、崩溃恢复、实机数据库矩阵和统一复审仍需继续执行。
- [ ] 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署和最终生产门禁仍未执行。
- [!] 总体验收不得升级:当前仍为 **P0-03 完成,待复审**,本轮没有新增 `[✓]` 复审通过项。
## 最新验证摘要(2026-09-29)
总体验收位置继续保持 **P0-03:完成,待复审**。本轮仅确认多对多部署开发结果和本地回归结果,不代表生产部署验收通过。
- [x] 已完成,等待复审:一个域名可部署到多个服务器,一个服务器可部署多个域名;关联读取、解除单个关联、权限和路径冲突回归通过。
- [x] 已完成,等待复审:后端全量测试通过;前端 231 项测试通过;生产构建通过;提交前差异检查通过。
- [~] 进行中:P0-10 剩余任务链、三数据库实机矩阵、浏览器清缓存、密码 SSH、远端部署和生产门禁仍需继续执行。
- [!] 总体验收不得升级:仍为 **P0-03 完成,待复审**,本轮没有新增 `[✓]` 复审通过项。
## 最新实机部署与验收进度(2026-09-29)
总体验收位置继续保持 **P0-03:完成,待复审**;本轮完成 Linux amd64 候选包部署、HTTPS 健康检查、服务重启恢复和浏览器缓存清理后的页面复核,不将这些结果提前标记为最终生产验收通过。
- [x] 已完成,等待复审:基于提交 `4229f44` 构建的 Linux amd64 发布包已通过 SHA-256 校验并部署到授权测试服务器;发布清单确认 `source_dirty=false`。
- [x] 已完成,等待复审:`https://odacm.cn/healthz` 和 `https://odacm.cn/readyz` 均返回成功;Nginx 配置检查通过并处于运行状态。
- [x] 已完成,等待复审:HTTPS 证书主题为 `odacm.cn`,SAN 包含 `odacm.cn`,签发方为 Let's Encrypt;未关闭 TLS 校验。
- [x] 已完成,等待复审:`Scert` 服务重启后保持 `active (running)`,重启后健康检查和就绪检查仍成功;重启后的日志未复现证书目录权限错误、路径所有者不可信或 HTTPS 证书读取失败。
- [x] 已完成,等待复审:清理浏览器缓存后重新登录,首页显示当前用户、邮箱、服务状态、版本、SQLite 数据库和反向代理 HTTPS 等基本信息;中文显示正常。
- [x] 已完成,等待复审:超级管理员访问 `/api/v1/ssh-keys` 返回 `200` 和空列表,不再出现“无权管理此项目的服务器”;私钥内容未通过接口返回。
- [x] 已完成,等待复审:域名配置页面的部署服务器选择支持多选,并明确显示一个域名可关联多个服务器、一个服务器可关联多个域名;5、10、15、30 条分页选项可见。
- [~] 进行中:远端数据库当前为空,现场只有一台可用测试服务器,尚未用虚构数据替代第二台真实服务器;双向多对多的生产数据关联、实际证书推送和回滚仍需具备真实目标后复核。
- [~] 进行中:三数据库生产矩阵、真实 DNS/ACME 申请、真实多服务器证书推送、最终生产门禁仍需继续执行。
- [!] 总体验收不得升级:当前仍为 **P0-03 完成,待复审**,本轮没有新增 `[✓]` 复审通过项。
## 最新进度追加(2026-09-29,P0-10 任务取消入口)
- [x] 任务取消入口统一接受 `queued`、`running`、`retry_wait`、`cancelling` 活动状态。
- [x] 任务取消事务同步结束对应活动任务尝试;管理证书和自动续期任务不受通用取消入口控制。
- [x] 已通过后端全量测试、静态检查和差异检查。
- [~] P0-10 其他任务链与三数据库实机复核仍在进行。
- [ ] P0-12 备份恢复及最终生产门禁尚未开始。
- [!] 总体验收不得升级,仍为 **P0-03:完成,待复审**。
## 最新进度追加(2026-09-29,P0-10 通用取消入口状态一致性)
总体验收继续保持 **P0-03:完成,待复审**;本轮补齐通用仓储取消入口,不代表 P0-10 统一复审或生产部署验收通过。
- [x] 已完成,等待复审:通用 `CancelTask` 取消任务时,任务尝试同步覆盖 `queued`、`running`、`retry_wait`、`cancelling` 四种活动状态。
- [x] 已完成,等待复审:新增四种活动状态的仓储回归测试,确认任务及任务尝试均进入 `cancelled` 并记录完成时间。
- [x] 已完成,等待复审:`go test ./...`、`go vet ./...`、`git diff --check` 均通过。
- [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- [ ] 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 **P0-03:完成,待复审**,没有新增 `[✓]` 复审通过项。
## 最新规格执行记录(2026-09-29,P0-10 证书任务入口回归)
本轮继续按“先开发、后统一测试”的约束执行,总体验收保持 **P0-03:完成,待复审**。
- [x] 证书导入、恢复、校验入口必须写入统一任务、任务尝试和审计记录,本轮已完成本地回归覆盖。
- [x] 任务执行配置必须在落库前校验,空域名、空任务类型或阶段、零次执行及空执行器均拒绝。
- [x] 本轮专项测试、静态检查通过,代码提交 `9741721` 已推送。
- [~] P0-10 其他任务链、跨数据库实机行为、崩溃恢复、重试幂等和统一复审继续进行。
- [!] 本地测试结果不得替代真实 DNS/ACME、多服务器推送、密码 SSH 和最终生产门禁。
## 本轮开发进度(2026-09-29,P0-10 空部署目标防护)
总体验收位置继续保持 **P0-03:完成,待复审**;本轮仅继续完成 P0-10 批量部署边界防护,不代表 P0-10 统一复审通过或生产部署验收通过。
- [x] 已完成,等待复审:批量部署目标为空时显式返回失败,不再把 0 台服务器错判为部署成功。
- [x] 已完成,等待复审:证书工作流在域名未关联任何部署服务器时提前失败,不调用远程部署。
- [x] 已完成:新增应用层与部署层回归测试;`go test ./...`、`go vet ./...` 和 `git diff --check` 均通过。
- [~] 进行中:P0-10 其余任务入口、失败回滚结果持久化、跨数据库矩阵、崩溃恢复与统一复审仍需继续。
- [ ] 未开始:P0-12 备份恢复、浏览器清缓存、密码 SSH、远端部署、真实 DNS/ACME 和最终生产门禁仍未完成。
- [!] 总体验收不得升级:当前仍为 **P0-03:完成,待复审**,本轮没有新增 `[✓]` 复审通过项。
## 本轮规格执行记录(2026-09-30,P0-10 证书任务启动取消竞态)
本轮仅完成启动取消竞态的开发和本地回归,总体验收仍为 **P0-03:完成,待复审**。
- [x] 任务执行入口先注册取消上下文和回调,启动阶段取消时不调用证书申请执行器。
- [x] 取消任务保持 `cancelled` 终态,接口返回 HTTP 409,新增 HTTP 回归测试覆盖启动审计阶段竞态。
- [x] `go test ./...`、`go vet ./...`、定向任务测试和 `git diff --check` 均通过,代码提交 `415d504`。
- [~] P0-10 其他任务入口、DNS 验证、跨数据库实机行为、崩溃恢复、重试幂等和统一复审继续进行。
- [!] 本地结果不得替代真实 DNS/ACME、多服务器推送、密码 SSH 和最终生产门禁;总体验收不得离开 **P0-03:完成,待复审**。
## 本轮规格执行记录(2026-09-30,P0-10 DNS 验证取消与临时凭据回收)
本轮仅补齐 DNS 在线验证请求取消边界,总体验收继续保持 **P0-03:完成,待复审**。
- [x] DNS 验证必须在开始服务商调用前检查上下文取消,取消请求不得触发权限测试或临时凭据写入。
- [x] 临时凭据写入后若上下文取消,必须回收凭据并阻止一次性验证令牌进入后续初始化流程。
- [x] 已新增对应回归测试,并通过后端全量测试、静态检查和差异检查。
- [~] DNS 清理失败、初始化回滚、令牌消费及 P0-10 其他任务链继续开发和统一复审。
- [!] 本地自动化结果不得替代真实 DNS/ACME、密码 SSH、远端多服务器部署和最终生产门禁;不得新增 `[✓]`。
## 本轮规格执行记录(2026-09-30,P0-10 DNS 临时凭据清理失败可重试)
本轮仅补齐 DNS 临时凭据清理失败后的可重试要求,总体验收继续保持 **P0-03:完成,待复审**。
- [x] 单个临时凭据删除失败时必须保留验证会话,允许后续重试,不能静默丢失清理入口。
- [x] 批量删除失败时必须逐项恢复失败会话,成功删除的临时凭据不得恢复;正式配置依赖的凭据不得删除。
- [x] 已新增对应回归测试,并通过后端全量测试、静态检查和差异检查。
- [~] DNS 过期清理、初始化回滚、令牌消费及 P0-10 其他任务链继续开发和统一复审。
- [!] 本地自动化结果不得替代真实 DNS/ACME、密码 SSH、远端多服务器部署和最终生产门禁;不得新增 `[✓]`。
## 本轮规格执行记录(2026-09-30,P0-10 DNS 过期凭据清理重试)
本轮仅补齐 DNS 验证令牌过期后的临时凭据清理重试要求,总体验收继续保持 **P0-03:完成,待复审**。
- [x] 过期会话临时凭据清理失败时必须恢复原会话,后续操作必须能够再次触发清理。
- [x] 补偿清理成功后必须保持令牌过期,不得因恢复清理状态而重新授权验证结果。
- [x] 已新增对应回归测试,并通过后端全量测试、静态检查和差异检查。
- [~] DNS 初始化回滚、令牌消费及 P0-10 其他任务链继续开发和统一复审。
- [!] 本地自动化结果不得替代真实 DNS/ACME、密码 SSH、远端多服务器部署和最终生产门禁;不得新增 `[✓]`。
## 本轮规格执行记录(2026-09-30,P0-10 DNS 清理状态与容量边界)
本轮仅完成 DNS 临时凭据清理状态和容量边界的开发与本地回归,总体验收继续保持 **P0-03:完成,待复审**。
- [x] 删除失败的临时凭据必须保留待清理引用,并在后续管理操作中重试,不能形成不可追踪残留。
- [x] 请求取消后若临时凭据回收失败,后续操作必须能够完成补偿清理。
- [x] 清理失败的过期会话必须计入验证容量,避免恢复会话时突破容量上限。
- [x] 已新增对应回归测试,并通过全量测试、竞态测试、静态检查和差异检查。
- [~] DNS 初始化回滚、令牌消费及 P0-10 其他任务链、实机矩阵和统一复审继续进行。
- [!] 本地结果不得替代真实 DNS/ACME、密码 SSH、远端多服务器部署和最终生产门禁;不得新增 `[✓]`。
## 本轮开发进度(2026-09-30,P0-10 数据库验证取消与清理状态收敛)
总体验收位置继续保持 **P0-03:完成,待复审**。本轮完成数据库验证生命周期的取消边界、凭据清理串行化和单个令牌回收状态收敛;仅代表本地开发验证,不代表生产部署验收通过。
- [x] 已完成,等待复审:数据库验证在凭据保存前、配置解析前、连接验证后和令牌生成前检查请求取消,取消请求不再发布验证令牌。
- [x] 已完成,等待复审:临时凭据删除操作串行化,避免并发清理同一引用产生状态竞态。
- [x] 已完成,等待复审:单个数据库令牌回收失败时恢复可重试会话,成功时移除过期状态;过期清理失败仍保持令牌不可用并保留内部重试状态。
- [x] 已完成:`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:完成,待复审**。本轮完成数据库过期清理的执行状态和批量接管边界,仅作为本地开发和回归验证证据,不等同于生产验收通过。
- [x] 过期会话开始清理时记录 `expiredCleaning`,避免单项清理与批量清理重复删除。
- [x] 批量清理可接管失败后尚未执行的过期清理,但不接管正在执行的清理。
- [x] 新增批量接管失败过期清理的回归测试,专项测试和竞态测试均通过。
- [~] P0-10 其他任务、跨数据库实机矩阵和统一复审继续进行中。
- [ ] 真实生产数据库、密码 SSH、远端部署、HTTPS/DNS、ACME、Linux/Windows 服务和最终生产门禁仍未完成。
- [!] 不新增 `[✓]`,不以本地结果代替生产验收。