SUPERSEDED
ADR-AIOS-23 · XiLink Mini-Node 链路 UX 三件套(已 superseded)
⚠️ 本 ADR 已 superseded(2026-06-15 12:11) · 范围错误 · 详见 §"Supersede 说明"段
后续 ADR:ADR-AIOS-25 · xitune stage 加载并显示 xilink 子图
revert commit:27ec16d(04_development 仓库 · 2026-06-15 12:11 · 14D + 3M · -1792/+56 行)
abort 文件:prompts/active/P1.A23.F4-meter-click-protocol.aborted-2026-06-15-1207.md + P1.A23.F3-subgraph-tab-open.aborted-2026-06-15-1207.md
0. Supersede 说明(2026-06-15 12:11 加注)
用户 2026-06-15 11:30 verbatim 反馈:
"我说的是在 xitune 中无法显示和打开 xilink 工程中的子图 · mini node 的结构都是针对 xitune stage 的 · 你为何去改 xilink 呢"
失败教训(归档保留以警后人)
| 失败点 |
根因 |
| 范围方向错(xilink stage 改造) |
起 ADR-23 时未 grep xitune/index.vue 现有 chain-mini-bar 实现 · 默认按"xilink 子图入口"理解 |
| 三 zombie 在 xitune 零复用 |
80×60 svg 缩略 + Tarjan SCC fan-out 算法 + 折叠面板风格 · 与 xitune 文字+emoji + BFS 拉平 + drawer 体系不匹配 |
| 双击行为方向错 |
设计"双击新开 LinkEditor tab" · 但 xitune 双击是 floating.openDialog 弹悬浮调音 |
处置(用户 2026-06-15 12:00 拍板方案 1)
- ✅ ADR-23 status:accepted → superseded by ADR-25(本 frontmatter 改动)
- ✅ 三 zombie revert(commit
27ec16d · -1792/+56)
- ✅ F4 + F3 dispatched abort(prompts/active/*.aborted-2026-06-15-1207.md)
- ✅ ADR-25 起草(proposed)· 4 fork 2.7d · 范围 P3-xitune
历史读取价值
本 ADR 三件套设计(子图加载入口 / meter 单双击 / 并行拓扑)思路本身仍可参考,但目标 stage 必须迁移到 xitune · 详见 ADR-25。
范围(原):仅 P1-xilink stage 主画布 mini-node 链路 UX 层 · 不涉及 P3-xitune(已由 ADR-11 闭环)· 不涉及 SubgraphRuntime 运行时(已由 ADR-16 闭环)· 不涉及 DockHost 通用化与算法实现(已由 ADR-21 闭环)。本 ADR 只补齐 ADR-16 与 ADR-21 实施后用户实测发现的 3 个 UI/交互/布局盲区。
1. 背景与动机(Context)
ADR-16(子图统一架构 · accepted 2026-06-05)与 ADR-21(xilink dock 通用化 + 分析模块 · accepted 2026-06-13)两轮架构闭环后,用户 2026-06-13 在 xilink stage 实测 mini-node 链路画布,发现 3 个未覆盖盲区:
1.1 盲区 ① · 子图加载入口缺失
- ADR-16 已就位
SubgraphRuntime.flatten() 运行时路径 + linkStore.toJSON()/fromJSON() 持久化钩子
- ADR-08-R1(superseded)曾决议 LinkEditor 顶部 tab bar 切换模式
- 但:当 .xilink 文件中含子图(嵌套 LinkSchema)时,左侧 dock 没有"子图列表"区域可视化展示 · mini-node 画布上子图节点没有缩略图渲染 · 双击子图节点没有"新开主页 tab(tab 名 = 子图名)"的交互
- 用户原话:"无法加载 xilink 的子图,要求 xilink 有子图的需要在左侧 dock 中显示子图,并且在 mini-node 链路中显示缩略图,在左侧或者顶栏的 mini-node 中双击子图出现新的主页 tab,名字是子图名"
1.2 盲区 ② · meter mini-node 单/双击行为不一致
- ADR-21 F1 已通用化 DockHost · 节点 selector 支持 5 类(source/sink/log_module_v1/xitune/xilink-module)
- ADR-21 F2/F3/F5 已就位 fft/phase/transfer 控件与算法
- 但:meter 类 mini-node(fft/phase/rms/spectrogram/scope 等)的单击与双击行为没有统一规范——目前部分 meter 单击只高亮节点不绑定 dock,双击行为在不同 meter 间不一致(部分弹框 / 部分无响应 / 部分进入 inspector)
- 用户原话:"meter 功能比如 fft phase rms 等在 mini-node 中单击和双击应该和其他算法 module 行为一致 · 单击选中主界面显示对应的曲线 · 双击弹框形式显示"
1.3 盲区 ③ · 并行节点排布只对 source 生效
- 当前 mini-node 链路画布仅在多 source 并入时按并列方式排列
- 但:同一上游节点 fan-out 出多个下游 meter(如 1 个 sink 接 fft + phase + rms 3 个 meter)时,这些 meter 没有按真实拓扑并列排布 · 而是被强制串成一列 · 视觉上失真
- 用户原话:"目前关于 link 链路中的并行节点只是 source 按照并列的方式排列了 · 多个 meter 连接在同一节点并没有并列排布 · 希望这个不能作死 · 一定要按照节点的真实并列情况来排列 mini-node"
1.4 时序与依赖
- ADR-16 ✅ accepted 2026-06-05(SubgraphRuntime + 持久化已就位)
- ADR-21 ✅ accepted 2026-06-13 12:51(DockHost 通用化 F1 dispatched / 控件增强 F2 / phase F3 dispatched · F4/F5/F6 ready)
- ADR-23 提议 2026-06-13(本 ADR · 站在 ADR-16 + ADR-21 之上的 UI/交互/布局补齐层)
- 实施前置:ADR-21 F1 DockHost 通用化 zombie(让 meter 单击 → dock 绑定有承接点)
2. 决议(Decision)
2.1 总体决策
新起 ADR-AIOS-23 · 在 ADR-16(子图运行时)与 ADR-21(DockHost + 分析模块)之上,补齐 3 个 UI/交互/布局盲区。不修改 ADR-16 SubgraphRuntime 契约 · 不修改 ADR-21 DockHost 通用化契约 · 不修改 dsp_algo/v7 framework。
2.2 三件套子决议
2.2.1 子决议 A · 子图加载入口三连(左 dock + 缩略图 + 双击新 tab)
- A.1 左侧 Dock "子图列表" 区域:LinkEditor 左侧 dock 新增 "Subgraphs" 折叠面板 · 列出当前 .xilink 文件中所有子图(name + 输入/输出端口数 + 模块计数
Σ modules)· 项点击高亮主画布对应节点 · 项双击触发 A.3
- A.2 mini-node 画布子图节点缩略图:子图节点(
type === 'subgraph')在主画布以缩略图形式渲染(80×60px 内嵌迷你拓扑图 · 显示 ≤ 5 个核心 module 形状 · 不显示连线细节)· 区别于普通 module 节点(纯文字+图标)
- A.3 双击子图节点 → 新开主页 tab:在主画布或左 dock 双击子图节点 → LinkEditor 顶栏 tab bar 新增 1 tab(tab 名 = 子图 name · 例 "EQ Bank A")· 切换至该 tab 后主画布渲染该子图内部链路 · tab 关闭按钮带 dirty 标记联动(沿用 ADR-08-R1 R1.5)
2.2.2 子决议 B · meter mini-node 单/双击行为统一
- B.1 单击行为铁律:任何 meter 类 mini-node(fft/phase/rms/spectrogram/scope/transfer)单击 → 节点高亮 + DockHost 自动绑定该节点的数据流(complementing ADR-21 F1 节点 selector)· 主界面 dock 显示对应曲线
- B.2 双击行为铁律:任何 meter 类 mini-node 双击 → 弹出独立浮动窗口(Floating MeterPanel · 复用 P0.K-shared Dialog 组件)· 内容与 dock 一致但解耦节点选择 · 多窗共存允许
- B.3 与算法 module 行为对齐:此约定与现有算法 module(EQ/Compressor/Crossover 等)单击=选中、双击=Inspector 弹框的行为模式完全对齐 · 用户认知统一
- B.4 对接点:依赖 ADR-21 F1 DockHost 通用化 zombie · F1 已支持 5 类节点 selector · 本决议追加"meter 类 mini-node click 协议"作为 selector 触发源
2.2.3 子决议 C · mini-node 并行节点真实拓扑排布
- C.1 排布算法:基于 LinkSchema 拓扑图执行分层 + 同层 fan-out 并列算法
- Step 1:DAG 拓扑排序 · 计算每节点的层级
level(source 层级 = 0,sink 层级 = max)
- Step 2:同层级节点按上游节点扇出顺序横向并列(若 1 个 sink 接 3 个 meter,这 3 个 meter 在同一层级并列)
- Step 3:跨层连线由当前 mini-node 渲染器自动绘制(无需改连线逻辑)
- C.2 适用范围:不仅 source 多入并列(现有行为)· 任意节点的 fan-out 多分支均按真实并列(本 ADR 核心补齐)
- C.3 性能:节点数 ≤ 100 时排布 < 50ms · 节点数 > 100 时降级为现有列式布局(避免页面卡顿)
2.3 非目标(Non-Goals · 严禁纳入本 ADR)
- ❌ 不动 SubgraphRuntime.flatten() 算法(ADR-16 已 accepted · 零修改)
- ❌ 不动 DockHost 通用化逻辑(ADR-21 F1 已 dispatched · 零修改)
- ❌ 不动 fft/phase/transfer 算法实现(ADR-21 F2-F6 已规划)
- ❌ 不动 dsp_algo/v7 framework
- ❌ 不引入子图层级面包屑 breadcrumb(留作 ADR-24+ 候选)
- ❌ 不引入子图运行时端口可视化(留作未来 fork)
- ❌ 不动 P3-xitune autotune 业务(ADR-11 v1.3 已闭环)
3. 业务行为契约(5 必填段 × 3 子决议)
3.1 子决议 A · 子图加载入口三连
① 输入/输出契约
// 左 dock 子图列表 props
interface SubgraphDockPanelProps {
subgraphs: Array<{
id: string; // 子图唯一 ID(对应 LinkSchema.subgraphs[].id)
name: string; // 显示名(tab 名同步)
inputPorts: number; // 输入端口数
outputPorts: number; // 输出端口数
moduleCount: number; // 含 module 总数(递归展开后)
}>;
onItemClick: (id: string) => void;
onItemDoubleClick: (id: string) => void;
}
// 主画布子图节点缩略图 props
interface SubgraphNodeMiniProps {
subgraphId: string;
thumbnailModules: ModuleInstance[]; // ≤ 5 个核心 module(用于缩略图)
size: { width: 80; height: 60 }; // 固定尺寸
}
// LinkEditor tab bar 双击响应
interface TabBarOpenSubgraphTabEvent {
type: 'open-subgraph-tab';
subgraphId: string;
tabName: string; // = subgraph.name
}
② 收敛/成功判据
| 判据 |
阈值 |
含义 |
| 左 dock 子图列表渲染 |
100% .xilink 子图全部列出 |
不漏不重 |
| 缩略图渲染时延 |
≤ 100ms |
子图节点视觉立刻可识别 |
| 双击新开 tab 响应 |
≤ 200ms |
用户感知"瞬间"切换 |
| tab 名同步子图 name |
100% 一致 |
重命名子图后 tab 名实时更新 |
| dirty 标记联动 |
100% |
子图修改后 tab 标 ● · 关闭弹 confirm |
③ 失败回退路径(5 类)
| # |
失败 |
触发 |
UI 表现 |
恢复路径 |
| 1 |
子图列表为空 |
.xilink 无嵌套子图 |
左 dock "Subgraphs" 折叠面板显示 "No subgraphs" 提示 |
用户从 LinkEditor 工具栏 "+ Subgraph" 创建 |
| 2 |
缩略图渲染失败 |
thumbnailModules 计算超时 / 空 |
子图节点降级为"📦 Subgraph: " 文字标签 |
用户双击仍可进入子图 |
| 3 |
双击新 tab 失败 |
tab 已存在同 ID |
切换到已有 tab(不重复创建) |
自动收敛 |
| 4 |
子图名重复 |
2 个子图同 name |
tab 名后缀 (2) (3) 区分 |
用户重命名解决 |
| 5 |
子图加载异常 |
LinkSchema 损坏 |
左 dock 项标 ⚠️ + tooltip 错误信息 + 不可双击 |
用户修复 .xilink 文件 |
④ 用户操作流(端到端 5 步)
- 用户打开含子图的 .xilink 文件 → 左 dock "Subgraphs" 折叠面板自动展开 + 列出全部子图
- 用户在主画布看到子图节点以缩略图形式呈现(区别于 module 节点)
- 用户单击主画布子图节点 → DockHost 显示该子图聚合元信息(端口数 / 内部 module 列表)
- 用户双击主画布子图节点 / 左 dock 子图项 → LinkEditor 顶栏 tab bar 新增 tab + 切换至子图内部链路
- 用户编辑子图后切回 Main tab → 主画布子图节点缩略图同步刷新(若内部 module 数量变化)
⑤ 端到端真值 e2e
- playwright 测试:加载 fixture .xilink 文件(含 2 子图 "EQ_A" + "Crossover_B" 各 3 modules)
- 断言 ① 左 dock 列出 2 项 · 名字一致 · moduleCount=3 · ② 主画布 2 个子图节点为缩略图(80×60px)· ③ 双击 "EQ_A" 缩略图 → tab bar 出现 "EQ_A" tab + 切换 + 主画布渲染 3 个 module 节点 · ④ 关闭 "EQ_A" tab(无修改)立即关闭 · ⑤ 修改后关闭弹 confirm
3.2 子决议 B · meter mini-node 单/双击行为统一
① 输入/输出契约
// meter mini-node click 协议
interface MeterNodeClickProtocol {
onSingleClick: (nodeId: string, nodeRef: ChainNodeRef) => void;
// → DockHost.bindNodeRef(nodeRef) · 沿用 ADR-21 F1 通用化接口
onDoubleClick: (nodeId: string, nodeRef: ChainNodeRef) => void;
// → openFloatingMeterPanel(nodeRef) · 弹出独立浮动窗口
}
// 浮动 MeterPanel props
interface FloatingMeterPanelProps {
nodeRef: ChainNodeRef;
meterType: 'fft' | 'phase' | 'rms' | 'spectrogram' | 'scope' | 'transfer';
initialPosition: { x: number; y: number };
onClose: () => void;
}
// meter 类节点判定
const METER_NODE_TYPES = ['fft', 'phase', 'rms', 'spectrogram', 'scope', 'transfer'] as const;
② 收敛/成功判据
| 判据 |
阈值 |
含义 |
| 单击响应时延 |
≤ 80ms |
DockHost 绑定 + 曲线刷新 |
| 双击弹框响应 |
≤ 150ms |
浮动窗口打开 + 数据流接入 |
| 6 类 meter 行为一致 |
100% |
fft/phase/rms/spectrogram/scope/transfer 全覆盖 |
| 与算法 module 一致性 |
100% |
单击=选中 · 双击=独立窗口 · 视觉无差异 |
| 多浮窗共存 |
≥ 4 窗 |
同时打开 4 个 meter 浮窗无卡顿 |
③ 失败回退路径(5 类)
| # |
失败 |
触发 |
UI 表现 |
恢复路径 |
| 1 |
DockHost 未就位 |
ADR-21 F1 zombie 前 |
单击仅高亮节点 + warning toast "DockHost 未就位" |
等 F1 zombie 后自动恢复 |
| 2 |
浮窗渲染失败 |
meter 数据流断开 |
浮窗显示 "No data" 占位 |
用户检查节点连接 |
| 3 |
节点 nodeRef 缺失 |
ChainNodeRef.channelCount 为 0 |
DockHost 显示 "Disconnected" |
用户重连节点 |
| 4 |
双击触发单击竞态 |
用户快速点击 |
单击响应取消 · 仅触发双击逻辑 |
自动收敛(防抖 250ms) |
| 5 |
浮窗超出屏幕 |
initialPosition 越界 |
自动吸附到屏幕内最近边界 |
自动收敛 |
④ 用户操作流(端到端 5 步)
- 用户在主画布单击 fft mini-node → 节点高亮 + 主界面 DockHost 显示该 fft 曲线(实时刷新)
- 用户切换单击 phase mini-node → DockHost 切换到 phase 曲线(节点选择联动)
- 用户双击 rms mini-node → 弹出独立浮动 MeterPanel(显示 rms 仪表)· DockHost 绑定不变
- 用户再双击 spectrogram → 又弹一个浮窗 · 2 浮窗共存
- 用户关闭 1 浮窗 → 另 1 浮窗保留 · DockHost 选择不受影响
⑤ 端到端真值 e2e
- playwright 测试:加载 fixture .xilink(含 1 source + 1 sink + 4 meter:fft/phase/rms/spectrogram)
- 断言 ① 单击 fft → DockHost 显示 fft 曲线 · ② 单击 phase → DockHost 切换到 phase · ③ 双击 rms → 浮窗 1 弹出 · ④ 双击 spectrogram → 浮窗 2 弹出 · 浮窗 1 仍存在 · ⑤ 注入 1kHz @ -20dBFS 信号 · 浮窗 1(rms)读数 -20 ± 0.5 dB · 浮窗 2(spectrogram)1kHz bin 高亮
3.3 子决议 C · 并行节点真实拓扑排布
① 输入/输出契约
// 拓扑排布算法输入
interface TopologyLayoutInput {
nodes: ChainNodeRef[];
edges: Array<{ from: string; to: string }>; // 节点 ID 连线
canvasSize: { width: number; height: number };
}
// 输出:每节点的 (x, y) 坐标
interface TopologyLayoutOutput {
positions: Map<string, { x: number; y: number; level: number }>;
// level = 拓扑层级(0 = source 层 · max = sink 层)
}
// 算法签名
function computeTopologyLayout(input: TopologyLayoutInput): TopologyLayoutOutput;
② 收敛/成功判据
| 判据 |
阈值 |
含义 |
| 排布耗时(节点 ≤ 50) |
≤ 30ms |
流畅刷新 |
| 排布耗时(节点 ≤ 100) |
≤ 50ms |
性能上限 |
| fan-out 节点同层并列 |
100% |
1 上游 → N 下游 · N 个下游 y 轴并列 |
| 多 source 并入沿用 |
100% |
现有行为不退化 |
| 跨层连线交叉数 |
最小化 |
启发式重排同层节点顺序减少交叉 |
③ 失败回退路径(5 类)
| # |
失败 |
触发 |
UI 表现 |
恢复路径 |
| 1 |
节点数 > 100 |
复杂链路 |
降级为现有列式布局 + warning toast |
用户拆分子图 |
| 2 |
含环路(非 DAG) |
配置错误 |
算法降级 + 高亮环路节点 + BottomProblems 报错 |
用户断开环路 |
| 3 |
孤立节点 |
未连线 |
孤立节点放置在画布右下角 |
用户连线或删除 |
| 4 |
排布算法异常 |
内部 bug |
catch + console.error + 降级现有布局 |
自动收敛 |
| 5 |
节点重叠 |
同 (x,y) |
自动微移 ±10px 避让 |
自动收敛 |
④ 用户操作流(端到端 5 步)
- 用户加载 fixture .xilink(含 1 sink + 3 meter 全连到该 sink)
- mini-node 画布渲染 → 3 meter 横向并列显示(同层 fan-out 真实并列)
- 用户拖入第 4 meter 连到同 sink → 立即重排 · 4 meter 同层并列
- 用户删除 1 meter → 立即重排 · 剩余 3 meter 仍并列
- 用户加载含 100 节点的复杂链路 → 排布完成后 < 50ms 流畅展示
⑤ 端到端真值 e2e
- playwright 测试:加载 fixture(1 sink + 4 meter 同层 fan-out)
- 断言 ① 4 meter 的
level 全部相等 · ② 4 meter 的 x 坐标差 ≥ 80px(并列间距)· ③ 4 meter 的 y 坐标差 ≤ 5px(同层水平)· ④ 加载 100 节点 fixture · 排布耗时 ≤ 50ms · ⑤ 含环路 fixture → BottomProblems 报错 + 降级布局
4. 实施清单(fork 表)
| F# |
UID |
部门 |
CPU |
工作量 |
描述 |
| F1 |
P1.A23.F1-subgraph-dock-panel |
前端 P1-xilink |
ClaudeA |
1.5d |
左侧 Dock "Subgraphs" 折叠面板 · 列出子图 + click/doubleClick 协议 · 单击 → 主画布高亮节点 · 双击 → 触发 F3 |
| F2 |
P1.A23.F2-subgraph-node-thumbnail |
前端 P1-xilink |
ClaudeA |
1.0d |
mini-node 画布子图节点缩略图渲染(80×60px 内嵌迷你拓扑 · ≤ 5 module)· 区别于普通 module 节点 · 失败降级为文字标签 |
| F3 |
P1.A23.F3-subgraph-tab-open |
前端 P1-xilink |
ClaudeA |
1.5d |
LinkEditor tab bar 双击新开 tab(tab 名=子图 name)· dirty 标记联动 · 复用 ADR-08-R1 R1.5 |
| F4 |
P1.A23.F4-meter-click-protocol |
前端 P1-xilink |
ClaudeA |
1.0d |
meter mini-node 单击 → DockHost 绑定 nodeRef(对接 ADR-21 F1)· 双击 → 弹浮动 MeterPanel(复用 P0.K-shared Dialog)· 6 类 meter 全覆盖 + 防抖 250ms |
| F5 |
P1.A23.F5-topology-layout-algo |
前端 P1-xilink |
ClaudeA |
2.0d |
拓扑分层 + 同层 fan-out 并列算法 · DAG 排序 · 节点 ≤ 100 时 ≤ 50ms · 含环路降级 + BottomProblems 报错 · e2e 4-meter fan-out fixture |
fork 总计:5 fork · 7.0d · 全部 ClaudeA 前端
依赖关系:
- F1 → F3(F1 双击需触发 F3 新开 tab 逻辑)
- F2 → F3(F2 缩略图节点双击同样触发 F3)
- F4 → ADR-21 F1 DockHost 通用化(必须 zombie 后启动)
- F5 独立 · 与 F1-F4 文件正交(布局算法层)
派发顺序建议:
1. 首推 F5(并行节点排布 · 独立 · 不依赖 ADR-21 F1)
2. 次推 F1(子图 dock 面板 · 不依赖)
3. 三推 F2(子图缩略图)
4. 四推 F3(双击新 tab · 等 F1+F2)
5. 五推 F4(meter 单/双击协议 · 等 ADR-21 F1 zombie)
5. 风险与缓解
| 风险 |
缓解 |
| F4 依赖 ADR-21 F1 DockHost 通用化 zombie · 时序耦合 |
F4 派发前必须 grep 验证 ADR-21 F1 zombie 状态 · 否则改 ready blocked_on |
| F5 拓扑算法复杂度 100 节点 ≤ 50ms 阈值 |
实现采用 Sugiyama 风格分层算法 · 用 dagre 库 baseline · 必要时降级 |
| 子图嵌套层级 > 2 时 tab 数爆炸 |
F3 限制单 LinkEditor 最多 8 tab · 超出关闭最旧 |
| meter 浮窗多开导致内存泄漏 |
F4 复用 ADR-21 frame 数据流 · 浮窗关闭时释放订阅 · 上限 6 浮窗 |
| 缩略图渲染卡顿(F2) |
缩略图 lazy 渲染 + 缓存 · 子图修改时增量刷新 |
6. 决议者签名
| 角色 |
签名 |
时间 |
| 用户 |
✅ accepted |
2026-06-13 18:08 |
| Cline-AIOS |
proposed |
2026-06-13 18:00 |
7. 状态流转
| 时间 |
事件 |
版本 |
| 2026-06-13 18:00 |
proposed by Cline-AIOS · 草案 v0.1 |
v0.1 |
| 2026-06-13 18:08 |
✅ accepted by 用户 · 5 fork ready 解锁 |
v0.1 |
| 2026-06-15 12:11 |
⚠️ superseded by ADR-AIOS-25 · 范围错误(应改 xitune 不是 xilink)· 三 zombie revert(commit 27ec16d · -1792/+56)· F4+F3 abort · 详见 §0 |
v0.1 |
8. 关联文档
- ADR-AIOS-08-xilink-stage-ux · accepted v1.1 · 父 ADR(xilink stage 5 议题 · 含子图议题 ④)
- ADR-AIOS-08-R1-subgraph-redesign · superseded by ADR-16 · 历史子图 tab 切换决议(R1.5 dirty 标记本 ADR F3 复用)
- ADR-AIOS-16-subgraph-unified-architecture · accepted v1.0 · 子图运行时架构(SubgraphRuntime.flatten() · 本 ADR 站在其上做 UI 补齐)
- ADR-AIOS-21-xilink-dock-and-analysis-modules · accepted v0.1 · DockHost 通用化(F1 是本 ADR F4 的强依赖)
- ADR-AIOS-17-R1-realtime-widgets-algorithm-impl · 实时控件算法(参考 meter 数据流契约)
- ADR-AIOS-07 · P3-P4 三层分工(本 ADR 严守:前端零数学 · 算法在 xilink module 层)
9. 教训沉淀
- 2026-06-13 18:00:用户实测 ADR-16(子图运行时)+ ADR-21(DockHost 算法)闭环后,发现 UI 入口 / 交互行为 / 布局算法 3 个未覆盖盲区。教训:架构 ADR(运行时/算法)就位 ≠ 用户体验闭环,UI 层 fork 必须显式立项,不能假设运行时就位用户就能用上。后续 ADR 在拍板时 §"实施清单"必须问"是否含 UI 入口 fork"避免再现盲区。
- 范围澄清教训:用户原文写"xitune stage 中"实际指"xilink stage 中"(P3 与 P1 词形接近导致口误)。Cline-AIOS 必须先做范围歧义澄清(ask_followup_question)再起 ADR · 不能直接按字面起草。