Skip to content

[Bug] 为当前网页添加规则会破坏订阅 YAML 缩进并导致 config.json 规则/节点丢失 #349

Description

@huiyang-work

版本信息 Environment

  • ClashMac: v27.1.2 (216)
  • Core: Mihomo Meta v1.19.29
  • macOS: Darwin (Apple Silicon)
  • 模式: Rule 模式,非 TUN,走系统代理 127.0.0.1:7890

问题描述 Problem

我在远程订阅(Wget,Clash YAML/12951 条规则)中,通过 GUI 的「为当前网页添加规则」给 aism.mengniu.cn 添加了一条 DOMAIN-SUFFIX 网站规则。保存后发生了两个连锁问题:

1) 订阅 profile(profiles/Wget.yaml)的 YAML 被写坏

GUI 把这条用户规则以错误的缩进插进了 rules: 列表:

rules:
  - DOMAIN-SUFFIX,aism.mengniu.cn,PASS   <- 2 空格缩进(GUI 写入)
- DOMAIN,aistudio.google.com,🤖 Gemini   <- 0 空格缩进(订阅原始内容)
- DOMAIN,accounts.google.com,🤖 Gemini

同一 rules: 列表项混用 2 空格 / 0 空格缩进,导致 YAML 不可解析:

yaml: line 6: did not find expected key

切回该配置时 ClashMac 直接报「配置文件错误」,整个订阅无法加载。

2) 运行时配置(work/config.json)被重写,规则与节点全部丢失

随后 ClashMac 重新部署后生成新的 work/config.json,其中 rules 只剩 2 条(一条 AND,...,REJECT 和一条 DOMAIN-SUFFIX,aism.mengniu.cn,PASS),订阅自带的 google/youtube 等 1 万多条规则和 18 个代理节点全部丢失、proxies 为空。结果是:

  • Google 等海外网站全部无法访问(落到 REJECT)
  • 内网/订阅里的分流规则失效
  • 只能手动把完整规则补回 config.json 才恢复

期望行为 Expected

  • 「为当前网页添加规则」写入用户规则时,缩进应正确追加到现有列表(保持与订阅原始缩进一致),不应破坏整个 YAML。
  • 重新部署 / 切换 profile 时,work/config.json 应保留源订阅完整规则与节点,不能只留 1~2 条。

复现步骤 Steps to reproduce

  1. 导入一份带大量 rules:(0 空格缩进)的远程 Clash YAML 订阅;
  2. 用浏览器「为当前网页添加规则」(如给任意域名加 DIRECT/PASS);
  3. 查看 ~/Library/Application Support/ClashMac/profiles/<订阅>.yaml
    • 新规则以 2 空格缩进插入,与 0 空格缩进的原始列表混排 → YAML 语法错误;
  4. 切回/重新部署该配置,work/config.json 中 subscribers 自带的规则、节点丢失。

参考 Related issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions