跳转至

P1.A21.F2-fft-scope-controls-enhance · XiLink FFT/Scope 控件增强(displayMode/peakHold/peakTrack/trigger/persistence/timePerDiv)

Worker:ClaudeA · 部门:前端 P1-xilink · 预计:1.5d · 优先级:P0 · 状态:dispatched · isolation:🧵 file(同 worktree 同 branch · 与 F4 phase / F6 transfer 文件完全正交可并行)

🔍 触发与解锁链

触发:用户 2026-06-13 18:09 三连 stop F1+F3+F5 → 18:26 拍板三连 start F4+F6+F2。F2 解锁仅需 F1(a5b52de)· 不依赖 F3/F5 算法层(本任务无 DSP 算法调用)。

用户原话(verbatim · ADR-21 §1.1):

"3. fft 控件需要补充功能:① 显示方式 line/bar/both 切换 ② peakHold 开关 + 衰减时间 + reset 按钮 ③ peakTrack 实时显示最大值;scope 控件需要补充:① trigger level + edge + auto/normal/single 模式 ② 余辉 persistence 0-1 ③ timePerDiv 横轴时间档位"

解锁条件: - ✅ F1 a5b52de zombie · DockHost.vue + useDockScale + useDockChannelMask + DrawerDockFft.vue/FftDockChart.vue 已就位(13 文件 +701 行 · 11 vitest) - 🟢 F4/F6 并行无依赖(F2 不动 phase/transfer 模块 · 不动 registry/meterFrame)

架构契约(ADR-21 §3.2 · 业务契约 5 必填段): - 输入:用户在 fft module 顶部 controls 切 displayMode + peakHold 开关 + 在 scope module 顶部 controls 切 trigger 模式 - 输出:fft chart 双线渲染(实时 + peak hold)+ peakTrack 数显 · scope chart 触发同步 + persistence alpha 衰减 + timePerDiv 缩放 - 性能基线:fft 30fps · scope 60fps · peakHold 数组 maxOver 操作 < 1ms · persistence canvas alpha 复合 < 5ms - 5 类失败回退:peakHold reset 不影响实时数据流 / trigger auto 找不到 edge fallback 自由滚动 / persistence alpha=0 立即清屏 / timePerDiv 越界 clamp 1ms-100ms / displayMode 切换无缝(不重置 peakHold buffer)

Smaart/scope 风格说明: - fft displayMode both 模式:实时 line(细线 0.5px)+ peakHold line(粗线 1px · 半透明 · 不同色)双层 stacked - scope trigger:level slider(-1 ~ +1)+ edge(rising/falling)+ mode(auto/normal/single)· auto 模式 timeout 1s 找不到 edge 强制重绘 · normal 模式等 edge 才更新 · single 单触发后 freeze - scope persistence alpha:0.0=即时清屏 / 0.1=慢衰减(常用)/ 0.5=中等 / 0.9=慢慢累积(模拟模拟示波器荧光余辉)

解锁链(本任务 zombie 后): - F7 e2e 部分解锁(blocked-by-F2+F4+F6 · 还需 F4+F6 zombie 才完整 ready)

任务定义(基于 ADR-21 §3.2)

子任务 ① · useFftPeakHold.ts composable(0.3d)

Step 1.1:NEW frontend_vue3/src/stages/xilink/modules/fft/useFftPeakHold.ts: - 接口:useFftPeakHold(magsDb: Ref<Float32Array | null>, options: { enabled: Ref<boolean>; decaySecPerBin: Ref<number>; resetTrigger: Ref<number> }) → reactive { peakHoldMags: Ref<Float32Array | null>; peakTrackDb: Ref<number>; peakTrackHz: Ref<number> } - 内部:watch magsDb · 若 enabled 且 binValue > peakHold[bin] → 更新 + 重置 decay 计时 · 否则 decay 衰减(每帧 dB 减 = decaySecPerBin / refreshFps) - peakTrackDb/peakTrackHz:实时 max(peakHold) + freqs[argmax] 求最高 peak 位置 - resetTrigger 数值变化 → 全部清零(用户点 reset 按钮触发)

子任务 ② · FftDockChart.vue 增强渲染(0.3d)

Step 2.1:更新现有 frontend_vue3/src/stages/xilink/modules/fft/FftDockChart.vue(F1 a5b52de 已落地基础版)· append-only 加渲染分支: - props 加:{ displayMode: 'line' | 'bar' | 'both'; peakHoldMags: Float32Array | null; peakTrackDb: number; peakTrackHz: number } - canvas 渲染分支: - line 模式:仅画实时 line(现有 · 不改) - bar 模式:画矩形 bar(每 bin 1px 宽 + 半透明填充) - both 模式:bar 半透明背景 + line 前景叠加 - peakHoldMags 非 null:再叠加 peakHold line(粗 1px · color 加 alpha 0.6) - peakTrack 数显:右上角浮动显示 Peak: ${peakTrackDb.toFixed(1)} dB @ ${peakTrackHz.toFixed(0)} Hz(若 enabled)

子任务 ③ · FftDockModule.vue controls 增强(0.2d)

Step 3.1:更新现有 frontend_vue3/src/stages/xilink/modules/fft/FftDockModule.vue controls 槽(F1 已落地基础版)· append-only 加控件: - 加 displayMode 单选按钮组(line / bar / both · 默认 line) - 加 peakHold 开关 + decay slider(0.5 / 1 / 2 / 5 秒/bin)+ reset 按钮(emit reset trigger) - 加 peakTrack 显示开关(默认开 · 关闭隐藏右上角浮动数显) - 内部:useFftPeakHold(magsDb, { enabled, decaySecPerBin, resetTrigger }) 集成

子任务 ④ · useScopeTrigger.ts composable(0.2d)

Step 4.1:NEW frontend_vue3/src/stages/xilink/modules/scope/useScopeTrigger.ts: - 接口:useScopeTrigger(samples: Ref<Float32Array | null>, options: { level: Ref<number>; edge: Ref<'rising'|'falling'>; mode: Ref<'auto'|'normal'|'single'>; autoTimeoutMs: number }) → reactive { triggeredSamples: Ref<Float32Array | null>; isFrozen: Ref<boolean> } - 内部:watch samples · 扫描第一个跨 level 的 edge 点 · 从该点起截取 triggeredSamples - auto 模式:timeout 1s 找不到 edge 直接传 samples(自由滚动) - normal 模式:找不到 edge 不更新 triggeredSamples(保持上一帧) - single 模式:首次找到 edge 后 isFrozen=true · 后续不更新(直到 mode 切换)

子任务 ⑤ · useScopePersistence.ts composable(0.2d)

Step 5.1:NEW frontend_vue3/src/stages/xilink/modules/scope/useScopePersistence.ts: - 接口:useScopePersistence(canvasRef: Ref<HTMLCanvasElement | null>, options: { alpha: Ref<number> }) - 暴露:drawWithPersistence(samples: Float32Array, color: string) 函数 - 内部:每帧绘制前 fillRect 半透明黑(rgba(0,0,0,${1-alpha}))做 alpha 衰减 · 然后画新 line(完全不透明) - alpha=0 → 立即清屏(每帧重置)· alpha=0.9 → 慢衰减(模拟余辉)

子任务 ⑥ · ScopeDockChart.vue + ScopeDockModule.vue 增强(0.3d)

Step 6.1:更新现有 frontend_vue3/src/stages/xilink/modules/scope/ScopeDockChart.vue · append-only 加渲染分支: - props 加:{ triggeredSamples: Float32Array | null; persistenceAlpha: number; timePerDivMs: number } - canvas 渲染:用 useScopePersistence 替换原直接 line 绘制 · 横轴 = timePerDivMs × 10 div(总 100ms 默认) - timePerDiv 网格线 + 数轴 ms 单位

Step 6.2:更新现有 frontend_vue3/src/stages/xilink/modules/scope/ScopeDockModule.vue controls 槽 · append-only 加控件: - 加 trigger level slider(-1 ~ +1 · 默认 0) - 加 trigger edge 单选(rising / falling · 默认 rising) - 加 trigger mode 单选(auto / normal / single · 默认 auto) - 加 persistence alpha slider(0 / 0.1 / 0.3 / 0.5 / 0.9 · 默认 0.1) - 加 timePerDiv 下拉(1 / 5 / 10 / 50 / 100 ms · 默认 10)

子任务 ⑦ · 测试(0.2d)

Step 7.1:vitest 加 ≥ 6 case(ADR-21 §3.2 ⑤ playwright e2e 模板对齐): - useFftPeakHold:enabled=true · 注入 1kHz peak · peakHold[1kHz bin] 锁定 · decay 测试 - useFftPeakHold reset:resetTrigger 变化 → 全清零 - useFftPeakHold peakTrack:max(peakHold) + freqs[argmax] 正确(注入 1kHz · peakTrackHz === 1000 ± resolution) - useScopeTrigger:level=0 + edge=rising · 注入 sine · triggeredSamples 从 zero crossing 开始 - useScopeTrigger normal mode:找不到 edge 不更新(samples 已变 · triggeredSamples 不变) - useScopePersistence:alpha=0 立即清屏(canvas 上一帧痕迹消失)+ alpha=0.5 半衰留痕

Step 7.2:vue-tsc + build + 全测试基线零回归(F1 11 case + ADR-18 F5 152 case + ADR-17 F6 基线 + 若 F4/F6 已 zombie 含其 case)

完整 prompt(直接复制粘贴 ClaudeA 终端)

[U-thread] P1.A21.F2-fft-scope-controls-enhance · ADR-21 §3.2 FFT/Scope 控件增强(displayMode/peakHold/peakTrack/trigger/persistence/timePerDiv)
[部门] 前端 P1-xilink
[Worker CWD] d:/work/25_claude/workspace/AlgoDepartment/04_development/
[Occupies] P1.K-shared-xilink-dock
[优先级] P0(1.5d · 解锁 F7 e2e 1/3 路径 · 与 F4/F6 完全正交独立性最强)
[ADR] docs/08-implementation/40-aios/ADR/ADR-AIOS-21-xilink-dock-and-analysis-modules.md(必读 §3.2 fft/scope 业务契约 + §1.4 边界铁律)
[isolation] file(同 worktree 同 branch · 与 F4 phase / F6 transfer 文件完全正交可并行)

[参考文档绝对路径]
  - 业务契约:ADR-21 §3.2 完整 5 必填段(① 控件 props/state schema / ② fft 30fps + scope 60fps + < 5ms persistence / ③ 5 类失败回退 / ④ 5 步操作流 / ⑤ playwright e2e 模板)
  - 用户 2026-06-13 09:55 拍板原话(ADR-21 §1.1):fft displayMode/peakHold/peakTrack + scope trigger/persistence/timePerDiv
  - 范式 commits(worker 必读 · 强制 read 全文):
    * a5b52de P1.A21.F1 DockHost 通用化(本任务复用 useDockScale + useDockChannelMask + 现有 FftDockChart/ScopeDockChart 基础版)
    * 769405a P0.A18.F5 IP 库 + 4 popup(本任务在现有 fft/scope module 基础上 append-only 加控件)
  - 现状参考:
    * frontend_vue3/src/stages/xilink/modules/fft/FftDockChart.vue(F1 a5b52de 落地基础版 · 本任务 append-only 加 displayMode/peakHold 渲染分支)
    * frontend_vue3/src/stages/xilink/modules/fft/FftDockModule.vue(F1 a5b52de · 本任务 append-only 加 controls)
    * frontend_vue3/src/stages/xilink/modules/scope/ScopeDockChart.vue(F1 a5b52de · 本任务 append-only 加 trigger/persistence/timePerDiv)
    * frontend_vue3/src/stages/xilink/modules/scope/ScopeDockModule.vue(F1 a5b52de · 本任务 append-only 加 controls)
    * frontend_vue3/src/composables/useDockScale.ts(F1 a5b52de · 复用)
    * frontend_vue3/src/composables/useDockChannelMask.ts(F1 a5b52de · 复用)
  - 三层分工:ADR-07 §1.3.4(L3 前端零数学 · peakHold 简单 max 累计 / persistence canvas alpha 复合 / trigger 数组扫描 · 都属于 UI 层逻辑 · 不算 DSP)

[文件正交策略](.clinerules §任务隔离类型分配准则 v1.4):
  isolation: file · 同 worktree 同 branch · 与 F4 / F6 完全正交可并行
  本任务文件:frontend_vue3/src/stages/xilink/modules/{fft,scope}/* (7 文件 · 含 NEW + 现有 append-only)
  F4 文件:frontend_vue3/src/stages/xilink/modules/phase/* + registry + meterFrame(完全不交集)
  F6 文件:frontend_vue3/src/stages/xilink/modules/transfer/* + registry + meterFrame(完全不交集)
  ⚠️ 本 F2 不动 registry/moduleRegistry.ts + types/meterFrame.ts(避免与 F4/F6 共享文件冲突)· 独立性最强 · 与 F4/F6 push 完全无依赖

【背景】
  用户 2026-06-13 18:09 三连 stop F1+F3+F5 算法层闭环 · 18:26 拍板三连 start F4+F6+F2。
  F2 本任务核心:不依赖 F3/F5 算法层(无 DSP 调用)· 仅基于 F1 DockHost + 现有 ADR-18 fft/scope module 做控件增强。
  fft 增强:① displayMode line/bar/both 切换 ② peakHold 开关 + decay + reset ③ peakTrack 数显 max peak。
  scope 增强:① trigger level + edge + mode(auto/normal/single)② persistence alpha 0-1 ③ timePerDiv 1ms-100ms 横轴缩放。
  与 F4/F6 完全文件正交(不动 phase/transfer/registry/meterFrame)· 独立性最强 · 可并行 push 不冲突。

【架构关键约束】
  ⚡ append-only 模式:在现有 FftDockChart/FftDockModule/ScopeDockChart/ScopeDockModule 基础上加 props + 渲染分支 + controls · **不破坏现有渲染逻辑**(F1 a5b52de 11 vitest 零回归是硬门槛)
  🎨 fft displayMode 三分支渲染:line(现有保留)/ bar(矩形 1px 半透明)/ both(bar 背景 + line 前景叠加)· peakHold 叠加层(粗 1px alpha 0.6)
  📋 fft peakHold:数组 max 累计 + decay 衰减(decaySecPerBin × 帧率 = 每帧 dB 减)+ reset 按钮触发清零
  📋 fft peakTrack:右上角浮动数显 `Peak: X.X dB @ XHz`(用户操作流第 5 步验收)
  📋 scope trigger 三模式:auto(1s timeout fallback 自由滚动)/ normal(等 edge 才更新)/ single(单触发后 freeze)· level slider -1~+1 · edge rising/falling
  📋 scope persistence:每帧 fillRect 半透明黑做 alpha 衰减 · alpha=0 立即清屏 · alpha=0.9 慢衰减余辉
  📋 scope timePerDiv:1/5/10/50/100ms 5 档 · 横轴 10 div 网格线 + ms 单位
  📋 三层分工:L3 前端 UI 逻辑(数组 max / canvas alpha 复合 / 触发扫描)· 不算 DSP 数学
  🚫 禁止动 registry/moduleRegistry.ts + types/meterFrame.ts(F4/F6 各自 append-only · 本 F2 完全不交集)

【执行步骤】
  Step 0 · 文件注入真值核查(强制门槛 · F1 教训承接)
    - read frontend_vue3/src/stages/xilink/modules/fft/FftDockChart.vue(F1 a5b52de · 现有 line 渲染逻辑 · 本任务 append bar/both/peakHold 分支)
    - read frontend_vue3/src/stages/xilink/modules/fft/FftDockModule.vue(F1 a5b52de · 现有 controls 槽 · 本任务 append displayMode/peakHold/peakTrack 控件)
    - read frontend_vue3/src/stages/xilink/modules/scope/ScopeDockChart.vue(F1 a5b52de · 现有 line 渲染 · 本任务 append trigger/persistence)
    - read frontend_vue3/src/stages/xilink/modules/scope/ScopeDockModule.vue(F1 a5b52de · 现有 controls · 本任务 append trigger/persistence/timePerDiv)
    - read frontend_vue3/src/composables/useDockScale.ts + useDockChannelMask.ts(F1 a5b52de · 复用)
    - 留 commit log:Step 0 六层核查记录(4 现有文件 + 2 复用 composable)

  Step 1 · useFftPeakHold composable 0.3d(子任务 ①)
    - NEW useFftPeakHold.ts · watch magsDb + max 累计 + decay 衰减 + reset trigger
    - peakTrackDb/peakTrackHz 实时计算 max(peakHold) + argmax

  Step 2 · FftDockChart.vue 增强 0.3d(子任务 ②)
    - append-only 加 displayMode 三分支渲染(line/bar/both)+ peakHoldMags 叠加层 + peakTrack 浮动数显
    - 性能基线:30fps · canvas 重绘 < 33ms

  Step 3 · FftDockModule.vue controls 增强 0.2d(子任务 ③)
    - append-only 加 displayMode 单选 + peakHold 开关/decay/reset + peakTrack 开关
    - 集成 useFftPeakHold

  Step 4 · useScopeTrigger composable 0.2d(子任务 ④)
    - NEW useScopeTrigger.ts · watch samples + 扫 edge + 三模式逻辑
    - auto 模式 1s timeout fallback · normal 等 edge · single 首触 freeze

  Step 5 · useScopePersistence composable 0.2d(子任务 ⑤)
    - NEW useScopePersistence.ts · canvas alpha 复合(每帧 fillRect 半透明黑)
    - drawWithPersistence(samples, color) 暴露给 ScopeDockChart

  Step 6 · ScopeDockChart + ScopeDockModule 增强 0.3d(子任务 ⑥)
    - append-only ScopeDockChart 用 useScopePersistence + timePerDiv 网格
    - append-only ScopeDockModule 加 5 控件(level/edge/mode/persistence/timePerDiv)

  Step 7 · 测试 0.2d(子任务 ⑦)
    - vitest +6 case
    - vue-tsc --noEmit 0 errors
    - npm run build 0 errors
    - npm run test 全过(基线 + 6 新增)

  Step 8 · 浏览器实测 + commit
    - 启动 backend(dotnet run)+ frontend(npm run dev)
    - fft 验收点(ADR-21 §3.2 ④ 操作流):
      ☐ 进入 xilink stage · 拖入 fft module · 控件可见 displayMode/peakHold/peakTrack
      ☐ 切 displayMode line → bar → both · canvas 渲染分支正确
      ☐ 注入 1kHz @ -10dBFS 单次 burst · 开 peakHold · 1kHz bin 显 -10dB hold(decay 5s 后衰减)
      ☐ 点 reset · peakHold 全清 · 实时数据流不中断
      ☐ peakTrack 数显右上角 `Peak: -10.0 dB @ 1000 Hz`(注入信号期间)
    - scope 验收点:
      ☐ 拖入 scope module · 控件可见 level/edge/mode/persistence/timePerDiv
      ☐ 注入 1kHz sine · trigger level=0 + edge=rising · 波形从 zero crossing 起渲染稳定
      ☐ 切 trigger mode auto → normal · 关注信号源停止 · auto 自由滚动 / normal freeze
      ☐ 切 single · 单触发后 freeze · 切回 auto 恢复
      ☐ persistence alpha=0.5 · 多帧轨迹累积可见 · alpha=0 立即清屏
      ☐ timePerDiv 1ms → 100ms · 横轴 10 div 网格 + 时间单位刷新
    - git add . && git commit -m "feat(xilink/fft+scope): P1.A21.F2 fft/scope 控件增强(displayMode/peakHold/peakTrack/trigger/persistence/timePerDiv)

      用户 2026-06-13 18:09 三连 stop F1+F3+F5 算法层闭环 · 18:26 拍板三连 start F4+F6+F2。
      F2 本任务(ADR-21 §3.2):
      ① useFftPeakHold.ts(max 累计 + decay 衰减 + reset trigger + peakTrack max+argmax)
      ② FftDockChart.vue append-only 加 displayMode line/bar/both 三分支 + peakHold 叠加层 + peakTrack 浮动数显
      ③ FftDockModule.vue controls append-only 加 4 控件(displayMode 单选 + peakHold 开关/decay/reset + peakTrack 开关)
      ④ useScopeTrigger.ts(level/edge/mode auto-normal-single 三模式 + 1s timeout fallback)
      ⑤ useScopePersistence.ts(canvas alpha 复合 · 每帧 fillRect 半透明黑做衰减)
      ⑥ ScopeDockChart.vue append-only 用 useScopePersistence + timePerDiv 网格 · ScopeDockModule.vue controls append-only 加 5 控件
      ⑦ vitest +6 case · vue-tsc + build 全绿 · F1 11 + ADR-18 F5 152 + ADR-17 F6 基线零回归

      解锁 F7 e2e 部分(还需 F4 + F6 zombie · 三齐后 F7 ready)

      [step=8/8] [pid=P1] [uid=P1.A21.F2-fft-scope-controls-enhance] [type=fork] [isolation=file]
      [occupies=P1.K-shared-xilink-dock] [files=7] [ipc=none]
      [adr=ADR-AIOS-21 §3.2 fft/scope 控件增强(#3 displayMode/peakHold/peakTrack/trigger/persistence/timePerDiv)]"

【验收】
  ☐ Step 0 文件注入真值核查通过(read 6 真值源 + commit log 留痕)
  ☐ Step 1 useFftPeakHold max 累计 + decay 衰减 + reset 清零 + peakTrack max+argmax 正确
  ☐ Step 2 FftDockChart 三分支 + peakHold 叠加 + peakTrack 数显
  ☐ Step 3 FftDockModule 4 控件全实装 + useFftPeakHold 集成
  ☐ Step 4 useScopeTrigger 三模式逻辑 · auto 1s timeout · normal 等 edge · single freeze
  ☐ Step 5 useScopePersistence canvas alpha 复合 · alpha=0 清屏 · alpha=0.9 余辉
  ☐ Step 6 ScopeDockChart 持久化渲染 + timePerDiv 网格 · ScopeDockModule 5 控件全实装
  ☐ Step 7 vitest +6 case 全过 · vue-tsc + build 0 errors · 基线零回归
  ☐ Step 8 浏览器实测 fft 5 + scope 6 验收点全过(共 11 点)
  ☐ commit message 含 7 元组 trailer + ADR §3.2 引用

【禁止】
  ❌ 禁止跳过 Step 0 文件注入核查(F1 教训:派发前必须 read 6 真值源)
  ❌ 禁止动 registry/moduleRegistry.ts 或 types/meterFrame.ts(F4/F6 各自 append-only · 本 F2 完全不交集)
  ❌ 禁止破坏现有 fft/scope line 渲染(F1 a5b52de 11 vitest 零回归是硬门槛 · append-only 加分支)
  ❌ 禁止破坏 F1 11 + ADR-18 F5 152 + ADR-17 F6 已锁基线(零回归是硬门槛)
  ❌ 禁止跳过 vitest +6 case(验收硬门槛)
  ❌ 禁止 commit 缺三元组 trailer(.clinerules v1.6 铁律)
  ❌ 禁止嵌入完整 SFC > 60 行 / TS interface > 5 行(.clinerules v1.6)· composable 拆独立 ts + 控件拆 child component
  ❌ 禁止把 trigger/persistence/peakHold 当作 DSP 数学(三层分工 L3 UI 逻辑 · 但 max 累计 / canvas alpha / 数组扫描都属 UI 层)

解锁链(本任务 zombie 后)

  • ✅ fft module 控件齐全(displayMode line/bar/both + peakHold + peakTrack)· 用户操作流 5 步全通
  • ✅ scope module 控件齐全(trigger 3 模式 + persistence 5 档 + timePerDiv 5 档)· 用户操作流 6 步全通
  • ✅ 与 F4 phase / F6 transfer 完全正交并行 · ClaudeA 排期不冲突
  • ⏳ F7 e2e 解锁 ⅓ 路径(还需 F4 phase + F6 transfer 全 zombie · 三齐后 F7 ready)

风险评估

风险 缓解
F1 a5b52de 现有 fft/scope module 渲染逻辑变更与本任务 append-only 不兼容 Step 0 强制 read 4 现有文件真签名 + 严守 append-only 模式(只加 props/分支/控件 · 不改现有逻辑)+ vitest 11 case 基线零回归验证
useFftPeakHold decay 算法易错(decaySecPerBin × refreshFps = 每帧 dB 减) 单测覆盖:注入 1kHz peak · 5s decay · 验证 5 秒后 peakHold[1kHz bin] 衰减接近 noise floor
useScopeTrigger normal/single 模式状态机易错(single freeze 后切回 auto 应恢复) 单测覆盖三模式切换矩阵 · auto→normal→single→auto 闭环测试
useScopePersistence canvas alpha 复合性能(60fps + fillRect 半透明) RAF 节流 + canvas 尺寸 < 800×400 · 性能基线测试 alpha=0.9 60fps 零掉帧
persistence alpha=0 与 alpha=1 边界(alpha=1 永不衰减) 边界处理:alpha clamp 0, 0.99+ alpha=0 直接 fillRect 黑(完全清屏)
timePerDiv 切换导致 canvas 历史数据失真 切 timePerDiv 时清空 persistence canvas + 重新触发(避免历史数据按错误 timeScale 显示)
F2 与 F4/F6 文件共享 P1.K-shared-xilink-dock K-thread 锁 实际三个 fork 文件正交(F2 fft+scope · F4 phase · F6 transfer)· K 锁逻辑保护 module 注册中心 · 不影响并行
ClaudeA 三连 dispatched 排队膨胀(F4 1.5 + F6 2.0 + F2 1.5 = 5.0d 串行) F4/F6/F2 文件正交 · 推荐顺序:F2 1.5d 先(独立无依赖)→ F4 1.5d → F6 2.0d 总 5.0d · 或 F2 与 F4/F6 异步并行(两 worker 同时跑)

历史

时间 事件 hash
2026-06-13 18:26 dispatched(用户 18:26 拍板三连 start F4+F6+F2 · ClaudeA 1.5d · F1 单解锁满足 · 与 F4/F6 文件完全正交独立性最强 · fft/scope 控件增强补齐用户 2026-06-13 09:55 #3 需求)