📄 一句话概括
接缝放错层的后果不是报错,而是静默无效——改动写进去了,树里两条并存,谁也没变。
📝 本节和前面几节的关系
8.2.1 定了四件事,这一节补上最容易翻车的一步:这些字段写在哪一层。
一、实测:两次【想在错的地方改东西】
- 想在顶层补丁里改预设内部的一条(
tool-presentation): stderr 打印patch: entry "tool-presentation" not found,只警告并跳过。 - 想在预设内部改宿主层的沙箱范围:dump 出来树里两条并存,宿主层那条原文一个字没动。
两次都没有报错——第一次给了一行警告,第二次连警告都没有。
二、为什么是【静默】无效
因为两层各自都是合法的写法,语法上没有毛病。
预设的 plugins 列表,是预设自己的装配清单;宿主层的 sandbox-policy,是进程级的策略。
你把 A 层的写法用在 B 层,系统能做的只有:要么告诉你【找不到】(警告并跳过),要么照单收下但管不着。
三、怎么判断该放哪层
两个问题:
- 它该活多久——跨会话的留宿主,随会话生灭的进预设(3.2.2)。
- 谁能改它——权限、沙箱、模型路由属于宿主;工具表、人格、输出格式属于会话。
两问过一遍,'哪里写' 基本没有悬念。
四、本课的四层栈,实盘对应
dsh --help 原话:profile 是一叠插件包补丁层,排在【你自己的覆盖】下面(4.2.1)。
实盘上你只碰两处:
- 插件的内置层(官方 bundle)——
package.json里列的 bundle。 - 你自己的那一层——profile 目录里的
cordis.patch.yml,以及命令行--patch。
改自己的层,别去戳别人的层——这是本课最省事的一条纪律。
五、动手 Demo:接缝放错层会怎样
两次实测,都是【想在错的地方改东西】:
tries = [("顶层补丁", "预设内部的一条"),
("预设内部", "宿主层的沙箱范围")]
for where, what in tries:
print(" 在 %s 改 %s -> 静默无效" % (where, what))
实跑输出:
--------------------------------------------------------------------
接缝放错层会怎样
--------------------------------------------------------------------
两次实测,都是【想在错的地方改东西】:
你想改什么 在哪一层改 实测结果
----------------------------------------------------------
预设内部的一条 顶层补丁 not found,只警告并跳过
宿主层沙箱范围 预设内部 宿主层原文一个字没动
----------------------------------------------------------
第二条是本轮新跑的实验:预设里塞了一条 `sandbox-policy`,
dump 出来树里**两条并存**,宿主层那条仍是
`DSH_PERMISSION_MODE ?? 'workspace-write'`。
结论:**哪一层的规矩,就在哪一层的写法里改**;
接缝放错层,不是报错,是**静默无效**——这才是最危险的。
第一次给了一行 not found 警告,第二次连警告都没有——所以不能靠【有没有报错】来判断改对了没有。
要靠 dump 出来对 diff——这是本课反复用的那个方法。
哪一层的规矩,就在哪一层的写法里改。
30 秒实验
- 用
--dump-config打出你自己的树,先找到【你自己的那一层】在哪。 - 随便改一个顶层字段,对比 diff 里是哪几行变了。
- 试着改一个预设内部的字段,看它给不给警告。
常见误区
- 错误:只要没报错,就说明改对了。——纠正:静默无效比报错更危险——报错至少告诉你没成,静默无效会让你以为成了。
- 错误:层级是官方的事,我只要写配置。——纠正:你自己也在某一层里——profile 目录里那个 patch 文件就是你的层,认识它才知道自己能改到什么范围。
- 错误:同一件事写在两层,哪层生效都行。——纠正:两层并存等于两本账——dump 里会出现两条同名项,以后排查时你会先怀疑人生。
自测三问(点开对答案)
1. 接缝放错层,最典型的症状是什么? —— **静默无效**——改动写进去了,树里两条并存,实际谁也没变。 2. 判断该放哪层,问哪两个问题? —— **它该活多久**(跨会话/随会话)和**谁能改它**(宿主/会话)。 3. 改完怎么确认真的生效了? —— **dump 出来对 diff**——不能靠【有没有报错】判断,因为有的错连警告都没有。- ☐ 下一节(8.3.1 最终项目:设计一套 Preset)
相关笔记
- 最终项目:设计一套 Preset —— 接着把四件事落成一套预设
- 注册也有生命周期 —— 四层补丁栈的出处
- 不要把 Preset 当成权限系统 —— 层放错的后果,在权限上最明显
- 🐳 DeepSeek Harness · 索引