# 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 和 Blocker;Trace、原始事件和 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 或原始数据库访问暴露给浏览器。