📄 一句话概括
三轮补丁实验真跑:出现(insert +3 行)、消失(disable +1 行)、回来(enable 仍 +1 行)——回来不等于没发生过,配置树记下了变化的痕迹。
📝 本节和前面几节的关系
这一章前七节全是机制,这一节动手把【出现—消失—回来】三个阶段真的各跑一遍——用的还是 4.1.2 与 4.7 那套方法。
一、实验设计
三轮补丁,每轮 dump 一次配置树、和基线做一次 diff:
- 第一轮【出现】:用
insert补丁往顶层追加一件新插件。 - 第二轮【消失】:把
skill停用(disabled: true)。 - 第三轮【回来】:把它打开(
disabled: false)。
三轮分别对应 5.1 的装上、撤下与恢复——用配置层模拟动态组合的三个阶段。
二、实测:三轮 diff
- 出现:+3 行(1 行出处注释 + id + name)——insert 补丁生效。
- 消失:+1 行——和 4.1.2 一模一样。
- 回来:+1 行——不是 0 行!
第三轮是全实验最有意思的一处:系统留下了一行显式的 disabled: false。
三、为什么【回来】不是 0 行
因为【回来】不是【恢复到没改过】,而是又一次改变:
- 它留了一行字告诉系统:这一件曾被关过,现在被打开了。
- 出处注释还写着【这个补丁来自哪个文件】。
变化的痕迹被完整记下来——这正是 5.5.1 Fiber 账本思想在配置层的体现:能记账,才敢动态。
如果你想要【真正的无痕】,那得撤掉补丁本身、重新 dump——无痕不是系统的义务,可追溯才是。
四、实验的三条收获
- insert 补丁实测可用:无 id 的补丁条目往顶层追加,带 id 的往组里插——4.2.1 抄的 schema 原文被验证。
- 痕迹被保留:变化史可追溯,排查时能知道谁动过。
- 方法再次闭环:补丁做加减法、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 秒实验
- 复现三轮实验,把三份 diff 都存下来对比。
- 验证:把第三轮补丁撤掉重新 dump,是不是真的回到 0 差异。
- 想一想:如果第二轮停的是别的插件,第三轮的痕迹会长什么样?
常见误区
- 错误:把插件打开 = 恢复原状,diff 应该是 0。——纠正:回来是又一次改变——留下显式的
disabled: false,痕迹可追溯。 - 错误:insert 补丁只能在组里用。——纠正:无 id 的补丁条目追加顶层,带 id 的才往组里插(实测验证)。
- 错误:配置树的出处注释是调试残留。——纠正:那是设计——每一行都知道自己是谁改的。
自测三问(点开对答案)
1. 三轮实验各用什么补丁? —— 出现用 `insert`、消失用 `disabled: true`、回来用 `disabled: false`。 2. 三轮 diff 各是多少行? —— **+3、+1、+1**——第三轮不是 0,因为变化本身要留痕。 3. 第三轮 +1 行说明什么? —— **回来不等于没发生过**——系统记录变化史,可追溯是义务,无痕不是。- ☐ 下一节(5.9 为什么 Cordis 特别适合 Agent Runtime)
相关笔记
- 动手实验:删除 Skill,观察能力是否还在 —— 消失那轮就是它的重演
- 注册也有生命周期 —— insert 语义的出处
- Fiber:记录插件实例的一段生命周期 —— 痕迹思想的账本版
- 🐳 DeepSeek Harness · 索引