🐳 第五章 Cordis让插件能够动态组合
📄 一句话概括

三轮补丁实验真跑:出现(insert +3 行)、消失(disable +1 行)、回来(enable 仍 +1 行)——回来不等于没发生过,配置树记下了变化的痕迹。

📝 本节和前面几节的关系

这一章前七节全是机制,这一节动手把【出现—消失—回来】三个阶段真的各跑一遍——用的还是 4.1.2 与 4.7 那套方法。

一、实验设计

三轮补丁,每轮 dump 一次配置树、和基线做一次 diff:

三轮分别对应 5.1 的装上、撤下与恢复——用配置层模拟动态组合的三个阶段。

二、实测:三轮 diff

第三轮是全实验最有意思的一处:系统留下了一行显式的 disabled: false。

三、为什么【回来】不是 0 行

因为【回来】不是【恢复到没改过】,而是又一次改变:

变化的痕迹被完整记下来——这正是 5.5.1 Fiber 账本思想在配置层的体现:能记账,才敢动态。

如果你想要【真正的无痕】,那得撤掉补丁本身、重新 dump——无痕不是系统的义务,可追溯才是。

四、实验的三条收获

五、动手 Demo:动手实验——让依赖出现,消失,再回来

真跑原文:三轮补丁与 diff 结果:

# 第一轮【出现】: insert 追加
cat > exp5_appear.yml <<'EOF'
- insert:
    - id: exp-extra-webfetch
      name: '@deepseek-ai/dsh-web-fetch-http'
EOF

# 第二轮【消失】: 停用 skill
cat > exp5_gone.yml <<'EOF'
- id: skill
  disabled: true
EOF

# 第三轮【回来】: 再打开
cat > exp5_back.yml <<'EOF'
- id: skill
  disabled: false
EOF

# 每轮 dump + diff(结果见输出)
dsh --profile web --patch ./exp5_back.yml --dump-config > b3.txt
diff baseline.txt b3.txt

实跑输出:

--------------------------------------------------------------------
动手实验——让依赖出现,消失,再回来
--------------------------------------------------------------------
  三轮补丁实验,模拟动态组合的三个阶段(全部真跑):

  第一轮【出现】——用 insert 补丁追加一件:

        - insert:
            - id: exp-extra-webfetch
              name: '@deepseek-ai/dsh-web-fetch-http'

        diff:+3 行(出处注释 + id + name)

  第二轮【消失】——把 skill 停掉:

        - id: skill
          disabled: true

        diff:+1 行

  第三轮【回来】——再把它打开:

        - id: skill
          disabled: false

        diff:+1 行  <- 不是 0 行!

  第三轮的 +1 行最有意思:配置树留下了一行显式的 disabled: false。
  **【回来】不等于【没发生过】——变化的痕迹被记下来了。**
  这正是 Fiber 式账本思想在配置层的体现。

三轮 diff:出现 +3、消失 +1、回来 +1(不是 0)。 回来那一行的意义:变化可追溯——系统记着这一件曾被关过。 insert 补丁验证了 4.2.1 抄的 schema 原文——无 id 补丁追加顶层,带 id 插入组内。

30 秒实验

  1. 复现三轮实验,把三份 diff 都存下来对比。
  2. 验证:把第三轮补丁撤掉重新 dump,是不是真的回到 0 差异。
  3. 想一想:如果第二轮停的是别的插件,第三轮的痕迹会长什么样?

常见误区

  1. 错误:把插件打开 = 恢复原状,diff 应该是 0。——纠正:回来是又一次改变——留下显式的 disabled: false,痕迹可追溯。
  2. 错误:insert 补丁只能在组里用。——纠正:无 id 的补丁条目追加顶层,带 id 的才往组里插(实测验证)。
  3. 错误:配置树的出处注释是调试残留。——纠正:那是设计——每一行都知道自己是谁改的。
自测三问(点开对答案) 1. 三轮实验各用什么补丁? —— 出现用 `insert`、消失用 `disabled: true`、回来用 `disabled: false`。 2. 三轮 diff 各是多少行? —— **+3、+1、+1**——第三轮不是 0,因为变化本身要留痕。 3. 第三轮 +1 行说明什么? —— **回来不等于没发生过**——系统记录变化史,可追溯是义务,无痕不是。

相关笔记