P1.U-dock-cleanup-9to4 · XiLink Stage 右 dock 裁剪(9 drawer → 4 + XiTest 四件套)
Worker:ClaudeA · 前端 / 部门:前端 P1-xilink / 预计:1.0d / 优先级:P1 / 状态:ready
🔍 触发与解锁链
- 触发:ADR-AIOS-08 v1.1 §2.1 议题⑤(2026-05-29 17:25 accepted)· ADR-12 #5 P0.U-measurement-rms-fft-phase(
8379de2)zombie 后 P0.K-shared-meter-dock 三组件(RMSMeter / SpectrumChart / PhaseChart)真业务就位 · 本 fork 直接复用 · 不阻塞。 - 解锁条件:本 fork zombie 后,议题④ 子图画布(P1.U-subgraph-canvas + P1.U-subgraph-schema-extend)解除 right dock 风格冲突预备条件。
任务定义(基于 ADR-AIOS-08 v1.1 §2.1)
将 frontend_vue3/src/stages/xilink/drawers/ 9 drawers 裁剪到目标布局:
❌ 删除 2 个:
- DrawerInspector.vue(属性检查 · 用户拍板裁剪)
- DrawerPropertyPanel.vue(浮动属性 · 用户原话"不知道这个是干啥的")
✅ 保留 3 个(议题⑤ 核心):
- DrawerEngine.vue(议题① 主战场 · 已被 P1.UA8-runtime-selector-ui dispatched 中)
- DrawerLog.vue(日志)
- DrawerMetrics.vue(议题③ 主战场 · 已被 P1.UA8-perf-monitor-frontend dispatched 中)
🆕 新增 XiTest 四件套(本 fork 主要工作 · 复用 P0.K-shared-meter-dock 真业务组件):
- RMSMeter · 实时电平表(从 frontend_vue3/src/components/measurement-shared/RMSMeter.vue read-only 引用 · 8379de2 已就位)
- FreqResponseChart / SpectrumChart · 频响曲线(从 measurement-shared/SpectrumChart.vue 引用)
- PhaseChart · 相位曲线(同上)
- RealtimeScope / WaveformChart · 实时 scope 时域波形(若 8379de2 未含 · 用 stub 占位 · 等 ADR-12 #6 zombie 切真接口)
⚠️ 观察处理(本 ADR 不删):DrawerConnection / DrawerModules / DrawerProfile / DrawerProject(与顶层 panel 重复 · 但移除可能破坏现有用户习惯 · 留 ADR-08 闭环后下季度评估)
完整 prompt(直接复制粘贴 worker 终端)
[U-thread]: P1.U-dock-cleanup-9to4
[部门]: 前端 P1-xilink
[Worker CWD]: d:/work/25_claude/workspace/AlgoDepartment/04_development/
[Occupies]: P1.K-xilink-drawers · P0.K-shared-meter-dock(read-only)
[优先级]: P1 · 1.0d
[ADR]: docs/08-implementation/40-aios/ADR/ADR-AIOS-08-xilink-stage-ux.md(v1.1)
[业务行为契约引用]: ADR-08 §2.1 议题⑤ 裁剪决议 + 实施约束(必须复用 P0.K-shared-meter-dock · 不允许在 stages/xilink/ 自行实装 meter)
[参考文档]:
- ADR-AIOS-08 v1.1 §2.1(裁剪决议)+ §1.4(议题归属表)+ §2.3(议题③ DrawerMetrics 后续工作 · 本 fork 不动)
- ADR-AIOS-07 §2.1.2 + §2.3 边界铁律 #2(P0.K-shared-meter-dock 抽出 · 严禁 stages/xilink/ 自行实装 meter)
- 已就位代码(ADR-12 #5 8379de2):
· frontend_vue3/src/components/measurement-shared/RMSMeter.vue
· frontend_vue3/src/components/measurement-shared/SpectrumChart.vue
· frontend_vue3/src/components/measurement-shared/PhaseChart.vue
- 现有 stages/xilink/drawers/ 9 drawers + stages/xilink/RightDock.vue(或对应入口 · grep 确认)
- 不动 ADR-08 议题①/②/③ 已 dispatched 的并行 fork:
· P1.UA8-link-error-check(BottomProblems · §2.2)
· P1.UA8-perf-monitor-frontend(DrawerMetrics 数据填充 · §2.3)
· P1.UA8-runtime-selector-ui(DrawerEngine RuntimeTarget · §2.4)
【背景】
ADR-08 议题⑤ 是右 dock 5 议题中最简单的一项 · 工作量 1.0d。本 fork 仅做"裁剪 + 引用"· 不实装 meter 数学(沿用 ADR-07 §2.3 第 2 项铁律 · meter 全在 P0.K-shared-meter-dock 内 · 本 fork read-only 引用)。
ADR-12 #5(`8379de2`)三组件已 zombie · 真业务就位(RMSMeter / SpectrumChart / PhaseChart 各自含 ① 输入输出 ② 收敛判据 ③ 失败回退 ④ 用户操作流 ⑤ e2e 真值)· 本 fork 直接 import 用即可。
【执行步骤】(5 步)
Step 1 · 删除 2 drawer 文件 + 引用清理(0.2d)
- 删除 frontend_vue3/src/stages/xilink/drawers/DrawerInspector.vue
- 删除 frontend_vue3/src/stages/xilink/drawers/DrawerPropertyPanel.vue
- grep "DrawerInspector|DrawerPropertyPanel" 全仓 · 删除所有 import / 注册引用
- 检查 RightDock.vue(或对应 drawer 容器)tab 列表 · 移除两项
- 兼容性:若用户存在持久化"打开过 DrawerInspector"的 localStorage / pinia state · 加 LEGACY_DRAWER_MAP 把旧 ID 映射到 'engine'(默认 fallback)
Step 2 · 新增 DrawerXiTest.vue(0.4d · 本 fork 主体)
- 路径:frontend_vue3/src/stages/xilink/drawers/DrawerXiTest.vue
- 内部 4 tab(RMS / FreqResp / Phase / Scope)· 用 ElTabs 或现有 stages/xilink 风格
- 各 tab 直接 <RMSMeter /> <SpectrumChart /> <PhaseChart /> 引用 measurement-shared 组件(read-only props)
- WaveformChart / RealtimeScope:
· 若 measurement-shared/WaveformChart.vue 已存在(grep 确认)→ 直接用
· 若不存在 → 用 stub(占位文字"等 ADR-12 #6 P0.U-measurement-transfer-waveform zombie")· 不实装真业务
- 节点选择 sink-pre / physical-input(沿用 ADR-07 §1.3.1)· 复用 measurement-shared 的 MeterNodeSelector(若有)
Step 3 · 注册到 RightDock(0.1d)
- RightDock.vue tab 列表加 'xitest' 项 · icon + label
- 默认折叠 · 用户首次切到该 tab 时 lazy 加载 DrawerXiTest
Step 4 · vitest 单测(0.2d)
- 新增 stages/xilink/drawers/__tests__/DrawerXiTest.spec.ts
· case:DrawerXiTest 渲染 4 tab + 切换工作正常
· case:RMSMeter / SpectrumChart / PhaseChart 引用解析正确(mock 输入 → 渲染存在)
· case:LEGACY_DRAWER_MAP 把旧 'inspector' 映射到 'engine'
- 不退化 frontend 现有 356 测试基线
Step 5 · 自查 + commit(0.1d)
- npm run typecheck 全绿(0 error)
- npm run test:unit 不退化(基线 356/3 · 新增预计 +3-5 case)
- 检查:grep "self-implemented meter|new RMSMeter\(\)" 在 stages/xilink/ 应为 0(沿用边界铁律)
- commit subject: refactor(P1.U-dock-cleanup-9to4): cleanup xilink drawers 9→4 (delete Inspector/PropertyPanel + add DrawerXiTest with shared meter components)
- commit trailer 三元组:[step=5/5] [pid=P1] [uid=U-dock-cleanup-9to4] [occupies=P1.K-xilink-drawers+P0.K-shared-meter-dock-read] [files=stages/xilink/drawers/...,stages/xilink/RightDock.vue]
【验收】(stop 前必跑)
形式合规:
☐ npm run typecheck 全绿
☐ npm run test:unit 不退化(基线 356/3)+ 新增 case 全过
☐ grep "DrawerInspector|DrawerPropertyPanel" 在源码区返回 0(注释 / 历史归档允许残留)
☐ 不在 stages/xilink/ 自行实装 meter 组件(grep 验证 · 沿用 ADR-07 §2.3 第 2 项铁律)
☐ 不动 ADR-08 议题①/②/③ 已 dispatched 的 P1.UA8-* 三 fork 文件
业务行为契约(端到端真值 · 必跑):
☐ DrawerXiTest 4 tab 切换 e2e:RMS / FreqResp / Phase / Scope 各 tab 渲染对应组件 · 不报错
☐ 删除 2 drawer 后用户打开 RightDock · 仅看到 4 个有效 drawer(Engine / Log / Metrics / XiTest · 加上观察处理保留的 4 个 = 实际 8 个 · 但裁剪目标完成)
☐ LEGACY_DRAWER_MAP 兼容:旧 localStorage 'inspector' → fallback 'engine' · 不抛错
【commit】
- subject + 三元组 trailer 见 Step 5
- 7 天宽限期内三元组缺失仅 warning · 6/2 起 strict mode 硬拒
【禁止】(6 项红线)
1. ❌ 禁止在 stages/xilink/ 自行实装 RMSMeter / SpectrumChart / PhaseChart 等 meter 组件(沿用 ADR-07 §2.3 第 2 项铁律 + ADR-08 §2.1 实施约束)
2. ❌ 禁止动 ADR-08 议题①/②/③ 已 dispatched 的 P1.UA8-link-error-check / perf-monitor-frontend / runtime-selector-ui 三 fork 文件(BottomProblems / DrawerMetrics 数据 / DrawerEngine RuntimeTarget)
3. ❌ 禁止删除观察处理 4 drawer(DrawerConnection / DrawerModules / DrawerProfile / DrawerProject · 留下季度评估)
4. ❌ 禁止跳过 LEGACY_DRAWER_MAP(用户旧 localStorage 必须能 fallback · 不能抛错)
5. ❌ 禁止实装 WaveformChart 真业务(若 measurement-shared 中无 · 用 stub · 等 ADR-12 #6 zombie)
6. ❌ 禁止越界引入 stages/xilink/ 其他子目录代码(沿用 ADR-08 §2.5 边界铁律)
解锁链(本任务 zombie 后)
- ✅ 议题④ 子图画布(P1.U-subgraph-canvas 2.5d · P1.U-subgraph-schema-extend 0.5d)解除 RightDock 风格冲突预备
- ✅ DrawerXiTest 落地后,XiTest stage 可借鉴本设计(右 dock 共享 meter 组件复用模式)
风险评估
| 风险 | 缓解 |
|---|---|
| RightDock 容器组件命名/结构与预期不符 | Step 1 先 grep "RightDock |
| measurement-shared 组件 API(props / emit)变化 | Step 2 read 现有组件 props · 不修改 measurement-shared 任何文件 · 仅消费 |
| WaveformChart 不在 measurement-shared 中(ADR-12 #6 未 zombie) | Step 2 用 stub 占位 · 加 TODO 注释引用 ADR-12 #6 UID |
| 用户旧 localStorage 持有 'inspector' / 'propertyPanel' 状态 | Step 1 LEGACY_DRAWER_MAP fallback · vitest 兼容 case 验证 |
历史
| 时间 | 事件 | hash |
|---|---|---|
| 2026-05-30 12:06 | dispatched · 用户拍板 start P1.U-dock-cleanup-9to4 · 与 ADR-11 v1.3 fork 1-v3/1b-v2 文件正交并行 | — |
| 2026-05-30 14:51 | zombie · 用户拍板"全部完成"· ClaudeA 落 9→4 drawer 裁剪 + DrawerXiTest 4 tab 复用 P0.K-shared-meter-dock 真业务组件 | ad1e458 |