154 lines
9.2 KiB
Markdown
154 lines
9.2 KiB
Markdown
# HWLAB MVP E2E 验收测试与报告 issue 规则
|
||
|
||
本文定义 HWLAB MVP 的用户可读、Agent 可执行验收测试规格。它按 `cli-spec` 的 `TEST.md` 风格组织用例,但报告产物不写入 `docs/` 或 `reports/`;每轮验收必须创建一个带编号的 GitHub 测试报告 issue。
|
||
|
||
## 适用范围
|
||
|
||
- 当前 DEV 浏览器入口固定为 `http://74.48.78.17:16666/`。
|
||
- 当前 DEV API、edge 和 live health 入口固定为 `http://74.48.78.17:16667/` 与 `http://74.48.78.17:16667/health/live`。
|
||
- 当前 MVP 上位约束是 `DC-DCSN-P0-2026-003` / [pikasTech/HWLAB#78](https://github.com/pikasTech/HWLAB/issues/78):M3 虚拟硬件可信闭环必须证明 `res_boxsimu_1:DO1 -> hwlab-patch-panel -> res_boxsimu_2:DI1`。
|
||
- 当前默认前端方向以 [pikasTech/HWLAB#99](https://github.com/pikasTech/HWLAB/issues/99) 为准:`/` 必须是类 VS Code 的 Cloud Workbench,不是 Gate、status 或 diagnostics 首页。
|
||
|
||
## 报告 issue 规则
|
||
|
||
测试报告产物必须落到 GitHub issue,不进入长期文档目录,也不提交一次性报告文件。
|
||
|
||
- 报告 issue 标题格式:`[MVP-E2E-RPT-<NNN>] HWLAB MVP E2E 验收测试报告:<简短范围>`。
|
||
- `<NNN>` 从 `001` 开始递增;创建前先搜索 open 和 closed issue 中已有的 `MVP-E2E-RPT-` 编号,选择下一个编号。
|
||
- 报告 issue 必须包含:测试日期、测试人或 runner、源文档路径、本次目标、DEV URL、observed commit/revision/tag/digest、每个 `T{x}` 用例的状态、blocker class、关键截图或截图附件、operation/trace/audit/evidence id、最终结论和后续 issue。
|
||
- 如果 Playwright 截图无法直接上传到 issue,报告 issue 必须记录截图文件路径、文件名、SHA 或可审查的 artifact URL;不能只写“已截图”。
|
||
- 任一用例为 `failed` 或 `blocked` 时,总结论只能是 failed/blocked,不得写 pass。
|
||
|
||
推荐报告 issue body 结构:
|
||
|
||
```markdown
|
||
## 测试范围
|
||
|
||
- 源文档:docs/reference/MVP-e2e-acceptance.md
|
||
- 报告编号:MVP-E2E-RPT-<NNN>
|
||
- DEV Cloud Web:
|
||
- DEV API/edge:
|
||
- observed frontend revision:
|
||
- observed API revision:
|
||
- runner / tester:
|
||
|
||
## 结果总览
|
||
|
||
| 用例 | 状态 | 证据等级 | blocker class | 截图/证据 |
|
||
| --- | --- | --- | --- | --- |
|
||
| T1 | pass/failed/blocked | DEV-LIVE/SOURCE/DRY-RUN/BLOCKED | | |
|
||
|
||
## 详细记录
|
||
|
||
## T1
|
||
|
||
- 操作:
|
||
- 观察:
|
||
- 截图:
|
||
- 关键 ID:
|
||
- 结论:
|
||
|
||
## 安全边界
|
||
|
||
- 未触碰 PROD:
|
||
- 未读取 secret 明文:
|
||
- 未重启 UniDesk / Code Queue / backend-core:
|
||
- 未把 UniDesk runtime 当 HWLAB runtime:
|
||
```
|
||
|
||
## 证据等级
|
||
|
||
- `DEV-LIVE`:真实 DEV `16666/16667` 上的浏览器、API、runtime 或短生命周期授权操作证据。
|
||
- `SOURCE`:源代码、静态检查、合同校验或未部署构建证据。
|
||
- `LOCAL`:本地浏览器、fixture 或本地服务证据。
|
||
- `DRY-RUN`:显式 dry-run 输出,不触碰 DEV runtime。
|
||
- `BLOCKED`:因为环境、权限、运行态、agent、DB、evidence 或安全边界无法继续。
|
||
|
||
禁止把 `SOURCE`、`LOCAL`、`DRY-RUN`、fixture、edge-only health、前端静态状态或 UniDesk runtime 代理写成 M3 或 MVP `DEV-LIVE` 通过。
|
||
|
||
## 验收用例
|
||
|
||
## T1 DEV 入口与运行边界
|
||
|
||
阅读 `AGENTS.md`,然后用浏览器或 Playwright 手动测试以下内容:打开 `http://74.48.78.17:16666/`,确认默认页是 HWLAB Cloud Workbench,不是 Gate、status、help 或 diagnostics;访问 `http://74.48.78.17:16667/health` 和 `http://74.48.78.17:16667/health/live`,确认返回 HWLAB DEV API/edge identity。报告必须写明 public `:6666/:6667` 未作为当前验收入口,UniDesk backend、provider-gateway 和 microservice proxy 未作为 HWLAB runtime 替代。
|
||
|
||
通过标准:
|
||
|
||
- `16666` 根页可由浏览器打开,页面标题、主导航或首屏内容明确指向 HWLAB 云工作台。
|
||
- `16667/health` 或 `16667/health/live` 返回 JSON,包含 HWLAB service identity 和 dev environment。
|
||
- 报告 issue 附桌面首屏截图和 API/health 摘要。
|
||
|
||
## T2 Cloud Workbench 首屏、布局与中文 UX
|
||
|
||
阅读 `AGENTS.md`,然后用浏览器或 Playwright 手动测试以下内容:分别在桌面视口和 `390x844` 移动视口截图,确认左侧资源/功能导航、中间 Agent 对话/trace/输入区、右侧硬件状态和控制/接线/可信记录区域可见;外层页面不滚动,滚动只发生在内部面板;用户可见文案中文优先;使用说明是内部入口且由 Markdown 渲染,不是默认首页。
|
||
|
||
通过标准:
|
||
|
||
- 默认页显示工作台,不显示 Gate/M0-M5/验收报告作为首屏主体。
|
||
- 桌面和移动视口下 `html/body` 或等价应用根节点没有页面级滚动路径。
|
||
- 关键中文标签可见,必要机器标识可以保留原文。
|
||
- 报告 issue 附桌面、移动和使用说明内部页截图。
|
||
|
||
## T3 M3 虚拟硬件可信闭环
|
||
|
||
阅读 `AGENTS.md`,然后用浏览器或 Playwright 手动测试以下内容:在明确授权的 DEV live 窗口内,通过工作台或等价受控入口执行 `res_boxsimu_1:DO1 -> hwlab-patch-panel -> res_boxsimu_2:DI1` 的 true/false 循环。报告必须记录两个 distinct box-simu、两个 distinct gateway-simu、一个 patch-panel、patch-panel-owned wiring、operationId、traceId、auditId 和 evidenceId。
|
||
|
||
通过标准:
|
||
|
||
- 写 `DO1=true` 后,`DI1=true` 经 `hwlab-patch-panel` 同步可见;写 `DO1=false` 后,`DI1=false` 同步可见。
|
||
- 证据链明确归因到 `hwlab-patch-panel`,没有 box loopback、前端直改状态或 UniDesk runtime 替代。
|
||
- operation、trace、audit 和 evidence id 能互相指向同一轮操作。
|
||
- 未获授权、目标缺失、持久化 blocked 或任一关键 ID 缺失时,必须标为 `BLOCKED`,不得 claim M3 PASS。
|
||
|
||
## T4 Code Agent 真实 runner 能力
|
||
|
||
阅读 `AGENTS.md`,然后用浏览器或 Playwright 手动测试以下内容:在 `16666` 工作台 Agent 区输入 `pwd` 和“列出你可用的 skills”,确认返回来自真实 Codex runner、workspace、tool calls 和 skills 注入,而不是 `openai-responses` text-chat-only。随后让 Agent 通过 `hwlab-cloud-api` 执行同一 M3 硬件任务,确认 agent trace 引用对应 hardware operation 和 audit。
|
||
|
||
通过标准:
|
||
|
||
- `pwd` 返回真实 runner 工作目录或结构化 runner blocker。
|
||
- skills 查询返回真实 skill 列表、skill 发现输出或结构化 skills blocker。
|
||
- runner trace 中能看到工具调用、workspace 证据和 hardware operation/audit 关联。
|
||
- 如果只能文本聊天、provider unavailable、无工具调用或无 workspace 证据,必须标为 `BLOCKED/agent-runtime` 或 `BLOCKED/credential`。
|
||
|
||
## T5 Audit、Evidence 与持久化
|
||
|
||
阅读 `AGENTS.md`,然后用浏览器或 Playwright 手动测试以下内容:确认直接 M3 操作和 Agent M3 操作都能在工作台、API 或 CLI 输出中看到 hardware audit、agent trace 和 evidence record。最小 evidence record 至少包含 `sessionId`、worker image 或 digest、`skillsCommitId`、`skillsTreeSha` 或文件清单 hash、`workspaceMode`、`agentTraceId`、`operationId`、`auditId`、`result` 和 `createdAt`。
|
||
|
||
通过标准:
|
||
|
||
- hardware audit 由 HWLAB cloud/gateway/patch-panel 硬件链路生成,agent 自述不能替代 audit。
|
||
- evidence 中不包含 secret/token 明文。
|
||
- durable DB 或 evidence adapter 仍 blocked 时,报告必须标注准确 blocker,不得写 trusted green。
|
||
|
||
## T6 报告 issue 创建与编号
|
||
|
||
阅读 `AGENTS.md`,然后用浏览器或 Playwright 手动测试以下内容:按本文“报告 issue 规则”创建一个带递增编号的测试报告 issue,标题使用 `[MVP-E2E-RPT-<NNN>]` 前缀。报告 issue 必须挂载本次所有截图、关键 JSON 摘要、测试结论和后续 issue 链接;不得把测试报告正文写入 `docs/reference/`,不得提交一次性报告文件来替代 issue。
|
||
|
||
通过标准:
|
||
|
||
- 报告 issue 存在,编号未与历史报告冲突。
|
||
- 每个 `T{x}` 都有状态、证据等级和简短证据。
|
||
- 最终结论与各用例状态一致。
|
||
- 安全边界明确写出:未触碰 PROD、未读取 secret 明文、未重启 UniDesk / Code Queue / backend-core、未用 UniDesk runtime 替代 HWLAB runtime。
|
||
|
||
## 停止条件
|
||
|
||
出现以下情况时停止后续 live 或 mutating 测试,并在报告 issue 中标为 `BLOCKED` 或 `failed`:
|
||
|
||
- 入口不是 `16666/16667`,或命中非 HWLAB DEV runtime。
|
||
- 需要读取或打印 Secret/token 明文。
|
||
- 需要触碰 PROD。
|
||
- 需要重启 UniDesk、Code Queue、backend-core 或无关基础设施。
|
||
- M3 目标不能证明两个 distinct box-simu、两个 distinct gateway-simu 和 patch-panel-owned wiring。
|
||
- agent 只能文本聊天,不能证明真实 runner/workspace/tool/skills。
|
||
- 任一结果要求把 SOURCE、LOCAL、DRY-RUN、fixture 或 edge-only 证据升级为 DEV-LIVE。
|
||
|
||
## 稳定来源
|
||
|
||
- [architecture.md](architecture.md):MVP 边界、M3 trusted loop 和证据等级。
|
||
- [dev-runtime-boundary.md](dev-runtime-boundary.md):`16666/16667`、D601 k3s 和运行态边界。
|
||
- [cloud-workbench.md](cloud-workbench.md):Cloud Workbench 默认首页和 UX 约束。
|
||
- [code-agent-chat-readiness.md](code-agent-chat-readiness.md):Code Agent 真实回复和 provider/runner blocker 判定。
|
||
- [m3-loop-rollout-runbook.md](m3-loop-rollout-runbook.md):M3 live 操作授权、证据和失败分类。
|