Files
deepseek-harness/.agents/notes/implemented/process/2026-08-11-loader-entry-disabled-interpolation.zh.md
Huanqi Cao 6fb226ea24 feat(loader): interpolate the entry disabled field
The Windows platform layer disables tool-bash and inserts the pwsh stack, but the shipped presets each mount a tool-bash row that re-enabled the tool on win32 — the session had both a PowerShell-backed bash tool and tool-pwsh, silently, because no spec pinned the composed preset layer.

The Loader now evaluates a disabled: !!js expression against the loader context at every mount decision; disabled is the only interpolated metadata field, and the raw node stays in the options so write-back keeps the !!js form. The standard/code/cordis presets gate tool-bash with process.platform === 'win32', verify-cordis-config allows expressions in disabled only, and the windows-shell spec pins the preset-level invariant.
2026-08-11 11:33:53 +08:00

1.9 KiB
Raw Blame History

Agent Note:Loader 插值条目 disabled 字段

Status: implemented

English | 中文

问题

Windows 平台层(packages/bundle/base/windows.cordis.patch.yml)在 win32 上禁用 tool-bash,但 shipped 预设各自挂载了一行 tool-bash。预设行最后组合,同名行在 Windows 上重新启用了该工具——会话同时拥有 tool-bash(PowerShell 后端)与 tool-pwsh,且是静默的,因为没有 spec pin 组合后的预设层。条目元数据没有条件机制:!!js 只在插件 config 下插值,postmortem 0002 记录了 disabled: !!js ... 保持真值表达式对象、在所有平台上禁用该行的事故。

决策

Loader 插值条目 disabled 字段(vendor/loader/src/config/entry.ts):!!js 表达式在每次挂载决策时基于 loader 上下文求值。disabled 是唯一被插值的元数据字段;id、name、group、inject 保持静态。原始节点保留在 options 中,写回保持 !!js 形式。shipped 预设(standard、code、cordis)用 disabled: !!js process.platform === 'win32' 门控 tool-bash,verify-cordis-config 现在只允许 disabled 中的表达式。

备选方案

行上的声明式 platform 字段。 静态且可被门禁检查,但它是 !!js 之外的第二种组合机制,且平台只是今天的条件。

预设级平台 overlay。 被否:条件应当属于它所治理的行。

后果

行可以按平台或环境门控自身;错误的表达式在启动时响亮失败。其余元数据字段保持字面值,门禁继续拒绝那里的表达式——disabled 上的 postmortem-0002 隐患以「求值」而非「禁止」关闭。minimal 预设缺失的 win32 PTY 栈是预设元数据的后续工作。