18 KiB
18 KiB
Scert 整改任务执行清单
本清单依据《Scert整改合并优化清单.md》建立,用于跟踪实际代码整改、自动化验证、隔离环境验证和生产验收。
当前日期:2026 年 9 月 27 日
状态定义:
[ ]未开始;[~]进行中;[x]已完成,等待复审;[✓]复审通过;[!]暂缓或存在阻塞。
一、执行规则
- 代码实现、自动化测试、隔离环境验证和生产验收分开记录。
- 构建成功、接口返回 HTTP 200 或单元测试通过,不直接等同于生产验收通过。
- 真实 DNS、ACME、HTTPS、SSH 主机指纹、备份恢复和远程部署必须保留可复核证据。
- 不使用
-k、--insecure、跳过 SSH 主机指纹或强制 IP TLS 的方式替代正式验证。 - 不将密码、RAM 密钥、Token、私钥、真实证书或 Cookie 写入代码、文档、日志和 Git。
- 每个任务完成后先标记为
[x],复审和对应范围的验收证据齐全后才能标记为[✓]。
逐项规格入口:《整改任务规格与验收约定.md》。P0/P1/P2/P3 分别见《基础整改任务规格.md》《核心能力任务规格.md》《运维验收任务规格.md》《增强能力任务规格.md》,共 44 项;每项具备全部原定字段及独立六阶段状态。汇总状态与规格同步更新,原始清单保留为需求基准。
二、当前基线证据
| 项目 | 当前事实 | 证据或命令 | 结论 |
|---|---|---|---|
| Git 工作区 | main 与 Scert/main 同步,工作区干净 |
git status --short --branch |
已建立基线 |
| 后端模块 | backend/go.mod 声明 Go 1.26.6,模块内实际使用 go1.26.6 |
在 backend 执行 go version、go env GOVERSION GOTOOLCHAIN |
GOTOOLCHAIN=auto;根目录的 1.26.2 不代表后端构建版本 |
| Node.js | v24.19.0 |
node --version |
已记录 |
| npm | 11.17.0 |
npm.cmd --version |
已记录 |
| Vue | 锁文件实际版本 3.5.41 |
frontend/package-lock.json |
已记录 |
| Vite | 锁文件实际版本 6.4.3 |
frontend/package-lock.json |
已记录 |
| 数据库驱动 | SQLite、MySQL、PostgreSQL 均有代码和迁移目录 | backend/internal/database/ |
正式支持范围仍需确认 |
| SSH | 已有主机指纹、密钥部署和安全测试代码 | backend/internal/deployment/ |
远程实机仍需复核 |
| 生产门禁 | 现有文档明确正式验收尚未全部通过 | doc/生产部署与运维说明.md |
不能宣称生产放行 |
三、P0 基础整改和阻塞项
| 编号 | 状态 | 任务 | 当前问题 | 下一步交付 | 验证证据 |
|---|---|---|---|---|---|
| P0-01 | [x] | 明确产品范围 | 正式发布仅含 Web/服务端,桌面源码保留;CLI 已收敛且实际 Windows 产物验证通过 | 等待最终复审;Windows/Linux 实机安装仍归对应验收项 | 双平台归档及 SHA256、独立克隆、命令树及实际退出码 |
| P0-02 | [~] | 建立完整任务清单 | 44 项逐项规格已补齐,字段、六阶段和汇总状态结构核对通过 | 完成引用及独立克隆复核后标记待复审,持续维护证据 | 四份规格及统一验收约定、结构核对结果 |
| P0-03 | [~] | 整理源码、构建产物和部署产物 | 全仓库规则和目录说明已补齐;隔离 Git 忽略测试通过,子目录规则补充待再测 | 当前提交独立克隆复核,保留现有文件 | 正式 Go 边界回归、索引审查、独立克隆 |
| P0-04 | [~] | 统一开发和构建版本 | 模块实际使用 Go 1.26.6,不存在此前误报的版本阻塞;历史文档仍需统一 |
统一模块、构建说明、锁文件和验收机版本记录 | 版本矩阵、构建日志 |
| P0-05 | [!] | 确认数据库正式支持矩阵 | 三种数据库均有代码,但 README、文档和实机证据口径不完全一致 | 明确 SQLite、MySQL、PostgreSQL 的正式级别、版本和迁移回滚要求 | 三数据库迁移、备份恢复和连接测试 |
| P0-06 | [~] | 建立统一领域模型 | 已有域名、证书、任务、服务器等实体,项目和部署关联仍需审查 | 补齐资源关系图、外键/归属和任务关联 | 模型文档、迁移检查、接口测试 |
| P0-07 | [~] | 增加项目级权限和资源隔离 | 用户组和角色已有实现,项目级资源边界未闭环 | 为证书、DNS、服务器、任务和审计补齐项目归属及越权测试 | 权限矩阵、接口越权测试 |
| P0-08 | [~] | 完善凭据和主密钥生命周期 | 已有凭据存储与测试,轮换、恢复、删除和失效证据不完整 | 补齐创建、轮换、恢复、删除、脱敏和不可恢复边界 | 安全测试、日志审查、恢复演练 |
| P0-09 | [~] | 强化 SSH 主机身份验证 | 已有指纹校验和安全测试,人工确认、更新与远程公钥部署需逐项复核 | 完成指定服务器上的密码部署、公钥登录和指纹复核 | 指纹、授权文件、公钥登录日志 |
| P0-10 | [~] | 统一任务、部署和回滚事务模型 | 部署事务已有实现,不代表所有长操作、项目关联和八类状态已经实现 | 将申请、部署、回滚、重试统一关联任务记录 | 事务测试、失败回滚证据 |
| P0-11 | [!] | 建立生产验收门禁 | 现有自动化证据不能替代 DNS、HTTPS、ACME 和远程验收 | 固化准入清单、证据目录和阻塞规则 | 生产验收记录逐项复核 |
| P0-12 | [~] | 完成备份和恢复方案 | 已有 CLI 备份恢复,自动备份、列表、下载、确认和审计仍需逐项核查 | 补齐完整备份能力并进行隔离恢复演练 | 隔离数据库恢复报告 |
四、P1 核心产品能力
| 编号 | 状态 | 任务 | 当前判断 | 主要验收 |
|---|---|---|---|---|
| P1-01 | [~] | 统一证书中心 | 已有证书申请、导入和列表能力,统一详情和状态仍需复审 | 申请、导入、续期、部署、回滚 |
| P1-02 | [~] | 证书详情和版本管理 | 已有证书相关模型,版本、SAN 和历史展示需复核 | 版本切换、SAN 变化、旧证书保留 |
| P1-03 | [~] | ACME 和 DNS 管理 | 已有多 DNS Provider 和 DNS 账户能力,真实授权范围需复核 | Production/Staging、DNS-01、泛域名、CNAME |
| P1-04 | [~] | 任务中心 | 已有任务和执行记录基础,取消、重试和日志展示需复核 | 长任务、失败重试、取消、执行历史 |
| P1-05 | [~] | 续期策略 | 已有续期相关代码,重复申请保护和调度验收需补齐 | 到期阈值、锁、幂等、失败保留旧证书 |
| P1-06 | [~] | 服务器和部署目标中心 | 已有服务器管理和 SSH 密钥展示 | 服务器归属、验证、密钥登录、部署目标 |
| P1-07 | [~] | 多服务器部署策略 | 已有部署客户端和回滚测试 | 多目标顺序、失败回滚、部分成功状态 |
| P1-08 | [~] | 通知中心 | 已有 Smail 系统账户发信接入方向 | 成功、失败、重试、脱敏和系统账户调用 |
| P1-09 | [~] | 审计中心 | 已有审计仓储和接口基础 | 登录、密码、凭据、证书和部署危险操作 |
| P1-10 | [ ] | 证书监控仪表盘 | 页面和监控口径尚未完成复审 | 到期、失败、部署状态、异常统计 |
| P1-11 | [~] | 备份恢复页面 | CLI 和文档已有,Web 操作和权限需补齐 | 备份列表、恢复确认、审计和失败保护 |
| P1-12 | [~] | API 契约和权限矩阵 | 已有后端接口说明文档,需与实际路由同步 | 接口字段、角色、项目和错误码一致 |
五、P2 Web、运维和验收
| 编号 | 状态 | 任务 | 当前判断 | 主要验收 |
|---|---|---|---|---|
| P2-01 | [~] | 统一 Web 页面结构 | 已按页面拆分,仍需逐页检查一页完整显示和中文布局 | 桌面页面、响应式、导航和空状态 |
| P2-02 | [~] | 统一中文显示和错误信息 | 已有中文界面,需扫描 HTML 实体和英文残留 | 页面、接口、日志错误信息 |
| P2-03 | [~] | 长操作任务化 | 部分部署/证书操作已有任务基础 | 页面不阻塞、刷新可恢复、任务状态可追踪 |
| P2-04 | [~] | 幂等和重复操作保护 | 已有部分锁和事务测试 | 重复提交、并发操作、幂等键 |
| P2-05 | [~] | 日志、指标和追踪 | 有日志和任务记录,Request ID/脱敏需复核 | 请求 ID、任务 ID、敏感信息审查 |
| P2-06 | [~] | 接口和前端测试 | 已有后端及前端测试,覆盖面需按清单补齐 | 全量测试、关键页面、越权和失败路径 |
| P2-07 | [~] | 升级、降级、卸载和回滚 | 已有安装器和发布说明,实机闭环未完成 | 升级、降级、卸载、失败恢复 |
| P2-08 | [!] | Windows Service 实机验收 | 当前证据不足以标记通过 | 安装、启动、升级、卸载和日志 |
| P2-09 | [!] | Linux systemd 实机验收 | 有 unit 和历史测试,当前版本需重新核对 | 安装、启动、重启、日志、Nginx、回滚 |
| P2-10 | [~] | 安全基线 | 已有 SSH、凭据和数据库安全测试,仍需完整门禁 | TLS、Cookie、CSRF、越权、路径和命令注入 |
六、P3 后续增强
| 编号 | 状态 | 功能 |
|---|---|---|
| P3-01 | [ ] | 多租户支持 |
| P3-02 | [ ] | API Token 管理 |
| P3-03 | [ ] | Webhook 事件订阅 |
| P3-04 | [ ] | 更多 DNS Provider 插件 |
| P3-05 | [ ] | 证书标签和批量操作 |
| P3-06 | [ ] | 多实例高可用 |
| P3-07 | [ ] | 分布式任务队列 |
| P3-08 | [ ] | Prometheus 指标接口 |
| P3-09 | [ ] | OpenAPI 自动生成 |
| P3-10 | [ ] | 移动端适配 |
七、本轮执行记录
2026-09-27:建立整改执行基线
- 已检查
main分支和工作区,当前无未提交代码变更。 - 已确认 Go、Node.js、npm 和前端锁文件实际版本。
- 已确认数据库代码同时包含 SQLite、MySQL 和 PostgreSQL 适配,但正式支持矩阵尚未统一。
- 已发现桌面二进制和桌面前端构建入口仍在 Git 索引中,暂不直接删除,列入 P0-03 复审。
- 已补强
.gitignore,覆盖桌面构建产物、部署暂存目录、发布/证据目录和本地数据库/密钥文件。
八、下一轮优先顺序
- 对已补齐的 P0-02 全部 44 项规格完成引用与独立克隆复核,保持状态、依赖及证据一致。
- 对 P0-03 全仓库及子目录忽略规则完成正式回归和当前提交独立克隆复核,保留桌面源码及本地历史产物。
- 继续 P0-04 版本/安装策略统一及 P0-05 三数据库迁移恢复的实际验证。
- 继续定位 SSH 公钥自动部署实机失败阶段,完成密码回退和密钥登录双路径验收。
- 将生产验收门禁与当前远程部署、DNS、HTTPS 和 ACME 证据逐项对应。
2026-09-27:自动化基线验证
| 验证项 | 命令 | 结果 |
|---|---|---|
| 后端单元和集成测试 | go test -p 1 -count=1 -timeout=3m ./... |
通过 |
| 后端静态检查 | go vet -p=1 ./... |
通过 |
| Go 模块完整性 | go mod verify |
通过 |
| 前端测试 | npm.cmd test |
150 项通过,0 失败 |
| 前端生产构建 | npm.cmd run build |
通过 |
| 前端生产依赖审计 | npm.cmd audit --omit=dev --audit-level=high |
0 个漏洞 |
以上结果仅证明当前代码在本地自动化层通过,不替代 Windows Service、Linux systemd、真实 DNS、ACME、HTTPS、SSH 和备份恢复验收。
2026-09-27:P0-03 生成物索引清理
- 已确认
desktop/scripts/build-frontend.mjs从根目录frontend/dist重新构建并复制桌面资源。 - 已将
desktop/desktop.exe和desktop/frontend/dist/index.html从 Git 索引移除;本地文件仍保留,未物理删除。 deploy/tests/install-linux-test.py保留为可复用测试代码。- 本项仍需在独立克隆中验证正式发布包和生成物边界;按 P0-01 的范围调整,不再以桌面构建作为正式门禁。
2026-09-27:P0-04、P0-05、P2-07 版本和迁移保护
- 纠正工具链误报:
backend模块内实际为 Go1.26.6,GOTOOLCHAIN=auto。没有降低模块版本要求。 - 新增《构建版本与数据库支持矩阵》,区分本地代码检查、SQLite 实测和外部数据库实机验收。
- 新增迁移目录/嵌入/版本登记一致性检查,以及七类反例测试。
Migrate拒绝新版数据库和不连续的迁移历史,避免旧程序误用更新后的数据库。- 数据库定向测试通过:五类异常历史拒绝后原数据不变;SQLite 从 0~9 版本升级并重复执行通过。
- 仅使用测试临时库,没有访问或清空外部业务数据库。三种数据库兼容性不能据此标记全部通过。
2026-09-27:P0-01 正式发布范围收敛
- 依赖:原始整改清单 P0-01,已推送的
8b33282作为修改前检查点;未删除桌面源码或本地生成物。 - 涉及文件:
build/build-release.ps1、backend/internal/releasearchive/verify_test.go、根目录及各模块 README、生产和历史测试文档。 - 正式发布已移除 Wails 调用和桌面打包;清单新增
delivery_scope=[web,server],兼容字段desktop_requested=false。 - 旧参数
SkipDesktop仅警告并兼容,显式设假也不能恢复桌面构建;传入DesktopDirectory在构建前报错。 - 保留路径扫描、Go
-trimpath、文件及归档 SHA256、拒绝覆盖旧输出、源码提交和脏状态记录。 - 已通过 PowerShell 语法解析、
go test -count=1 -timeout=3m ./internal/releasearchive ./cmd/scert-release、git diff --check。 - 发布范围验证已完成,证据见下节;这仍是构建层验证,不代表 Windows/Linux 实机安装验收。
- 历史业务 CLI 的执行入口及最终产物检查已由后续批次完成,见本节末尾的范围验收记录。
2026-09-27:双平台和独立克隆发布验证
- 源码提交:
25fd4cf,已推送。默认双平台构建成功,manifest.json的source_dirty=false、delivery_scope=[web,server]、desktop_requested=false、路径检查通过。 - 输出:
build/release-scope-20260927-25fd4cf/。清单共 33 项(31 个包内文件、2 个归档),逐项文件长度和 SHA256 匹配。 - 真实解包核对:Windows 9 个文件、8 条包内校验和;Linux 22 个文件、21 条包内校验和。解包内容与清单一致,无桌面产物。
DesktopDirectory反例返回退出码 1,且没有创建输出目录。- 独立克隆:
build/checkout-scope-20260927-25fd4cf/。执行npm.cmd ci --no-audit --no-fund、npm.cmd test,150 项通过;显式-SkipDesktop:$false构建双平台通过,33 项清单的长度和 SHA256 再次匹配。 - 独立克隆保留
desktop/main.go,不包含desktop/desktop.exe或桌面 dist。跟踪清单没有.runtime、node_modules、dist、可执行文件、数据库或私钥后缀文件;克隆工作区仍干净。 npm ci提示 esbuild 的安装脚本尚未列入批准清单,但命令、前端测试及构建均退出成功;未自动批准额外脚本。可复现安装策略仍归 P0-04 后续审查。
2026-09-27:CLI 运维范围收敛
- 依赖 P0-01 正式范围;涉及
backend/internal/cli/root.go、根命令/范围/运维测试、README 和《命令行运维范围说明》。 domain、server、ssh-key、renew、deploy不再注册业务实现;仅保留隐藏的中文迁移提示,返回错误,不解析或回显旧凭据参数。- 保留初始化、服务启动、状态、证书诊断、DNS 诊断、配置、日志、备份恢复及系统服务运维;服务端自动续期未更改。
- 新增命令树白名单和 11 类旧入口拒绝测试;用无效配置和模拟凭据证明拒绝先于配置读取,配置内容不变且没有新增运行数据。
- CLI 定向测试、后端全量
go test -p 1 -count=1 -timeout=3m ./...和go vet -p=1 ./...已通过。使用测试临时目录,没有清空或连接生产数据库。 - 本批实际 Windows 可执行文件的帮助和旧入口退出码已在后续干净发布包中验证;Linux 安装及服务运行仍需独立实机验证。
2026-09-27:CLI 实际产物复核修正
d90ddaa已推送并完成干净工作区双平台构建,产物位于build/release-scope-20260927-d90ddaa/。- 实际 Windows 可执行文件的默认帮助仅显示运维命令;旧
domain add返回退出码 1,没有执行旧业务。 - 实测发现框架先输出英文
Error:,入口随后又输出中文错误,造成重复提示。已设置根命令SilenceErrors=true,由Execute统一输出中文错误;新增无重复输出断言。 - 修正后 CLI 和发布模块定向测试及静态检查通过;最终复核使用修正后的
885478a干净发布包,没有用之前的二进制代替。
2026-09-27:P0-01 范围验收记录
| 验收点 | 当前证据 | 结论 |
|---|---|---|
| 正式范围只有 Web 和服务端 | 根 README、构建/部署说明、当前执行清单和历史范围声明一致;无额外 CI 或发布入口调用 Wails | 本地复核通过 |
| 桌面历史源码保留 | 桌面目录及开发说明仍在;原本机桌面二进制和 dist 未物理删除 | 符合不删除要求 |
| 双平台实际发布包 | build/release-scope-20260927-885478a/;源码 885478a7e0dfc3832cdd094ed388891c41062eb9,source_dirty=false |
构建层通过 |
| 清单及归档一致 | 33 项长度和 SHA256 一致;Windows 解包 9 文件/8 校验项,Linux 22 文件/21 校验项,均无桌面产物 | 构建层通过 |
| Linux 可执行权限 | 归档内 scert、scert-admin、scert-nginx、scert-storage 和安装器均为 0755 |
归档层通过,不代表 Linux 已运行 |
| 实际 CLI 帮助 | 从最终 Windows ZIP 解出的 scert.exe help 返回 0,仅公开运维入口 |
本机执行通过 |
| 实际旧 CLI 拒绝 | domain、server、ssh-key、renew、deploy 均返回 1;仅一条中文错误,无模拟凭据回显,无运行目录创建 |
本机执行通过 |
| 自动化回归 | 最终应用代码通过后端全量测试、全量 vet 和 go mod verify;前端独立克隆 150 项通过,源码未再修改 |
本地自动化通过 |
| 归档测试范围 | Linux 测试改用 scert-storage,不再要求桌面;Windows 测试逐项核查实际平台文件,不再仅判断 Web 入口存在 |
发布模块测试和 vet 通过 |
P0-01 标记 [x] 已完成,等待复审,不标记生产放行。整体 44 项整改未完成:P0-02 执行规格、P0-03 全仓库边界、三数据库实机验证、项目权限、统一任务、备份页面及生产门禁等仍需继续。上述输出均在忽略目录内,没有提交二进制、运行数据或辅助测试脚本。