Files
nyaterm/docs/gpu-plugin-validation.md
T

96 lines
8.4 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.
# GPU 插件验证记录
验证日期:2026-10-03。宿主:Windows x86_64;目标远端:Linux/NVIDIA。
本记录验证代码、包和真实原生进程;没有连接用户的 SSH 会话,也没有真实 NVIDIA 主机结果。
## 交付
- 源码:`plugins/examples/gpu-monitor/`,插件 ID `nyaterm.gpu`,版本 `1.0.1`。
- 包:`temp/plugins/gpu-monitor.nyap`,Windows x86_64,484,743 字节,8 个 ZIP 条目。
- SHA-256:`e92a8888b3658e5fb72a0a576b09657db37f5dfac66cd4b133f637ff7d522bd3`。
- 用法与构建:[GPU 插件 README](../plugins/examples/gpu-monitor/README.md)。
- API:[插件开发说明](plugin-development.md)。
```sh
pnpm plugin:example:gpu
pnpm plugin:pack plugins/examples/gpu-monitor temp/plugins/gpu-monitor.nyap
node plugins/examples/gpu-monitor/verify-ui.mjs
```
构建输出包含相对路径 CSS、SDK、单个经典 IIFE 脚本和 release 后台。
打包器调用实际安装器校验路径、引用、配额及校验和后发布 `.nyap`;另行核对全部 checksums。
当前包只声明 Windows x86_64;构建脚本支持在 Linux/macOS、x86_64/aarch64 宿主重建相应产物。
不能据此宣称跨平台桌面验证完成。
## 首版自动验证
| 检查 | 结果与范围 |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Runtime `cargo test --features sdk-fixture` | 28 项通过;另有 1 项最终包测试需显式启用(本次已执行通过) |
| 最终包 Sidecar 测试 | 1 项通过;实际安装、授权、启动 release 可执行文件,两次 reverse Probe RPC 往返及 GPU 解析 |
| 共享 GPU crate | 5 项解析测试通过;涵盖多设备、缺失可选值、进程索引和带逗号名称 |
| Rust SDK | 2 项测试通过;JSONL/framed 的进程互操作另由 Runtime 覆盖 |
| Runtime/SDK/GPU Clippy | `--all-targets -- -D warnings` 通过;Runtime 启用 `sdk-fixture` |
| Tauri | `cargo check --all-targets`、`cargo clippy --all-targets` 通过;宿主 Clippy 有项目级警告,未宣称零警告 |
| 前端 TypeScript | 宿主 `tsc --noEmit` 与插件独立 TypeScript 检查通过 |
| 宿主/插件构建 | `pnpm build` 和 `pnpm plugin:example:gpu` 通过;宿主仍有既有大 chunk/Browserslist 提示 |
| 前端 lint | `pnpm lint` 通过;`CommandSuggestions.tsx` 有既有依赖数组警告 |
| 相关 Vitest | 初始 7 文件 16 项通过;补充 Bridge 和续期失败检查后,相关 5 文件 16 项通过 |
| 全量 Vitest 首轮 | 155 文件中 154 通过,971 项通过;AI 设置有 1 项 5 秒超时。该文件独立重跑 9 项全部通过 |
| 全量 Vitest 最终重跑 | `vitest run --maxWorkers=4`:155 文件、974 项全部通过 |
| 宿主 Rust 插件测试 | 编译成功;测试可执行文件启动失败,Windows 返回 `0xc0000139 / STATUS_ENTRYPOINT_NOT_FOUND`,未执行断言 |
| 构建产物 UI 冒烟 | jsdom 执行实际 SDK 和 IIFE:设备/驱动/CUDA/温度/功率/风扇/显存/进程、排序/搜索、刷新、四语言、主题、保留数据的错误和暂停状态通过 |
Runtime 新增测试覆盖旧包兼容与新贡献校验、固定脚本全文审核、非法路径/超时/输出配额、更新和回滚移除授权、
GPU Monitor 冲突、共享需求、无重叠/补发、最后需求释放、取消和迟到结果、停止/手动恢复、不可用停止及三次失败清空。
前端测试覆盖初始快照竞态、revision 去重、订阅/iframe 归属、配额、取消、作用域续期、会话/激活切换、锁屏释放需求、
插件错误不切源、停用恢复内置、当前会话资产回填及 NPU 入口保持原行为。
最终包测试执行真实原生程序,使用安装包内脚本和 `execute_declared`。
执行器模拟远端输出,未建立网络 SSH 连接。私有 exec 通道代码经过 Tauri check/Clippy;
`SessionCommand::Write` 不在 Probe 执行路径中。尚未实际验证 russh 网络取消或终端无输入干扰。
jsdom 只验证构建产物逻辑和 DOM,不等同于 WebView2 的样式、opaque-origin 自定义协议或原生桌面验收。
## 1.0.1 换行修复验证
用户桌面运行 `1.0.0` 报告 `GPU probe did not exit successfully`。
检查原始 `.nyap` 发现 `gpu.sh` 的 34 个换行全部为 CRLF。
在 WSL Ubuntu 的真实 `/bin/sh -s` 中,原字节第二行报 `export: LC_ALL\r: bad variable name`,退出码 2;
同样脚本仅转换为 LF 后成功,缺少 NVIDIA 工具时输出 `GPU_AVAILABLE\t0` 并退出 0。
首版 Sidecar 测试模拟远端输出,未执行脚本,因而没有发现这一打包缺陷。
`1.0.1` 将脚本源码和构建输出固定为 LF,构建脚本显式规范换行;
后台错误区分非零退出码与没有退出状态,不记录原始 stdout/stderr。
提高版本号使已安装的不可变 `1.0.0` 能通过正常更新流程安装修复。
本次通过的检查:
- `pnpm plugin:example:gpu`:独立 TypeScript、经典脚本 UI、release 后台构建。
- `pnpm plugin:pack ...`:实际安装器的包校验;新版包所有 checksums 和 LF 字节另行核对。
- `python plugins/examples/gpu-monitor/verify-probe.py --wsl Ubuntu`:执行最终包内的真实脚本,
验证 CRLF 失败、LF 无工具分支和隔离 `nvidia-smi` 样本的设备/CUDA/进程输出。
- GPU Sidecar 测试 3 项通过:成功采集复用、退出码/缺失状态诊断、源码换行回归。
- 最终 `1.0.1` 安装包 Sidecar 测试 1 项通过:实际安装/授权并启动 release 程序,两次固定 Probe 往返。
- Runtime `clippy --all-targets --features sdk-fixture -- -D warnings` 通过。
- 构建产物 GPU UI 冒烟通过。
此修复只需更新插件包并重新授权,不需要修改或重新编译宿主。
Linux Shell 验证使用本机 WSL 和固定 NVIDIA 样本,仍未连接真实 NVIDIA SSH 服务器。
## 用户 SSH 会话上的桌面验收(未执行)
使用包含本次接口实现的宿主,由用户自行建立 Linux/NVIDIA SSH 会话:
1. 安装并审核固定脚本,授权 `native`/`remote.probe` 后启用;确认普通终端输入不被采集打断。
2. 同时打开原 GPU 工作区和独立插件面板,设置 3 秒间隔,确认持续更新且共享采集。
3. 顶部状态选择 GPU,关闭两处面板,确认顶部状态仍更新;关闭全部 GPU 需求后确认停止。
4. 测试手动刷新、搜索/排序、四种语言和明暗主题;核对实时指标与服务器 `nvidia-smi`。
5. 在任务空闲时点击“停止后台”,确认定时器不重启后台;刷新后恢复。
6. 切换会话、断开、锁屏、关闭窗口和撤销授权,确认停止请求、旧数据不回填新会话。
7. 超过 25 分钟确认主窗口续期不重载工作区数据;iframe 重建后取得当前快照。
8. 模拟采集错误,确认保留旧数据并标记错误,三次后清空;不静默回退。
9. 停用后确认恢复内置采集;更新/回滚要求重新审核;第二个 GPU Monitor 冲突被拒绝。
真实 NVIDIA 数据、持续网络采集、网络取消、原生安装 UI 和上述桌面行为均未验收。
本次没有修改用户凭据、建立用户会话或安装到用户的真实插件目录。