Scert/doc/核心能力任务规格.md
xuans 60b1b981db 更新邮件配置与第一台部署测试进度
补充 2026 年 10 月 4 日邮件配置确认、第一台候选包部署、运行边界及未完成验收项记录。
2026-10-04 11:47:35 +08:00

249 lines
29 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

# 核心能力任务规格
## 2026年10月4日11:07 邮件配置权限与 DNS 导入边界
- [✓] 邮件配置及其元数据仅超级管理员可读写;普通管理员和用户通过获授权业务调用,不开放任意收件人或内容的公共中继。降权、停用、删除用户的旧会话必须失效,被拒绝请求不得读取或修改秘密仓库。
- [x] 前端设置入口拒绝非超管并清空旧未保存凭据,本地角色与会话回归通过;真实发信与 Linux 新版本验收另记。
- [~] 旧 DNS 配置导入须保留真实项目、原用户归属和历史凭据引用,重复导入不得重建或覆盖已修改账户,不自动改绑域名或删除旧秘密。导入不能把历史验证状态冒充为新账户在线验证成功。
- [ ] 遗留执行租约必须核实外部挑战记录后才允许安全回收,任务终态或租约年龄不是安全删除依据。
## 2026年10月4日07:40 DNS 执行与原子绑定契约
- MySQL 迁移恢复必须拒绝表级和列级排序规则冲突;故障测试必须先确认注入后的规则确实不同,不能使用库的默认值伪造冲突场景。该修正不改变产品迁移规则。
- 授权探测同样可能写临时 TXT,每个域名调用前必须核验取消状态和真实租约。探测错误无法确认外部清理时保留引用,即使 ACME Provider 尚未创建;之后的成功探测不得清除先前未知状态。
- 新建域名可携带 `dns_account_id`、`dns_account_revision`;绑定标识由服务端生成,域名、绑定、审计共用事务。普通资料更新拒绝这些初始绑定字段,编辑仍使用独立绑定接口及真实旧令牌。
- 租约绑定真实运行中的任务、尝试、序号、项目、域名、账户版本及秘密引用。自动续期必须同时满足服务端调度标记、真实无操作者续期任务和域名启用续期;手工重试额外要求重试权限。
- 获取租约在域名行锁内比较完整签发配置,不依赖秒级时间戳;SAN 按实际数组比较。活动租约阻止账户变更、绑定切换及两层域名资料更新/删除,证书状态更新不受影响。
- DNS 写入前重新授权,清理使用原 Provider 和固定凭据、独立超时;任务取消不得跳过清理。不按 TTL 或任务终态释放未知外部状态的引用,释放失败保持租约。
- 接口租约忙返回 409,不暴露随机租约能力或秘密引用。遗留租约外部核对与安全回收尚未实现;当前契约的本地测试不能替代真实 DNS/ACME 及三库生产验收。
## 2026年10月4日06:51 域名 DNS 账户交互契约
- 新建及编辑域名读取 `/api/v1/dns/accounts`;编辑还读取 `/api/v1/domains/:id/dns-account`,列表缓存不能替代真实绑定令牌。
- 账户筛选要求当前项目、独立账户、启用、验证通过、凭据可用及合法版本;已有不可用账户保留绑定并提示,不自动变更。
- 保存顺序为域名资料、显式账户绑定、服务器关联;账户绑定请求包含 `dns_account_id`、`expected_binding_id`、`account_revision`,固定打开的域名与提交瞬间账户版本。
- 绑定冲突、异常响应或网络结果不明禁止自动重放,先重新读取核对;已成功创建或绑定不因后续步骤失败重复操作。HTTP-01 切换前须显式解除并保存,避免静默降级。
- 前端全量 336 项及构建通过,仅证明交互契约回归;独立账户执行租约尚未接入,不据此宣称实际签发、续期或生产验收完成。
## 2026年10月4日06:28 DNS 页面权限契约
- `GET /api/v1/projects` 增加 `can_manage_dns`:超级管理员、当前项目管理员或 DNS 管理员为真;这是界面提示,不替代每次写入的实时授权。
- `GET /api/v1/dns/providers` 只返回服务商字段定义,所有有效登录用户可读,匿名拒绝并禁止共享缓存;系统设置与系统 DNS 在线测试仍沿用原管理权限。
- DNS 页面连接 `/api/v1/dns/accounts` 及 `/:id`、`/:id/status`、`/:id/credentials`、`/:id/verify`;写操作固定选中账户及版本,凭据仅当次提交。轮换与创建后提示重新在线验证,状态变更需要确认。
- 原生对话框限制焦点,字段双列,补充说明使用悬浮提示;分页 5/10/15/30、表内滚动和固定表头。历史配置仅只读显示,不伪装已导入独立账户。
- 前端 310 项和构建、HTTP/仓储全量与 vet 已通过;本批 Linux 和浏览器复审待完成。执行租约、实际签发续期、域名表单选择、旧导入与回收仍属未完成项。
## 2026年10月4日05:54 DNS 绑定接口契约
- [x] `GET /api/v1/domains/:id/dns-account` 返回已授权域名的账户绑定摘要;未绑定时标识为空,不读取秘密。
- [x] `PUT /api/v1/domains/:id/dns-account` 必须显式提供 `dns_account_id`、`expected_binding_id`、`account_revision`;首次绑定使用空旧令牌,解除使用空账户和版本零。拒绝未知字段、查询参数及空值;账户或绑定版本冲突返回 409,无权或不存在返回 403,账户状态不符返回 422,依赖异常返回固定 503,不输出内部错误。
- [x] MySQL 绑定外键列继承历史域名主键的实际字符集和排序规则,而不是假定新旧表使用相同默认值;结构冲突拒绝覆盖。
- [ ] 执行租约与实际签发续期尚未完成,绑定不等于可签发。Linux 三库修复版本和完整前端验收仍待通过。
## 2026年10月4日05:34 DNS 独立绑定阶段
迁移二十八通过同项目复合外键与 SQLite 补充触发器保存域名账户绑定。仓储必须同时核验证书管理、DNS 凭据使用权限,锁定域名并拒绝在途任务,核对账户版本、启用和验证状态;变更绑定令牌、域名服务商及审计同事务。普通域名编辑不能绕过绑定,删除域名只解除引用。域名读取显式返回账户和绑定标识。
本地四包全量、二十轮仓储专项和静态检查已通过。第一台原干净提交全量暴露 SQLite 并发错误分类缺陷,已修复并等待新版本实库复核。执行租约、旧账户导入、绑定接口、引用回收和前端仍未接通;独立绑定暂时明确拒绝签发而不回退系统凭据,不能把这一过渡保护算作签发能力完成。
## 2026年10月4日03:55 元数据读取边界补强
- [✓] 全局系统设置仅允许超级管理员读取和修改;普通管理员不再保留全局 SMTP、ACME、DNS 项目及路径元数据读取权限。项目 DNS 账户独立授权不变。
- [✓] 前端角色加载和并发隔离已补回归,全量 286 项及构建通过;第一台后端设置专项通过。
- [✓] 第一台 HTTP API 全量、静态检查、专项竞态及干净源码后端全量均成功终止;正式 `c5774f3` 已在第一台完成升级及内部摘要、严格 TLS 和匿名拒绝复核。
- [~] 公共浏览器真实角色、其余元数据通道、完整多账户和 CNAME 生命周期仍未完成。
以上不整项关闭 P1 或总体生产门禁,证据以《Linux生产流程测试记录》为准。
覆盖 P1 全部 12 项,遵循《整改任务规格与验收约定.md》。当前不少业务集中于 Dashboard,不得把建议目录当作已经存在的独立页面;新页面均按 Vue、JS、CSS 就近拆分。
## P1-01 建设统一证书中心
- 任务编号:P1-01;任务名称:建设统一证书中心;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:已有域名及证书操作,不等于统一证书中心与项目筛选、引用保护已完成。
- 涉及文件:`backend/internal/certificate/`、`backend/internal/httpapi/certificate_api.go`、`frontend/src/views/Dashboard/`;拟新增 `frontend/src/views/Certificates/`。
- 依赖任务:P0-06、P0-07、P0-10。
- 整改内容:列表按域名、项目、状态、到期时间筛选;展示状态、剩余有效期、证书链、SAN、签发机构和版本;支持手动续期、部署、回滚、导入与删除无引用证书;分页提供 5、10、15、30 条。
- 验证命令:V10、V07、V03;补筛选分页、空状态、过期时间边界、引用删除和操作权限测试。
- 实机验收步骤:导入和签发多域名证书,跨项目切换筛选与分页;逐项续期、部署、回滚;被引用证书不能删除;刷新后状态与实际服务一致,错误提示不泄密。
- 验收证据:现有 Dashboard 和证书 API 测试仅作基础;独立中心、完整操作及桌面布局待验收。
- 复审结果:未完成。
## P1-02 完善证书详情和版本管理
- 任务编号:P1-02;任务名称:完善证书详情和版本管理;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:证书文件版本不等于详情包含完整业务信息,版本切换与部署关联须复核。
- 涉及文件:`backend/internal/certificate/lifecycle.go`、`backend/internal/certificate/lifecycle_version_test.go`、`backend/internal/httpapi/certificate_api.go`、`backend/internal/httpapi/certificate_restore_api.go`;拟新增 `frontend/src/views/Certificates/CertificateDetail.vue` 及同名 JS/CSS。
- 依赖任务:P0-06、P0-07、P1-01。
- 整改内容:展示名称、主域名、SAN、项目、机构、签发/到期时间、剩余天数、状态、申请及 DNS 验证方式、当前/历史版本、部署状态、任务和服务器;区分待申请、申请中、有效、将到期、过期、申请失败、部署失败、吊销、禁用。
- 验证命令:V10、V09、V07、V03;补多版本切换、状态映射、时间边界和禁止私钥泄漏测试。
- 实机验收步骤:产生至少两版证书,检查详情及版本指纹;将某版部署并回滚,核对线上证书与详情当前/已部署版本;失败及禁用状态不能伪装有效部署。
- 验收证据:已有版本回归不代表所有详情字段和生命周期状态已实现;真实多版本闭环待补。
- 复审结果:未完成。
## P1-03 完善 ACME 和 DNS 管理
2026年10月4日05:09 接口增量复查:独立账户创建、详情、改名、启停、轮换和服务端在线验证路由已接入真实仓储,列表增加归属用户、状态、版本和独立账户标记。首次验证必须具有管理权限,结果落库再次检查实时授权与版本;接口不接受客户端自报验证成功或秘密引用。四包本地全量、静态检查、追加故障用例后的三轮专项通过;第一台三库与 HTTP 三轮专项竞态及 vet 已成功终止,退出码零。隔离覆盖树未含最后两项本地增量,待干净源码补齐。此前 MySQL 审计触发器权限和环境变量错误保留失败记录。旧配置导入、域名绑定、任务租约、安全回收、签发续期与前端仍未完成;注入验证器不算真实云 DNS 或生产验收。
2026年10月4日04:32 增量:独立 DNS 账户模型、三库迁移二十七和实时授权基础仓储已经实现,首轮第一台三库专项与 vet 通过;SQLite 外键关闭时的保护缺口已补触发器修复。三轮竞态、三库审计回滚等增量回归运行中。仍未接入旧系统账户导入、域名绑定、任务租约、正式签发续期、账户接口和页面,不能把本批基础数据层视为完整多账户生命周期。细项见《DNS多账户整改任务清单》。
2026年10月4日03:14 更新:HTTP-01 已接入正式签发、订单隔离路由、域名验证方式与迁移二十六;实际签发快照授权已补强。第一台 Linux 全量、vet、专项竞态、真实 Nginx 十项和三库迁移专项通过,干净 `9c26db0` 官方包已升级第一台并复核运行摘要。实际 lego 客户端完整 ACME 协议与公共域名签发仍待验收;system-dns 单账户列表不能代表独立多账户生命周期完成,完整账户及 CNAME 委派仍有开发缺口。保留六阶段未完成状态,内部就绪不替代公共入口、首次 Web 与全角色矩阵。
- 任务编号:P1-03;任务名称:完善 ACME 和 DNS 管理;优先级:P1。
- 协议证据补充:真实 lego 客户端在第一台隔离 CA 通过单域名、SAN、拒绝和取消四场景,五轮竞态及证书包全量、vet 通过;注册/JWS/HTTP 证明/CSR/证书链经过实际校验,未替换签发器。该证据不关闭公共签发、全部异常协议、DNS 账户或委派门禁。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[~]`;最终验收 `[ ]`。
- 问题说明:已有 ACME、DNS 账户与 TXT 测试,不能证明 HTTP-01、CNAME 委派、全部 SAN 和正式签发均通过。
- 涉及文件:`backend/internal/certificate/`、`backend/internal/dnsprovider/`、`backend/internal/dnsverification/`、`backend/internal/httpapi/dns_accounts_api.go`、`frontend/src/views/DNSAccounts/`;拟新增 `frontend/src/views/DNSDelegations/`。
- 依赖任务:P0-07、P0-08、P0-10。
- 整改内容:保留 Production/Staging、DNS-01/HTTP-01、单域名/泛域名/SAN、多 Provider、账户验证/禁用/轮换、CNAME 委派、TXT 添加读取清理;显示账户归属,配置页面一页可用。泛域名通过 DNS-01,不把协议限制算成功。
- 验证命令:V10、V07、V03;补委派链、错误权限、并发 TXT、清理失败、签发与账户隔离测试。
- 实机验收步骤:先做受限 DNS TXT 创建读取精确清理,再以另一授权域名做 Staging 与 Production 签发;分别验证 HTTP-01、DNS-01、泛域名和 SAN;测试委派目标、账户禁用与轮换;失败不删除他人记录,不将 Staging 证书用于正式入口。
- 验收证据:历史 RAM TXT 测试仅证明该次账户权限;当前完整签发矩阵和公网信任证据尚缺。
- 复审结果:未完成。
## P1-04 建设任务中心
- 任务编号:P1-04;任务名称:建设任务中心;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:现有任务仓储和日志缺完整统一视图、步骤历史、取消及重试交互验证。
- 涉及文件:`backend/internal/repository/task_repository.go`、`backend/internal/httpapi/`、`frontend/src/views/Dashboard/`;拟新增 `frontend/src/views/Tasks/`。
- 依赖任务:P0-07、P0-10。
- 整改内容:列表、详情、实时进度、日志、执行步骤、失败重试、取消、历史、项目/类型/状态筛选及关联证书/服务器/部署;任务与尝试分开展示,刷新后能恢复。
- 验证命令:V06、V07、V03;补八状态、日志增量、重试关联、取消竞态与权限测试。
- 实机验收步骤:运行真实长任务并刷新、断网重连;从列表进入详情查看步骤及资源;失败重试生成可追溯尝试;取消中到已取消过程一致,不能把远端已生效操作假称未执行。
- 验收证据:任务基础存在,完整中心及取消语义待验证。
- 复审结果:未完成。
## P1-05 统一续期策略
- 任务编号:P1-05;任务名称:统一续期策略;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:现有续期代码不能证明按日期、标签、项目、类型的策略及调度幂等完整。
- 涉及文件:`backend/internal/certificate/renewal.go`、`backend/internal/certificate/renewal_executor.go`、`backend/internal/repository/`、`backend/internal/httpapi/`;拟新增续期策略配置视图和迁移。
- 依赖任务:P0-10、P1-02、P1-03;标签策略依赖 P3-05 的标签数据,不能因此省略。
- 整改内容:支持剩余天数、固定日期、标签、项目、证书类型策略;有限失败重试、成功自动部署和通知;防重复申请、并发续期、重复部署、无限重试及部署状态滞后。
- 验证命令:V10、V06、V09;以可控时钟补阈值、时区、重启、并发调度和重试上限用例。
- 实机验收步骤:在专用证书配置短测试计划,跨重启观察任务仅执行一次;注入 DNS/部署失败后保留旧证书并有限重试;成功后核对版本、线上证书、部署状态和通知。
- 验收证据:已有续期自动化基础,策略矩阵和真实调度闭环尚缺。
- 复审结果:未完成。
## P1-06 建设服务器和部署目标中心
- 任务编号:P1-06;任务名称:建设服务器和部署目标中心;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[~]`;最终验收 `[ ]`。
- 问题说明:已有服务器弹窗和密钥展示,部署目标、项目归属、标签、健康检查与启停边界仍需统一。
- 涉及文件:`backend/internal/deployment/`、`backend/internal/repository/server_repository.go`、`backend/internal/httpapi/`、`frontend/src/views/Dashboard/ServerModal.vue`;拟新增 `frontend/src/views/Servers/`。
- 依赖任务:P0-07、P0-08、P0-09、P0-10。
- 整改内容:服务器列表/详情、连接测试、指纹、标签、项目、分组、部署路径、reload、健康检查和启禁用;服务器配置与密钥命令合并流程,命令按主机生成,配置后自动安装公钥并验证密钥登录。
- 验证命令:V09、V07、V03;补目标路径验证、目录创建权限、禁用后任务拒绝、凭据脱敏和命令注入测试。
- 实机验收步骤:用密码添加专用服务器并确认指纹,自动部署公钥后测试密钥登录;输入不存在的授权目录由产品安全创建;禁用后不能新部署;健康检查和 reload 失败提供可定位结果,不影响同机其他服务。
- 验收证据:历史服务器配置测试不代表自动密钥流程修复;本候选完整目标中心待补。
- 复审结果:未完成。
## P1-07 建设多服务器部署策略
- 任务编号:P1-07;任务名称:建设多服务器部署策略;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:单目标事务测试不能替代多目标并行/串行、失败策略和部分成功处理。
- 涉及文件:`backend/internal/deployment/`、`backend/internal/httpapi/`、`backend/internal/repository/`、`frontend/src/views/Dashboard/DeploymentFeedback.js`、`frontend/src/views/Dashboard/DeploymentResult.vue`。
- 依赖任务:P0-09、P0-10、P1-02、P1-06;按标签批量需要标签能力。
- 整改内容:单机、多机并行/串行、标签批量、失败停止/继续、自动回滚、部分成功、部署前备份与部署后 HTTPS;准备、连接、远程备份、临时上传、权限、原子替换、reload、HTTPS、成功或回滚逐步记录。
- 验证命令:V09、V06、V07、V03;补逐阶段故障、取消、网络中断、文件权限和证书/私钥匹配测试。
- 实机验收步骤:至少两部署目标分别串行并行推送;一个目标制造可恢复 reload/HTTPS 失败,验证停止/继续策略及回滚后旧站点有效;普通 DNS 访问核对新证书 SNI,记录每目标和总体状态。只验证证书推送,不操作远端 Git;不备份无关主机数据。
- 验收证据:已有部署回滚单元测试;多机策略和真实 HTTPS/回滚仍缺完整证据。
- 复审结果:未完成。
## P1-08 建设通知中心
- 任务编号:P1-08;任务名称:建设通知中心;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:已有 Smail 系统账户方向,不能证明通知渠道、触发覆盖、可重试及可审计完整。
- 涉及文件:`backend/internal/notification/`、`backend/internal/config/notification_sender.go`、`backend/internal/httpapi/`、`frontend/src/views/Dashboard/MailNotificationSettings.vue`;拟新增 `frontend/src/views/Notifications/`。
- 依赖任务:P0-07、P0-08、P0-10。
- 整改内容:HTTP Webhook、SMTP;任务成功/失败、将到期/过期、部署失败、服务异常和备份失败通知;渠道测试、有限重试、发送记录与脱敏。邮件默认沿用 Smail 系统账户,不恢复重复自定义邮箱入口。
- 验证命令:V11、V08、V03;补 HTTP/SMTP 超时、拒绝、重试、重复发送和敏感内容过滤测试。
- 实机验收步骤:以产品系统账户发信并核对实际收件,不只看发送 API;测试授权 Webhook 实际接收;注入暂时失败验证次数/退避与记录;检查所有事件类型。Smail 调用失败才只读查阅其项目定位接口,不扩大本任务修改范围。
- 验收证据:既有通知测试不等于真实收信;事件矩阵和失败恢复待补。
- 复审结果:未完成。
## P1-09 建设审计中心
- 任务编号:P1-09;任务名称:建设审计中心;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:审计仓储存在,所有危险操作及失败路径是否关联请求、任务和项目仍未闭环。
- 涉及文件:`backend/internal/repository/audit_repository.go`、`backend/internal/repository/audit_reader.go`、`backend/internal/httpapi/`;拟新增 `frontend/src/views/AuditLogs/`。
- 依赖任务:P0-06、P0-07、P0-10。
- 整改内容:记录登录/退出/密码、用户/角色/项目、证书申请/导入/删除/回滚、部署、凭据、指纹、备份恢复和系统设置;包含操作人、时间、类型、资源类型/ID、项目、客户端 IP、结果、失败原因、请求追踪 ID。
- 验证命令:V06、V07、V11、V03;逐类测试成功和拒绝路径、不可伪造字段、跨项目查询和脱敏。
- 实机验收步骤:按危险操作清单逐项执行并关联审计;制造权限拒绝及远端失败;用只读审计角色查询,跨项目访问拒绝;追踪 ID 能回溯相关任务但不暴露秘密。
- 验收证据:已有审计仓储测试;完整操作覆盖和页面联查待补。
- 复审结果:未完成。
## P1-10 建设证书监控仪表盘
- 任务编号:P1-10;任务名称:建设证书监控仪表盘;优先级:P1。
- 当前状态:`[ ] 未开始`。
- 六阶段:需求确认 `[x]`;代码实现 `[ ]`;自动化测试 `[ ]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:已有运行概览不等于完整证书监控面板,统计口径与数据归属未统一复审。
- 涉及文件:`frontend/src/views/Dashboard/RuntimeOverview.vue`、同目录 JS/CSS、`backend/internal/httpapi/`、`backend/internal/repository/`。
- 依赖任务:P0-07、P1-01、P1-04、P1-06、P1-08、P1-09。
- 整改内容:总数、有效/将到期/过期/申请失败/部署失败、今日/失败任务、服务器/异常服务器、最近审计/通知;首页保留用户、域名、状态、到期与部署服务器,概览不能变成日志页;制定互斥到期阈值,明确原建议在第 7 天重叠的边界。
- 验证命令:V07、V06、V03;补按项目聚合、零数据、时区、1/7/30 天边界与失败分类测试。
- 实机验收步骤:构造不同状态的专用证书及服务器,逐项核对统计与列表;点击统计能到正确筛选;不同权限用户数据隔离;常用桌面视口一页显示主要信息且无重叠。
- 验收证据:未建立本项完整统计和布局验收证据。
- 复审结果:未开始实现,不把现有概览误标完成。
## P1-11 建设备份恢复页面
- 任务编号:P1-11;任务名称:建设备份恢复页面;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[ ]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:CLI 恢复基础不能替代 Web 备份列表、风险提示和二次确认。
- 涉及文件:`backend/internal/cli/backup_restore.go`、`backend/internal/httpapi/`;拟新增 `frontend/src/views/Backups/` 及 `RestoreDialog/`。
- 依赖任务:P0-07、P0-10、P0-12、P1-04、P1-09。
- 整改内容:备份列表、校验、下载、恢复;显示影响范围、二次确认及输入确认文字;恢复前自动备份,过程入任务中心,结果入审计,失败自动回滚。
- 验证命令:V06、V07、V03;补无权限下载、确认字不符、重复提交、任务刷新和失败提示测试。
- 实机验收步骤:在可清理环境从页面备份并恢复,观察自动安全备份、任务与审计;损坏包和错误主密钥必须阻断;中途失败回滚后数据一致;普通用户不可访问下载或恢复入口。
- 验收证据:现有后端恢复基础未证明本页面和高风险交互完成。
- 复审结果:未完成。
## P1-12 统一 API 契约和权限矩阵
- 任务编号:P1-12;任务名称:统一 API 契约和权限矩阵;优先级:P1。
- 当前状态:`[~] 进行中`。
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[ ]`;生产部署测试 `[ ]`;最终验收 `[ ]`。
- 问题说明:现有接口说明与实际路由、项目权限和长操作返回值需逐项对齐。
- 涉及文件:《后端接口说明文档.md》、`backend/internal/httpapi/`、`backend/internal/bootstrap/router.go`、`frontend/src/views/`。
- 依赖任务:P0-07、P0-10;随 P1 其他模块增量维护,不等待所有页面写完才定义契约。
- 整改内容:每个路由记录路径、方法、登录要求、角色、项目权限、资源权限、审计、幂等、敏感字段及错误码;统一请求/响应、分页、任务 ID 和失败语义,文档不能虚构路由。
- 验证命令:V07、V02、V03;路由清单与文档双向比对,补字段、状态码、授权及敏感响应契约测试。
- 实机验收步骤:以各角色从真实 Web 操作关键流程,记录实际请求与脱敏响应;越权、无效字段、超时和冲突符合契约;接口升级后旧会话及刷新不破坏任务追踪。
- 验收证据:已有接口文档和回归;全路由对照、项目权限矩阵及生产联调未齐。
- 复审结果:未完成。
## 2026年10月4日最新执行进度:邮件配置确认与第一台候选部署
本轮仅操作第一台 `8.137.23.95`,第二台 `45.136.13.241` 未操作;没有清理业务数据库,没有创建辅助验收脚本,没有远端备份,没有开放新的公网端口,也没有使用或生成 SSH 密钥材料。
- [x] 旧系统 DNS 账户启动导入已完成编码,固定标识为 `legacy-system-dns`,重复启动幂等,保留现有账户修改并拒绝固定标识冲突;仓储、应用、HTTP API、通知定向测试及 `go vet` 通过。
- [x] 提交 `920b318` 已提交并推送;使用干净 worktree 生成 Linux amd64 候选包,`source_dirty=false`、`trimpath=true`、`local_path_check=passed`,归档 SHA-256 为 `0d2f05892f223c96c305e792a424ccc84905dcb57c0179be3732ff83b668bdc4`。
- [x] 最新候选包已通过密码 SSH 部署到第一台;归档 `SHA256SUMS` 全部通过,服务器 `/scert/scert` 摘要与候选包一致,`Scert.service` 和 `Scert-storage.socket` active。
- [x] 第一台运行边界复核通过:公网仅由 Nginx 提供 `80/443`,Scert 监听 `127.0.0.1:8443`,MySQL 仍为回环监听;没有新增外部业务端口。
- [x] 通过域名页面登录并只读核对超级管理员邮件配置:SMTP 已启用,`smtp.cdis.cn:587`、STARTTLS、系统通知用户名和收件人已保存,凭据已配置且未回显;未读取、记录或覆盖邮件密码。
- [!] 真实系统发信及收件箱送达尚未通过:网页公开密码恢复流程按设计不发验证码;本轮本机 `Scert-admin` 重置会话未形成有效请求并退出,未修改密码,也没有把失败结果误判为发信成功。
- [!] 服务启动日志仍保留历史中断部署事务缺少可信站点恢复基线,继续等待人工核查;未自动接管、删除锁或改写事务终态。
- [~] 待从真正保持前台终端的本机管理员会话重新验证验证码发送与密码重置闭环;随后继续三数据库首次 Web、DNS/ACME 正负向、真实证书部署回滚和公共域名严格 TLS 验收。
当前结论:第一台最新候选已运行,邮件配置已确认保存,但生产整体验收仍未通过;第二台仍只保留给后续证书推送、重载和回滚测试。