Files
pikasTech-HWLAB/docs/reference/spec-v03-caserun-web.md
T
root 2bc5fc653a
Pipelines as Code CI / hwlab-nc01-v03-ci-poll- Success
feat: 完善 CaseRun 原生证据视图
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-18 06:01:58 +02:00

102 lines
6.3 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.
# HWLAB v0.3 CaseRun 独立页面设计规格
## 1. 设计结论
CaseRun 是硬件执行运行台,不是 Workbench 的附属诊断卡片。页面必须使用独立路由 `/caserun`,让用户从选择 case 到阅读执行证据都在同一条稳定深链内完成。
页面采用“命令栏 + 运行摘要 + 三栏运行工作区”的结构:
- 左栏负责 case、HWPOD 资源和执行上下文选择。
- 中栏负责当前 run 的阶段时间线、事件流和终态变化。
- 右栏负责 aggregate、artifact、Trace、HWPOD operation result 和 blocker 阅读。
工作台可以保留跳转入口,但不再嵌入 CaseRun 控制面板,避免同一 run 在两个页面各自维护选择、轮询和状态投影。
## 2. 调研依据
- AgentRun 运行观察页:采用窄命令栏、状态摘要条、可筛选主列表和右侧 Inspector,适合高密度运行状态扫描。
- TaskTree 页面:采用稳定 URL、主内容区占优、时间线和可折叠详情,适合执行阶段与长列表阅读。
- Temporal/CI 运行详情惯例:把 workflow/run identity、阶段、失败断点和产物引用分层展示,不能只用一个总体状态替代过程证据。
- HWLAB 当前 Workbench:已有 `CaseRunPanel`、CaseRun store/API 和 native fixture,但面板尺寸、工作台上下文和 HWPOD 操作共用空间,无法承载完整证据阅读。
- HarnessRL 合同:CaseRun 结果包含 `runId``caseId``status``stage``terminal``blocker`、events、aggregate、manifest、replay、Trace 和 HWPOD 引用,页面不得丢弃这些事实。
## 3. 视觉方向
采用“实验室控制台”视觉方向:
- 复用 HWLAB 现有浅色 console token、IBM Plex Sans/Mono、窄命令栏和状态条。
- 主色使用石墨、青绿色和少量琥珀/红色状态色,避免紫色渐变、营销式 hero 和装饰性大卡片。
- 页面首屏直接展示可操作运行对象,标题区保持紧凑,不添加说明型大段文案。
- 证据区使用浅色代码/日志表面,长文本内部滚动,不让原始 JSON 撑破页面。
- 所有按钮遵循已有图标与文字组合;刷新、复制、打开 Trace 等熟悉动作使用图标并保留无障碍名称。
- 卡片只用于重复的 case、阶段和证据条目,页面分区使用无装饰的 bounded layout,不嵌套卡片。
## 4. 页面信息架构
### 4.1 命令栏
- eyebrow`HARNESSRL / CASERUN`
- 标题:`CaseRun 执行台`
- 描述:显示当前 selected origin、API mode 和最后一次读取时间。
- 操作:刷新 cases、重新读取当前 run、复制 runId;运行中提供取消入口时使用后端已有 cancel contract。
- 状态条:可用 cases、当前 status、stage、terminal、events 数量、artifact 数量。
### 4.2 左栏:执行选择
- case 列表显示 `caseId`、标题、mode、目标 HWPOD 和可用状态。
- 选择 case 后显示目标硬件、执行范围、workspace/能力摘要和已知 blocker。
- 启动按钮只提交 `caseId`,不在客户端拼接 workspace、node、runtime URL 或 fallback。
- 当前 run 进入深链后,左栏保留 case 选择但不覆盖当前 run。
### 4.3 中栏:运行过程
- 顶部显示 runId、caseId、当前 status、stage、terminal 和更新时间。
- 阶段时间线至少支持 `queued``preparing``agent-running``building``downloading``uart-reading``aggregating``completed``failed``canceled``blocked`
- 事件流显示服务端返回的时间、stage、status 和脱敏 payload 摘要。
- 运行中按现有 API read model 轮询;terminal 只能由 API 返回的 `terminal` 决定。
- 空态、加载态、错误态和 blocker 态必须保留主区域结构,不能以空白或通用请求失败替代。
### 4.4 右栏:证据 Inspector
使用 Tab 或折叠区组织以下证据:
- `Aggregate`status、summary、evidence、aggregate SHA 和 run identity。
- `Artifacts`manifest 引用、artifact 数量、hash/ref 和可用状态。
- `Trace`traceId、AgentRun/command/session 引用及只读下钻入口。
- `HWPOD`hwpodId、nodeId、operation result、workspace、能力和连接状态。
- `Blocker`code、summary、layer、details 和下一步只读诊断。
默认展开 Aggregate 和 BlockerTrace、原始事件和 manifest 在需要时展开,避免长日志抢占首屏。
## 5. 深链与状态权威
- 基础路由为 `/caserun`
- 当前 run 使用 `/caserun/runs/:runId`,刷新后恢复同一个 run。
- query 只承载 `case``tab` 等集合视图状态,不承载终态、stage、artifact 或 blocker。
- Web 只调用 selected origin 的同源 CaseRun API。
- API 的 `status``stage``terminal``events``aggregate` 和引用字段是唯一事实;客户端不能依据 elapsed time、事件数量、HTTP 200 或 fixture 名称合成终态。
## 6. L1 Native 合同
前后端必须独立启动、独立日志、独立停止:
- API/fixture:使用现有 `caserun:native:start|stop|status|logs`,默认 native API port 为 `4316`
- Web:使用 `dev:native-caserun`Vite HMR 与 `/v1/caserun/*` native proxy 独立运行。
- Native fixture:继续覆盖 queued、running、completed、failed、blocked、canceled、events 和 aggregate。
- Web smoke:使用 repo-owned `caserun-native-web-probe.mjs`,验证 `/caserun` 首屏、case 选择、启动、刷新、事件和 aggregate。
- Native 页面必须显示 `mode=native-test`,但生产 selected origin 不得读取 native fixture 或 native fallback。
## 7. 响应式与验收
- 桌面首屏使用三栏 bounded workspace,主 run 区域优先保证可读宽度。
- 中等宽度将右侧 Inspector 收为抽屉或下方区域,不能压缩事件流至不可读。
- 移动端按“命令栏 → 当前 run → case 选择 → 事件 → 证据”纵向排列,启动和刷新保持可达。
- L1 验收使用 `web-probe` custom/local 入口,覆盖桌面 `1920x1080` 和紧凑桌面视口。
- 必须确认首屏 DOM、启动/刷新交互、无 pageerror、无 console.error、无关键失败请求和无 document 横向溢出。
## 8. 非目标
- 不在本次页面改造中重写 HarnessRL API、Temporal workflow 或 CaseRun evidence contract。
- 不恢复 v0.2 direct URL、旧 runner、G14 fallback 或客户端第二状态源。
- 不把 CI/CD、Kubernetes、HWPOD node 或原始数据库访问暴露给浏览器。