4.1 KiB
4.1 KiB
变更提案: fix-clashmeta-flow-map-export
元信息
类型: 修复
方案类型: implementation
优先级: P1
状态: 已确认
创建: 2026-04-18
1. 需求
背景
当前 Clash Meta 订阅模板本身是合法的 block style YAML,但服务端在导出订阅时会重新执行
Yaml::dump(...)。由于 inline 深度设置过低,深层节点对象会被压成单行 flow map,
例如 TUIC 节点被输出为 { name: ..., alpn: [h3, h2, http/1.1], ... }。
在部分 Clash Meta 客户端中,这种超长单行 flow map 会触发:
Flow map in block collection must be sufficiently indented and end with a }
目标
- 修复 Clash Meta 订阅导出,避免代理节点被压成易出错的单行 flow map。
- 保持改动最小,仅影响
ClashMeta导出链路。 - 不改动模板文件和其他协议导出器。
约束条件
时间约束: 当前回合内完成修复与静态验证
性能约束: 不引入额外运行时依赖
兼容性约束: 不改动节点字段语义,仅调整 YAML 序列化风格
业务约束: 仅修复 Clash Meta;Clash / Stash 暂不联动修改
验收标准
app/Protocols/ClashMeta.php中 YAML 导出策略已调整,深层对象优先输出为 block style- 不再依赖单行 flow map 来表示
proxies中的 TUIC 等节点对象 - 改动范围限制在
ClashMeta导出逻辑与方案包记录 - 完成最小静态验证并明确运行验证受限原因
2. 方案
技术方案
将 ClashMeta 中依赖 Yaml::dump(...) 的默认风格选择,替换为显式的 block style YAML 渲染,
避免 proxies、proxy-groups 等深层结构被压缩成单行 flow map。
本次仅修改:
app/Protocols/ClashMeta.php的 YAML 渲染路径;- 在代码旁增加一行说明性注释,明确修复目的;
- 不改模板、不改节点字段构造、不改 Clash / Stash。
影响范围
涉及模块:
- ClashMeta 订阅导出: YAML 序列化风格调整
- .helloagents 方案包: 记录本次修复过程
预计变更文件: 2-4
风险评估
| 风险 | 等级 | 应对 |
|---|---|---|
| 导出 YAML 变得更“展开”,文件体积略增 | 低 | 只调整序列化风格,不改字段内容 |
同类问题在 Clash / Stash 中也存在,但本次未修 |
中 | 范围明确限制为 Clash Meta,后续可按需补修 |
| 本机无 PHP / vendor,无法直接做运行时生成验证 | 中 | 通过代码路径与参数语义做静态验证,并在结论中说明限制 |
3. 技术设计(可选)
本次为序列化参数修复,不涉及架构/API/数据模型设计。
架构设计
N/A
API设计
N/A
数据模型
N/A
4. 核心场景
场景: 导出含长 TUIC 节点的 Clash Meta 订阅
模块: Clash Meta 订阅导出
条件: 用户订阅中包含较长节点名、alpn 数组、udp-relay-mode 等字段
行为: 服务端生成 YAML 订阅文本
结果: 节点对象以 block style 输出,避免客户端在解析长单行 flow map 时失败
5. 技术决策
fix-clashmeta-flow-map-export#D001: 显式渲染 block style YAML,不再依赖 dumper 的默认风格选择
日期: 2026-04-18
状态: ✅采纳
背景: 问题的根源在序列化风格,而不是 TUIC 节点字段本身的构造。仅修改 Yaml::dump 参数后,服务器真值仍然返回单行 flow map。
选项分析:
| 选项 | 优点 | 缺点 |
|---|---|---|
A: 继续微调 Yaml::dump 参数 |
改动小 | 已被服务器真值否定,不能保证摆脱 flow map |
| B: 显式输出 block style YAML | 可完全控制 proxies / proxy-groups / rules 的格式 |
代码量更大,需要自定义渲染 |
| 决策: 选择方案 B | ||
理由: 服务器真值已经证明仅调参数不够,必须显式控制 YAML 输出风格,才能彻底避免客户端继续收到 - { ... }。 |
||
| 影响: 仅影响 Clash Meta 订阅的最终文本格式,不影响节点字段语义 |
6. 成果设计
设计方向
- N/A
视觉要素
- N/A
技术约束
- 可访问性: N/A
- 响应式: N/A