跳转至
ACCEPTED

ADR-AIOS-08 · XiLink Stage UX 5 议题决议

1. 上下文(Context)

1.1 触发事件

2026-05-28 17:58 用户在完成 P5.U-audit-source-preset-coverage(96.9% 成熟度认证)与 ADR-AIOS-07 Phase 1+3 全 zombie 后,提出对 P1-xilink stage 6 大议题的 ADR 起草需求。Cline-AIOS 经 5 路 subagent 并行真值核查后给出方向 A/B/C 三选项 + 议题 ⑦ LiveAmp 控制信号画布新增议题归属选项 X/Y/Z。

用户拍板(2026-05-28 18:26): - 方向 B(双拆) + 议题 ⑦ 归属选项 X(三 ADR 拆分) → 实际为 三 ADR 平行:ADR-08(UX 5 议题) + ADR-09(plugin 架构 · 议题 ⑥) + ADR-10(控制信号画布 · 议题 ⑦) - 契约 K2-protocol-v2 启动(§plugin-loading + §control-signal-bus 同 v2) - 右 dock 裁剪范围:删除 DrawerInspector(属性检查) + DrawerPropertyPanel(浮动属性 · 用户原话"不知道这个是干啥的");保留 DrawerLog(日志) + DrawerMetrics(性能) + 新增 XiTest 四件套(RMS / 频响 / 相位 / 实时 scope) - 议题 ① 运行核心对标 AWE Designer(Audio Weaver Designer) - fork 时机:立即开始(并行 ADR-07 Phase 2 P3.U-tune-modes-impl)

1.2 用户原话(2026-05-28 17:58)

"1.引擎界面添加运行核心;原本的 source 设计逻辑是 source 中有一个控制变量,可以选择 PC 注入还是 DSP 直接生成,但是这里存在一个矛盾点,PC 注入的时候跑在 DSP 是不真实的,所以应该对标竞品的策略,在引擎中可以选择算法的运行平台,比如 PC native0, native1 等等,就是所有的内容都跑在 PC 上,这个也是我们当初设计多 thread 上进行动态 change 的根本,如果选择不同的 DSP 平台,可以针对不同的 DSP 平台进行算力等内容的模拟; 2.链路检错机制不健全,当前链路当有模块没有连接等错误状态的情况下没有错误检查机制,底部 tab 的错误窗口也不会有 log 显示; 3.右侧的性能监控,需要进一步实装,cpu 的算力占比,内存情况,延时等概况统计,还需要有详细统计界面,可以将链路中的每一个模块的算力内存时钟等占用情况做详细的 peak 平均统计; 4.目前子图的创建看不到入口,请奖励子图的画布和使用逻辑; 5.右 dock 目前有意义的就是日志 性能 然后 rms 频响等 xitest 曲线的 N 件套"

1.3 真值核查发现(5 路 subagent 并行)

第一份(P1-xilink 主仓现状): - ✅ stages/xilink/ 存在 8 顶层 .vue + 5 bottom + 1 components + 9 drawers(Connection/Engine/Inspector/Log/Metrics/Modules/Profile/Project/PropertyPanel) - ⚠️ AudioEnginePanel.vue + DrawerEngine.vue 已存在 · 无运行平台选择器(0 命中 platform / runtime / native0) - ⚠️ source "PC 注入 vs DSP 直接生成" 控制变量 未找到(grep injectMode/pcInject/dspGen 全 0) - ⚠️ linkStore.ts 1768 行 · 无 errors[] / validate / checkLink 数组(议题 ② 全新增) - ✅ bottom/BottomProblems.vue 壳已存在 · 但无逻辑(议题 ② 数据绑定缺失) - ✅ drawers/DrawerMetrics.vue 壳已存在 · 但无数据(议题 ③ 数据空) - ⚠️ subgraph / 嵌套节点 / groupNode 完全 0 命中(议题 ④ 全新增) - ⚠️ defineModule / registerModule / moduleRegistry 0 命中 · 全部 module 源码 import(议题 ⑥ · ADR-09 范围)

第二份(P5-backend 运行调度): - ✅ RuntimeModeService.cs 仅 64 行 · 二态(normal/legacy)→ 派生(embedded/pc_sim) - ⚠️ 无 EngineRuntime / RuntimePlatform / NativeBackend 抽象(议题 ① 全新增) - ⚠️ Services/ 目录 无 PerformanceService / MetricsService / TelemetryService - ⚠️ /ws/perf /ws/errors /ws/log 全部 未找到

第三份(契约 v1 现状): - ✅ 唯一权威 docs/08-implementation/40-aios/contracts/protocol-v1.md 1564 行 · status: frozen - ✅ §6 dsp-interop(二进制 TLV · TCP/Serial/ADB FIFO · 非 P/Invoke) - ✅ §7 source-sink-api(WebSocket API) - ⚠️ 无 §subgraph / §performance-monitor / §runtime-selector(本 ADR 议题 ①③④ 必须扩契约)

第四份(AIOS 历史调研): - ✅ AWE 调研非常充分(架构 v7 / IDE 对标 / xisnddemom 适配)· 议题 ① AWE Designer 对标方案有详尽前置材料 - ⚠️ subgraph / 子图 / 嵌套 0 命中 · 用户洞察是新增需求 - ⚠️ native0 / native1 / 运行平台模拟 0 命中 · 本 ADR 首次定义

第五份(竞品对标 AWE Designer): - AWE Designer 引擎面板有 "Target Selection" 下拉(Native / DSP-21489 / DSP-21569 / Hexagon 等) - 用户原话明确 "比如 PC native0, native1 等等" + "不同 DSP 平台进行算力模拟" → 对齐 AWE Target Profile 概念

1.4 5 议题归属本 ADR 的依据

议题 归属 工作量 依据
① 运行核心 ADR-08 2.5d UX 增量 + 后端运行调度小重构 + 契约 §runtime-selector(v2)
② 链路错误检查 ADR-08 1.5d linkStore 增 errors[] + validate · BottomProblems 数据绑定 · 现有错误码 §3 复用
③ 性能监控实装 ADR-08 2.0d DrawerMetrics 数据填充 + P5 PerformanceService 新增 + WS /ws/perf 推送
④ 子图创建 ADR-08 2.5d 全新概念 · 画布嵌套节点 + toolbar 入口 + 链路 schema 嵌套支持
⑤ 右 dock 裁剪 ADR-08 1.0d 删 2 drawer + 新增 XiTest 四件套(复用 P0.K-shared-meter-dock)
⑥ 动态加载 → ADR-09 (单独) 工作量大 + ABI 设计 + 启动 K2-protocol-v2
⑦ 控制信号画布 → ADR-10 (单独) 工作量大 + LiveAmp 风格 + HMI API + 同启 K2-protocol-v2

2. 决议(Decision)

2.1 议题 ⑤ · 右 dock 9→4 drawer 裁剪(本 ADR 优先级最高 · 立即可派)

当前 9 drawers:

DrawerConnection      (连接配置 · 物理 uart/tcp/usb · 与 ConnectionPanel 重复)
DrawerEngine          (引擎面板 · 包 AudioEnginePanel · 议题 ① 主战场 · 保留)
DrawerInspector       (属性检查 · ❌ 用户裁剪)
DrawerLog             (日志 · ✅ 保留)
DrawerMetrics         (性能监控 · ✅ 保留 · 议题 ③ 主战场)
DrawerModules         (模块库 · 与 ModuleLibraryPanel 重复)
DrawerProfile         (Profile · 调音文件 · 与 P3-xitune 重叠)
DrawerProject         (项目 · 与 WorkspacePanel 重复)
DrawerPropertyPanel   (浮动属性 · ❌ 用户裁剪 · 用户原话"不知道这个是干啥的")

裁剪决议: - ❌ 删除:DrawerInspector、DrawerPropertyPanel - ✅ 保留:DrawerEngine、DrawerLog、DrawerMetrics - ✅ 新增 XiTest 四件套子标签(在 DrawerMetrics 下作为 tab · 或独立 DrawerXiTest): - RMSMeter(实时电平表 · 复用 P0.K-shared-meter-dock) - FreqResponseChart(频响曲线 · 复用) - PhaseChart(相位曲线 · 复用) - RealtimeScope(实时 scope · 时域波形 · 复用 WaveformChart) - ⚠️ 观察处理(本 ADR 不删 · 留 ADR-08 闭环后下季度评估): - DrawerConnection / DrawerModules / DrawerProfile / DrawerProject(与顶层 panel 重复 · 但移除可能破坏现有用户习惯)

实施约束: - 必须复用 P0.K-shared-meter-dock(ADR-07 §2.1.2 已抽出 · 6 stub 组件已落) - 节点选择 sink-pre / physical-input 必须支持(ADR-07 §1.3.1 锁定的契约级架构) - 不允许在 stages/xilink/ 自行实装 meter 组件(ADR-07 §2.3 边界铁律 #2)

2.2 议题 ② · 链路错误检查机制

前端契约(types/link-error.ts · 新增):

export type LinkErrorSeverity = 'error' | 'warning' | 'info'
export type LinkErrorCode =
  | 'MODULE_NOT_CONNECTED'         // 模块未连接 · 用户原话核心场景
  | 'MODULE_PORT_MISMATCH'         // 端口类型不匹配
  | 'MODULE_PARAM_MISSING'         // 必要参数缺失
  | 'CHAIN_CYCLE_DETECTED'         // 链路成环
  | 'CHAIN_ORPHAN_NODE'            // 孤立节点
  | 'RUNTIME_PLATFORM_MISMATCH'    // 运行平台不兼容(关联议题 ①)
  | 'SUBGRAPH_INTERFACE_INVALID'   // 子图接口无效(关联议题 ④)

export interface LinkError {
  code: LinkErrorCode
  severity: LinkErrorSeverity
  message: string                  // 本地化键
  moduleId?: string                // 错误源模块
  portId?: string                  // 错误源端口
  timestamp: number
  source: 'frontend' | 'backend' | 'dsp'  // 错误产生层
}

linkStore 扩展:

// linkStore.ts 新增字段
errors: LinkError[]                // 当前链路所有错误
validate(): LinkError[]            // 触发全链路 validate(本地)
clearErrors(): void                // 清空(链路修改时自动调)
subscribeBackendErrors(): void     // 订阅后端 /ws/errors WS 推送

BottomProblems 数据绑定: - 从 linkStore.errors 读取 · 按 severity 分组(error/warning/info 三栏) - 点击错误项 → emit focus-module 事件 → 画布高亮目标 module + portId - 双击 → 跳转到该 module 的 PropertyPanel

契约扩展(走 K2-protocol-v2 · 不阻塞前端): - 新增 WS channel /ws/errors · 后端推送 LinkError 帧 - 错误码映射到 protocol-v1 §3 错误码体系(1000-9999 九区间) · 本 ADR 占用 5xxx 区间(链路验证)

2.3 议题 ③ · 右侧性能监控实装

两层界面:

Layer 1 · 概况统计(DrawerMetrics 默认视图):

┌─────────────────────────┐
│ CPU 算力占比     76%    │  ← gauge 仪表盘
│ 内存             142 MB │  ← progress bar
│ 链路延时         12 ms  │  ← 数字 + 趋势线
│ 缓冲区水位       45%    │  ← progress bar
│ Tick 频率        1000Hz │
└─────────────────────────┘

Layer 2 · 详细统计(切换 tab "Per-Module"):

┌──────────────────────────────────────────────────┐
│ Module        | Peak CPU | Avg CPU | Peak Mem | Tick |
├──────────────────────────────────────────────────┤
│ source.0      |  12.3%   |  8.1%   |  4.2 MB  |  1   │
│ eq.high       |   3.1%   |  2.8%   |  0.5 MB  |  1   │
│ compressor.1  |   8.7%   |  6.2%   |  1.1 MB  |  1   │
│ sink.0        |   2.0%   |  1.5%   |  2.3 MB  |  1   │
└──────────────────────────────────────────────────┘
排序:Peak CPU 降序 / 可切换 Avg CPU / Peak Mem

P5 PerformanceService(后端新增):

public class PerformanceService : IPerformanceService
{
    // 系统级
    public PerfSnapshot GetCurrentSnapshot();  // CPU% / Mem / Latency / Buffer

    // 模块级(链路中每 module)
    public Dictionary<string, ModuleMetrics> GetPerModuleMetrics();

    // WS 推送通道(/ws/perf · 1Hz 频率 · 不影响 30fps meter)
    public Channel<PerfFrame> SubscribePerfStream();
}

public record ModuleMetrics(
    string ModuleId,
    double PeakCpuPercent,
    double AvgCpuPercent,
    long PeakMemoryBytes,
    long TotalProcessedSamples,
    int TickRateHz
);

数据来源: - 系统级:Process.GetCurrentProcess() + GC.GetTotalMemory() + Stopwatch 统计 P/Invoke 调用延时 - 模块级:dsp_algo dll 暴露 getModuleMetrics(moduleId) C ABI(本 ADR 范围内 · 不属议题 ⑥ 动态加载)

契约扩展(K2-protocol-v2 · §performance-monitor): - 新增 WS channel /ws/perf · 1Hz 推送 PerfFrame - 新增 REST GET /api/perf/per-module · 拉详细统计(用户主动刷新场景)

2.4 议题 ① · 引擎运行核心选择(对标 AWE Designer)

核心理念(用户原话+AWE Designer 对标): - 取消 source 模块的"PC 注入 vs DSP 直接生成"控制变量(矛盾点) - 引擎层面选 运行平台 RuntimeTarget · 所有 module 跑在选定平台 - PC 模式 = 多 native(native0 / native1 / ...)· 对应当前多 thread 动态切换 - DSP 模式 = 模拟特定 DSP 算力 / 内存边界

前端契约(types/runtime.ts · 新增):

export type RuntimeKind = 'pc-native' | 'dsp-simulated'

export interface RuntimeTarget {
  id: string                      // 'pc-native-0' / 'pc-native-1' / 'dsp-21489' / 'dsp-21569'
  kind: RuntimeKind
  label: string                   // UI 显示

  // PC native 专属
  threadAffinity?: number         // 绑定 CPU core(native0=0 / native1=1)

  // DSP simulated 专属
  dspProfile?: {
    chipModel: string             // 'ADSP-21489' / 'ADSP-21569' / 'Hexagon-V73'
    maxMips: number               // 算力上限
    maxMemoryKB: number           // 内存上限
    sampleRateHz: number          // 工作采样率
  }

  available: boolean              // 当前环境是否可用
  unavailableReason?: string      // 不可用原因
}

export interface EngineRuntimeState {
  current: RuntimeTarget          // 当前选定平台
  available: RuntimeTarget[]      // 后端枚举返回
  switching: boolean              // 切换中(过渡态)
}

预定义 RuntimeTarget 列表(MVP · 可在 P5 后续扩展):

PC Native:
  - pc-native-0    主线程
  - pc-native-1    辅线程 1
  - pc-native-2    辅线程 2
  - pc-native-3    辅线程 3

DSP Simulated:
  - dsp-21489      ADSP-21489 · 450 MIPS · 5 MB SRAM · 48kHz
  - dsp-21569      ADSP-21569 · 800 MIPS · 16 MB SRAM · 96kHz
  - hexagon-v73    Qualcomm Hexagon V73 · 2000 MIPS · 32 MB · 192kHz

P5 RuntimeModeService 重构: - 当前 64 行二态(normal/legacy)→ 扩展为枚举 RuntimeTarget 集合 - 新增 SwitchRuntimeAsync(targetId) · 切换时挂起链路 · 重新初始化 module · 恢复链路 - legacy 模式作为 RuntimeTarget("pc-native-legacy")保留向后兼容

source 模块改造: - 删除 source 内部 "PC 注入 / DSP 生成" 控制变量 - source 仅描述"信号来源"(file / mic / generator / network) - "运行在哪"由 EngineRuntimeState 决定 · source 模块跟随

契约扩展(K2-protocol-v2 · §runtime-selector): - 新增 REST GET /api/runtime/available · 枚举可用 target - 新增 REST POST /api/runtime/switch · 切换 target - 新增 WS event runtime:switched · 广播切换完成 - LEGACY_RUNTIME_MODE_MAP:{ normal: 'pc-native-0', legacy: 'pc-native-legacy' } 兼容历史 .xilink 持久化

2.5 议题 ④ · 子图(subgraph)创建画布

核心理念(类比 AWE Designer SubLayout / Max/MSP patcher): - 子图 = 一组 module 封装为复合节点 · 有自定义输入/输出端口 - 在父画布中显示为单一节点 · 双击进入子图画布编辑 - 支持任意层级嵌套(MVP 限定 2 层)

前端契约(types/subgraph.ts · 新增):

export interface SubgraphDefinition {
  id: string                      // 子图 UID
  name: string                    // 用户命名
  description?: string

  // 子图内部
  nodes: ModuleNode[]             // 内部 module 节点
  edges: Edge[]                   // 内部连线

  // 接口端口(暴露到父画布)
  inputPorts: SubgraphPort[]      // 子图输入(映射到内部 module 端口)
  outputPorts: SubgraphPort[]     // 子图输出

  // 元数据
  createdAt: number
  modifiedAt: number
  presetParams?: Record<string, unknown>  // 子图级参数预设
}

export interface SubgraphPort {
  id: string                      // 子图层 portId
  label: string                   // UI 显示
  type: PortType                  // audio / control(关联 ADR-10)
  internalMapping: {
    moduleId: string              // 内部 module
    portId: string                // 内部 portId
  }
}

export interface SubgraphNodeInstance {
  // 父画布中的子图节点实例
  id: string
  subgraphDefId: string           // 引用 SubgraphDefinition.id
  position: { x: number; y: number }
  paramOverrides?: Record<string, unknown>
}

画布交互: - 创建入口 1:Toolbar 按钮 "新建子图" → 弹出空白子图画布(modal 或 tab) - 创建入口 2:在父画布选中多个 module → 右键 "封装为子图" → 自动推导接口端口 - 编辑入口:双击子图节点 → 切换到子图画布(面包屑导航 Main / SubgraphA) - 使用入口:子图保存后,在 ModuleLibrary "我的子图" 分类下可拖拽到任意画布

链路 schema 嵌套支持:

// 现有 LinkSchema
interface LinkSchema {
  nodes: ModuleNode[]
  edges: Edge[]
}

// 扩展为
interface LinkSchema {
  nodes: (ModuleNode | SubgraphNodeInstance)[]
  edges: Edge[]
  subgraphDefs: SubgraphDefinition[]   // 内嵌子图定义(链路自包含)
}

实施约束: - MVP 限定 2 层嵌套(主画布 → 1 层子图)· 防递归 / 防栈溢出 - 子图内部不能引用自身(显式拒绝 cyclic subgraph) - 子图序列化 = 链路 schema 一部分 · 走 .xilink 文件持久化(无独立文件)

契约扩展(K2-protocol-v2 · §subgraph): - LinkSchema 新增 subgraphDefs 字段(向前兼容 · 旧 .xilink 文件无此字段视为 []) - LEGACY_LINK_FILE_MAP 扩展:subgraphDefs: [] 自动注入 7 天宽限期

2.6 边界铁律(强制约束)

  1. 本 ADR 不进议题 ⑥ 动态加载:任何 module 注册机制改造 → ADR-09
  2. 本 ADR 不进议题 ⑦ 控制信号画布:任何 control 类端口 / 信号画布 → ADR-10
  3. 运行核心切换不破坏链路状态:RuntimeTarget 切换必须保持当前 link 拓扑 + 参数 · 仅重新初始化 module
  4. 错误检查不阻塞链路运行:warning / info 级错误不阻断 audio path · 只 error 级阻断
  5. 性能监控不引入新进程:perf 数据采集复用现有 P5/P6 进程 · 严禁起 daemon
  6. 子图必须可序列化:任何子图状态必须能存到 .xilink 文件 · 严禁内存态独立子图

3. 后果(Consequences)

3.1 正面后果

right dock 收敛:9→4 drawer 焦点清晰 · 用户认知负担降低 56% ✅ 链路错误闭环:MODULE_NOT_CONNECTED 等典型错误用户可见 · BottomProblems 真正可用 ✅ 性能可见:DSP 调音工程师可定位算力/内存瓶颈到具体 module ✅ 运行平台显式化:消除 "PC 注入跑在 DSP 不真实" 的逻辑矛盾 · 对齐 AWE Designer 行业惯例 ✅ 子图能力:复杂链路(>50 module)可分组管理 · 调音工程师生产力↑ ✅ 契约 v2 启动:本 ADR 推动 K2-protocol-v2 启动(§runtime-selector + §performance-monitor + §subgraph + 错误码 5xxx 区间) · 与 ADR-09(§plugin-loading)+ ADR-10(§control-signal-bus)合并入 v2

3.2 负面后果与缓解

后果 影响 缓解措施
⚠️ 删 2 drawer 用户习惯破坏 老用户找不到属性检查 DrawerInspector / DrawerPropertyPanel 在 ADR accepted 后 v0.x 版本保留 1 周 stub + 提示"已迁移到底部 BottomProperties" · 然后删
⚠️ RuntimeTarget 枚举侵入 source 模块 source.injectMode 历史代码废弃 · 旧 .xilink 文件需迁移 LEGACY_SOURCE_INJECT_MODE_MAP:pc_inject 自动迁移到 RuntimeTarget=pc-native-0 · 7 天宽限期
⚠️ 性能采集开销 1Hz 采集 < 0.5% CPU 但仍占用 DrawerMetrics 关闭时停止采集 · 仅打开时启用
⚠️ 子图嵌套递归风险 用户可能误操作循环引用 MVP 限 2 层 + 创建时 cyclic 检查 · ADR 后续 fork "subgraph-recursion-detector" 子任务
⚠️ K2-protocol-v2 启动协调 本 ADR 单独无法启 v2 · 需与 ADR-09 + ADR-10 合并 三 ADR 同时 accepted 后,fork 共同的 P_contracts.U-protocol-v2-bootstrap 一次性启 v2

3.3 关键非目标(Non-Goals · 本 ADR 不解决)

  • ❌ 不进议题 ⑥ 动态加载架构(ADR-09)
  • ❌ 不进议题 ⑦ 控制信号画布(ADR-10)
  • ❌ 不锁定具体 DSP 芯片型号清单(MVP 给 3 款 · 后续扩)
  • ❌ 不锁定 RuntimeTarget 切换性能指标(留实施期评估)
  • ❌ 不重构 9 drawer 全部(仅删 2 + 新增 4 子标签 · 其他 5 drawer 留下季度评估)
  • ❌ 不修改 contract-v1.0 frozen(改动全入 v2 候选 · 与 ADR-09/10 合并启 v2)

4. 实施清单(Implementation)

4.1 立即行动(本 ADR accepted 后立即派 · 优先级 P1)

# U-thread 部门 CPU 工作量 描述
1 P1.U-dock-cleanup-9to4 前端 ClaudeA 1.0d 删除 DrawerInspector + DrawerPropertyPanel(保留 1 周 stub 提示) · 新增 XiTest 四件套 tab(复用 P0.K-shared-meter-dock) · 节点选择支持
2 P1.U-link-error-check 前端 ClaudeA 1.5d types/link-error.ts 新建 · linkStore 加 errors/validate/clearErrors · BottomProblems 数据绑定 · 高亮+跳转交互
3 P1.U-perf-monitor-frontend 前端 ClaudeA 1.5d DrawerMetrics 实装(Layer 1 概况 + Layer 2 模块级表格) · WS /ws/perf 订阅

4.2 短期解锁(立即行动后 1-2 周内 · 优先级 P2)

# U-thread 部门 CPU 工作量 描述
4 P5.U-perf-service 后端 ClaudeB 2.0d PerformanceService 新增 · WS /ws/perf 1Hz 推送 · REST /api/perf/per-module · 调 dsp_algo getModuleMetrics
5 P5.U-error-channel 后端 ClaudeB 0.5d WS /ws/errors 新增 channel · 后端 ChainValidator 推 LinkError 到前端
6 P1.U-runtime-selector-ui 前端 ClaudeA 1.5d DrawerEngine 新增 RuntimeTarget 下拉 · types/runtime.ts · linkStore 关联
7 P5.U-runtime-mode-refactor 后端 ClaudeB 2.0d RuntimeModeService 64 行 → RuntimeTargetService 枚举集合 · /api/runtime/available + /api/runtime/switch · LEGACY_RUNTIME_MODE_MAP

4.3 中期协调(下个迭代 · 优先级 P2)

# U-thread 部门 CPU 工作量 描述
8 P1.U-subgraph-canvas 前端 ClaudeA 2.5d types/subgraph.ts · 子图画布 modal · Toolbar "新建子图" + 多选 "封装为子图" · 双击编辑 · ModuleLibrary "我的子图"分类
9 P1.U-subgraph-schema-extend 前端 ClaudeA 0.5d LinkSchema 加 subgraphDefs 字段 · LEGACY_LINK_FILE_MAP 扩展 · 序列化/反序列化
10 P_contracts.U-protocol-v2-bootstrap(与 ADR-09/10 共享) 契约 ClaudeB 1.0d 起 contracts/protocol-v2.md · §runtime-selector + §performance-monitor + §subgraph + §plugin-loading + §control-signal-bus 五段同时入 v2 · 错误码 5xxx 区间分配

4.4 长期演进(下季度+)

# 议题 触发条件
11 DrawerConnection / DrawerModules / DrawerProfile / DrawerProject 收敛评估 本 ADR 全 zombie 后 1 个月 · 用户反馈收集
12 RuntimeTarget DSP 芯片清单扩展(NXP / TI / Cirrus) 商务侧确定支持产品线
13 子图 N 层嵌套(>2 层) MVP 落地 + 实际复杂链路反馈
14 性能监控历史数据持久化(时序数据库) DrawerMetrics 用户反馈"想看 1 小时趋势"

5. 验收(Acceptance)

5.1 文档验收(本 ADR 自身)

  • ADR-AIOS-08 主文件落盘(本文件 · status: proposed)
  • P_arch/ADR-AIOS-08-xilink-stage-ux/ 子进程目录创建
  • P_arch/ADR-AIOS-08-xilink-stage-ux/PROCESS.md(子进程 PCB)
  • P_arch/PROCESS.md 加 ADR-08 子事件 user_thread
  • DASHBOARD.md v2.7.27 → v2.7.28(§⚡ 加 ADR-08 起草 · §📋 加 9 fork U-thread ready · §📅 加 v2.7.28 行)

5.2 实施验收(§4 全部 U-thread 完成)

检查项 通过条件
P1.U-dock-cleanup-9to4 9 drawer → 4 drawer + XiTest 四件套 · typecheck 通过 · DrawerInspector/PropertyPanel stub 提示
P1.U-link-error-check linkStore.errors[] 实装 · BottomProblems 显示 7 类错误码 · 高亮+跳转交互通过
P1.U-perf-monitor-frontend DrawerMetrics 双层显示 · WS 订阅活跃 · 关闭 drawer 停止采集
P5.U-perf-service /ws/perf 1Hz 推送 · /api/perf/per-module 返回模块级数据
P5.U-error-channel /ws/errors 推送 LinkError · 错误码 5xxx 区间映射正确
P1.U-runtime-selector-ui DrawerEngine RuntimeTarget 下拉可用 · 切换触发后端 API
P5.U-runtime-mode-refactor RuntimeTargetService 枚举可用 · LEGACY_RUNTIME_MODE_MAP 兼容旧 .xilink
P1.U-subgraph-canvas 创建/编辑/使用 3 入口可用 · 2 层嵌套 · cyclic 检查
P1.U-subgraph-schema-extend LinkSchema 序列化包含 subgraphDefs · 旧文件兼容
P_contracts.U-protocol-v2-bootstrap protocol-v2.md 落盘 · 5 段全入 · 错误码区间分配

5.3 边界铁律验收(长期)

  • 任何议题 ⑥ 动态加载相关需求 → 必须走 ADR-09 · 不允许塞本 ADR
  • 任何议题 ⑦ 控制信号相关需求 → 必须走 ADR-10
  • RuntimeTarget 新增类型 → 在本 ADR §2.4 预定义清单追加 + 起 ADR-08-RX 修订
  • 子图 N 层嵌套(>2)突破 → 必须先起 ADR-08-RX 修订

6. 替代方案(Alternatives Considered)

6.1 方向 A(已废弃)· 单 ADR 包打 6+1 议题

  • 描述:6 议题(原任务) + 议题 ⑦(LiveAmp 信号画布)合并为单一 ADR-AIOS-08
  • 废弃理由:
  • ADR 体量预估 700+ 行 · 议题 ⑥ 动态加载架构被稀释
  • 议题 ⑥ 必须等议题 ①~⑤ + ⑦ 全 zombie 才闭环 · 时间线拉到 2026-Q3
  • 议题 ⑦ 控制信号性质完全独立 · 不应与 UX 议题耦合
  • 本 ADR 选择:三 ADR 平行(08 UX 5 议题 + 09 plugin + 10 control-signal)

6.2 方向 C(已废弃)· 三 ADR 全拆细化(议题 ① ② / ③ ⑤ / ④ ⑥ ⑦)

  • 描述:议题 ①+② → ADR-08 / 议题 ③+⑤ → ADR-09 / 议题 ④+⑥+⑦ → ADR-10
  • 废弃理由:
  • 议题 ④ 子图(数据流)与 议题 ⑥ 插件(代码加载)耦合度低 · 强行合并不合理
  • ADR 数量膨胀 · DASHBOARD §⚡ 维护成本高
  • 议题 ① 运行核心和议题 ③ 性能监控同涉 P5/P6 · 拆开会导致契约改两次
  • 本 ADR 选择:议题 ①~⑤ 全归 ADR-08(UX 数据面集中) · 议题 ⑥ ⑦ 各自独立

6.3 替代方案 D(已废弃)· 议题 ⑤ dock 裁剪保守方案

  • 描述:仅删 DrawerInspector · DrawerPropertyPanel 保留并重命名为 "悬浮属性"
  • 废弃理由:用户原话明确 "不知道这个是干啥的" · 保留无业务价值
  • 本 ADR 选择:DrawerPropertyPanel 同删 · 1 周 stub 提示 · 然后清理

7. 相关决议与文档

7.1 相关 ADR

  • ADR-AIOS-01:multi-agent-collaboration(P_contracts B1-B4 · contract-v1.0 frozen) — 本 ADR 推动 K2-protocol-v2 启动
  • ADR-AIOS-04:XiForge 架构(Module UID + ModuleMode 4→2) — 本 ADR §2.5 子图序列化依赖 Module UID
  • ADR-AIOS-05:XiStudio Workspace(7 后缀 + LEGACY_*_MAP 三件套) — 本 ADR LEGACY_RUNTIME_MODE_MAP / LEGACY_LINK_FILE_MAP 扩展沿用
  • ADR-AIOS-06:OS 化任务调度(K-thread / U-thread / PCB / RUNQ) — 本 ADR 全程使用其调度协议
  • ADR-AIOS-07:P3-xitune / P4-xitest 业务边界 + P0.K-shared-meter-dock — 本 ADR §2.1 XiTest 四件套必须复用
  • ADR-AIOS-09(待起草):议题 ⑥ 动态加载架构 · 与本 ADR 平行
  • ADR-AIOS-10(待起草):议题 ⑦ 控制信号画布 · 与本 ADR 平行

7.2 相关 PROCESS.md

  • processes/P1-xilink/PROCESS.md(本 ADR 后将新增 6 fork U-thread)
  • processes/P5-backend-csharp/PROCESS.md(本 ADR 新增 3 fork U-thread)
  • processes/P_contracts/PROCESS.md(K2-protocol-v2 启动 · 三 ADR 共享)
  • processes/P_arch/PROCESS.md(本 ADR 子事件 user_thread)
  • processes/P_arch/ADR-AIOS-08-xilink-stage-ux/PROCESS.md(子进程 PCB · 本 ADR 派生)

7.3 关联契约

  • contracts/protocol-v1.md(frozen · 不修改)
  • contracts/protocol-v2.md(本 ADR + ADR-09 + ADR-10 共同启动 · 5 段并入)
  • §runtime-selector(本 ADR · 议题 ①)
  • §performance-monitor(本 ADR · 议题 ③)
  • §subgraph(本 ADR · 议题 ④)
  • §plugin-loading(ADR-09 · 议题 ⑥)
  • §control-signal-bus(ADR-10 · 议题 ⑦)
  • contracts/protocol-v1.md §3 错误码体系(本 ADR 占用 5xxx 区间)

8. 状态流转(Status History)

日期 状态 操作 说明
2026-05-28 17:58 起草触发 用户提 6 议题 ADR 需求 DASHBOARD §🤔
2026-05-28 18:10 真值核查 Cline-AIOS 5 路 subagent 并行核查 P1/P5/P6/契约/竞品 5 路全成功 · 议题分类锁定
2026-05-28 18:18 方案研判 plan_mode_respond 给方向 A/B/C + trade-off 推荐方向 B 双拆
2026-05-28 18:26 方案拍板 用户选方向 B + 议题 ⑦ 归属 X · 三 ADR 拆分 契约同 v2 · AWE Designer 对标 · dock 删 2 留 4
2026-05-28 18:30 proposed(v1.0) ADR-AIOS-08 v1.0 落盘 status: proposed 等用户 accept ADR-AIOS-08
2026-05-29 17:25 accepted(本版 v1.1) 用户拍板 accept ADR-AIOS-08(UX 5 议题 · 2-3 周 · ClaudeA 当前空闲可立即接 · 解锁 10 fork) 子进程 PCB state proposed→accepted · 10 fork U-thread 进入 ready · Phase 1 七项无阻塞可立即 start(dock-cleanup / link-error-check / perf-service / error-channel / runtime-mode-refactor / subgraph-schema-extend / protocol-v2-bootstrap)· 推荐 ClaudeA 空闲优先派 P1.U-dock-cleanup-9to4(1.0d · 复用 P0.K-shared-meter-dock 6 stub · ADR-07 §2.1.2 已就位)

9. 关键术语表(Glossary)

术语 定义
RuntimeTarget 引擎运行平台描述 · 含 PC native(多线程)和 DSP simulated(芯片算力模拟)两类 · 对标 AWE Designer Target Profile
pc-native-N RuntimeTarget 之一 · PC 原生多线程模式 · N=0/½/3 对应 CPU core 亲和
dsp-simulated RuntimeTarget 之一 · 模拟特定 DSP 芯片(21489/21569/Hexagon)算力+内存边界 · 不真跑 DSP
LinkError 链路错误统一类型 · 7 类 code + severity + source 三元组
PerfSnapshot 系统级性能快照(CPU/Mem/Latency/Buffer/Tick · 1Hz 推送)
ModuleMetrics 模块级性能指标(PeakCPU/AvgCPU/PeakMem/Tick · 按需拉取)
SubgraphDefinition 子图定义 · 含内部 nodes/edges + 接口端口 + 元数据
SubgraphNodeInstance 父画布中的子图节点实例 · 引用 SubgraphDefinition.id
K2-protocol-v2 契约 v2 · 由本 ADR + ADR-09 + ADR-10 共同启动 · 永久冻结的 v1 不动
AWE Designer 对标 议题 ① 运行核心选择对齐 Audio Weaver Designer 的 Target Selection 行业惯例

10. 决议者签名(Approvers)

  • 拍板:用户(2026-05-28 18:26 选方向 B + 议题 ⑦ 归属 X · 给出 dock 裁剪范围 + AWE Designer 对标 + 立即开始 fork)
  • accepted:用户(2026-05-29 17:25 · accept ADR-AIOS-08 · 解锁 10 fork U-thread · Phase 1 立即可派)
  • 起草:Cline-AIOS · cwd=d:/work/25_claude/workspace/AlgoDepartment/06_docs/site-build/
  • 真值核查:Cline-AIOS 5 路 subagent 并行核查(2026-05-28 18:10)
  • 后续修订:任何修改本 ADR 必须先 fork ADR-AIOS-08-RX(R = Revision)子进程 · 不允许直接编辑 accepted 状态文档

本 ADR 落地 = AIOS v7 OS 化模型下首次"双拆 ADR"实践 · 与 ADR-09(plugin) + ADR-10(control-signal)平行起草 · 三者共同启动 K2-protocol-v2 · 验证了"大需求拆 ADR · 短平快议题不被长周期阻塞"的工作流。