标准实验组
实验:dsh-custom
Experiment · 标准实验组dsh-custom
EXPERIMENT
实验记录:dsh-custom(DeepSeek Harness + dsh-opencode-port 装配层)— 标准实验组
11
实验11 三 preset 端到端工具面与技能目录对账
实验设计
- 控制组为内置
standard(纯净链路);实验组为opencode-standard(order 11) /opencode-creator(order 12) /opencode-ptc(order 13) 三个新模式。观测指标为模型实际可见的工具数、oc_*别名可见性、模式专属工具差异、技能目录条数、以及「派生 45 件」与「模型可见 42 件」的口径差。扰动:无故障注入(纯对账)。
执行数据
- 取证通道为会话日志
~/.dsh/sessions/<编码 cwd>/<id>/session.v4.jsonl.zstd(多帧 zstd,按魔数切帧解码),取agent-preset/selected、system/message、request/header.tools[]、user/message的<available-skills>四处;探针脚本$MISSION/_build/opencode-port/session_probe.js --dump-system <会话id>;四份探针证据evidence/session-probe-{builtin-standard,opencode-standard,opencode-creator,opencode-ptc}.json与evidence/skill-catalog-runtime.txt;时间戳 2026-10-11;复核由 bundle 审查轮独立复算(evidence/口径已对账)。
观测结果
- 工具面实测 内置 standard 31 / opencode-standard 37 / creator 40 / ptc 1。37 相对内置净增 6 个
oc_*(oc_explore/oc_architect/oc_requirement/oc_search/oc_reflection/oc_pdf)、零缺失;creator 在 37 之上再增cordis_inspect_list/cordis_inspect_query/plugin_manager共 40;ptc 工具目录坍缩为单run_code(其余全部不在顶层目录,含workflow被显式禁用)。oc_*在内置 standard 会话出现 0 次 → 三模式的 worker 编队对纯净模式不可见。技能目录:三模式各 42 条,内置 standard 0 条(本 cwd 亦无.dsh/skills/.agents/skills);派生目录 45 件中 3 件带disable-model-invocation: true(opencode-config/opencode-capability-audit/opencode-capability-extension),45 − 3 = 42 与运行时逐条一致。browser-use(frontmatter name,即browser-harness)在列。
量化指标
- 工具数 31 → 37(+6)/ 40(+9)/ 1(−30);
oc_*可见性 6/6 仅新模式、纯净模式 0;技能目录 0 → 42(差 45−3);模式专属差异 standard↔creator 3 处、standard↔ptc 1 处、creator↔ptc 4 处(键级 diff);对账缺口 0(42 条可完全用disable-model-invocation解释,非缺失)。
控制论解读
- 属 T 环(执行器) 的装配面测绘 + E 环(传感器) 的可见性边界。控制律为「声明层 toolFilter/行定义 → 运行时工具目录」的前馈映射:装配层把内核的通用执行器(
subagent)展开为具名 worker 编队(7 行、maxDepth: 0、各带toolFilter),等于给执行器阵列装上名字与限幅器。关键稳定性结论是模式隔离:oc_*对纯净模式不可见(0 命中),说明「最小必要破坏性范围」在工具面层面被真实执行——装配层没有污染基线。ptc 的 1 工具不是能力损失而是调用约定变化(能力经run_code内联 SDK 间接可达),但顶层目录坍缩意味着 persona 的「直接调用 X 工具」措辞在 ptc 下成为空指向(见实验12)。
链接
- 所属 AC 章
ch-tool(T 环)/ch-eval(E 环);关联 KT:KT-exp-011(本实验)、KT-case-008(dsh-custom 画像)、KT-case-007(opencode-custom);关联案例03-cases/dsh-custom.md、03-cases/opencode-custom.md;证据回链06-experiments/opencode-custom.md实验2/实验6(P 环委派与 skill 加载的内核侧对照);回链 MD 镜像05-md/(本轮待派生)。
12
实验12 persona 遮蔽与 persona 税
实验设计
- 控制组为宿主
$PROFILE/cordis.patch.yml的system-prompt.personaPrefix(七段纪律,含已过期内容);实验组为 bundlepersona.md的 15 节化用层(三模式persona.prefix)。观测指标为两侧字符数、会话系统提示中谁出现、标题撞名与合法重叠串、以及 ptc 下 persona 与工具面的指向一致性。扰动:无注入(纯文本层对账)。
执行数据
- 来源
evidence/a12-persona-scope-evidence.json(inputs记 bundlecordis.patch.ymlsha2566e903497…、persona.mdsha256f39ce841…、宿主 patch sha25670efba5e…)、evidence/persona-behavior-markers.json;运行时取自四份会话日志的装配后系统提示全文(E1 复算);源码级机制核对$DSH/packages/preset/persona/src/index.ts:1-14,62-68(文件头注释:mounted inside an agent preset it *shadows the deployment persona* for that one session)与tests/persona.spec.ts:32;时间戳 2026-10-11。
观测结果
- 宿主
personaPrefix= 2790 字符 / 8 小节;bundlepersona.md= 8018 字符 / 15 节(≈3084 tokens);内置 standard 的persona.prefix仅 54 字符。四份会话系统提示中,判别串「成本意识」「MEMORY 硬门禁」「联网代理纪律」全为 false → 宿主七段纪律在所有会话都不生效,被 preset 的persona行遮蔽(机制与源码一致:preset persona 与宿主注册同名 sectiondeployment:persona-prefix,后者被替换)。系统提示字符数:内置 standard 5594 / 三模式 13658(15 小节齐备、0 命中禁用字面量[GATE]/Ctrl+T/variant/http_proxy)/ ptc 53826(+40168,来源是run_code的内联 SDK 与工具说明)。两侧存在标题撞名委派纪律/留档规范/编码安全,与合法重叠串reflection_add、dsh-v0.2.1-alpha.2(已登记,非泄漏)。宿主那份含过期内容(「默认模型为opencode-go/deepseek-v4-flash,deep 变体留给 ≥13 分场景」),与本机实际默认模型opencode-go-tmp/deepseek-v4.1-flash不一致且 DSH 无变体概念。ptc 空指向:persona.md:26写「本模式提供subagent(通用)、oc_explore…不要一律用subagent」,而这些名字在 ptc 顶层工具目录里不存在,persona 未按 presentation mode 分支。
量化指标
- persona 字符 2790(宿主)→ 8018(bundle,×2.87);系统提示 5594 → 13658(×2.44)→ 53826(×9.62);persona 税 ≈ +8064 字符/请求(三模式)、+48232 字符/请求(ptc,约 +40 KB);宿主纪律生效 0/4 会话(遮蔽率 100%);标题撞名 3 处、合法重叠 2 处、过期条目 1 条;ptc 空指向 1 处(§二 worker 清单)。
控制论解读
- 属 M 环(状态/上下文预算)+ E 环(配置态可观测性)。控制律为「同层覆盖(shadowing)」:persona 是每个请求都要付的固定上下文税,遮蔽让宿主纪律从「活配置」变成「死配置」——不生效但仍留存在文件里,形成隐藏状态(未生效的分支),这正是 M 环最怕的「状态估计与实际不一致」。风险不在于税本身(8018 字符换 15 节行为纪律,性价比可接受),而在于无 preset 的回落路径:一旦某会话不挂 preset persona(换 profile / preset 行被禁用 / 挂载失败回落),这份含过期模型的七段纪律会突然生效并与现行 persona 并存冲突——判据层应把「宿主 personaPrefix 是否被遮蔽」做成可观测项,而不是靠人记得。ptc 的 53826 字符则是税与收益脱钩的极端样本:上下文成本涨到 9.6 倍,而 persona 的指令形状("调用 X 工具")与 ptc 的"只能直接调
run_code"不一致,模型必须自行翻译——同一份 persona 在不同 presentation mode 下的语义有效性不同,属装配层的隐性不一致。
链接
- 所属 AC 章
ch-memory(M 环)/ch-eval(E 环);关联 KT:KT-exp-012(本实验)、KT-ctrl-002(状态估计/观测噪声);关联案例03-cases/dsh-custom.md、03-cases/dsh-custom-diff.md;证据回链06-experiments/opencode-custom.md实验4(协议层软约束)与实验10(提示词级门禁);回链 MD 镜像05-md/(本轮待派生)。
13
实验13 bundle 门控假阳性与修复(判据脆性)
实验设计
- 控制组为 bundle 自家门控
verify_bundle.py的历史 PASS 记录(README §8 验收表 +evidence/verify-bundle-13checks.out.txt);实验组为新鲜复跑同一门控。观测指标为 13 项检查的逐项结论、FAIL 项的报错原文、漂移根因的可复算证明、修复后复跑结论。扰动:外部无关联扰动——宿主 patch 被 GUI 写回一行 UI 偏好(ui-theme.fontSize: 16),与 bundle 无任何因果关系。
执行数据
- 复跑命令
PATH=<nvm-bin> python3 $BUNDLE/verify_bundle.py($BUNDLE=/home/zako-mio/.dsh/presets/opencode);根因反推用「删行重算 sha256」:把宿主 patch 中该行删掉后重算 =70efba5e6873a60ed1480e5f9a6eb0d83faaaa8d95344ebc2fc5dffec25339b4,与provenance.json/a12-persona-scope-evidence.json记录值完全一致(MATCH);宿主 patch mtime2026-10-11 05:55:08(晚于 A12 取证 05:39);修复动作 =build_provenance.py指纹口径由整文件 sha256 改为 scoped_digest(只取 bundle 实际消费的字段system-prompt.personaPrefix),随后重跑门控与build_provenance.py并重新生成验收证据文件;时间戳 2026-10-11。
观测结果
- 新鲜复跑第 11 项 FAIL,报错原文
provenance drift: 八、环境事实: source drifted (70efba5e6873 -> 9c00a1a14339);前 10、12、13 项 PASS。根因经 sha256 反推锁定为宿主 patch 被 GUI 写入一行ui-theme.fontSize: 16(用户调字号),与 bundle 内容无关 → 假阳性。修复后verify_bundle.py13/13 PASS,验收证据文件重新生成。附带事实:verify_bundle.py唯一写操作是tempfile.TemporaryDirectory()内的rows.json(:389-391),不污染仓库,可安全复跑。
量化指标
- 门控项数 11 → 13 项(本轮新增 check 13 = A12 取证);复跑前 PASS 12/13(第 11 项 FAIL);修复后 PASS 13/13;漂移根因定位置信度 = MATCH(sha256 精确等于记录值,非近似);被误纳判据的无关字段 1 个(
ui-theme.fontSize);修复后判据作用域 1 个字段(system-prompt.personaPrefix);假阳性触发概率 = 任意一次 GUI 偏好写回(高频)。
控制论解读
- 属 E 环(传感器/验证器)自身的可信度——是「对传感器的传感器」。控制律本应是「源漂移 → 报警」,但判据把与 bundle 无因果关系的整文件字节纳入观测面,等价于给传感器接上了一个高噪声信道:宿主 GUI 每次写回都注入一次扰动,于是门控红灯的语义被稀释。这是假阳性比漏报更贵的典型——它会训练使用者忽略红灯,最终把真漂移一起放过(噪声淹没信号,E 环信噪比崩塌)。修复的实质是把判据从「文件指纹」下沉到「被消费字段指纹」:观测面必须等于因果面,判据须绑被消费字段而非整文件指纹。修复后仍保留上游漂移检测能力(
plan-modesection 的覆写源仍在指纹覆盖内,见实验11 的 Δ4),即降噪未牺牲灵敏度。
链接
- 所属 AC 章
ch-eval(E 环/传感器);关联 KT:KT-exp-013(本实验)、KT-ctrl-004(鲁棒控制/不确定性)、KT-ctrl-002(观测噪声);关联案例03-cases/dsh-custom.md;证据回链06-experiments/opencode-custom.md实验4/实验10(软门控的可靠性依赖模型遵循度 → 本实验补充「确定性门控的可靠性依赖判据作用域」);回链 MD 镜像05-md/(本轮待派生)。
14
实验14 安装/回滚可逆性演练
实验设计
- 控制组为安装前基线组合树(
dsh --profile web --dump-config,既有 4 个 preset:standard/ptc/minimal/cordis)与宿主 profile patch 备份件;实验组为安装 → 卸载 → 还原 patch → 重装四个阶段。观测指标为三行preset-opencode-*的出现/消失、既有 preset 区域是否逐字节一致、/permission档位数、插件计数、重装后组合树是否与首次安装后逐字节一致。扰动:真实执行一轮完整卸载(受控、可还原)。
执行数据
- 命令链
dsh --profile web --patch ~/.dsh/presets/opencode/cordis.patch.yml --dump-config(干跑,exit 0,三行正常出现、既有 4 preset 未污染)→plugin_manager install_bundle(绝对路径)→remove_bundle dsh-opencode-port→ 还原 profile patch 备份件 → 恢复 patch + 重装;备份件位于~/.dsh-backups/opencode-port-20261011/;组合树差分$MISSION/evidence/dump-config-{baseline,installed}.yml;时间戳 2026-10-11。
观测结果
- 干跑阶段三行
preset-opencode-standard/creator/ptc正常出现、既有 4 个 preset 未被污染 → 放行安装。安装返回{"stage":"enable","target":"dsh-opencode-port","enabled":true,"changed":true,"application":"applied","packageResult":{"exitCode":0},"warnings":[]},三行enabled=true、fiberPhase=active、无 error;插件总数 188 → 191(+3)。A4 纯净链路回归:安装前后既有 preset 区域逐行对比仅多出 1 行「新层归属」注释(612a613 > # == dsh-opencode-port),既有 preset 区域逐字节一致。回滚演练:remove_bundle dsh-opencode-port→application: applied,三行preset-opencode-*消失,既有 preset 区域 vs 安装前基线逐字节一致(卸载只移除自己的三行);还原 profile patch 备份件后/permission回到 3 档、plugin-manager覆盖消失;恢复 patch + 重装后组合树与首次安装后逐字节一致。权限档位:安装后permission行含 5 档(read-only/workspace-write/opencode-plan(read-only)/opencode-build(workspace-write)/danger-full-access),defaultPreset: read-only未变;卸载后回到 3 档。组合树整体差分 0 行删除 / 1990 行新增,preset-opencode由 0→3。
量化指标
- 可逆性 4/4 阶段通过(干跑/安装/卸载/重装);既有 preset 区域字节差异 = 1 行注释(0 处语义变更);插件计数 188 → 191 → 188(净 Δ = +3,卸载后归零);权限档 3 → 5 → 3;重装后组合树与首次安装后逐字节一致(差异 0);备份件
~/.dsh-backups/opencode-port-20261011/1 套。
控制论解读
- 属 T 环(执行器)+ R 环(闭环可逆性),是「受控可逆性」这一实验红线的正面样本。控制律为「先干跑(前馈预测)→ 再应用(执行)→ 每步自带验收(传感)→ 可回滚(反向执行器)」的四段式,等价于给装配动作加双向执行器 + 状态快照:卸载只移除自己的三行、既有区域零语义变更,说明 bundle 的作用域是封闭且可判定的(没有"改一处、坏一片"的耦合)。「重装后逐字节一致」比「卸载干净」更强——它同时证明安装是幂等的(同输入同输出,无隐藏状态累积),这是把装配层当控制器时最关键的稳定性性质:可回滚 ≠ 可重放,本实验两者都测了。唯一留档风险是 L18 已自述的不可移植性(persona 含本机绝对路径、
node_modules28 个符号链接指向本机源码树):在本机可逆,换机即失效——可逆性的成立以环境不变为前提。
链接
- 所属 AC 章
ch-tool(T 环)/ch-reflection(R 环闭环);关联 KT:KT-exp-014(本实验)、KT-ctrl-001(闭环反馈/稳定性);关联案例03-cases/dsh-custom.md;证据回链06-experiments/opencode-custom.md实验2(subagent_depth限幅)与实验7(产出/验证分离);回链 MD 镜像05-md/(本轮待派生)。 - | 实验 | 场景 | 控制论环节 | 结果 | 关键量化 |
- |------|------|-----------|------|---------|
- | 11 | 三 preset 工具面/技能目录对账 | T 环 + E 环 | 编队可见、纯净模式零污染 | 工具 31/37/40/1;技能 0/42/42/42;口径差 0 |
- | 12 | persona 遮蔽与 persona 税 | M 环 + E 环 | 宿主纪律 100% 遮蔽;ptc 空指向 | 2790 → 8018 字符;提示 5594/13658/53826;撞名 3 |
- | 13 | 门控假阳性与修复 | E 环(传感器自身) | FAIL → scoped_digest → 13/13 PASS | 判据作用域 1 字段;假阳性根因 MATCH |
- | 14 | 安装/回滚可逆性 | T 环 + R 环 | 四阶段全通、幂等可重放 | 既有区域 0 语义变更;188→191→188;3→5→3 档 |
整体控制论结论
dsh-custom的本质是「强内核 + 薄装配层」——与opencode-custom的「弱内核 + 强装配层」恰好互补。内核已自带 T 环硬约束(沙箱档位 fail-closed、spill 限幅、session 事件溯源)与 M 环基础设施(append-only session + compaction + FTS5 检索),装配层因此不需要补内核,只需补编队(具名 worker +oc_*别名)、策略库(45 派生 skill)与行为纪律(persona)三件事;实验11 证明这三件事的可见性边界是干净的(纯净模式 31 工具 / 0 skill,零污染)。真正的薄弱点不在内核也不在编队,而在装配层的两个语义接缝:① 遮蔽造成的隐藏状态(实验12:宿主 2790 字符纪律 100% 不生效却仍留存,回落路径上会突然复活且含过期内容);② 判据的观测面大于因果面(实验13:整文件指纹把 GUI 偏好写回误判为源漂移,E 环信噪比被稀释)。实验14 则给出正面证据:装配动作本身是封闭、幂等、可双向执行的(卸载零语义外溢、重装逐字节一致),说明「可逆性」这一红线在本装配层上是可工程保证的,而非口头承诺。综合判据强度梯度(沿用 opencode-custom 的结论框架):运行时硬阻(沙箱档位 fail-closed)> 确定性脚本门控(verify_bundle.py,但作用域必须收紧)> 声明层(toolFilter 行)> 纯提示词(persona 纪律);建议后续把 persona 的「按 presentation mode 分支」与「遮蔽态可观测」两项下沉为声明层或门控项,避免 M 环隐藏状态长期累积。
15
实验15 v1.5 新机制 · 本库自跑行为实验(2026-10-13)
15
实验15 门控执行通道
实验15 门控执行通道 run_gate(N1)——三层判据自跑
实验设计
- 控制组 = 通道的「窄性不变量」静态契约(
policy.js的解释器 / roots 白名单表);实验组 = 三件判据的真跑(单元测试 / 策略断言 / 变异体负向自检)。观测指标 = 测试与断言通过数、变异体判死率、只读 worker 的构造性排除。扰动:变异体注入(对策略实现打 10 个已知变异)。
执行数据
cd ~/.dsh/presets/opencode/plugins/dsh-opencode-gate-runner && node --test tests/*.test.mjs;node ~/.dsh/presets/opencode/check_gate_policy.mjs;python3 ~/.dsh/presets/opencode/check_gate_channel_selftest.py;node v24.19.0(PATH 引导后);时间戳 2026-10-13。
观测结果
- 单元测试 57/57 通过(10 suites / fail 0 / skipped 0 / 187 ms);策略断言 23 passed, 0 failed(含工作区令牌
workspace与 4 条解释器映射窄性不变量);变异体负向自检 10 个变异体全部被判死、控制组零报错,且三 preset 各自「顶层行 1 个 / config 契约符合 / 只读 worker 构造性排除」。
量化指标
- 单元测试 57/57(100%);策略断言 23/23;变异体判死 10/10;只读 worker 排除 3/3 preset;失败 0。
控制论解读
- 属 E 环(评估 / 传感器)的自身可信度——判据不仅「有」,而且能判假(变异体判死 10/10 是「非恒真」的直接证据),这正是 v1.4 缺失的一环(v1.4 时产出方无法自跑门控,E 环只能由父层代跑)。
run_gate的窄参数面(脚本路径 + argv、roots / 扩展名白名单、无内联代码通路)把「执行能力」与「任意 shell」分离,使 E 环在不放弃 fail-closed 前提下恢复。
链接
- 所属 AC 章
ch-eval/ch-tool;关联 KTKT-exp-015、KT-ctrl-004;关联案例03-cases/dsh-custom.md§2;证据回链…1011-迁移适配-E环门控通道与R环纠正/arch/ADR-010.json(proposed)。
16
实验16 R 环 R-A 链(N2)——字节级链路 + 容量判据
实验设计
- 控制组 = 候选目录与正文的成对记录(落库记录里的 sha256);实验组 = 独立复算每一段正文与其候选的字节关系。观测指标 = 复算成立的段数 / 总段数、容量档位(hard / soft)、段长分布。扰动:无(纯复算)。
执行数据
python3 ~/.dsh/skills/opencode/dsh-reflection/scripts/verify_landed_chain.py;python3 ~/.dsh/skills/opencode/dsh-reflection/scripts/memory_capacity_check.py;目标~/.dsh/MEMORY.md、候选目录~/.dsh/reflection/candidates/;时间戳 2026-10-13。
观测结果
- 链路复算 段 14 条,逐条全部成立;判据自带诚实边界声明(只证「该段正文 ↔ 该候选的落库记录」成对,⛔ 不证「候选文字产出了该段」)。容量:
chars=5198 / bytes=10815 / lines=57 / segments=14;段长 max 2642 B、median 530 B、max 占比 25%(未触「单段占比 >50%」的零和派生限);tokens 估算 cl100k=4291 / o200k=3425;band=soft(自愿软限chars>5000被触及),hard 限(lines>200/bytes>25000)未触,exit_code=0。
量化指标
- 链路成立 14/14;hard 限余量 lines 143 / bytes 14185;soft 越限 1 项(chars 5198 vs 5000,自愿纪律、无权威依据);段长中位 530 B;候选 15 份 / archive 1 份。
控制论解读
- 属 R 环(反馈闭环)+ M 环(状态估计)。v1.4 判 R 环「只剩纪律文本、没有执行器」;本轮自跑证明链路已接通且可机检——候选 → 审阅 → 落库三段都有可复算的字节凭据。soft 越限是设计内的:软限属自愿纪律,它触发的是「下一轮该考虑精简」的提示而非故障,正是零和预算(新增一条 ⇔ 退役或下沉一条)该起作用的位置。
链接
- 所属 AC 章
ch-reflection/ch-memory;关联 KTKT-exp-016、KT-ctrl-001、KT-ctrl-002;关联案例03-cases/dsh-custom.md§4 / §6;证据回链…/1011-全面适配性迁移分析/arch/ADR-012.json(proposed,门控 6/6)。
17
实验17 沙箱真实强制(N3)——真 spawn + 真写盘
实验设计
- 控制组 =
danger-full-access档不经confine的写入(证「环境本身可写」);实验组 =read-only与workspace-write两档经confine后的真实 spawn 与真实写盘尝试。观测指标 = 三档的enforcement与argv0、写/tmp与写工作区的成败、full-access 的 wrap 行为。扰动:无(受控探针,工作区为临时目录)。
执行数据
cd /home/zako-mio/dsh && node --import tsx/esm /home/zako-mio/.dsh/presets/opencode/verify_sandbox_enforcement.mts(DSH_SANDBOX_AUDIT_PORT默认 3098,与线上 3080 隔离;工作区为mkdtempSync临时目录);node v24.19.0;时间戳 2026-10-13。
观测结果
sandbox provider: 已挂载;[read-only] enforcement=full argv0=bwrap→ 写/tmp被拒(Read-only file system)、写工作区 被拒;[workspace-write] enforcement=full argv0=bwrap→ 写工作区 成功、写工作区之外 被拒;[danger-full-access]的confine仍返回受限 argv(符合契约),而不经confine时写工作区成功 ⇒ 前面的「被拒」确由沙箱所致、非环境不可写。整体PASS,退出码 0。
量化指标
- 三档 enforcement 均 full;runner 链选中 bwrap;受控写探针 4 次,符合预期 4/4;负向控制 1 次(full-access 不 wrap)成立。
控制论解读
- 属 T 环(执行器)的硬限幅。这是对 v1.4「本机无可用沙箱后端 → 一律 fail-closed」的直接行为级证伪:本机沙箱真的在拦,且拦的是「沙箱之外」而非「环境不可写」——控制组设计(full-access 不经
confine可写)正是为排除后一种解释而设。⛔ 归因纪律:这是环境事实(后端从不可用变为可用),不是装配层新增隔离能力,故 8 维沙箱分维持 4/4。
链接
- 所属 AC 章
ch-tool;关联 KTKT-exp-017、KT-ctrl-031、KT-ctrl-033;关联案例03-cases/dsh-custom.md§3;证据回链 bundleREADME.md§4.1 与~/.dsh/profiles/web/cordis.patch.yml(permission 5 档)。
18
实验18
实验18 dsh-config 声明账本门控(N4)——四查 + 负向自检
实验设计
- 控制组 = 声明账本自身的一致性契约(源指针 / 层归属 / 层间冲突 / 台账一致性);实验组 = 判据真跑与负向自检。观测指标 = 四查结论、负向用例数与被抓率、附带发现的「死配置」条数。扰动:负向夹具注入(15 例,含 4 组控制组)。
执行数据
cd ~/.dsh/presets/opencode && python3 verify_dsh_config.py --check;python3 verify_dsh_config.py --selftest;时间戳 2026-10-13。
观测结果
- 四查 全过(
PASS: dsh-config 声明账本一致),其中 C4 迁移台账 42 条任务通过枚举 / 证据 / 判据三查;负向自检 15 用例通过(含 4 组控制组),逐例断言「枚举外状态必须被抓 / 悬空证据必须被抓 / 空文件不得算证据 / 空判据必须被抓」;附带输出 9 条 C3「死配置」note(如tool-todo.allowParallelInProgress、workflow-ptc.provider等在赢家层 config 里不存在 ⇒ 整块替换后不生效)。
量化指标
- 四查 4/4 PASS;负向用例 15/15 被抓;台账 42 条全过三查;死配置 9 条(note 级,非 FAIL)。
控制论解读
- 属 E 环 + SP 环。它把「改了没生效」这类静默失效从「靠人记得」变成可机检:C3 逐条指出「谁覆盖了谁、哪一层设的键在赢家 config 里不存在」——这正是「配置层 last-write-wins + config 整块替换」语义下最危险的一类缺陷(无报错、无告警,只有生效值与预期不符)。9 条死配置 note 本身即该判据的价值证明:它们不阻断交付,但暴露了宿主 bundle 层的冗余设置。
链接
- 所属 AC 章
ch-eval/ch-planning;关联 KTKT-exp-018、KT-ctrl-002、KT-ctrl-031;关联案例03-cases/dsh-custom.md§7.5;证据回链…/1011-全面适配性迁移分析/arch/ADR-011.json(proposed,门控 6/6)与~/.dsh/skills/opencode/dsh-config/{claims.yaml,conflicts.md}。 > 口径与限制(先声明,避免误读):契约 §2.7② 要求「实验层只补新机制、不重跑既有实验」。本轮新增的四个机制均由迁移线实跑取证(本库只读引用),本库未新增自跑行为实验,原因是两条硬约束:① preset 会话无法程序化创建(CLI 只有profile/plugin/dump-config*/headless <task>,无 preset 选择项)⇒ 行为类实验须由用户开新会话;② 本库红线要求对~/.dsh/绝对只读,故不复跑会写状态的门控脚本。以下每条均为他线实跑结论 + 本库只读复算**的组合,并标注证据级别。 - | # | 新机制 | 机制内容 | 他线实跑取证 | 本库只读复算 | 环 |
- |:--:|---|---|---|---|:--:|
- | N1 |
run_gate门控执行通道(ADR-010) | 三 preset 各 +1 顶层gate-runner行(本地插件dsh-opencode-gate-runner):只收「脚本路径 + argv 数组」,⛔ 无内联代码 / shell 解析;roots 与扩展名白名单;超时 120s/600s;输出 16KB 封顶后 spill | 负向用例 18 → 30 条;node --test57/57(r11 实测;r09 为 56/56);真实调用可归属(子会话86bdb014-…)——evidence/r09-e9-node-test.out.txt| 快照bundle/cordis.patch.yml中gate-runner行 ×3;verify_bundlecheck 14 已入 20 项判据 | E / T | - | N2 | R 环 R-A 载体(ADR-012) | 候选 → 主 Agent 审阅 → 落库的显式链;零和预算 + 生命周期五件 + 容量口径 | ADR-012 门控 6/6 PASS;候选落 DSH 目录;
MEMORY.md正文落库——evidence/r09-adr012-gate-rerun.out.txt、r09-memory-body-landed.out.txt|~/.dsh/reflection/存在(candidates15 份 /archive1 份);~/.dsh/MEMORY.md14 个 § 段 / 10815 B / 57 行 / 14 条[src:];dsh-reflectionskill 存在(快照reflection段) | R / M | - | N3 | 沙箱真实强制(环境事实更正) | 本机
bwrap已装、链选中 bwrap、enforcement=full| v1.4 记「本机无可用后端」已证伪(bundleREADME.md§4.1 已改写;verify_sandbox_enforcement.mts/sandbox_p0_probe.py为取证工具) | 宿主 patch 中 permission 5 档与defaultPreset: opencode-plan可复算 | T | - | N4 |
dsh-config声明账本门控(ADR-011) | 本机分层实况索引(claims.yaml声明账本 +conflicts.md冲突台账);判据 =verify_dsh_config.py(源指针 / 层归属 / 层间冲突 / 台账一致性) | ADR-011 门控 6/6 PASS;verify_bundlecheck 18 接入 | 新增 skill 目录dsh-config(快照skills_list.dsh_native之一);verify_bundle判据 20 项中第 18 项 | E / SP | > ⚠️ 已知缺口(登记不掩盖;v1.5 收尾时已部分关闭):N1–N4 的机制真实行为已由本库自跑复核(见上方 实验 15–18,2026-10-13)。仍未覆盖的是 preset 会话内的模型行为:① 用户开一条opencode-creator会话(命令面板列出/arch/rd/reflection、run_gate可见性);② 用户开一条普通会话做 R-A 候选产出演练(oc_reflection在真实会话中产出候选)。这两项必须由用户开新会话(preset 会话无法程序化创建),本库不得以脚本级自跑冒充。 > 口径:仅登记已取证的损失,分「不可实现 / 行为落差 / 风险」三类;未取证项不登记。 - | # | 损失 | 原状(opencode 侧) | dsh 侧实际 | 定性 | 影响面 |
- |---|------|--------------------|-----------|------|--------|
- | ① | 子 Agent 无 bash → 门控退化 | worker 持 bash 白名单(
git status *等)且可自跑门控脚本 |toolFilter整条禁 shell(fail-closed),worker 无法自跑领域门控;门控改由主 Agent 串行代跑 | 行为落差 | 产出/验证分离更彻底(自利偏差消除),但验证时延上升、并行度下降;子 Agent 的「自证」能力归零,任何需脚本判定的产出都必须回主 Agent | - | ② | reflection 链路断裂 |
pending.json→ reflection-worker →/reflection人审 → 签名写MEMORY.md的完整异步 R 环 |dsh-reflection插件已于 2026-10-10 移出 → persona 的 MEMORY/reflection 段在 dsh 侧不可用(无reflection_add/reflection_mark) | 不可实现 | 装配层的 R 环在 dsh 侧只剩纪律文本、没有执行器;宿主MEMORY.md仍在(~/.dsh/MEMORY.md,§-分段 +[src:]签名),但无入队通道 → 长期记忆闭环实际停摆 | - | ③ | 宿主 0 MCP(对比 opencode 侧 4 个) | 6 个 MCP 配置(2 连通 / 4 禁用) | 宿主 0 MCP 配置,MCP 维度装配增量 Δ0(沿用内核内置 MCP client + resources 三工具,无 marketplace) | 行为落差 | T 环外部执行器接口未被装配层利用;PDF 读取、draw.io 出图等外部能力在 dsh 侧无对应装配(能力可由 skill 部分替代,但工具面缺口真实存在) | > ✅ v1.5 追平说明:上表 ①(子 Agent 无 bash → 门控退化)已由 N1
run_gate窄通道部分恢复(产出方可自跑门控脚本,但参数面受限、仍非自由 shell);②(reflection 链路断裂)已由 N2 R-A 载体修复(载体从「插件工具面」换为「文件载体 + skill 方法论」,纪律强度不变);③(宿主 0 MCP)仍未变。原条目保留不删,以维持「历史记录 vs 当前状态」的区分。 > 补充说明(非损失,但属迁移语义变化):opencode 侧的命令级入口/arch、/rd、/reflection在 dsh 侧v1.4 时无命令注册,降级为「点名 skill」;✅ v1.5 已补齐——新插件dsh-opencode-commands在三个 preset 注册这三条命令(判据 =verify_bundlecheck 20「命令注册插件(E10)」)。变体 Daily/Deep、TUI 键位、[GATE]字面门控、[COMPLEXITY]跨阶段继承等整类删除(dsh 无变体概念)。以上已在ADAPTATION-NOTES登记,本表不重复计损。 - | SRC | 级别 | 信源 | URL/路径 | 置信度 |
- |-----|------|------|---------|--------|
- | SRC-001 | S4 | 一手观察(bundle 安装与运行时验收报告:§3.6-3.10 为实测数据源) |
/home/zako-mio/opencode/archive/Mission-file/2026-10/1011-deepseek harness-提示词迁移工程-从opencode/report.md| 高 | - | SRC-002 | S4 | 一手观察(bundle 独立审查报告:工具面/persona/技能目录复算、门控 FAIL 与根因、L1-L18 损失清单) |
/home/zako-mio/opencode/archive/Mission-file/2026-10/1011-opencode-bundle审查/report.md| 高 | - | SRC-003 | S4 | 一手观察(运行时探针:四会话工具面与 persona 标记) |
/home/zako-mio/opencode/archive/Mission-file/2026-10/1011-deepseek harness-提示词迁移工程-从opencode/evidence/session-probe-{builtin-standard,opencode-standard,opencode-creator,opencode-ptc}.json| 高 | - | SRC-004 | S4 | 一手观察(persona 作用域取证:宿主 2790 字符 / 8 小节、bundle 8018 字符、三模式系统提示 13658/53826、5 个负向用例) |
…/1011-deepseek harness-提示词迁移工程-从opencode/evidence/a12-persona-scope-evidence.json| 高 | - | SRC-005 | S4 | 一手观察(技能目录运行时条目:42 = 45 − 3) |
…/1011-deepseek harness-提示词迁移工程-从opencode/evidence/skill-catalog-runtime.txt| 高 | - | SRC-006 | S1 | 官方源码(DSH 本体:persona 遮蔽机制、skill 根扫描顺序、
disable-model-invocation识别、沙箱 fail-closed 语义) |/home/zako-mio/dsh/packages/preset/persona/src/index.ts、/home/zako-mio/dsh/packages/skill/skill-filesystem/src/index.ts、/home/zako-mio/dsh/packages/sandbox/sandbox/src/index.ts(基线 tagdsh-v0.2.1-alpha.2) | 高 | - | SRC-007 | S4 | 一手观察(装配层产物与门控脚本本体) |
/home/zako-mio/.dsh/presets/opencode/{cordis.patch.yml,persona.md,verify_bundle.py,build_provenance.py,README.md,ADAPTATION-NOTES.md}| 高 | - | SRC-008 | S4 | 一手观察(主根 49 skill = 派生 47 + DSH 原生 2,与对账脚本) |
/home/zako-mio/.dsh/skills/opencode/(install.py/reconcile.py/PROVENANCE) | 高 | - | SRC-009 | S4 | 一手观察(回滚备份件) |
/home/zako-mio/.dsh-backups/opencode-port-20261011/| 高 | - | SRC-010 | S4 | 一手观察(本库 dsh 变体评分单一数据源,口径披露:v1.4 首次回填 v2.0 模型、旧单点分 2.5 不同源) |
/home/zako-mio/opencode/archive/Mission-file/2026-09/0907-控制理论Agent设计知识库/09-src-data/dsh_custom_scores.py| 高 | - | SRC-011 | S4 | 一手只读复算(v1.5 新快照四取证面) |
07-checkpoint/dsh-custom-snapshot/inventory.json(skills_list/plugins/reflection/gate四段;collected_at= 2026-10-13T05:09:43+08:00) | 高 | - | SRC-012 | S4 | 他线实跑取证(只读引用,非本库自跑) |
Mission-file/2026-10/1011-deepseek harness-提示词迁移工程-从opencode/1011-全面适配性迁移分析/evidence/{r09-e9-node-test.out.txt, r09-adr012-gate-rerun.out.txt, r09-memory-body-landed.out.txt, r11-final-gates.out.txt}| 中高 | - | SRC-013 | S4 | 决策依据指针(均
proposed状态) |Mission-file/2026-10/1011-迁移适配-E环门控通道与R环纠正/arch/ADR-010.json;Mission-file/2026-10/1011-deepseek harness-提示词迁移工程-从opencode/1011-全面适配性迁移分析/arch/{ADR-011.json, ADR-012.json}+迁移台账.yaml(42 任务) | 中高 | - | SRC-014 | S4 | 本库自跑(v1.5 实验 15–18) | 主 Agent 于 2026-10-13 在本机实跑:
node --test(gate-runner 57/57)、check_gate_policy.mjs(23/23)、check_gate_channel_selftest.py(10 变异体全判死)、verify_sandbox_enforcement.mts(三档 enforcement=full / argv0=bwrap,真 spawn + 真写盘)、verify_landed_chain.py(段 14/14 成立)、memory_capacity_check.py(band=soft,hard 未触)、verify_dsh_config.py --check(四查全过,台账 42 条)与--selftest(15/15) | 高 |