跟踪 2.0 重构(数据/SDK 分层、老插件兼容、效果器、属性面板)之后有意推迟 的事项。每项均已确认可安全后补(加性/非破坏);某项排期时可从本 issue 拆出独立 issue。
同步 2026-06-18:插件设置系统、effect 接口规范化(会话化)、manifest 入口统一 classes 数组、插件冲突消解矩阵(所有类型) 均已完成、移入末尾「已完成」。
🔴 高优先级
🟡 中优先级
🟢 低优先级
🔵 未来大版本方向
✅ 已完成(记录)
键值集合的集合表达式支持([CollectionBuilder]) :Map/OrderedMap 及其可变/只读接口挂 [CollectionBuilder],解锁 [] 字面量——含 new() 无法表达的接口目标 = [](不能 new 接口);Map 由继承 Dictionary 改为组合、公有枚举统一产出 IReadOnlyKeyValuePair,使单个 builder 通吃具体类与接口;只读接口空 [] 复用 Empty 单例(零分配);OrderedMap 保留覆盖语义与 RemoveAt/KeyAt/ValueAt 索引 API。连带:DataMap 内部字段由 Map 改原生 Dictionary(对外 IDictionary 契约不变)、TLP/CBOR 读写辅助方法形参 Dictionary→Map/IReadOnlyMap。非空 KV 字面量收益有限(元素是接口、new(...) 与 BCL KeyValuePair 都不隐式汇入、须显式 new ReadOnlyKeyValuePair<,>(...)),主要价值在空 []。独立测试 MapCollectionExpressionTests(7 例)。提交 39e1a9c。
扩展冲突消解矩阵(所有插件类型,非仅 format) :身份 id(format 扩展名 / voice·effect·agent 引擎 id)跨包可重名、非全局唯一键。四个 manager 从 id→单个(先到丢弃) 改为 id→多包并存(同包同 id 去重);ExtensionRouting 三合一——活实现解析(用户选择 / 内建优先 / packageId 序最小)+ 选择存 app Settings.json 的 ExtensionRouting 字典 + 冲突聚合;工程只引身份 id、不存包 id,选中包缺失按默认策略回退(工程跨机可移植);format import/export 各为可路由身份;ExtensionSettingsManager 改按 (packageId,id) 枚举;设置窗口「Extension Routing」页按类型分组(Voice/Effect/Agent Model/Format)、下拉显包名、专属图标;legacy 包 id 改用目录名(区分多包 + 反查包名,退役"legacy=空串");夹具 V1.RouteConflict.A/B(format)+V1.VoiceConflict.A/B(voice) + tests/EXTENSION-ROUTING-TEST-CASES.md。提交 1474ddb。
插件设置系统 (opt-in IExtensionSettings;设置窗口「扩展」页;ExtensionSettingsStore 单文件;设置按包分桶 root[packageId][kind:extensionId] 根治不同包同 id 串味,内建用 (built-in)、legacy 用目录名、V1 包用反向域名 id;密钥 DPAPI/钥匙串;agent 复用存储层)
effect 接口规范化(会话化) :厚 IEffectProcessor(每段一个)+ IEffectContext + IUpstreamAudioSegment;退役 IEffectInput/Output/Change;自订阅自管失效;EffectGraph 反应式 processor 图;回显轨端到端
manifest 入口统一 classes 数组 :退役 class/import/export 具名槽,改 classes 候选类清单、宿主按 type 所需接口扫描认领;assembly 保持单数(一能力的入口类同住一 dll,多 dll 走多 extensions[] 条目共享一 per-package ALC)
条件属性面板(§三.25,config=f(context) 提交时整树重算 + keyed-diff)
PropertyValue.Invalid 垫片清理(Invalid 正式化为长期哨兵)+ 装箱优化(标签+字段联合)
IDataObject.WillModify 改前事件(merge 对偶语义,对齐 C++ aboutToModify)
voice SDK 会话模型重设计(厚插件;插件面全秒轴)+ 合成分段 Segment SDK 形状(SynthesisSegment/IAudioSegment)
voice→effect 音频段化 + 按段增量重渲染(段握柄 / 按段独立过链 cache[segment][stage] / 波形 + 播放逐段;提交①②③,§三.28)
插件多语言(i18n)适配(插件侧自译 + 静态全局 host context + manifest localizations)
扩展侧边栏信息增强(icon / 作者 / 简介 tooltip / 真实类别徽标)
voice 插件实战开发文档(plugin-development.md §5:音素 I/O / 音高双通道采样 / 快照 / note·part 属性约定 / 原生依赖打包 + LLM 版同步)
🗑️ 不再跟踪(已决 / 无跟踪价值)
传给插件的音符是否宿主侧先去重叠 —— 已决 :SDK 直传可重叠序列、去重叠归插件(单声部按需截断 / 和弦原味消费),见 78096bb/caecc3e
assembly 单数 vs assemblies 复数 —— 已决 :保持单数;classes 复数是因一个能力可有多入口类(如 format 导入+导出),但它们同属一身份、同住一 dll;多 dll 包用多 extensions[] 条目(共享一 per-package ALC)表达
文档数据集合接口统一 / IDataObject DIM 重构(effect 那套 IReadOnlyDataCollection 统一)—— §三.20 已定"不纳入";§三.21/22/24 已重做数据/事件/导航模型(IDataObject.WillModify 已实装,见已完成)
跟踪 2.0 重构(数据/SDK 分层、老插件兼容、效果器、属性面板)之后有意推迟的事项。每项均已确认可安全后补(加性/非破坏);某项排期时可从本 issue 拆出独立 issue。
🔴 高优先级
🟡 中优先级
🟢 低优先级
WriteAPI 已铺好,可不做isCollectible:true即可;当前走重启式安装器)runtimes/<rid>/native等)探测兜底 —— 当前原生依赖只走.deps.json,无目录探测兜底(托管 dll 有)🔵 未来大版本方向
IPlugin.GetExtension(id)字符串能力面)extern alias桥接)✅ 已完成(记录)
[CollectionBuilder]):Map/OrderedMap 及其可变/只读接口挂[CollectionBuilder],解锁[]字面量——含new()无法表达的接口目标= [](不能 new 接口);Map 由继承 Dictionary 改为组合、公有枚举统一产出IReadOnlyKeyValuePair,使单个 builder 通吃具体类与接口;只读接口空[]复用 Empty 单例(零分配);OrderedMap 保留覆盖语义与 RemoveAt/KeyAt/ValueAt 索引 API。连带:DataMap 内部字段由 Map 改原生 Dictionary(对外 IDictionary 契约不变)、TLP/CBOR 读写辅助方法形参 Dictionary→Map/IReadOnlyMap。非空 KV 字面量收益有限(元素是接口、new(...)与 BCL KeyValuePair 都不隐式汇入、须显式new ReadOnlyKeyValuePair<,>(...)),主要价值在空[]。独立测试MapCollectionExpressionTests(7 例)。提交39e1a9c。ExtensionRouting三合一——活实现解析(用户选择 / 内建优先 / packageId 序最小)+ 选择存 appSettings.json的ExtensionRouting字典 + 冲突聚合;工程只引身份 id、不存包 id,选中包缺失按默认策略回退(工程跨机可移植);format import/export 各为可路由身份;ExtensionSettingsManager改按 (packageId,id) 枚举;设置窗口「Extension Routing」页按类型分组(Voice/Effect/Agent Model/Format)、下拉显包名、专属图标;legacy 包 id 改用目录名(区分多包 + 反查包名,退役"legacy=空串");夹具V1.RouteConflict.A/B(format)+V1.VoiceConflict.A/B(voice) +tests/EXTENSION-ROUTING-TEST-CASES.md。提交1474ddb。IExtensionSettings;设置窗口「扩展」页;ExtensionSettingsStore单文件;设置按包分桶root[packageId][kind:extensionId]根治不同包同 id 串味,内建用(built-in)、legacy 用目录名、V1 包用反向域名 id;密钥 DPAPI/钥匙串;agent 复用存储层)IEffectProcessor(每段一个)+IEffectContext+IUpstreamAudioSegment;退役IEffectInput/Output/Change;自订阅自管失效;EffectGraph反应式 processor 图;回显轨端到端classes数组:退役class/import/export具名槽,改classes候选类清单、宿主按type所需接口扫描认领;assembly保持单数(一能力的入口类同住一 dll,多 dll 走多extensions[]条目共享一 per-package ALC)Invalid正式化为长期哨兵)+ 装箱优化(标签+字段联合)IDataObject.WillModify改前事件(merge 对偶语义,对齐 C++aboutToModify)SegmentSDK 形状(SynthesisSegment/IAudioSegment)cache[segment][stage]/ 波形 + 播放逐段;提交①②③,§三.28)🗑️ 不再跟踪(已决 / 无跟踪价值)
78096bb/caecc3eassembly单数 vsassemblies复数 —— 已决:保持单数;classes复数是因一个能力可有多入口类(如 format 导入+导出),但它们同属一身份、同住一 dll;多 dll 包用多extensions[]条目(共享一 per-package ALC)表达IDataObjectDIM 重构(effect 那套IReadOnlyDataCollection统一)—— §三.20 已定"不纳入";§三.21/22/24 已重做数据/事件/导航模型(IDataObject.WillModify已实装,见已完成)