docs: 删除已迁移的 Web 体验 MDTODO
This commit is contained in:
@@ -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/8,Vitest 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/390,5/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/11;MDTODO 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 #1928(merge ea6c3e05)对齐全量重写后的 MDTODO DOM 合同,按稳定 data-task-ref 和语义任务行分析,不再依赖旧标题/正文结构。
|
||||
- UniDesk PR #1930(commit 1468e56a)消除“仅任务树较短”造成的 mdtodo-pane-bottom-gap 误报;详情/报告与多窗格真实缺口仍保留检测。
|
||||
- UniDesk PR #1931(commit e20dee77)让 performanceCapture status 只返回有界摘要与 artifact 下钻,避免直接输出大型 CPU profile JSON 污染 stdout。
|
||||
- UniDesk PR #1932(commit 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 #1912(merge 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 skill;NC01 swap 调整为 12 GiB,但明确不计入启动资格。
|
||||
|
||||
## 运行面实证
|
||||
|
||||
- 每次新 observer 前都先执行 gc remote NC01 memory 与 memory-pressure-only plan。
|
||||
- 本轮启动门禁分别观测到 5.0/5.1/5.2 GiB MemAvailable,swapExcluded=true,candidateCount=0,未发现逃逸 Chrome。
|
||||
- 单个 desktop observer 活跃时 MemAvailable 曾降至 3.6 GiB;期间没有启动第二个浏览器。observer 停止后恢复至约 5 GiB。
|
||||
- 最终 mobile onboarding observer 自动完成 24 samples,进程为 not-running;回收后 MemAvailable 4.7–4.9 GiB,候选进程仍为 0。
|
||||
- 12 GiB swap 已确认生效,所有启动判据仍只使用真实物理 MemAvailable。
|
||||
|
||||
## 结论
|
||||
|
||||
WebProbe 与哨兵现在在低内存时 fail-closed/skip-next-cadence,并能清理可疑逃逸浏览器;活跃任务不会被 GC 误杀。
|
||||
@@ -1,23 +0,0 @@
|
||||
# R1.14 任务报告
|
||||
|
||||
## 页面与组件重写
|
||||
|
||||
- HWLAB PR #2523 全量重写管理域与 MDTODO,merge commit dbd4af6d4dab。
|
||||
- 抽取并复用 OperationsWorkspace、EntityIndex、Inspector、ViewModeSwitch、FactPath、AuditTimeline、工业状态轨、权限矩阵、密钥流向、账本/审计时间线与 Markdown/报告 Viewer。
|
||||
- 授权、密钥、用户、账务均改为高信息密度的集合索引→事实详情→低频动作渐进披露;移除 AC/SK/UR/AB 字母方块式导航,Secret 值始终不进入浏览器。
|
||||
- MDTODO 在保留三栏信息架构的前提下重写组件树、model/controller 与样式:任务树→正文→报告、Source/File、编辑/创建/删除、报告关闭/调宽/全屏、公共 Workbench Launch、URL 深链与前进后退均由新通用组件实现。
|
||||
- PR #2524(merge commit 35a679aa850e)补齐精确 data-task-ref,保证真实任务引用与浏览器分析合同一致。
|
||||
- HWPOD 设备、Node 与节点接入复用同一资源工作区:PCB 电路板图标卡片/高密度列表切换、克制动效、node 下挂载 HWPOD、在线/离线/阶段 readiness,以及 Python 单文件版本、大小、SHA 与下载引导。
|
||||
|
||||
## 验证与部署
|
||||
|
||||
- 源码验证:typecheck 通过;全量前端测试 115/115;HWPOD 后端测试 17/17;定向 R6 回归通过。
|
||||
- 普通 PR→PaC 自动交付 1/1 成功;NC01/v03 Argo 最终 Synced/Healthy,运行面精确来源为 35a679aa850e,GitOps 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 bytes,SHA-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`,Completed,delivery 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、能力和最近 operation;target、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 与 MDTODO;Projects 使用服务端 `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/详情与低频 Dialog;Users、账务和 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 35a679aa850e,GitOps 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 通过。
|
||||
- NC01:Cloud 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/subtask:2 个标签、2 条可见甘特条。
|
||||
- milestone:1 个。
|
||||
- 详情弹框可见且完整位于视口内。
|
||||
- execution report:3 份。
|
||||
- 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 合同独立,本次保持真实失败语义,不通过重试或降级隐藏。
|
||||
@@ -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 与 MDTODO:Projects 提供项目卡片/表格、状态/来源筛选、项目详情、任务活动与 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 与 Help:Dashboard 通过后端聚合 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 任务引用误报与性能采集状态污染:按语义任务行去重 analyzer,performanceCapture 状态只返回有界摘要和 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)。
|
||||
Reference in New Issue
Block a user