docs: 删除已迁移的 Web 体验 MDTODO
Pipelines as Code CI / hwlab-web-probe-sentinel-nc01- Success
Pipelines as Code CI / platform-infra-gitea-nc01- Success
Pipelines as Code CI / unidesk-host- Success

This commit is contained in:
pikastech
2026-07-19 06:03:56 +02:00
parent 951d7bfa7c
commit 7d1037e8c2
23 changed files with 0 additions and 719 deletions
@@ -1,14 +0,0 @@
# R1.10 任务报告
## 交付
- HWLAB PR [#2520](https://github.com/pikasTech/HWLAB/pull/2520) 已重写 Performance、Gate、Skills、OpenCode 外壳及 Help/Settings 系统工具页。
- 系统页统一“状态→问题→证据→动作”层次、Page Command、Status Strip、视图状态和有界详情;未为 Skills 虚构不存在的删除或启停合同。
- OpenCode 保留同源 ticket、认证与 URL 安全边界,只增强加载、错误、重试和可调整三栏外壳。
- Performance 使用 typed 性能事实、统一时间窗口和渐进披露,不在前端拼装关键后端结论。
## 验证
- OpenCode iframe retry 与 separator 键盘调整专项通过 4 项 Playwright 验证中的对应场景。
- OpenCodeFrame 与 SplitWorkspaceLayout 测试纳入 11 项 Vitest,双宽度固定路由烟测无 pageerror。
- Workbench 业务 store、提交链和事件投影未被系统工具页改写。
@@ -1,15 +0,0 @@
# R1.11 任务报告
## 迁移收口
- HWLAB PR [#2520](https://github.com/pikasTech/HWLAB/pull/2520) 在 53 个文件中完成普通页面迁移,新增约 3907 行、删除约 758 行。
-`DataTable` 已删除;普通页面统一到共享 DataGrid、ResourceCollection、AsyncBoundary、Dialog/Drawer 与 SplitWorkspaceLayout。
- 非 Workbench 视图已无原生 `<table>` 和旧 `DataTable` 使用;卡片、列表、表格消费同一 typed DTO 与稳定实体 ID。
- MDTODO 删除 Workbench 私有 store 依赖;Dashboard 关键事实迁到 typed bounded BFF,页面不再名称去重或猜测字段。
- Workbench 路由、会话深链、提交/事件主路径保持原职责,普通页面样式和 bounded workspace 按职责组织。
## 验证
- `bun run check` 114/114,后端合同 8/8Vitest 11/11,固定页面烟测 5/5,专项 Playwright 4/4。
- `git diff --check` 通过;双 Vite build 与 dist freshness 通过。
- follow-up PR [#2521](https://github.com/pikasTech/HWLAB/pull/2521) 的独立二轮复审无阻断。
@@ -1,20 +0,0 @@
# R1.12 任务报告
## NC01/v03 原入口交付
- HWLAB PR [#2520](https://github.com/pikasTech/HWLAB/pull/2520) 与 follow-up [#2521](https://github.com/pikasTech/HWLAB/pull/2521) 已合并到 `v0.3`,最终源码提交为 `5970ae77ed8bf74882b05cfa96577f2e67c0d7ba`
- PaC 自动交付使用 PipelineRun `hwlab-nc01-v03-ci-poll-vgrwx`,生成 GitOps 提交 `a4afa56c7b0e`NC01/v03 Argo 状态为 `Synced/Healthy`
- 固定正式入口为 `https://hwlab.pikapython.com`,未用裸 IP 或本地开发页替代验收。
## 页面与状态验证
- HWPOD 浏览器验证覆盖 1920×1080、960×600、390×844:设备与 Node 卡片/列表、路径实体深链 Drawer、筛选/游标切换、reduced-motion、节点接入 artifact 元数据及六阶段 readiness 均通过,无 document 级横向溢出。
- 非 HWPOD 固定 Playwright 烟测覆盖 19 个路由 × 960/3905/5 通过;专项 4/4 覆盖 OpenCode retry、三栏 separator 键盘调整、Projects 公共 Workbench Launch、R205 深链与 101→201→205 增量加载。
- HWPOD 后端 17/17、共享前端 5/5;页面主 PR `bun run check` 114/114、后端合同 8/8、Vitest 11/11MDTODO follow-up 后端 13/13、Vitest 2/2、Playwright 3/3、TypeScript 与构建通过。
- typed read model 覆盖一 node 多设备、离线 node、在线无 spec、invalid spec、capability mismatch、busy/in-flight、更新元数据、readiness 与脱敏诊断;partial/stale/restricted/error 不会被 ready 状态吞没。
## Web observe 证据与处置
- observer `webobs-mriq0nci-aaf44f` 在正式 MDTODO 深链采样 20 次;Project Management 相关 API 均返回 200,任务树、正文和公共 Workbench Launch 可见。
- 该次所选任务本身没有 report link,因此没有把“报告预览”误记为线上成功;projection-only 报告与报告交互由专项回归覆盖。
- analyzer 对任务树贴底事实栏的误报已由 UniDesk PR [#1899](https://github.com/pikasTech/unidesk/pull/1899) 修复;observer 随后已受控 force-stop,目标 PID 与独立 Chrome session 均复核为空。
@@ -1,20 +0,0 @@
# R1.13.1 任务报告
## 交付
- UniDesk PR #1928merge ea6c3e05)对齐全量重写后的 MDTODO DOM 合同,按稳定 data-task-ref 和语义任务行分析,不再依赖旧标题/正文结构。
- UniDesk PR #1930commit 1468e56a)消除“仅任务树较短”造成的 mdtodo-pane-bottom-gap 误报;详情/报告与多窗格真实缺口仍保留检测。
- UniDesk PR #1931commit e20dee77)让 performanceCapture status 只返回有界摘要与 artifact 下钻,避免直接输出大型 CPU profile JSON 污染 stdout。
- UniDesk PR #1932commit 62acb55a)接受移动端渐进披露下“任务树隐藏但已选详情存在”的就绪状态,桌面根页仍要求任务集合。
## 验证
- DOM/分析器相关测试分别通过 19、28、33 项。
- 真实 observer webobs-mrj769vg-13a7c1 采集 60 samples;重分析后 mdtodo-taskref-missing、旧 body/launch 与假 pane gap 均消失。
- 最终分析报告:report.json sha256:27b8401c…,report.md sha256:1da6524d…。
- performanceCapture Artificer 任务 qt_9baa530ce58f4f358c4f562737fe6923 成功完成,修复后状态入口不再触发 control-blocked/status-unreadable。
- 390×844 真机等价浏览器验收确认 MDTODO 任务/正文/报告渐进页签与已选详情可用。
## 结论
误报、状态输出污染和移动端就绪误判均已修复;未新增锁、租约、围栏、第二状态机或旁路入口。
@@ -1,22 +0,0 @@
# R1.13 任务报告
## 策略与实现
- UniDesk PR #1912merge a1cfbf1b)把所有 WebProbe 创建入口统一到 owning YAML 的物理内存门禁。
- 资格只读取 /proc/meminfo 的 MemAvailable,要求严格大于 4 GiB;swap、虚拟内存和总可提交量不参与判定。
- 人工入口不足阈值时阻断,要求先执行受控 memory-pressure GC 并复核;哨兵不足阈值时跳过本 cadence,不创建 observer 或 Chrome。
- GC 识别并清理孤立 Chrome 与 stale observer 进程树,同时保护活跃 observer;终止使用有界 TERM、身份复核和同树残留 KILL。
- WebProbe browser/context 在成功、失败、timeout 与 signal 路径均有有界关闭;status/plan 默认有界披露。
- 该原则已固化到 unidesk-gc skillNC01 swap 调整为 12 GiB,但明确不计入启动资格。
## 运行面实证
- 每次新 observer 前都先执行 gc remote NC01 memory 与 memory-pressure-only plan。
- 本轮启动门禁分别观测到 5.0/5.1/5.2 GiB MemAvailableswapExcluded=truecandidateCount=0,未发现逃逸 Chrome。
- 单个 desktop observer 活跃时 MemAvailable 曾降至 3.6 GiB;期间没有启动第二个浏览器。observer 停止后恢复至约 5 GiB。
- 最终 mobile onboarding observer 自动完成 24 samples,进程为 not-running;回收后 MemAvailable 4.74.9 GiB,候选进程仍为 0。
- 12 GiB swap 已确认生效,所有启动判据仍只使用真实物理 MemAvailable。
## 结论
WebProbe 与哨兵现在在低内存时 fail-closed/skip-next-cadence,并能清理可疑逃逸浏览器;活跃任务不会被 GC 误杀。
@@ -1,23 +0,0 @@
# R1.14 任务报告
## 页面与组件重写
- HWLAB PR #2523 全量重写管理域与 MDTODOmerge commit dbd4af6d4dab。
- 抽取并复用 OperationsWorkspace、EntityIndex、Inspector、ViewModeSwitch、FactPath、AuditTimeline、工业状态轨、权限矩阵、密钥流向、账本/审计时间线与 Markdown/报告 Viewer。
- 授权、密钥、用户、账务均改为高信息密度的集合索引→事实详情→低频动作渐进披露;移除 AC/SK/UR/AB 字母方块式导航,Secret 值始终不进入浏览器。
- MDTODO 在保留三栏信息架构的前提下重写组件树、model/controller 与样式:任务树→正文→报告、Source/File、编辑/创建/删除、报告关闭/调宽/全屏、公共 Workbench Launch、URL 深链与前进后退均由新通用组件实现。
- PR #2524merge commit 35a679aa850e)补齐精确 data-task-ref,保证真实任务引用与浏览器分析合同一致。
- HWPOD 设备、Node 与节点接入复用同一资源工作区:PCB 电路板图标卡片/高密度列表切换、克制动效、node 下挂载 HWPOD、在线/离线/阶段 readiness,以及 Python 单文件版本、大小、SHA 与下载引导。
## 验证与部署
- 源码验证:typecheck 通过;全量前端测试 115/115HWPOD 后端测试 17/17;定向 R6 回归通过。
- 普通 PR→PaC 自动交付 1/1 成功;NC01/v03 Argo 最终 Synced/Healthy,运行面精确来源为 35a679aa850eGitOps commit 42a49f79f09b。
- 1920×1080 实入口覆盖 MDTODO、Projects、授权、密钥、用户、账务、HWPOD devices/nodes/onboarding;所有浏览器命令成功,瞬时 ERR_NETWORK_CHANGED 页面均以 fresh observer 重试通过。
- 390×844 实入口覆盖上述核心管理/HWPOD/MDTODO 页面。设备页与接入页 fresh 重试确认无空白、无会话遗留横向偏移;MDTODO 使用任务/正文/报告渐进页签。
- 接入引导最终截图 hwpods-onboarding-mobile-retry.png 为 69,475 bytesSHA-256 9ac3c0a2227da9633a3143efb1d8a3eea1ce66bed6f785d48ad4f61e74fea876。
- HWPOD 数据源离线时页面显示 typed partial/offline,并禁用依赖在线 HWPOD 的报告操作;未伪造成功态。
## 架构结论
依据 OA 战略 SPEC,当前目标是统一云端硬件研发闭环和开箱即用接入。现有 typed BFF/Cloud API 职责足以承载本轮 read model 与操作,拆微服务会增加部署与一致性成本而无独立伸缩/权限/生命周期收益,因此本轮不拆新微服务;后续只有 HWPOD registry 形成独立容量、权限与发布边界时再评估。
@@ -1,15 +0,0 @@
# R1.1 任务报告
## 结论
- 新增 `PJ2026-010405 云端控制台` L2 SPEC,明确非 Workbench 页面信息架构、通用前端能力、typed read model、HWPOD 三子标签、服务边界和原入口验收。
- 更新 `PJ2026-0104 客户端``PJ2026-010103 HWPOD服务``PJ2026-010104 AI网关`,分别补齐控制台主责、topology read model 和 Python 节点分阶段 readiness。
- 建立主执行 issue `pikasTech/HWLAB#2514` 与三个独立实现 issue `#2515``#2516``#2517`;目标分支均为 `v0.3`,固定运行面为 `NC01/v03`
- Artificer 当前 primary bundle 为 UniDesk,按资源合同不能让它写外部 HWLAB workspace,因此本轮 HWLAB 实现使用独立原生子代理和远端 worktree。
## 交付证据
- UniDesk commit`52f45086`
- SPEC`project-management/PJ2026-01/specs/PJ2026-010405-cloud-console.md`
- 主 issue`https://github.com/pikasTech/HWLAB/issues/2514`
- 交付画像:纯规格与 MDTODO`rollout=not-applicable`
@@ -1,15 +0,0 @@
# R1.2 任务报告
## 结论
- 已建立工业控制台设计 tokens、响应式 AppShell、导航和有界工作区,保持 Workbench 主工作流不回退。
- 已抽取 PageCommandBar、StatusStrip、DataGrid、VirtualList、ResourceCollection、EntityCard、BaseDialog、BaseDrawer、Popover、ContentViewer、AsyncBoundary 与 URL view state。
- 统一弹层焦点/滚动锁、键盘与 ARIA 基线、reduced-motion、桌面/紧凑桌面/移动端布局和卡片/列表/密度切换合同。
- 样式按职责拆分,变更文件满足体积治理。
## 交付证据
- HWLAB PR<https://github.com/pikasTech/HWLAB/pull/2518>。
- 实现提交:`94a4b12e`v0.3 合并提交:`63a5cfff`
- 验证:共享组件 Vitest 5/5、Playwright 3/3、类型检查和生产构建通过。
- 执行 issue<https://github.com/pikasTech/HWLAB/issues/2515>。
@@ -1,15 +0,0 @@
# R1.3 任务报告
## 结论
- 已补 HWPOD typed topology read model,统一 node、HWPOD、连接、readiness、busy、mismatch、最近 operation 与最近探测证据。
- 常规读取不触发探测;仅显式“重新探测”执行有界顺序 probe;失败时保留最近成功快照并表达 partial/stale。
- 已补服务端搜索、排序、cursor/previousCursor/nextCursor 和稳定设备、节点详情深链。
- 微服务评估结论为暂不拆独立 HWPOD 服务:当前 Cloud API 仍是同源 BFF/read model owner;只有出现独立生命周期、数据所有权与故障域证据后再按 SPEC 抽离,避免为了页面改造制造分布式耦合。
## 交付证据
- HWLAB PR<https://github.com/pikasTech/HWLAB/pull/2519>。
- 实现提交:`652f1f9c``2ec436a8`v0.3 合并提交:`7201bde6`
- 后端契约测试:17/17 通过。
- PaC PipelineRun`hwlab-nc01-v03-ci-poll-d7xwt`source `7201bde699fb`Completeddelivery valid/source matched。
@@ -1,14 +0,0 @@
# R1.4 任务报告
## 交付
- HWLAB PR [#2520](https://github.com/pikasTech/HWLAB/pull/2520) 已合并到 `v0.3`,合并提交为 `47bd0da99638ff726ebfd0f31bce5a4ec635d98c`
- 登录、注册、404 与普通页面统一为工业控制台视觉;404 保持公开路由边界,不绕过 ACL 或登录 redirect。
- Router 保留稳定 `navId`、实体深链和 Workbench 路径;共享壳继续区分 shellless 身份页与 Workbench 滚动所有者。
- UniDesk PR [#1884](https://github.com/pikasTech/unidesk/pull/1884) 已删除 HWLAB 入口硬编码 IP,由 `config/frontend.yaml` 校验并下发正式 HTTP(S) URL。
## 验证
- Cloud Web 固定烟测覆盖 19 个路由、960px 与 390px 两档宽度,无 document 横向溢出和 pageerror。
- `bun run check` 通过 114 项检查;OpenCode separator 键盘交互与双宽度布局专项通过。
- Workbench 主路由、会话深链和既有 ACL 元数据未被普通页面重写替换。
@@ -1,15 +0,0 @@
# R1.5 任务报告
## 结论
- 已重写 HWPOD“设备资源”子标签,设备卡片与高密度列表消费同一 typed topology inventory。
- 电路板 SVG 卡片呈现设备身份、node、状态、busy/blocker、能力和最近 operationtarget、workspace、debug、io 四条链路仅由真实状态驱动克制动效。
- 支持 reduced-motion、搜索/状态筛选/排序/cursor、卡片/列表、密度、详情 Drawer 和 REST 深链。
- 卡片在宽屏保持有界,不再随视口无限放大;960px 与约 390px 不产生文档级横向溢出。
## 交付证据
- HWLAB PR<https://github.com/pikasTech/HWLAB/pull/2519>。
- 执行 issue<https://github.com/pikasTech/HWLAB/issues/2516>。
- 截图证据:`/tmp/hwlab-2516-devices-bounded-1920x1080.png`
- HWPOD 前端共享回归 5/5、生产构建和浏览器多视口验收通过。
@@ -1,15 +0,0 @@
# R1.6 任务报告
## 结论
- 已新增 HWPOD Node 与节点接入子标签,展示已连接和声明离线 node、平台/版本/心跳、能力、in-flight、readiness、诊断及其挂载的零到多个 HWPOD。
- Node 集合支持卡片/列表、URL 搜索/筛选/排序/cursor、REST 详情深链和渐进披露 Drawer,不再静默首选第一台节点。
- 接入页提供 Python 单文件 `tools/hwlab-node.py` 的静态下载元数据、版本、大小、SHA、更新说明和安装条件。
- 引导按 downloaded→installed→desktop-visible→registered→workspace-ready→hwpod-ready 六阶段展示;凭据继续由既有 YAML sourceRef/受控 CLI 管理。
## 交付证据
- HWLAB PR<https://github.com/pikasTech/HWLAB/pull/2519>。
- Python artifact 通过 `py_compile`,下载/更新 metadata 合同通过后端测试。
- 截图证据:`/tmp/hwlab-2516-nodes-compact-status-960x600.png``/tmp/hwlab-2516-onboarding-960x600.png`
- 直接 node/device 深链、显式 probe、无选择接入页和多视口浏览器验收通过。
@@ -1,15 +0,0 @@
# R1.7 任务报告
## 交付
- HWLAB PR [#2520](https://github.com/pikasTech/HWLAB/pull/2520) 重写 Projects 与 MDTODOProjects 使用服务端 `projectId`、状态查询和 `page.total`,详情切换不会泄漏旧快照。
- MDTODO 保留有界三栏、Source/File 工具栏、任务树、正文、报告侧栏与 RESTful 深链;首窗固定 100 条,可按 100 条步进加载并精确恢复第 205 条任务。
- Workbench 联动只调用公共 Launch API,不再导入 Workbench 私有 store。
- HWLAB PR [#2521](https://github.com/pikasTech/HWLAB/pull/2521) 补齐 HWPOD 来源离线时的 typed partial 投影、全链路只读保护、projection-only 报告占位和贴底事实栏。
- UniDesk PR [#1899](https://github.com/pikasTech/unidesk/pull/1899) 已让 analyzer 把任务树事实栏计为有效内容,消除布局误报而不降低阈值。
## 验证
- Project Management 后端合同覆盖 205 任务精确查询、`projectId` 过滤和 partial/stale/restricted。
- follow-up 后端 13/13、Vitest 2/2、Playwright 3/3、TypeScript 与 build 均通过。
- NC01/v03 observer `webobs-mriq0nci-aaf44f` 采样 20 次,项目 API 均为 200,任务正文与 Workbench Launch 可见;该 observer 已受控 force-stop。
@@ -1,14 +0,0 @@
# R1.8 任务报告
## 交付
- HWLAB PR [#2520](https://github.com/pikasTech/HWLAB/pull/2520) 已重写 Dashboard、API Keys、Usage、Billing、Settings 与 Help 等现有用户页面。
- 新增 bounded `GET /v1/dashboard/summary` 聚合读模型,按继续任务、HWPOD、额度和异常分区;单一上游失败时保留成功区块并显式呈现 partial、stale 或 restricted。
- 集合页统一 ResourceCollection/DataGrid、卡片或列表视图、URL 状态、服务端分页与实体详情;低频创建、兑换等动作进入 Dialog。
- 未虚构仓库中不存在的组织、支付、轮换或跨设备偏好能力;界面只展示 typed API 已提供的事实和可用动作。
## 验证
- Dashboard 与 Project Management 后端合同共 8 项通过,覆盖聚合部分失败和权限受限状态。
- 19 路由双宽度烟测通过;ResourceCollection 与 URL view state 的 Vitest 包含在 11 项前端测试中。
- 用户账务、用量与 API Key 的卡片、列表和详情消费同一 typed DTO。
@@ -1,14 +0,0 @@
# R1.9 任务报告
## 交付
- HWLAB PR [#2520](https://github.com/pikasTech/HWLAB/pull/2520) 已重写 Users、Access、Secrets、ExternalSecret 详情、Admin Billing 与 Provider Profiles。
- 页面统一集合、稳定实体深链、Inspector/详情与低频 DialogUsers、账务和 Provider 集合采用服务端分页、筛选及 typed DTO。
- Access 继续消费既有权限域;Secrets 与 ExternalSecret 只呈现对象、namespace、key、presence、fingerprint、状态与摘要,不增加运行面反解或浏览器 Apply。
- Provider Profiles 收紧 URL authority 与 typed 状态,未知字段不再由前端猜测或拼装。
## 验证
- 相关路由纳入 19 路由 × 960/390 固定烟测,无横向溢出或 pageerror。
- `bun run check` 114 项通过,包含 `vue-tsc`、零 explicit any、双 Vite build 和 dist freshness。
- Access matrix、用户详情、Secret 详情和 Provider 详情继续使用稳定路由 ID 与既有 ACL。
@@ -1,184 +0,0 @@
# R1 任务上下文:HWLAB v0.3 非 Workbench 页面全量重写
## 1. 用户目标
- 全量重写 HWLAB v0.3 除 Workbench 主工作流外的 Cloud Web 页面:
- 不在旧页面上继续叠加局部美化和兼容层。
- MDTODO 也可重写实现,但保留已经成熟的布局设计和工作流语义。
- 后端能力不足时可以补强,并按明确职责合理拆分微服务。
- 视觉与交互方向:
- 工业风、高信息密度和稳定工作界面。
- 通过渐进披露优先展示名称、身份、主状态、关键能力、主要 blocker 和高频操作。
- 详情、诊断、日志、原始 JSON、配置和低频操作进入展开区、Inspector、Drawer 或 Dialog。
- 不做营销式 hero、装饰性指标墙或以裸 JSON 代替产品界面。
- 通用能力优先:
- 先抽取表格、卡片、弹窗、抽屉、日志、Markdown、JSON、状态、异步反馈和有界工作区等模块。
- 承载实体集合的页面统一支持图标卡片和列表/表格切换。
- 不适合实体集合的页面提供等价的紧凑/舒适密度或内容显示方式切换,避免制造无意义图标视图。
- 视图、筛选、排序、分页、选中对象和详情标签应通过稳定 URL 恢复。
- HWPOD 重点:
- 设备页使用带克制状态动效的电路板图标卡片,并提供高密度列表模式。
- HWPOD 页面至少拆为“设备资源”“HWPOD Node”“节点接入”三个可深链子标签。
- Node 页面管理已连接节点,并明确展示每个 node 下挂载的零到多个 HWPOD。
- 接入页允许从网页下载 Python 单文件 `hwlab-node.py`,展示版本、SHA-256、安装条件、配置步骤和连接验证。
## 2. OA SPEC 战略对齐
- 战略来源:
- [PJ2026-01 HWLAB 总规格](../../../../project-management/PJ2026-01/specs/PJ2026-01-HWLAB.md)。
- [HWLAB Cloud 阶段规格](../../../../project-management/PJ2026-01/specs/stage-cloud-spec-20260601.md)。
- [PJ2026-0104 客户端](../../../../project-management/PJ2026-01/specs/PJ2026-0104-client.md)。
- [PJ2026-0101 硬件池](../../../../project-management/PJ2026-01/specs/PJ2026-0101-hardware-pool.md)。
- [PJ2026-0105 用户管理](../../../../project-management/PJ2026-01/specs/PJ2026-0105-user-management.md)。
- 最终目标判断:
- 页面重写的目的不是孤立美化,而是把真实硬件资源、Agent 执行、Harness/RL 事实、多用户协同和运营管理投影成一致、可理解、可操作的云端入口。
- Cloud 阶段要求从“单用户本地验证”走向“多人多端云端开箱即用”,因此页面主路径应优先解决项目协同、任务继续操作、硬件接入、HWPOD 可用性、用户/组织上下文和可行动 blocker。
- HWPOD 页面必须表达 target device、workspace、debug probe 和 io probe 四要素,以及 node、能力、占用、操作结果和原始硬件事实,不能把动效电路板做成与真实状态无关的装饰。
- Web、CLI 和 HTTP API 必须共享任务、权限、错误和结果语义;前端不得通过字段猜测、名称去重或跨接口临时拼装生成业务真相。
- 每个页面组必须绑定唯一主责 L1/L2 和原入口验收,避免落入 L0 明确排除的“孤立工具美化”。
- SPEC-first
- 全站信息架构、跨领域 API、长期数据模型或微服务边界发生稳定变化时,先确认或修订对应 OA SPEC。
- P0 规格应补齐主责编号、系统边界、目标架构图、数据流图、关键时序图、原子需求和验收入口。
- 实现文件按项目规则引用确认后的 SPEC 编号和实现版本。
## 3. 当前实现事实
- 权威源码与快照:
- HWLAB v0.3 Web 位于 NC01 固定 workspace 的 `web/hwlab-cloud-web`
- 调查快照 HEAD 为 `220e7897e15f5e48e6e94ec144cbcfdefc509431`;正式执行前必须从当前 `origin/v0.3` 基线重新盘点。
- UniDesk 本地 `src/components/frontend/src/hwlab.tsx` 只是硬编码外部地址的跳转壳,不是 HWLAB v0.3 页面源码。
- 当前路由族:
- 应用壳与认证:登录、注册、404。
- 项目:Projects、MDTODO。
- 用户:Dashboard、API Keys、Usage、Billing、Settings、Help。
- 管理:Access、Secrets、External Secret、Users、Admin Billing、HWPOD、Provider Profiles。
- 系统与工具:Performance、Skills、Gate、OpenCode 外壳。
- `/workbench*` 主工作流不在本任务内重写。
- 当前通用组件只有基础版本:
- `DataTable` 只有行列和 slot,没有统一排序、筛选、选择、列配置、服务端分页、密度或窗口化。
- `BaseDialog` 未完整处理初始焦点、焦点圈定和关闭后恢复。
- Log、Markdown、JSON、状态、blocker 和异步刷新仍有页面私有实现。
- `workbench.css` 混合 Workbench 与普通页面样式,已经超过 3000 行治理边界。
- 大量 DTO 仍是 `Record<string, unknown>`,部分页面猜测多种字段形态。
- 当前 HWPOD 页面缺陷:
- 把 WebSocket node、spec 和虚构 group 扁平混合成同一种行,丢失一 node 对多 HWPOD 的显式拓扑。
- 混淆 service ready、node online 和 HWPOD available 三种状态。
- 没有 node 详情、挂载设备、版本、in-flight、能力差异、安装阶段或接入引导。
- 当前 HWPOD 后端已有可复用能力:
- `GET /v1/hwpod/specs` 返回 HWPOD spec;首屏不应默认 `probe=1` 全量探测。
- `GET /v1/hwpod-node-ops` 返回在线 node、capabilities、心跳、最近诊断和全局 pending。
- `POST /v1/hwpod-node-ops` 承载受控 node 操作。
- `GET /v1/hwlab-node/update` 返回版本、下载 URL、SHA 和发布说明。
- `GET /v1/hwlab-node/download/hwlab-node.py` 提供 Python 单文件下载。
- `/v1/hwpod-node/ws` 承载节点主动出站连接。
- 当前 HWPOD 后端缺口:
- 声明但离线的 node、在线但未挂 spec 的 node 与 HWPOD 的统一拓扑。
- 单 node 的 in-flight、并发上限、busy、安装/注册/workspace/HWPOD readiness 阶段。
- declared 与 actual capability mismatch 分类。
- 持久化且分页的 operation result、诊断和日志。
- 有界列表/详情 DTO;当前 spec discovery 会携带完整 document。
- WebSocket registry 当前在单副本 Cloud API 内存中,不是持久化 HWPOD 服务事实。
## 4. 目标产品与信息架构
- 全站应用壳:
- 导航按用户工作流组织,不按后端服务名堆砌。
- 保留现有 `navId`/ACL、同源 HttpOnly 会话和安全 redirect,变更时原子迁移。
- 桌面、紧凑桌面和移动端都有明确导航与内容滚动所有者。
- Dashboard 成为用户/组织范围的继续工作入口,聚合项目、任务、HWPOD、额度和主要异常,不在浏览器并发拼装领域事实。
- HWPOD
- “设备资源”展示 HWPOD 四要素、node、能力、可用/占用状态、主要 blocker 和最近 operation。
- “HWPOD Node”展示 nodeId、平台、版本、首见/末见、心跳、能力、in-flight、诊断和挂载 HWPOD 子集合。
- “节点接入”展示下载、校验、安装、配置和分阶段 readiness;不得把下载完成或 WebSocket connected 冒充 HWPOD ready。
- Projects 与 MDTODO
- Projects 提供集合、状态/来源筛选、项目详情、任务活动和 blocker 深链。
- MDTODO 保留有界三栏、Rxx 树→正文→报告层级、Source/File 工具栏、inline edit、报告关闭/调整/全屏、RESTful 深链和公共 Workbench launch。
- MDTODO 重写后不得 import Workbench 私有 store;只能通过公共 Project Management 和 Workbench Launch API 联动。
- 用户与协同:
- 用户入口围绕账户、组织、组织项目/工作台、API key、额度、usage、账单和偏好组织。
- 页面不虚构未落地的支付、scope、轮换、跨设备同步或组织能力;需要时先补业务域 SPEC/API。
- 管理与系统:
- Users、Access、Secrets、Billing、Provider Profiles 使用集合→Inspector/详情→低频 Dialog 的一致交互。
- Secrets 继续只披露对象、key、presence、fingerprint 和摘要,保留 dry-run/plan 边界。
- Performance、Gate、Skills 和 OpenCode 外壳按“状态→问题→证据→动作”渐进披露,不把原始日志或 iframe 错误直接铺满页面。
## 5. 通用前端能力
- Foundation
- 工业风 tokens、字体、间距、边框、状态色、阴影、动效和 reduced-motion。
- Button、IconButton、Field、Select、Chip、Tooltip、StatusBadge 和紧凑 MetricStrip。
- Layout
- AppShell、PageHeader、PageCommandBar、StatusStrip、SectionFrame、InspectorDrawer 和 BoundedWorkspace。
- 主区域内部滚动,避免 document 级长页和外层横向溢出。
- Collections
- `DataGrid<T>``VirtualList<T>``ResourceCollection<T>`
- 图标卡片与列表/表格共享同一数据源、筛选、排序、选择和详情合同。
- 支持 sticky header、列显隐、键盘选择、服务端 cursor pagination 和大集合窗口化。
- Overlays
- Dialog、Drawer、Popover 和 ConfirmDialog 统一 Portal、Esc、focus trap、焦点恢复、scroll lock、busy 和 ARIA。
- Content
- Log、Markdown、JSON、Text 和 Trace Viewer 统一搜索、复制、换行、行号、下载和全屏能力。
- 日志支持 follow/pause 和跳底;JSON 默认折叠;Markdown 使用成熟 parser 与 sanitizer。
- Feedback
- 统一 initial-loading、refreshing、partial、empty、error 和 ready。
- 后台刷新保留上一份成功数据;错误默认给出可理解原因,把 code/requestId/traceId 放入详情。
- Routing
- 实体身份和选择进入 REST path。
- `view``density``q``filter``sort``cursor` 和详情标签进入 query。
- localStorage 只能保存纯显示偏好,不能成为实体、权限或业务状态 authority。
## 6. 后端与微服务边界
- 基本原则:
- 页面需要聚合显示时优先补 typed BFF/read model,不让前端跨多个服务猜测关键事实。
- 只有独立数据所有权、生命周期、伸缩/连接故障域或权限边界成立时才拆微服务。
- Cloud API 保持同源鉴权、路由、错误和 correlation 映射,不重新拥有各业务域真相。
- 既有职责必须保留:
- 项目与 MDTODO 继续由独立 `hwlab-project-management` 服务拥有。
- 用户、组织、权限、额度、usage 和 billing 继续由用户管理域拥有。
- HWPOD spec、资源、租约、路由和 operation result 归 HWPOD 服务域。
- HWPOD Node 的心跳、能力、adapter 执行和原始硬件事实归 AI 网关域。
- HWPOD 候选拆分:
- 优先评估从 Cloud API 抽取一个 `hwlab-hwpod-service`,统一拥有 spec/registry 投影、node connection、拓扑、operation state/result 和诊断摘要。
- Connection gateway 先作为该服务内部模块;只有连接规模和 churn 构成独立故障域时再拆。
- Python 文件可继续由版本化静态 artifact 路径交付,不单独创建安装服务。
- 用户自助 claim/registration 会引入新的身份与授权合同,未经单独 SPEC 不在本任务内发明。
## 7. 交付顺序
1. OA SPEC、页面/实体/用户旅程、API/DTO、ACL、深链和验收矩阵对齐。
2. 工业设计系统、应用壳、通用集合、Overlay、Viewer、Async 和路由状态模块。
3. typed API/read model 与必要的 HWPOD Service、项目、用户管理后端补强。
4. HWPOD Devices、Nodes 与 Onboarding 重点切片。
5. Dashboard、Projects 和 MDTODO 主工作流。
6. 用户/组织、API key、usage、billing 和偏好页面。
7. 管理与系统工具页面、认证页、404 和 OpenCode 外壳。
8. 删除旧 UI、字段猜测、重复样式和不再使用的兼容实现。
9. 真实入口、性能、无障碍、响应式和深链恢复验收。
## 8. 总体验收
- 产品与契约:
- 每个页面组可追溯到唯一主责 SPEC 和稳定业务 ID。
- 前端不再通过 `Record<string, unknown>`、字段名猜测、名称去重或临时多接口拼接生成关键事实。
- Workbench 不被改写,MDTODO→Workbench 公共启动语义不回退。
- 显示与交互:
- 实体集合页均有图标卡片和列表/表格切换;非集合页有合理的显示密度或内容模式切换。
- 卡片与列表显示相同的主状态和 blocker,不形成两套业务逻辑。
- 选中项、视图、筛选、排序、分页和详情标签可深链并刷新恢复。
- 日志、Markdown、JSON、错误、加载和局部刷新统一使用通用组件。
- HWPOD
- 一 node 对零到多个 HWPOD 的关系来自 typed API。
- service ready、node online、HWPOD available、leased/busy 和 capability mismatch 分别呈现。
- 电路板卡片四条链路表达 target/workspace/debug/io;仅真实连接或单 node in-flight 驱动动效。
- 动效支持 `prefers-reduced-motion`,状态不只依赖颜色。
- 接入完成态按 downloaded、installed、desktop-visible、registered、workspace-ready 和 hwpod-ready 分阶段判定。
- 布局、无障碍与性能:
- `1920x1080``960x600` 和约 `390px` 手机宽度均有明确导航、滚动所有者和可操作主路径。
- 无 document 级横向溢出;长表、长树和长日志 DOM 有界。
- Dialog/Drawer 支持完整键盘、焦点圈定/恢复、Esc、ARIA 和危险操作确认。
- 隐藏 pane 停止高频更新;动效不造成 layout shift 或持续高 CPU。
- 原入口验证:
- 使用 NC01/v03 YAML-selected Cloud Web 原入口和 `web-probe observe/analyze` 验证。
- 覆盖桌面、紧凑桌面、移动端、深链刷新、权限差异、loading/empty/error/partial/ready 和大数据集。
- HWPOD fixture/E2E 至少覆盖一 node 多 HWPOD、声明离线 node、在线无 spec node、invalid spec、capability mismatch、busy、update available 和诊断错误。
@@ -1,23 +0,0 @@
# R1 任务报告
## 结果
HWLAB v0.3 除 Workbench 主工作流外的 Cloud Web 能力已按 UniDesk OA 战略 SPEC 完成工业化增强,并对用户追加的管理域、MDTODO、WebProbe 资源治理要求完成二次全量重写与真实入口验收。
- 建立统一工业设计系统、资源集合/列表切换、状态轨、Inspector、弹窗、日志、Markdown/JSON/Trace Viewer 与有界异步状态。
- HWPOD 提供 PCB 卡片/列表、设备事实与 blocker;HWPOD Node 管理连接节点及其挂载设备;节点接入提供 Python 单文件下载、版本/SHA 与阶段式 readiness。
- Projects、Dashboard、组织/用户、Keys、Usage/Billing、Settings/Help、管理 Access/Secrets/Users/Billing、Performance/Gate/Skills/OpenCode 等页面统一采用高密度、渐进披露和稳定深链。
- MDTODO 完整重写代码,保留成熟三栏布局思想和报告/Workbench 联动。
- 后端补齐 typed DTO/read model 与 HWPOD 拓扑/节点接入元数据;没有为了形式拆出新微服务。
- WebProbe 物理内存门禁、哨兵 skip、逃逸 Chrome 清理、12 GiB swap、分析器与性能状态输出已完成长期治理。
## 交付链
- HWLAB 主实现 PR #2523、精确任务引用 PR #2524 均已合并并由普通 PaC 自动部署到 NC01/v03。
- 最终运行面为 Synced/Healthy,来源 commit 35a679aa850eGitOps commit 42a49f79f09b。
- UniDesk WebProbe 资源/分析修复 PR #1912#1928#1930#1931#1932 均已合并。
- 桌面与移动真实入口截图、observer samples、分析报告、测试和资源回收证据均已留存。
## 已知降级
当前 HWPOD Project Management 数据源在验收窗口为 offline,因此依赖在线来源的报告编辑按 typed degraded 路径禁用;页面、深链和禁用原因已验证,不以伪数据替代。该外部状态不影响本轮前端/合同交付完成。
@@ -1,24 +0,0 @@
# R2.1 HWPOD 页面收口报告
## 结论
HWPOD 设备、HWPOD Node 和 Python 单文件接入的剩余源码缺口已在 [HWLAB #2552](https://github.com/pikasTech/HWLAB/issues/2552) / [PR #2556](https://github.com/pikasTech/HWLAB/pull/2556) 收口,并以 merge commit `fb6b289ebdb52d2a5ab4362af079d1d6ead2e17e` 进入 `v0.3`
## 交付
- 深链实体优先于历史集合 query,快速切换使用请求代次阻止旧响应覆盖。
- artifact 与 topology 单边失败时保留成功内容并表达 `partial`
- readiness 使用 typed 阶段、blocker 和用户可理解的下一步;内部 `entrypoint` token 不再直接显示。
- Python artifact 使用服务端文件名,保留真实 `Get-FileHash` 与原生 Python 启动命令,不绑定绝对安装路径或 `py -3`
- 下载 URL 不再回退旧 `hwlab.pikapython.com`;绝对 origin 由 YAML/环境拥有,缺失时使用同源下载 path。
## 验证
- NC01`bun test internal/cloud/hwpod-topology-read-model.test.ts`2/2 通过。
- NC01Cloud Web `bun run typecheck` 通过。
- `git diff --check` 通过。
- 未运行 Vitest、WebProbe 或 Chrome,未手工触发部署/PipelineRun。
## 后续
自动交付后的 1920/960/390、卡片/列表、深链、partial、ARIA 与 reduced-motion 真实入口验证统一由 R2.4 执行。
@@ -1,21 +0,0 @@
# R2.2 任务报告
## 结果
- 子 Issue[HWLAB #2553](https://github.com/pikasTech/HWLAB/issues/2553)。
- 实现 PR[HWLAB #2558](https://github.com/pikasTech/HWLAB/pull/2558)。
- 实现提交:`99e0418fa09b2b3af18acce1641bd823f41cbb37`
- 合并提交:`388e9c2553e5a36313e0fed58c4dbe9f9a1a8d7b`
## 交付
- API Key 详情改用共享 Inspector。
- Users、Billing、Secrets 的集合呈现继续收敛到 ResourceCollection、DataGrid、AuditTimeline 与统一密度状态。
- 用户账本使用稳定业务 ID,不再生成随机渲染 key。
- 保持权限、Secret 脱敏、账务 authority 与 YAML-first 边界,没有触碰 HWPOD、MDTODO、Workbench、AgentRun、CI/CD 或 PK01。
## 验证
- NC01 目标 worktree 的 `git diff --check``bun run check:tsc` 通过。
- 未运行 Vitest,未部署或启动浏览器。
- 1920/960/390、深链和完整异步状态的真实入口验证统一由 R2.4 完成。
@@ -1,21 +0,0 @@
# R2.3 任务报告
## 结果
- 子 Issue[HWLAB #2554](https://github.com/pikasTech/HWLAB/issues/2554)。
- 实现 PR[HWLAB #2557](https://github.com/pikasTech/HWLAB/pull/2557)。
- 实现提交:`5546d6b7a53fd52935ea23341334a1f819a2989c`
- 合并提交:`3da0858dda8c36a31274d90bd86b6c095d6fa3c6`
## 交付
- 保留 MDTODO 有界三栏、Source/File、inline edit、报告、RESTful 深链、typed Project Management API 与公共 Workbench Launch 合同。
- Projects 最近任务可进入 MDTODO 深链,Workbench Link 可双向进入会话与任务。
- Workbench Launch 在用户点击同步阶段准备目标窗口,避免异步 admission 后被浏览器拦截;失败关闭空窗口,禁用弹窗时回退同页路由。
- 没有改动 Workbench 私有实现、项目 authority、AgentRun、CI/CD 或 PK01。
## 验证
- NC01 目标 worktree的 `git diff --check``vue-tsc --noEmit` 与 Web build 通过。
- 未运行 Vitest,未部署或启动浏览器。
- 三栏/移动页签、报告与链接操作的真实入口验证统一由 R2.4 完成。
@@ -1,60 +0,0 @@
# R4 任务报告
## 结论
已在 HWLAB v0.3 完成 TaskTree 独立微服务、CLI、Temporal worker、API、PostgreSQL 数据模型、自动交付和甘特图前端闭环。
## 服务与数据合同
- TaskGroup、Task、Subtask 分别对应 MDTODO FILE、ITEM、SUBITEM。
- 支持 Milestone 与归属 Task/Subtask 的 ExecutionReport。
- API 与 worker 为可独立部署 Pod,共用 contracts、repository、dispatcher 与 Temporal workflow/activity。
- 数据库使用 NC01 native PostgreSQL。
- CLI 默认本地 dispatcher`--overapi` 只切换 transport。
- native smoke 数据:
- Group`tg_bb3ec264-dd33-48d4-b3b0-0f4a93124512`
- Root task`tt_5ad2d44e-6df8-4aca-9176-738c1f5ae5e0`
- Subtask`tt_194e222d-6fb1-4881-86b7-5316c8b97817`
- Milestone`tm_7b69f37e-8346-4074-900c-92c899f39444`
## 前端与白屏根因
- TaskTree 默认横轴时间、纵轴 task/subtask,支持甘特条、milestone、详情弹框与执行报告。
- 全局白屏根因是 `EmptyState` 将 Lucide 函数组件直接作为 Vue prop 默认值,Vue 按 default factory 调用时未提供 Lucide setup context,触发 `slots` 解构异常。
- PR #2604 将默认值改为返回组件的 factory,不改变页面结构或视觉合同。
- 此修复同时恢复 TaskTree 与其他 Cloud Web 壳层路由。
## 自动交付
- TaskTree 功能 PR#2593
- artifact catalog 修复 PR#2594
- 前端诊断与修复 PR#2598#2600#2602#2603#2604
- 最终 PipelineRun`hwlab-nc01-v03-ci-poll-l7c5p`,状态 `Completed`,耗时 81 秒。
- GitOps`2b2485dc5c2b`
- Argo`Synced/Healthy`
- runtime digest`sha256:d5763847b9e...`ready `1/1`
## 原入口 Web 验收
受控命令:
`bun scripts/cli.ts web-probe console-verify --node NC01 --lane v03 --origin internal --profile tasktree`
结果:
- profile`tasktree``failureCount=0`
- 三视口:`1920x1080``960x600``390x844` 全部通过。
- 三视口 `horizontalOverflowPx=0`
- task/subtask2 个标签、2 条可见甘特条。
- milestone1 个。
- 详情弹框可见且完整位于视口内。
- execution report3 份。
- group 深链刷新恢复通过。
- `consoleErrorCount=0``responseErrorCount=0`
- report SHA-256`sha256:914de84d70ad15cf092f01eb520573684580771f809868bd8ac90dc78d944766`
- desktop`sha256:b697e9462244c27508f3cb20a3d7faacf5e72d7c980de43358fad10fbdaf7425`
- compact`sha256:67b83a3f3e14f6cc52396c5f86a16e31a19baa6e33b673d46c85e7ecf4de5a97`
- mobile`sha256:f517453dc9d5bbeac11c9954a6adf4a499b93089dd4c15fc632b136d3c07695e`
- detail`sha256:40ff2c0b207bb9448623ca3eb2768987046ce02d37b3cb5869627a7561757449`
补充的全 Cloud Console profile 已生成多个非空路由截图,但受 60 秒远程命令预算中断,状态为 `blocked`;这不影响完整通过的 TaskTree typed profile,也不作为 TaskTree 验收替代证据。
@@ -1,31 +0,0 @@
# R5 任务报告
## 结论
已完成 UniDesk #2320:超过 55 秒短连接预算的 repo-owned `web-probe script/console-verify` 复用既有 remote artifact job,以短连接完成 submit、status、artifact download 和 cleanup,不再把完整浏览器矩阵放入单次 `trans`
## 实现
- `runManagedNodeWebProbeScript``commandTimeoutSeconds > 55` 时调用既有 `runWebProbeRemoteArtifactJob`
- 远端 browser runner 使用 job 的临时 artifact 目录,结束后由 manifest 列出 report JSON 与截图。
- remote artifact helper 支持 JSON artifact,并通过显式 `--allow-text-transfer` 下载文本报告。
- manifest 只保留 1 KiB stdout/stderr tail,避免 base64 内容超过 `trans` 有界输出而丢失终止 marker。
- 下载后的 report 重新计算 SHA-256,并将 report 与截图路径映射为本地 `/root/.unidesk/.state/web-probe-script-artifacts/` 路径。
- 成功和业务失败均保留原有 summary、issueEvidence、steps、failureKind 与 renderer 合同;远端临时目录终态自动清理。
## 验证
- `bun test scripts/src/hwlab-node-web-probe-console-verify.test.ts`6 pass。
- `bun scripts/cli.ts check --syntax-only`11 pass。
- `git diff --check`:通过。
- 真实命令:`bun scripts/cli.ts web-probe console-verify --node NC01 --lane v03 --origin internal --profile cloud-console`
- 运行超过原 60 秒边界后正常返回,`transportTimedOut=false`,未出现 `ssh-runtime-timeout`
- 远端业务终态为既有 `browser-navigation-jitter`,没有被 transport 层覆盖。
- 自动下载并校验 23 个 artifact。
- 本地 report SHA-256`sha256:635f24f206729b34614167fd2de706f297551afb09310bea7d268cdb6eded484`
- 默认输出包含本地 report 路径、report SHA、截图本地路径/SHA、三视口步骤和失败摘要。
- job 远端临时目录 cleanup 成功。
## 非阻塞边界
全 Cloud Console profile 的业务工作流仍可能在 HWPOD “查看详情”点击处出现 `browser-navigation-jitter`;该业务探针抖动与 #2320 的长命令 transport 合同独立,本次保持真实失败语义,不通过重试或降级隐藏。
-109
View File
@@ -1,109 +0,0 @@
# HWLAB Web 产品体验
- 长期问题域:
- HWLAB Cloud Web 的产品信息架构、通用前端能力、页面一致性和用户入口体验。
- HWLAB 页面所需的同源 API、领域 read model 与合理微服务边界。
- 规格真相:
- `project-management/PJ2026-01/specs/` 下的 HWLAB L0、Cloud 阶段及对应 L1/L2 SPEC。
- HWLAB v0.3 实现与真实入口验收以 `NC01/v03` 固定 source workspace 和运行面为准。
- 范围边界:
- 页面不得重新定义硬件、任务、用户、权限、账本或评价事实。
- Workbench 主工作流不在本文件内重写,但共享应用壳变更不得造成其回退。
## R1 [completed]
依据 UniDesk OA SPEC 全量重写 HWLAB v0.3 除 Workbench 主工作流外的 Cloud Web 页面:先抽取工业风、高信息密度、渐进披露且符合用户直觉的通用前端模块;MDTODO 保留成熟布局语义后重写;HWPOD/HWPOD Node 重点实现设备卡片/列表、node→HWPOD 管理和 Python 节点接入;必要时补强后端并按职责合理拆分微服务。完整范围、现状证据、战略判断和验收见[任务上下文](./details/hwlab-web-product-experience/R1_Context.md);执行锚点见[HWLAB #2514](https://github.com/pikasTech/HWLAB/issues/2514),完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1_Task_Report.md)。
### R1.1 [completed]
完成 UniDesk OA SPEC 对齐与产品架构定锚:盘点非 Workbench 全路由、用户旅程、实体 ID、navId/ACL、DTO/API、深链、页面状态和原入口,以 HWLAB L0“云端硬件研发闭环”、Cloud 阶段“多人多端开箱即用/硬件接入”及各 L1/L2 职责判定页面主责、缺口和优先级;确认需新增或修订的 SPEC、架构图、数据流、时序和验收矩阵后再实现。依赖:无,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.1_Task_Report.md)。
### R1.2 [completed]
依赖 R1.1,建立 HWLAB Cloud Web 工业设计系统与通用前端层:tokens、响应式 AppShell、PageCommandBar、StatusStrip、DataGrid/VirtualList/ResourceCollection、工业实体卡片、图标/列表或密度切换、Dialog/Drawer/Popover、Log/Markdown/JSON/Trace Viewer、AsyncBoundary、Inspector 与 BoundedWorkspace;统一 URL view state、键盘/ARIA、reduced-motion、响应式和大数据有界行为。执行见[HWLAB #2515](https://github.com/pikasTech/HWLAB/issues/2515),完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.2_Task_Report.md)。
### R1.3 [completed]
依赖 R1.1,可与 R1.2 并行;按硬件池、Agent编排、HarnessRL、客户端、用户管理和平台运维主责补齐 typed DTO、BFF/read model、服务端搜索/排序/cursor、详情与日志/operation 查询。评估抽取 hwlab-hwpod-service 统一 HWPOD registry、node connection、拓扑、operation 和诊断;Cloud API 只保留同源鉴权/路由/correlation,项目与用户事实继续归既有服务,拆分前先更新对应 SPEC,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.3_Task_Report.md)。
### R1.4 [completed]
依赖 R1.2、R1.3,重写全站应用壳、登录、注册和 404:导航按用户工作流组织,保留或原子迁移 navId/ACL、同源 HttpOnly 会话与安全 redirect;桌面、紧凑桌面和移动端都有明确导航、上下文、命令区和滚动所有者。联动修正 UniDesk HWLAB 外链壳的硬编码 IP,使其从受控配置解析正式入口;共享壳变更不得改写或回退 Workbench 主工作流,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.4_Task_Report.md)。
### R1.5 [completed]
依赖 R1.2、R1.3,重写 HWPOD“设备资源”子标签:以 typed inventory 展示 HWPOD 四要素、node、声明/实际能力、可用/占用/busy、主要 blocker 和最近 operation;同源支持电路板 SVG 图标卡片与高密度列表。四条链路分别表达 target/workspace/debug/io,仅真实连接、in-flight 或 mismatch 驱动克制动效,并完整支持 reduced-motion、详情深链和渐进披露 Inspector。执行见[HWLAB #2516](https://github.com/pikasTech/HWLAB/issues/2516),完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.5_Task_Report.md)。
### R1.6 [completed]
依赖 R1.2、R1.3,与 R1.5 协同重写“HWPOD Node”和“节点接入”子标签:管理已连接及声明离线 node,展示平台、版本、心跳、能力、in-flight、诊断和其挂载的零到多个 HWPOD;网页消费 update/download 元数据下载 Python 单文件,展示版本、大小、SHA 和安装条件。按 downloaded→installed→desktop-visible→registered→workspace-ready→hwpod-ready 分阶段引导,凭据仍只走 YAML sourceRef/受控 CLI,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.6_Task_Report.md)。
### R1.7 [completed]
依赖 R1.2、R1.3,重写 Projects 与 MDTODOProjects 提供项目卡片/表格、状态/来源筛选、项目详情、任务活动与 blocker 深链;MDTODO 保留成熟的有界三栏、Rxx 树→正文→报告、Source/File 工具栏、inline edit、报告关闭/调整/全屏、RESTful 深链和刷新恢复,并接入新的通用组件。删除 Workbench 私有 store 依赖,只通过公共 Project Management 与 Workbench Launch API 联动。执行见[HWLAB #2517](https://github.com/pikasTech/HWLAB/issues/2517),完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.7_Task_Report.md)。
### R1.8 [completed]
依赖 R1.2、R1.3,重写 Dashboard、组织/用户协同、API Keys、Usage、Billing、Settings 与 HelpDashboard 通过后端聚合 read model 提供继续项目/任务、HWPOD、额度和主要异常;集合页统一卡片/列表、筛选、分页和深链;创建/兑换等低频操作进入 Dialog。不得虚构未落地的支付、scope、轮换或跨设备偏好,缺失能力先更新用户管理 SPEC/API,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.8_Task_Report.md)。
### R1.9 [completed]
依赖 R1.2、R1.3,重写 Users、Access、Secrets/External Secret、Admin Billing 与 Provider Profiles:统一集合→Inspector/深链详情→低频 Dialog,补 typed DTO、服务端分页、筛选、审计/验证历史和有界日志。Access 继续消费权限域真相;Secret 只展示对象、key、presence、fingerprint 与摘要,保留 dry-run/plan 和 YAML-first sourceRef,不新增运行面反解或前端 Apply,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.9_Task_Report.md)。
### R1.10 [completed]
依赖 R1.2、R1.3,重写 Performance、Gate、Skills、OpenCode 外壳及其他非 Workbench 系统工具页:按“状态→问题→证据→动作”渐进披露,统一时间窗口、视图/密度、详情深链、日志/证据查看和异步状态;Performance 拆分大组件并保持有界可视化,Skills 不在缺少正式 API 时虚构删除/启停,OpenCode 保留同源 ticket、认证和安全 URL,只增强加载/错误/重试外壳,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.10_Task_Report.md)。
### R1.11 [completed]
依赖 R1.4-R1.10,完成迁移收口:删除所有已被新设计系统替代的旧页面 shell、私有 Panel/Table/Dialog/Viewer、字段名猜测、名称去重、关键事实前端拼装、重复 CSS 和阻碍最新目标的兼容入口;把 Workbench 与普通页面样式按职责拆分,所有源码文件满足体积治理。保持稳定业务 ID、API、权限、Secret、深链和 Workbench 用户主路径无回退,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.11_Task_Report.md)。
### R1.12 [completed]
依赖 R1.4-R1.11,在 NC01/v03 YAML-selected Cloud Web 原入口完成全量验收:覆盖 1920x1080、960x600、约 390px、键盘/焦点/ARIA、reduced-motion、深链刷新/前进后退、卡片/列表语义一致、loading/refreshing/partial/empty/error/ready、大表/长树/长日志性能和权限差异。用 web-probe observe/analyze 留存证据;HWPOD 覆盖一 node 多设备、离线 node、在线无 spec、invalid spec、mismatch、busy、更新和诊断错误,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.12_Task_Report.md)。
### R1.13 [completed]
补强 WebProbe 全浏览器入口与 Web 哨兵资源治理(子 issue [pikasTech/unidesk#1907](https://github.com/pikasTech/unidesk/issues/1907)):所有会创建浏览器的人工入口只以 /proc/meminfo 的 MemAvailable 判定真实物理内存,未满足 owning YAML 策略时先阻断并要求受控 GC 后复核;哨兵未满足策略时不创建 observer/Chrome,跳过本轮等待下一 cadence。将阈值、锁、TTL、样本、截图、性能、历史、响应体和终态关闭上限收敛到 owning YAML,保证成功、失败、timeout、signal 全路径关闭 browser/context,并在 NC01/v03 验证 12GiB swap 不计入资格,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.13_Task_Report.md)。
#### R1.13.1 [completed]
修复 [UniDesk #1927](https://github.com/pikasTech/unidesk/issues/1927) 的 WebProbe MDTODO 任务引用误报与性能采集状态污染:按语义任务行去重 analyzerperformanceCapture 状态只返回有界摘要和 artifact 下钻,不新增锁、租约、围栏或旁路入口,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.13.1_Task_Report.md)。
### R1.14 [completed]
依据用户最新反馈全量重写 HWLAB v0.3 管理域导航、授权、密钥、用户、账务与 MDTODO 页面代码(子 issue [pikasTech/HWLAB#2522](https://github.com/pikasTech/HWLAB/issues/2522)):禁止以换色、圆角、字母方块、薄包装组件或局部 CSS 冒充重写;先抽取工业运营台通用工作区、状态轨、实体索引、权限矩阵、密钥流向、审计/账本时间线、真实线性图标与 Markdown/报告 Viewer,再重建五页组件树、状态组合和样式并删除旧私有实现。MDTODO 只保留成熟的有界三栏、任务树→正文→报告、Source/File、inline edit、报告调宽/关闭/全屏和深链思想;保留 typed API、稳定 ID、revision/fingerprint、ACL、Secret 脱敏与公共 Workbench Launch 合同,完成 1920/960/390 原入口验收,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.14_Task_Report.md)。
## R2 [in_progress]
执行 [HWLAB #2537](https://github.com/pikasTech/HWLAB/issues/2537):纠正此前名义完成但真实效果不达标的问题,依据 OA SPEC 和 R1_Context 全量重写 HWLAB v0.3 非 Workbench 页面代码;先抽取工业风高信息密度通用表格、卡片、弹窗、日志/Markdown/JSON/Trace Viewer、Inspector 和图标/列表/密度切换,再重写 AC/SK/UR/AB、MDTODO、HWPOD 与 HWPOD Node,补 Python 单文件节点下载及分阶段接入引导;保留 MDTODO 三栏布局思想、typed API、权限/Secret/硬件/账务 authority 和 Workbench 主路径,完成 1920/960/390、ARIA、reduced-motion 与完整异步状态验收,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R2_Task_Report.md)。
### R2.1 [completed]
审查并完成 [HWLAB #2552](https://github.com/pikasTech/HWLAB/issues/2552) 的 HWPOD 设备、HWPOD Node 与 Python 单文件接入页面,限定修改 HWPOD 前后端领域文件,补齐卡片列表切换、Node 挂载关系、分阶段引导、异步状态、响应式和可访问性缺口,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R2.1_Task_Report.md)。
### R2.2 [completed]
审查并完成 [HWLAB #2553](https://github.com/pikasTech/HWLAB/issues/2553) 的 AC、SK、UR、AB 管理域与通用工业运营台组件,限定修改管理域和共享组件文件,删除薄包装及重复实现,补齐集合、Inspector、Dialog、审计日志、视图切换、异步状态与响应式缺口,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R2.2_Task_Report.md)。
### R2.3 [completed]
审查并完成 [HWLAB #2554](https://github.com/pikasTech/HWLAB/issues/2554) 的 Projects 与 MDTODO 页面,限定修改项目管理和 MDTODO 文件,保持三栏布局思想并补齐深链恢复、任务正文、报告、inline edit、视图状态、完整异步状态、响应式和可访问性缺口,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R2.3_Task_Report.md)。
### R2.4
在前三项合并并自动交付后,从 NC01/v03 YAML 选择的真实入口完成非 Workbench 全路由浏览器验收和有界残余修复,覆盖 1920x1080、960x600、约 390px、卡片列表语义、深链、键盘、ARIA、reduced-motion 与 loading/refreshing/partial/empty/error/ready 状态,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R2.4_Task_Report.md)。
#### R2.4.1
修复 [UniDesk #2402](https://github.com/pikasTech/unidesk/issues/2402):定位 `cloud-console` typed profile 的 HWPOD “查看详情”点击被卡片子树拦截问题,在不使用强制点击、降低门禁或额外重试的前提下恢复稳定详情交互,并复测三视口、report/screenshot artifact、pageerror、HTTP 5xx 与 document overflow,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R2.4.1_Task_Report.md)。
## R3 [in_progress]
设计并实现 HWLAB v0.3 AgentRun 智能体运行观察页([HWLAB #2541](https://github.com/pikasTech/HWLAB/issues/2541)):默认高密度表格并可切换卡片/树状视图,三视图与 Inspector 只消费 `agentrun.event.v1` 经 HWLAB mapper 写入 `hwlab.event.v1` 后形成的 Kafka retention replay SSE 与 live SSE,并共享唯一 reducer/store、selector、查询和选择状态;删除 snapshot BFF、定时轮询、AgentRun HTTP 补投影、数据库 projector/migration、fallback 和第二 authority;防过载窗口与 SSE/reducer 上限 YAML-first,并在 NC01/v03 原入口完成 lineage、replay-to-live handoff、断线恢复、幂等终态、响应式和可访问性验收,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R3_Task_Report.md)。
## R4 [completed]
执行 [UniDesk #2380](https://github.com/pikasTech/unidesk/issues/2380):在 HWLAB v0.3 建立独立 TaskTree 微服务及项目管理前端,以 taskgroup/task/subtask 对齐 MDTODO FILE/ITEM/SUBITEM,支持时间节点、执行报告、native PostgreSQL、Temporal worker、共享 dispatcher、默认本地 CLI 与同命令 `--overapi`;默认页面为横轴时间、纵轴任务的响应式甘特图,点击任务查看详情和执行报告,并完成 CI/CD 与原入口 Web 验收,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R4_Task_Report.md)。
## R5 [completed]
执行 [UniDesk #2320](https://github.com/pikasTech/unidesk/issues/2320):将超过短连接预算的 repo-owned `web-probe console-verify` 接入既有 remote artifact `submit -> status -> result`,自动恢复 report、截图 SHA 与 issueEvidence,保持 owning YAML、认证、内存门禁、脱敏和 semantic origin 合同不变,并用 `cloud-console` profile 验收不再出现 60 秒 SSH timeout,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R5_Task_Report.md)。