DSH 学习 · 能力缝隙

请求说「做什么」,Spec 说「确切怎么做」。

dsh-shell 把 Service Definition 拆成一道显式解析缝隙:abstract resolve(request): Spec。workdir、timeoutMs、stdoutMaxBytes 在这里补默认、被封顶;sandboxPolicy 要么由调用方给、要么被沙箱执行器盖默认章、要么在本地执行器上保持惰性 undefined。run/start 只收 Spec——它们永远不会再碰默认值。换一个执行器,看同一份请求怎样解析出不同的 Spec。

阅读配套课程 打开文件编辑实验

先押一个注:请求里没给 sandboxPolicy,执行器换成 bash-sandbox——解析出的 Spec 里这个键是什么?

Spec 键数
必需键缺口
被封顶字段
沙箱策略 sandboxPolicy
独立校验

每个键从哪里来

来源徽章

左列是 Spec 的键,中列是解析后的值,右列徽章标出来源:请求显式给出、配置补默认、封顶,或沙箱执行器在 resolve 里盖的章。run/start 只看这张表的最左两列。

当前输入的 Spec
Spec 键 解析值 来源 备注

五条不变量逐条重算

流程校验

独立校验重跑一次解析比对条目,再核对 Spec 无缺口、封顶规则、沙箱盖章与惰性透传的分界,以及请求对象不可变。

    哪些结论可以带走

    能证明什么

      不能证明什么

        run() 不拒绝非零退出:标记怎么往返

        退出码标记 · parseExitStatus 往返

        前台运行的超时击杀与非零退出都 resolve 成带描述的 ShellRunResult,只有基础设施故障才 reject。工具层把结果渲染成正文加一行 [exit code: N] / [killed by signal: X] 标记,presentResult 再用 parseExitStatus 把它拆回输出体和状态徽章。改下面的值看这趟往返。

        拆出的状态徽章: