Files
console-dev/docs/validation.md
T
2026-11-06 00:04:38 +08:00

97 lines
9.9 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-11-05。基准:当前 20261025 发布版本;没有读取 `.env`,没有连接生产服务器或使用生产凭证。
## 可确认的范围
清单包含 52 个页面、104 个组件、4 个布局;另重写应用入口。所有业务文件采用源码路径和显式模块依赖,
不从历史 `.output`、`releases` 或旧哈希 JS 加载代码。保留编译后的作用域样式,以维持现有视觉规则。
原注释、模板排版、完整局部变量名不能逆向恢复;多数页面仍使用渲染函数,应逐步按实际维护需求重构。
源文件的解析/依赖门禁与生产构建覆盖全部 Vue 文件,但不等于所有业务交互都已验收。
逐文件覆盖台账另见 `audit-coverage.json`;未逐行人工审查的业务文件明确标记为未审查。
## 修复记录
| 问题 | 原因和处理 | 验证方式 |
| ------------------------ | ------------------------------------------------------------------------ | ------------------------------------- |
| 请求永久等待 | JSON 默认 30 秒、上传/下载 120 秒;截止时间覆盖响应正文和购买前置校验 | 真实页面的挂起请求与超时场景 |
| 注销被网络拖住 | 先捕获旧 Bearer,立即清理本地会话,后台有限时撤销 | `/logout` 不返回时仍退出 |
| 支付截止被挂起轮询吞掉 | 一个轮询会话拥有独立五分钟截止与单请求超时,关闭/换单/换身份使旧响应失效 | 浏览器外部时钟推进、无重复支付 |
| SSH 搜索翻页重复 | 区分服务端分页和完整搜索集合,仅由可见行计算切片 | 普通分页、搜索 10/10/5、查询切换/清空 |
| 重建入口改变登录生命周期 | 登录及旧平台入口在认证过程中保持组件身份;保护页面随会话失效卸载 | 登录和旧入口场景 |
| 会话失效后重复初始化 | 菜单、支付初始化由当前登录身份控制 | 401 与退出场景 |
| 图标依赖外网 | 本地打包 Lucide,禁用外部回退 | 所有场景禁止访问外网 |
| 组件库许可提示 | 换用 MIT 版本,不修改许可校验;主题也引用 MIT 包 | 可见 UI 许可检查 |
| 框架运行时混用 | Vue、共享函数、Router 版本统一;替换旧私有注入标识 | 实际启动构建服务及浏览器验收 |
| 跨标签页会话不一致 | 请求与界面使用同一个响应式身份;监听存储变动使其他标签页同步退出 | 第二标签页退出后第一个标签页被保护 |
| 旧入口凭证回到地址栏 | 同时清理 history 与路由的规范地址,失败页面也不恢复敏感查询 | 旧凭证被拒绝后检查 URL 与 Referrer |
首轮已在真实构建上重现 SSH、注销和支付三个缺陷;修复后基础 11 场景通过。
第二轮最终生产构建通过,扩展 21 个浏览器场景全部通过,无浏览器运行错误和外网请求。
结果见随本次交付保留的 `acceptance.json`、`acceptance-assets/` 截图和 `acceptance-requests.json` 脱敏请求顺序。
已修复问题与剩余债务另见 `defect-ledger.json`;这不是整站逐行审查或生产业务验收完成的声明。
首轮源码包曾在仓库之外的全新临时目录重新执行 `npm ci`、检查、构建与当时的 18 个浏览器场景,全部通过;
本轮 v2 包的独立验证记录见下文,不把首轮结果当作本轮验收。
## 第二轮:手写模板重建
本轮仅改写 `app/pages/login.vue`、`app/pages/home.htm.vue`、`app/pages/security/ssh-keys/index.vue`
和 `app/layouts/blank.vue`,从恢复的渲染函数改成可维护的 setup 与模板;不是在旧 render 外再包一层模板。
登录保留密码/短信配置、60 秒验证码倒计时、CAPTCHA/安全验证续登、OAuth 组件和安全跳转;
旧入口保留凭证验证、地址脱敏、重试与卸载取消;SSH 保留服务端分页、完整集合搜索及增改删,清理卸载后的计时器和迟到结果。
认证布局保留主题、站点配置、logo、redirect 和 slot。原样式的作用域接缝已逐项核对。
最小设计复核:以逐页等价替换解决可读性问题;不新增调用方字段或配置;路由与派生状态沿用已有来源;
不另建渲染/请求抽象或第二条实现路径;重写覆盖每个选定页面的完整模板,不为测试添加产品开关。
净行数:产品 -863(登录 -390、旧入口 -80、SSH -293、布局 -100),测试 +348,增长用于三个真实页面行为场景及旧场景扩展;依赖/锁文件零变动。
合并后执行 `npm run check`、`npm run build`、`npm test`,161 个 Vue 文件和 55 个模块门禁通过,21/21 浏览器场景通过。
新增覆盖:短信独占配置及倒计时、禁用短信时的默认登录方式、SSH 创建/编辑/删除末页恢复;
原旧入口失败场景扩展为真实点击重试,并检查不恢复 URL 凭证、不重新密码登录及无 Referrer。
测试仍通过真实生产构建和独立 HTTP 假后端,不替换内部模块、不预置 JWT、不访问生产服务。
本轮交叉复核完整读取四个新文件及相关样式;登录组件、安全验证、会话和路由接缝按台账记录读取范围。
最新质量复核未发现新增确认回退;详细原始业务规范并不存在,不能宣称全部原规范逐条一致。
本轮已验证的公开入口为 `/login`、`/home.htm` 与 `/security/ssh-keys`,未因此提升其他页面的人工审查/功能覆盖状态。
窄屏补查确认认证页和 SMS 表单在 320/390px 下不横向溢出,SSH 编辑弹窗在 390px 下宽 366px;
核对预填、取消、密码显示切换、注册/重置提示及 redirect 链接。截图证据随 `acceptance.json` 归档。
另确认一个既有主题文案问题:浅色系统下默认 auto 首次循环到 light,按钮虽写“切换深色模式”却仍浅色;
基准版本行为相同,作为 `AUTH_THEME_CYCLE_LABEL` 有界债务保留,不把首次点击截图当作深色验收。
门禁盲区:配置加载失败后重载、CAPTCHA/安全挑战/实名认证续登、真实 OAuth、SSH 剪贴板/失败响应/并发操作、
旧入口卸载时取消等分支尚未被这 21 个场景完整覆盖;代码复核不代替这些分支的真实交互验证,也无证据将其判定为已坏。
v2 源码候选包已通过独立干净目录验收:从提交 `6c73598` 仅导出 `frontend/`,解压到仓库外,
重新执行 `npm ci`、源码检查、生产构建和 21 个浏览器场景,全部通过;稳定的场景结果与主工作树一致。
导出包含 686 个文件,无符号链接,不含 `.env`、Git 历史、依赖目录、生成构建和数据库备份。
此后仅补充文档与台账,没有改变已验收产品、依赖或测试。12 项低/中危传递依赖告警仍在债务清单中。
结构性修复扫描:
```sh
rg -n 'fetch\(|AbortController|timeoutMs|logout|legacyLogin|useApi\(' app --glob '*.js' --glob '*.vue'
rg -n '/pay/.*status|setInterval\(|complete_list_n' app --glob '*.js' --glob '*.vue'
```
接口核心 JSON、上传、下载、旧平台身份验证共四个传输入口统一有限时;验证码刷新和 VNC 会话使用各自
既有的交互生命周期,不宣称已完成全局网络子系统重写。支付状态只有一个共享轮询所有者,已修复。
其余服务器刷新、验证码倒计时和实例查询不是同一个“支付绝对期限被吞掉”的缺陷,不在此改动中混改。
## 仍需联调 / 有界技术债
规模说明:原仓库没有 `frontend/`,新增的是已有业务的独立源码表达,不是同等数量的新功能。
相对重建前基准,应用源码约 +123,394 行、现有样式展开后 +19,836 行、测试约 +1,250 行;
构建/锁文件/工具约 +9,964 行,静态资产文本约 +2,605 行,另保留二进制图片和字体。
文档、截图与逐文件台账单独计量,不作为产品逻辑。较大体量主要来自恢复全部业务渲染函数和将压缩样式格式化;
没有为每个页面另造一套框架、请求系统或测试专用产品开关。不能因编译全绿就省略后续按业务逐页维护与联调。
- 真实下单、续费/升级、发票、财务、安全验证、短信/邮件、第三方 CAPTCHA/OAuth、真实支付、VNC 握手及生产反代:未使用生产环境验证。
- `/captcha/` 及 `/remote-console/sessions` 为同源接口,必须在开发/测试部署另行配置反代,不能仅依赖 API origin。
- 原远程控制网关属于独立服务。本工程保留客户端协议,但没有重写或部署该服务;此前审查发现的网关配额并发竞争仍需单独修复。
- 浏览器回归采用外部 HTTP 假后端,不能代替供应商接口兼容性验收;52 个页面可构建不代表所有分支、每种响应字段都已人工核对。
- 默认保留 JWT 持久化方式与登录 AES 协议,未进行会影响后端契约的身份协议升级;CryptoJS 已停止维护,应在前后端协同变更时迁移。
- `npm audit` 的传递依赖低/中危告警仍保留,具体结果见 `dependency-audit.json`;没有盲目使用 `--force` 降级框架。对外上线前应复核受影响路径与补丁版本。
- 大部分恢复页面仍含短局部变量和较长渲染函数,非逐字原始开发源码,也非每个页面都已重新手写模板。人工深度审查集中在入口、会话、支付、分页和远控边界。
旧服务器及数据库备份未导入新前端,没有覆盖原发布目录。新工程的所有变更仅限 `frontend/`。