Scert/doc/DNS多账户整改任务清单.md

95 lines
13 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.

# DNS 多账户整改任务清单
## 2026年10月4日06:28 页面生命周期开发结果
- [✓] 第一台 `0610` 单元已 inactive/success、退出码零;`c80530f` 单轮三库竞态通过:数据库 81.666 秒、仓储 37.304 秒、证书 1.032 秒、HTTP 22.561 秒。包含历史排序规则与错误列排序规则用例,修复获得实库证据。不是原 `0555` 三轮通过。
- [x] DNS 账户页接入新建、改名、启停、凭据轮换和指定授权域名在线验证;归属用户保持展示,归属项目显示名称;历史系统账户只读标记,尚未提供删除按钮。
- [x] 项目列表增加 `can_manage_dns`,按超级管理员或项目管理员、DNS 管理员角色实时计算;界面按项目能力显示操作,服务端写入仍实时核权。服务商目录仅含公共字段定义,允许已认证项目用户读取,实际系统 DNS 测试及系统设置权限不放宽。
- [x] 原生对话框、双列输入、鼠标悬浮说明、列表内滚动及固定表头;保留 5/10/15/30 分页。凭据不回填、不持久化,提交、取消、刷新、切换服务商和卸载时清空;409 不自动重放,网络中断提示结果未确认。
- [✓] 新增 24 项前端专项;前端全量 310 项及生产构建通过。HTTP 全包 27.129 秒、仓储全包 7.944 秒及两包 vet 通过。本地外部数据库跳过不计实库。
- [x] 初次后端回归发现两项旧测试把只读服务商目录当作全局管理员边界;已按新契约验证所有登录用户可读目录,并将管理员拒绝用例移到真实系统 DNS 写操作,未删除权限负向检查;复跑通过。
- [~] 本批页面与权限代码等待第一台干净源码 Linux 复审和真实浏览器验收;当前没有升级正式服务,没有操作第二台或修改发信配置。
- [ ] 域名表单账户选择、执行租约与签发续期重试、旧账户导入、安全删除回收和完整生产验收仍待完成,P1-03 不关闭。
## 2026年10月4日06:13 页面接入与实库复跑
- [!] `0555` 单元已实查失败,退出码一;全量和 vet 已完成,三库阶段明确出现磁盘空间不足,不能计为通过,也不能据此判定排序规则修复失败。
- [✓] 已确认相关测试单元终止且不存在隔离数据库进程,只清理 `0538/mysql` 与 `0425/mysql-race`、`0425/mysql-review` 下隔离实例的 `data` 目录;保留日志、源码、工具链、生产数据库和第二台,释放约 3.5 GB。
- [~] `scert-domain-dns-20261004-0610.service` 复用 `c80530f` 干净源码执行单轮三库竞态专项;不重复已完成全量,不将本轮表述为三轮通过。
- [✓] 页面接入前检查点 `7f7b084` 已提交推送。
- [~] 接入新建、改名、启停、轮换和在线验证;项目权限提示只用于界面,后端仍实时判权。凭据不回填、不持久化,旧版本冲突不自动重试写入。
- [ ] 页面单元回归、构建和更新代码的第一台 Linux 复审。
- [ ] 执行租约、实际签发续期、历史导入和安全回收仍未完成,不发布过渡版本,不关闭 P1-03。
## 2026年10月4日05:54 绑定接口与 MySQL 外键兼容修复
06:00(UTC+8)补充:修复已随 `c80530f` 提交推送。第一台 `scert-domain-dns-20261004-0555.service` 正在该提交的真实 Git 干净签出上执行全量、vet 和三库三轮竞态;已实查 active/running,尚无终态。不得重复启动或提前计为通过。源码和日志在 `/var/tmp/scert-domain-dns-20261004-0555`。
- [✓] 修改前检查点 `45798c5` 已推送;第一台原任务已查询至终态,没有因观察超时重复启动。
- [x] 新增域名账户绑定读取和写入接口,显式提供账户、绑定令牌和版本,支持解除;拒绝遗漏、空值、伪造身份字段、跨源、越权、旧版本及在途任务。依赖失败不泄露内部错误,成功审计与绑定同事务。
- [!] 干净 `7a6da6b` 的 Linux 全量及 vet 通过,但三库专项在 MySQL 报外键字段排序规则不兼容,整体单元退出一;不能计为三库通过。旧主键继承历史建库排序规则,新绑定列不能固定为项目标识的排序规则。
- [x] 修复为从历史域名主键读取字符集和排序规则,仅应用于新外键列,并严格校验重入结构;不修改历史父表或数据库默认值,不覆盖冲突表。补数据库默认值改变及错误列排序规则用例。
- [✓] 本地 HTTP API 全量 31.842 秒、数据库全量 27.797 秒及两包 vet 通过;本地外部实库跳过不计实库证据。首次新增测试编译时误用数据库包装对象的方法,已改为底层连接后复跑。
- [~] 等待修复提交的第一台干净源码实库复审。执行租约、旧账户导入、实际签发续期、删除回收和前端仍未接通;不发布过渡版本,不关闭 P1-03。
## 需求与边界(2026年10月4日)
依据《Scert整改合并优化清单》和《核心能力任务规格》P1-03,以及用户已确认的 DNS 账户归属要求执行;不是新增需求。范围仅 Linux 与 Web,第一台部署业务,第二台只验收证书推送。公共域名切换和邮件授权尚待确认,不阻断本项开发。
- 独立保存多个 DNS 账户,显示项目和用户归属,不把固定系统账户列表视为完成。
- 支持账户创建、验证、禁用、轮换和安全删除;凭据保存在现有秘密仓库,不在接口、日志或审计输出明文。
- 域名显式选择账户;签发、自动续期和重试使用同一绑定及实时权限,禁止跨项目使用。
- 兼容旧系统账户,处理域名、任务和旧凭据引用,不在迁移时擅自删除历史配置或密钥。
- 处理账户变更与签发并发,验证结果只能更新对应凭据版本;禁用不能被旧验证响应覆盖。
- 页面保持一页可用;覆盖 SQLite、MySQL、PostgreSQL 迁移、权限与竞态,再做第一台正式部署和实机验收。
## 执行状态
- [✓] 需求与现有代码核对:当前只有配置文件中的单账户,没有独立账户表和域名账户绑定。
- [✓] 修改前检查点已提交推送:`26b8c3c`。保留未跟踪文件 `=`,不提交、不删除。
- [x] 账户基础模型和迁移二十七:独立账户元数据、归属、状态、秘密引用和版本号;三库初轮专项通过,等待最终回归复审。
- [x] 基础仓储:实时项目权限、事务审计、版本冲突、轮换后验证失效和禁止公开返回秘密引用;未提供无引用保护的删除方法。
- [✓] 三库迁移和仓储专项三轮竞态通过;MySQL 审计故障夹具权限已修正,失败记录保留。完整执行链仍待实现验证。
- [ ] 旧系统账户导入及幂等恢复,保护配置与历史凭据引用。
- [~] 域名绑定及数据库引用保护已实现,等待第一台实库复审;安全删除、执行租约和凭据清理尚未完成。
- [x] 域名绑定 HTTP 接口与严格参数、实时权限、版本竞争、跨源和审计回滚用例已实现;第一台回归待复审。
- [ ] 正式签发、续期、重试的账户解析与执行前权限复核。
- [x] 账户验证、增改、启停、轮换接口及无缓存和敏感字段隔离;本地全包与专项通过,第一台 Linux 回归待终态确认。
- [~] DNS 账户页生命周期及前端回归已完成;域名配置页账户选择、浏览器复审仍待完成。
- [ ] 第一台 Linux 全量、竞态、三库实测与正式产物升级。
- [ ] 公共域名真实浏览器和授权 DNS/公共 CA 验收。
## 完成标准
### 2026年10月4日05:34 域名绑定增量
- [x] 迁移二十八新增域名与账户绑定;复合外键约束同项目,允许同一账户绑定多个域名。SQLite 外键关闭时仍有插入、更新、删除、替换保护;MySQL 按建表、索引、两个外键的中断边界校验并恢复,不覆盖冲突结构。
- [x] 绑定仓储要求实时证书管理与凭据使用权限,核对账户版本、启用及验证状态;解除要求证书管理权限。每次绑定生成新令牌,拒绝旧页面覆盖和解除后重绑的旧令牌复用。
- [x] 绑定、域名服务商元数据和成功审计同事务;排队、运行、等待重试及取消中的任务阻止变更。域名删除原子解除引用,不删除账户;普通编辑不能绕过绑定改变验证方式或服务商。
- [x] 域名读取返回账户与绑定标识。执行租约尚未接入,因此签发入口对独立绑定明确拒绝,不能静默使用系统凭据替代;尚未开放绑定接口和页面,不部署此过渡状态作为完整功能。
- [✓] 本地数据库、仓储、证书、HTTP 四包全量通过;追加状态与错误分类用例后,仓储二十轮专项及四包 vet 通过。本地 MySQL/PostgreSQL 未配置而跳过的用例不计实库证据。
- [!] 干净提交 `1dc72f2` 第一台全量任务 `scert-dns-clean-20261004-0514.service` 失败:SQLite 并发锁错误被已有账户更新入口包装成凭据重复错误。已按驱动主错误码及扩展码分类为版本冲突,保留非锁错误拒绝;未放宽原并发断言,待修复版本第一台复跑。
- [~] 本轮先核验干净源码三库迁移、绑定仓储和 Linux 全量,再接旧账户导入、绑定接口、执行租约及签发续期链和前端。完整 P1-03 仍未完成。
只完成数据模型或管理接口不能关闭 P1-03。每阶段记录真实测试结果;外部服务未验证、跳过或仅隔离验证的项目维持未完成。CNAME 委派保留在总清单,不因本项账户开发自动关闭。
## 首轮验证记录(运行环境 UTC+8,2026年10月4日)
- 本地首轮专项发现 SQLite 默认外键开关关闭时引用保护无效;补项目插入、更新、删除、更换标识及替换触发器,不全局修改用户连接参数。首批失败真实保留,不把原代码计为通过。
- 本地领域、数据库和仓储包全量通过;本地未配置的 MySQL/PostgreSQL 实库用例跳过,不计实库证据。新增完整用例后三轮专项和 vet 通过。
- 第一台首轮任务 `scert-dns-accounts-20261004-0425.service` 已 inactive、success、退出码零:三库迁移、账户仓储、MySQL 八种中断/冲突和 vet 通过。日志为 `/var/tmp/scert-dns-accounts-20261004-0425/dns-accounts.log`。
- 增量竞态任务 `scert-dns-accounts-race-20261004-0430.service` 于 04:41 实查为 failed、退出码一;数据库三轮通过,185.274 秒,仓储 SQLite/PostgreSQL 通过,MySQL 三轮均在故障触发器创建时报 1419。修复仅将隔离库触发器注入改用测试管理连接,业务操作继续受限连接,不修改生产权限或全局信任参数。
- [~] 本轮沿用已确认需求:先复核修复后的实库竞态,再接入域名账户绑定及引用保护,随后接续执行链和页面;数据层检查点 `02e0399` 已提交推送,完整功能仍未完成。
- 当前 HTTP 路由、系统旧账户、域名签发配置和线上正式版本均未切换,生产数据及第二台未操作。
## 账户管理接口接入(运行环境 UTC+8,2026年10月4日05:04)
- [x] `/api/v1/dns/accounts` 现在合并独立账户与旧系统账户;独立账户列表只读元数据、不解密凭据,显示真实归属用户,用户已删除时保留原标识并显示缺失状态。旧系统账户仍是兼容视图,未伪装成已完成导入。
- [x] 创建、读取、改名、启停、轮换、验证六条路由已接入真实数据库仓储;写操作检查同源、实时项目权限,创建不能冒领归属或伪造验证结果,修改携带版本号。读取、拒绝和错误响应均禁止缓存。
- [x] 首次验证使用独立的管理权限入口,只读取目标账户的实际凭据并调用现有 DNS 在线验证器;轮换、禁用或撤权后,旧验证结果不得覆盖新状态。不接受客户端自报成功、凭据引用或验证令牌。
- [x] 故障注入覆盖秘密写入/读取失败、服务商错误、验证取消、依赖缺失、审计失败回滚和敏感字段隔离。HTTP 测试使用隔离数据库与注入验证器,不能计为真实云 DNS 成功。
- [✓] 本地 HTTP、仓储、数据库、领域四包全量及 vet 通过;随后新增依赖错误用例后的三轮 HTTP/仓储专项及 vet 通过。本地缺少外部数据库时跳过的用例不计实库证据。
- [✓] 05:09 实查第一台 `scert-dns-accounts-api-20261004-0458.service` 已 inactive、success、退出码零;三库与 HTTP 三轮竞态及 vet 通过。领域 1.023 秒、数据库 185.441 秒、仓储 49.344 秒、HTTP 40.278 秒;日志 `/var/tmp/scert-dns-accounts-20261004-0425/dns-accounts-api-race.log`。此前 `0445` 环境变量错误退出一,失败记录保留。本次为隔离覆盖树,未包含最后追加的依赖故障用例与领域标识生成器复用,须由后续干净源码回归补齐。
- [ ] 旧系统账户导入、域名绑定、执行租约、引用回收和安全删除、签发/续期/重试、前端操作仍未完成。旧秘密及提交结果不确定时的新秘密暂时保留,不能在缺少引用保护时误删;这不是完整回收方案。
- [ ] 完成当前实现复审后,提交干净源码并在第一台做 Linux 全量;本批不重复正式升级,不操作第二台,不把接口进展当作生产验收。