P3.A26.F3-meter-dock-log-module-tracker · 5 Meter Dock 内顶部 log_module 追踪下拉 + Transfer 双选 + 后端端点
Worker:ClaudeA · 部门:前端 P1-xilink + P5 后端 · 预计:1.5d · 优先级:P0 · 状态:dispatched · isolation:🧵 file(同 worktree 同 branch · 与 F1-2 文件正交并行)
🔍 触发与解锁链
触发:用户 2026-06-18 17:55 三连 stop F1-1+F2-1+F3-1 → 18:00 v5.2.4 同步完成 → 18:10 用户拍板双连 start P3.A26.F1 + start P3.A26.F3-meter-dock(F3-1 zombie 8a44ea1 解锁本 fork)。
用户原话(verbatim · ADR-26 §1.1 第 2 轮 第 2 段):
"右侧 dock 不会有专门的 log moudle 而是在不同的 dock 中可以追踪 link 中的所有 log module · 来在对应的 dock 中显示这个 log module 的 wav 文件 · 来进行 rms 或者 fft 等显示"
架构契约(ADR-26 §3.6 log_module 横切追踪 · 业务契约 5 必填段):
- 契约 A · 5 Meter Dock 统一新增 tracker:Fft/Rms/Phase/Scope/Transfer 5 个 Dock 顶部新增"追踪 log_module ▼" 下拉(ref + computed 响应式)
- 契约 B · GET /chain/log-modules 后端端点:返回 LogModuleSummary[](id/name/filePath/sampleRate/channels/durationSec)· 从当前链路 grep 所有 log_module 实例 + 各自最近落盘 wav
- 契约 C · 切换重渲染:选某个 log_module → POST /analyze/{type}?file=output/log_xxx.wav → Dock 内绘图重渲染(< 500ms)
- 契约 D · Transfer Dock 双 selector:ref + measure 双 log_module 下拉(其他 4 Dock 单 selector)· /analyze/transfer 接收 ref+measure 双文件
- 契约 E · 链路无 log_module fallback:下拉显示"无 log_module · 在链路中拖入 log_module 后追踪"引导文案 · 不破坏 useDockMeterFrame 现有 WS 数据流
- 5 类失败回退(ADR-26 §3.6 ③):wav 文件不存在→红字提示 / sidecar 分析失败→loading / 链路无 log_module→引导文案 / 落盘格式不兼容→toast / Transfer 单选→提示需双通道
解锁链(本任务 zombie 后):
- ✅ 5 Meter Dock 横切追踪能力闭环(用户 verbatim 落地)
- ✅ F3-1+F3-2 完整闭环(log_module 双击 Dialog + Meter Dock 追踪)
- ⏳ F4-1 P_e2e.A26.F4-truth-e2e-meter-dual-link 全解锁(F1-1+F1-2+F2-1+F3-1+F3-2 五齐 · ClaudeC 1.5d → ADR-26 整体闭环 🏆)
任务定义(基于 ADR-26 §3.6 + §4.1 F3-2)
子任务 ① · grep 5 Drawer Dock + F3-1 落地 LogModule 体系真值(0.2d · Step 0)
Step 0 强制门槛 · 必须 grep 5 Drawer Dock 文件结构 + read F3-1 8a44ea1 落地的 LogModule 端点 schema + read ADR-21-R1 d453822 useDockMeterFrame composable(资产保留)。
子任务 ② · useLogModuleTracker composable 新建(0.3d)
新建 frontend_vue3/src/composables/useLogModuleTracker.ts:
- listChainLogModules() → GET /chain/log-modules → LogModuleSummary[]
- analyzeLogWav(id, type, refId?) → POST /analyze/{type}?file=...
- 响应式 ref selectedLogModuleId + selectedRefId(Transfer 用)
- 链路无 log_module 时返回空数组 + 引导文案
子任务 ③ · GET /chain/log-modules 后端端点(0.3d)
修 backend_csharp/Routes/ChainRoutes.cs 或 LogModuleRoutes.cs(F3-1 8a44ea1 已建)新增 GET /chain/log-modules:
- 从当前链路 grep 所有 log_module 实例
- 返回 LogModuleSummary
- 含最近落盘 wav 文件路径(filePath / sampleRate / channels / durationSec)
子任务 ④ · 5 Drawer Dock 顶部加 tracker 下拉(0.4d · 5 子步骤)
每个 Dock 独立 commit:
- DrawerDockFft.vue:顶部加 <el-select v-model="selectedLogModuleId"> + 切换调用 analyzeLogWav('fft')
- DrawerDockRms.vue:同上 type='rms'
- DrawerDockPhase.vue:同上 type='phase'(双通道时启用)
- DrawerDockScope.vue:同上 type='scope'
- DrawerDockTransfer.vue:双 selector(ref + measure)+ analyzeLogWav('transfer', refId)
ADR-21-R1 useDockMeterFrame WS 数据流不动 · 仅在顶部新增 tracker 区域 · 选 log_module 时切换数据源(从 WS frame → sidecar wav 分析结果)。
子任务 ⑤ · 测试 + 浏览器实测 + 全测试基线零回归(0.3d)
vitest +8 case + playwright +2 case · vue-tsc + build 0 errors · 全测试基线零回归(F1-2 zombie 后基线 371/3 → +8+2 = 381)。
完整 prompt(直接复制粘贴 ClaudeA 终端)
[U-thread] P3.A26.F3-meter-dock-log-module-tracker · ADR-26 §3.6 + §4.1 F3-2
[部门] 前端 P1-xilink + P5 后端
[Worker CWD] d:/work/25_claude/workspace/AlgoDepartment/04_development/
[Occupies] P1.K-shared-xilink-meter-docks + P1.K-shared-log-module-tracker
[优先级] P0(1.5d · 与 F1-2 文件正交并行 max=2.0d)
[ADR] docs/08-implementation/40-aios/ADR/ADR-AIOS-26-meter-dual-link-runtime-target-tri-stage.md(必读 §3.6 log_module 横切追踪 + §4.1 F3-2 + §4.3 文件正交矩阵第 5 行 + §5 风险表第 5 行 + §9.2 grep 真值教训)
[isolation] file(同 worktree 同 branch · frontend_vue3 范围内改 5 Drawer Dock + useLogModuleTracker · 后端 ChainRoutes 增 1 端点 · 与 F1-2 文件 100% 正交)
[参考文档绝对路径]
- 业务契约:ADR-26 §3.6 完整 5 必填段(① TS LogModuleSummary + LogModuleTracker / ② 5 Dock 追踪能力矩阵 / ③ 5 类失败回退 / ④ 5 步操作流 / ⑤ playwright e2e 切换重渲染)
- 用户 2026-06-18 15:45 verbatim 第 2 轮 第 2 段(ADR-26 §1.1):
"右侧 dock 不会有专门的 log moudle 而是在不同的 dock 中可以追踪 link 中的所有 log module · 来在对应的 dock 中显示这个 log module 的 wav 文件 · 来进行 rms 或者 fft 等显示"
- 用户 2026-06-18 17:55 三连 stop + 18:10 双连 start
- 教训承接标本(必读避坑 · ADR-26 §9 + §5):
* §9.2 ADR-23→25→25-R1 三连教训严格执行 · grep 5 Drawer Dock 文件 + F3-1 LogModule 端点 schema 真值
* §5 风险表第 5 行:F3-2 5 Meter Dock 同步加 tracker · 改动面广 · 拆 5 子步骤(每个 Dock 独立 commit)+ vitest 每 Dock 独立 case · 渐进 commit
- 范式 commits(worker 必读 · 强制 read 全文对齐格式):
* P3.A26.F3--8a44ea1(F3-1 同 ClaudeA 同 ADR-26 标本 · LogModuleService + GET/PUT API + LogModuleConfigDialog · 本 fork 复用端点体系)
* P1.UA21R1.F2--d453822(同 ClaudeA · ADR-21-R1 useDockMeterFrame composable + 5 Drawer 薄壳化标本 · 本 fork 严禁重构 · 仅顶部新增 tracker)
[现有组件 grep 真值(.clinerules v3.0 ADR-23→25→25-R1 三连教训铁律 · Step 0 强制完整核查 · 不允许凭文件名推测起草)]
① F3-1 后端 8a44ea1 落地范围(Step 0 强制 git show 8a44ea1 --stat 完整 read):
- LogModuleService.cs POCO 字段(id/name/filePath/sampleRate/channels · 复用到 LogModuleSummary)
- Routes/LogModuleRoutes.cs GET/PUT /log-module/{id}/config 端点路径(本 fork 在同一控制器加 GET /chain/log-modules)
- 文件名模板渲染逻辑(${timestamp}/${moduleId})
② frontend_vue3/src/stages/xilink/drawers/(Step 0 强制 grep "DrawerDock" 列出 5 个 Dock 真值文件名):
- DrawerDockFft.vue / DrawerDockRms.vue / DrawerDockPhase.vue / DrawerDockScope.vue / DrawerDockTransfer.vue(确认存在)
- 每个 Dock 现有顶部结构(找插入 tracker 下拉的位置 · 不破坏 ADR-21-R1 d453822 薄壳化结构)
③ frontend_vue3/src/composables/useDockMeterFrame.ts(ADR-21-R1 d453822 资产 · 严禁重构):
- read 全文 · 确认 5 Dock 共享数据流 + WS frame 订阅
- 本 fork 在 useLogModuleTracker 中"切换数据源"时 · 不动 useDockMeterFrame · 仅 Dock 渲染层 v-if 切换(WS frame vs wav 分析结果)
④ frontend_vue3/src/composables/__tests__/(若 useDockMeterFrame.spec.ts 存在则参考):
- 测试现有 5 Dock 数据流 · 本 fork +8 case 不破坏现有 case
⑤ pysidecar /analyze/{fft,rms,phase,scope,transfer} 端点(已有 · 本 fork 仅消费):
- POST /analyze/fft?file=output/log_xxx.wav → FftAnalysisResult(ADR-26 §3.3 ① 已锚定)
- POST /analyze/transfer 接收 ref+measure 双文件参数(Transfer Dock 双 selector 用)
⑥ ADR-26 §4.3 文件正交矩阵(L678-682):本 fork 改 5 DrawerDock + useLogModuleTracker · 与 F1-2 改 ResourceMonitorDock + ConnectionDock + useRuntimeTarget 100% 正交
[文件正交策略](.clinerules v3.0 §UID 命名铁律 + §isolation):
isolation: file · frontend_vue3 范围内改 5 DrawerDock(改 5 文件 · 顶部新增 tracker 下拉)+ useLogModuleTracker(新建)+ spec + e2e · 后端 1 端点
与 F1-2(改 ResourceMonitorDock + ConnectionDock + useRuntimeTarget · 不动 5 DrawerDock)文件 100% 正交 · 双 fork(ClaudeA 自管串行 max=2.0d)同时跑零冲突
严禁动 backend_csharp 除 ChainRoutes/LogModuleRoutes 1 个端点外 / 严禁动 RightDock*(F2-1 资产)/ 严禁动 LogModuleNode + LogModuleConfigDialog(F3-1 资产)/ 严禁重构 useDockMeterFrame(ADR-21-R1 d453822 资产)
【背景】
用户 2026-06-18 15:45 verbatim 第 2 轮 第 2 段明确 log_module 横切追踪能力("不同的 dock 中可以追踪 link 中的所有 log module · 来在对应的 dock 中显示这个 log module 的 wav 文件")。
F3-1 后端 8a44ea1 已落地 LogModuleService POCO + GET/PUT /log-module/{id}/config 端点 + 文件名模板(2026-06-18 18:00 zombie · ClaudeA+ClaudeB 1.5d 跨栈)。本 fork 复用 LogModuleSummary POCO + 新增 GET /chain/log-modules 列表端点。
F2-1 f555661 已校正右侧 selector 4 类(log_module 移出独立节点)· 用户原话"右侧 dock 不会有专门的 log moudle"严格落地。本 fork 是 log_module 真正的展现路径(在 5 Meter Dock 内追踪)。
与 F1-2(同 ClaudeA · 2.0d · runtime-target-frontend-ui)文件 100% 正交可并行 · 用户 18:10 拍板双连 start · ClaudeA 自管串行 max=2.0d。
教训承接(ADR-26 §5 风险表第 5 行):5 Meter Dock 同步加 tracker · 改动面广 · 拆 5 子步骤(每 Dock 独立 commit)+ vitest 每 Dock 独立 case · 渐进 commit。
教训承接:严禁重构 ADR-21-R1 d453822 useDockMeterFrame composable(资产保留 · 仅在 Dock 顶部新增 tracker 区域)。
【架构关键约束】
⚡ 严守 .clinerules v3.0 ADR-23→25→25-R1 三连教训铁律:Step 0 必须 grep "DrawerDock" 5 文件 + git show 8a44ea1 LogModule 端点 schema + read useDockMeterFrame.ts 全文
⚡ 严守 ADR-26 §5 风险表第 5 行:5 Dock 渐进改 + 每 Dock 独立 commit + vitest 每 Dock 独立 case(避免一次大改回滚成本高)
🎨 useLogModuleTracker composable 新建 · 不破坏 useDockMeterFrame(ADR-21-R1 d453822 资产)· 5 Dock 共享 tracker · 但选中 ID 各自 ref 独立(用户切换 FFT 看 log_pre_eq · RMS 看 log_post_eq)
🎨 5 Dock 顶部 tracker 下拉布局统一(中文标签"追踪 log_module ▼")· UI 一致性
📋 切换数据源:WS frame(useDockMeterFrame 现有 · log_module=null 时显示)vs sidecar wav 分析结果(选 log_module 时显示)· v-if 渲染层切换 · 不污染数据层
📋 Transfer Dock 双 selector:ref + measure 两个 log_module 下拉(用户原话"可以追踪 link 中的所有 log module"· Transfer 需两个)
📋 GET /chain/log-modules 端点:从当前 chain 状态 grep 所有 log_module 实例 · 返回 LogModuleSummary[](复用 F3-1 POCO)
📋 链路无 log_module fallback:下拉显示"无 log_module · 拖入 log_module 后追踪"引导文案 · 用户引导明确
📋 三层分工(ADR-07 §1.3.4):L3 前端纯 UI 行为 · 不做 DSP 数学 · 不动 useDockMeterFrame WS 数据流
🚫 严禁重构 useDockMeterFrame.ts(ADR-21-R1 d453822 资产保留)
🚫 严禁动 backend_csharp 除 ChainRoutes/LogModuleRoutes 1 个端点外其他文件
🚫 严禁动 RightDock*.vue / useChainNodeMetadata.ts(F2-1 f555661 资产)
🚫 严禁动 LogModuleNode.vue / LogModuleConfigDialog.vue(F3-1 8a44ea1 资产)
🚫 严禁动 ResourceMonitorDock.vue / ConnectionDock.vue / useRuntimeTarget.ts(F1-2 范围 · 文件正交并行)
🚫 严禁一次大改 5 Dock(必须 5 子步骤渐进 commit · 每 Dock 独立可 revert)
🚫 严禁 Transfer Dock 单 selector(用户原话双通道 · ref + measure 必须双下拉)
🚫 严禁嵌入完整 Vue SFC > 60 行 / TS interface > 5 行(.clinerules v3.0)
【执行步骤】
Step 0 · 文件注入真值核查(强制门槛 · ADR-26 §9.2 + §5 教训承接)
- git show 8a44ea1 --stat 完整列表 · git show 8a44ea1 -- backend_csharp/Services/LogModule*.cs · 完整 read LogModuleService POCO 字段(id/name/filePath/sampleRate/channels)
- git show 8a44ea1 -- backend_csharp/Routes/LogModuleRoutes.cs · 完整 read 已有 GET/PUT 端点结构(本 fork 在同一控制器加 GET /chain/log-modules)
- grep "DrawerDock" frontend_vue3/src/stages/xilink/drawers/ · 列出 5 Drawer Dock 文件(Fft/Rms/Phase/Scope/Transfer · 严格列出真值文件路径)
- read 5 Drawer Dock 各自顶部结构(找插入 tracker 区域的位置 · 不破坏 ADR-21-R1 d453822 薄壳化结构)
- read frontend_vue3/src/composables/useDockMeterFrame.ts 全文(ADR-21-R1 d453822 资产 · 严禁重构 · 但必须了解共享数据流接口)
- grep "/analyze/" frontend_vue3/src/composables/ · 确认 sidecar /analyze/{fft,rms,phase,scope,transfer} 调用方式
- 留 commit log:Step 0 六层核查记录 + 5 Drawer Dock 真值路径 + F3-1 LogModuleService POCO 字段摘要 + useDockMeterFrame 共享数据流接口
Step 1 · useLogModuleTracker composable 新建 0.3d(子任务 ②)
- 新建 frontend_vue3/src/composables/useLogModuleTracker.ts
- 函数:listChainLogModules() → GET /chain/log-modules → Promise<LogModuleSummary[]>
- 函数:analyzeLogWav(id, type, refId?) → POST /analyze/{type}?file=output/log_${id}.wav → Promise<AnalysisResult>
- 响应式 ref:selectedLogModuleId(各 Dock 独立 · 通过参数 dockKey 隔离)+ selectedRefId(Transfer 专用)
- 链路无 log_module 时返回空数组 + isEmpty 标志
- 错误处理:wav 不存在 → toast / sidecar 504 → loading + 30s 超时 / 网络错 → 重试
Step 2 · GET /chain/log-modules 后端端点 0.3d(子任务 ③)
- 修 backend_csharp/Routes/LogModuleRoutes.cs(F3-1 已建)或 ChainRoutes.cs · 新增 GET /chain/log-modules
- 从 IChainStateService 当前链路 grep 所有 log_module 实例 + 各自最近落盘 wav 路径
- 返回 LogModuleSummary[](复用 F3-1 POCO · 字段 id/name/filePath/sampleRate/channels/durationSec)
- 端点测试(后端 xunit 1 case · 复用 F3-1 测试体系)
Step 3.1 · DrawerDockFft.vue 加 tracker 下拉 0.08d(子任务 ④ Dock 1)
- 顶部新增 `<el-select v-model="selectedLogModuleId">` + tooltip "追踪 log_module"
- 选择时调用 analyzeLogWav(id, 'fft') → 切换 v-if 渲染层(WS frame vs sidecar wav FFT)
- 链路无 log_module 时下拉显示"无 log_module · 拖入 log_module 后追踪"
- 独立 commit · 渐进 PR
Step 3.2 · DrawerDockRms.vue 加 tracker 下拉 0.08d(同上 type='rms')
Step 3.3 · DrawerDockPhase.vue 加 tracker 下拉 0.08d(同上 type='phase' · 双通道时启用)
Step 3.4 · DrawerDockScope.vue 加 tracker 下拉 0.08d(同上 type='scope')
Step 3.5 · DrawerDockTransfer.vue 加 **双 selector**(ref + measure)0.1d
- 顶部新增 2 个 el-select(ref/measure)+ analyzeLogWav(measureId, 'transfer', refId) → 切换 v-if 渲染层(WS frame vs sidecar wav Transfer)
- 单选时提示"需选 ref + measure 双通道"
Step 4 · 测试 + e2e + 全测试基线零回归 0.3d(子任务 ⑤)
- useLogModuleTracker.spec.ts ≥ 8 case:
T1 listChainLogModules 返回非空数组(mock fetch)
T2 listChainLogModules 链路无 log_module → 空数组 + isEmpty=true
T3 analyzeLogWav('fft', id) 触发 POST 正确 URL(mock)
T4 analyzeLogWav('transfer', measureId, refId) 含 ref+measure 双参数(mock)
T5 analyzeLogWav 失败时 toast(mock 504)
T6 selectedLogModuleId 各 Dock 独立(参数 dockKey 隔离)
T7 wav 文件不存在时下拉旁红字提示
T8 切换 log_module < 500ms(mock + computed 响应)
- playwright e2e ≥ 2 case(adr-26-meter-dock-tracker/log-module-tracker.spec.ts):
E1 ADR-26 §3.6 ⑤:链路 2 log_module + 配置落盘 + 注入 1kHz · FFT Dock 选 log_pre_eq · 峰值 1000Hz / 切 log_post_eq 重渲染
E2 Transfer Dock 双 selector:ref=log_input + measure=log_output · 显示 H(f) magDb/phaseDeg
- vue-tsc --noEmit 0 errors
- npm run build 0 errors
- npm run test 全测试基线零回归(F1-2 zombie 后基线 371/3 → +8+2 = 381/3)
Step 5 · 浏览器实测 0.2d
- 启动 backend(F3-1+F1-1 已 zombie · 真端点联调)+ frontend(npm run dev)
- 用户操作流(ADR-26 §3.6 ④)端到端 5 步验收:
☐ 用户在链路中拖入 2 个 log_module(log_pre_eq + log_post_eq)+ 配置落盘 wav(F3-1 LogModuleConfigDialog)
☐ 用户开 FFT Dock(右键链路 / 或菜单)· 顶部下拉显示 [追踪 log_module ▼ log_pre_eq | log_post_eq]
☐ 用户选 log_pre_eq → sidecar /analyze/fft → FFT 绘图(WS frame v-if 隐藏 · sidecar 结果 v-if 显示)
☐ 用户切 log_post_eq → 同节点切换分析 < 500ms · 实时对比 EQ 前后频谱
☐ Transfer Dock 双 selector ref=log_input + measure=log_output · 显示 H(f)
☐ 链路无 log_module 时下拉显示引导文案
☐ ADR-21-R1 d453822 useDockMeterFrame WS 数据流零回归(log_module=null 时仍显示 WS frame)
- git add . && git commit -m "feat(xilink/meter-dock): P3.A26.F3-tracker 5 Meter Dock 顶部新增 log_module 追踪下拉
用户 2026-06-18 17:55 三连 stop + 18:10 双连 start。F3-1 zombie 8a44ea1 解锁本 fork。
F3-2 本 fork(ADR-26 §3.6 + §4.1):
① useLogModuleTracker.ts 新建 · listChainLogModules + analyzeLogWav + 各 Dock 独立 selectedLogModuleId
② GET /chain/log-modules 后端端点(LogModuleRoutes.cs · 复用 F3-1 LogModuleSummary POCO)
③ 5 Drawer Dock 顶部加 tracker 下拉(Fft/Rms/Phase/Scope · 单 selector · Transfer · 双 selector ref+measure)
④ 切换数据源 v-if 渲染层(WS frame · log_module=null 时 / sidecar wav 分析 · 选 log_module 时)
⑤ 链路无 log_module fallback 引导文案 · 不破坏 ADR-21-R1 d453822 useDockMeterFrame
⑥ vitest +8 case + playwright +2 case 全过 · vue-tsc + build 全绿 · 全测试基线零回归
消费 F3-1 后端 8a44ea1:LogModuleService POCO + GET /chain/log-modules 端点(本 fork 新增)
消费 sidecar 已有:POST /analyze/{fft,rms,phase,scope,transfer}?file=output/log_xxx.wav
文件正交:与 F1-2(runtime-target-frontend-ui)100% 正交 · ClaudeA 自管串行 max=2.0d
ADR-23→25→25-R1 三连教训承接:Step 0 grep 5 DrawerDock 真值 · F3-1 端点 schema · useDockMeterFrame 共享数据流接口
ADR-21-R1 d453822 useDockMeterFrame 资产保留:仅顶部新增 tracker · 不重构数据流
[step=5/5] [pid=P3] [uid=P3.A26.F3-meter-dock-log-module-tracker] [type=fork] [isolation=file]
[occupies=P1.K-shared-xilink-meter-docks+log-module-tracker] [files=8(5M+1N+1S+1E+1B)] [ipc=rest]
[adr=ADR-AIOS-26 §3.6 + §4.1 F3-2 + §4.3 文件正交矩阵 + 用户 2026-06-18 15:45 第 2 轮 第 2 段 verbatim + 17:55 三连 stop + 18:10 双连 start]"
【验收】
☐ Step 0 文件注入真值核查通过(git show 8a44ea1 LogModule + grep 5 DrawerDock + read useDockMeterFrame · commit log 留痕 ≥ 5 真值路径)
☐ Step 1 useLogModuleTracker composable 新建 · listChainLogModules + analyzeLogWav + 各 Dock 独立 selectedLogModuleId · 错误处理完整
☐ Step 2 GET /chain/log-modules 后端端点 · 复用 F3-1 POCO · 后端 1 case 测试通过
☐ Step 3.1-3.5 5 Drawer Dock 顶部加 tracker 下拉(每 Dock 独立 commit · 渐进 PR)· Transfer 双 selector
☐ Step 4 vitest +8 case 全过(T1-T8)+ playwright +2 case 全过(E1-E2)· vue-tsc + build 0 errors · 全测试基线零回归
☐ Step 5 浏览器实测 7 验收点全过(2 log_module + FFT 切换 + Transfer 双选 + < 500ms + 链路无 fallback + WS frame 零回归)
☐ commit message 含 7 元组 trailer + ADR-26 §3.6 + §4.1 + §4.3 + 用户 verbatim 引用 + F3-1 zombie 联调说明
☐ ADR-21-R1 d453822 useDockMeterFrame 零回归(本 fork 严禁重构 · 仅顶部新增 tracker)
【禁止】
❌ 禁止跳过 Step 0 文件注入真值核查(ADR-26 §9.2 教训 · grep 5 DrawerDock + git show 8a44ea1)
❌ 禁止重构 useDockMeterFrame.ts(ADR-21-R1 d453822 资产 · 仅顶部新增 tracker)
❌ 禁止动 backend_csharp 除 ChainRoutes/LogModuleRoutes 1 个端点外的任何文件
❌ 禁止动 RightDock*.vue / useChainNodeMetadata.ts(F2-1 f555661 资产)
❌ 禁止动 LogModuleNode.vue / LogModuleConfigDialog.vue(F3-1 8a44ea1 资产)
❌ 禁止动 ResourceMonitorDock.vue / ConnectionDock.vue / useRuntimeTarget.ts(F1-2 范围 · 文件正交并行)
❌ 禁止一次大改 5 Dock(必须 5 子步骤渐进 commit · 每 Dock 独立可 revert · ADR-26 §5 风险表第 5 行)
❌ 禁止 Transfer Dock 单 selector(用户原话双通道 · ref + measure 必须双下拉)
❌ 禁止跳过 vitest +8 case(T1-T8 验收硬门槛)/ 跳过 playwright +2 case(E1-E2)
❌ 禁止 commit 缺七元组 trailer(.clinerules v3.0 铁律)
❌ 禁止嵌入完整 Vue SFC > 60 行 / TS interface > 5 行(.clinerules v3.0 · 用 diff 模式提交)
解锁链(本任务 zombie 后)
- ✅ 5 Meter Dock 横切追踪能力闭环(用户 verbatim 落地)
- ✅ F3-1+F3-2 完整闭环(log_module 双击 Dialog 落盘 + Meter Dock 内追踪 wav 分析)
- ✅ ADR-21-R1 d453822 useDockMeterFrame 零回归
- ⏳ F4-1
P_e2e.A26.F4-truth-e2e-meter-dual-link全解锁(F1-1+F1-2+F2-1+F3-1+F3-2 五齐 · ClaudeC 1.5d → ADR-26 整体闭环 🏆 v5.0+ 第 N 个 ADR 闭环)
风险评估
| 风险 | 缓解 |
|---|---|
| 5 Drawer Dock 文件名不确定(prompt 中 Step 0 grep 强制定位) | Step 0 grep "DrawerDock" 强制列出 5 真值文件 · 不允许凭推测起草改动 |
| ADR-21-R1 d453822 useDockMeterFrame 误重构(现有 5 Dock WS 数据流破坏) | 禁止段明确"严禁重构 useDockMeterFrame" · 仅 Dock 顶部新增 tracker 区域 + v-if 渲染层切换 · vitest 验证 WS frame 零回归 |
| F3-1 LogModule POCO 字段名错配(本 fork GET /chain/log-modules 复用) | Step 0 强制 git show 8a44ea1 -- backend_csharp/Services/LogModule*.cs 完整 read · 字段名严格按 F3-1 真值 · 不重新定义 |
| 5 Dock 一次大改回滚成本高(ADR-26 §5 风险表第 5 行) | 拆 5 子步骤(Step 3.1-3.5 每 Dock 独立 commit)+ vitest 每 Dock 独立 case · 渐进 PR · 任一 Dock 出错独立 revert |
| Transfer Dock 双 selector 用户混淆(ref vs measure) | 中文标签明确"参考(ref)"+"测量(measure)" · 单选时提示"需选双通道" · vitest E2 验证双选行为 |
| 链路无 log_module 时用户困惑 | 下拉显示引导文案"无 log_module · 拖入 log_module 后追踪"+ 跳转 F3-1 Dialog 引导链接 |
| GET /chain/log-modules 后端从 chain 状态 grep 实例性能问题(链路大时) | 简单数组遍历 · O(N) · 链路通常 ≤ 50 节点 · 不引入缓存复杂度 |
| 切换 log_module 时 useDockMeterFrame WS 数据流冲突(同时显示) | v-if 严格切换:log_module=null → 显示 WS frame / 选 log_module → 显示 sidecar wav 结果 · 两路渲染不重叠 |
| ClaudeA 排队膨胀(本 1.5d + F1-2 2.0d 并行 · 自管节奏) | 文件 100% 正交 · ClaudeA 自管串行节奏(用户拍板信任)· 实际跨度 max=2.0d(F1-2 控速)· 不影响 F4-1 e2e 准备 |
历史
| 时间 | 事件 | hash |
|---|---|---|
| 2026-06-18 18:10 | dispatched(用户 17:55 三连 stop F1-1+F2-1+F3-1 + 18:10 双连 start P3.A26.F1 + P3.A26.F3-meter-dock · 与 F1-2 文件正交并行 1.5d · F3-1 zombie 8a44ea1 解锁本 fork · ADR-21-R1 d453822 资产保留) | — |