Why
workflow(action="list") 对 builtin 模板返回 path: "builtin://<name>"(合成标记,packages/opencode/src/dag/workflows.ts:43,142-144),但把该值回传给 read/start/validate 的 spec_path 会被拒绝:resolveSpecPath(packages/opencode/src/tool/workflow.ts:914-941)的 isName() 因值含 / 判 false → 落入路径分支 → builtin:// 被当相对路径 resolve 进会话目录 → .yaml/.yml 扩展名检查失败报错。报错信息还把 scheme 拼进 cwd 绝对路径(.../opencode-dag/builtin:/project-development-full),严重误导排障。loadSpecFile:871 的 isBuiltinPath 分支只覆盖内部产生的 entry.path,外部输入永远到不了那里。
Scope
packages/opencode/src/tool/workflow.ts 的 resolveSpecPath(:914-941)
Approach
resolveSpecPath 开头加 DagWorkflows.isBuiltinPath(specPath) 短路:提取 builtinName(specPath) 后走 DagWorkflows.resolve 的既有 name 解析,复用 "Saved workflow not found" 报错与搜索位置提示;路径分支不动。
Acceptance
- 单测(注入 builtin 模板 fixture):
read / validate 以 builtin://<name> 为 spec_path 成功返回 spec 内容与校验结果
- 未知
builtin://<name> 的报错与 bare name 的 not-found 报错同格式、列出搜索位置
- 纯名与文件路径分支行为不变(现有 workflow-tool 测试全绿)
Why
workflow(action="list")对 builtin 模板返回path: "builtin://<name>"(合成标记,packages/opencode/src/dag/workflows.ts:43,142-144),但把该值回传给read/start/validate的spec_path会被拒绝:resolveSpecPath(packages/opencode/src/tool/workflow.ts:914-941)的isName()因值含/判 false → 落入路径分支 →builtin://被当相对路径 resolve 进会话目录 →.yaml/.yml扩展名检查失败报错。报错信息还把 scheme 拼进 cwd 绝对路径(.../opencode-dag/builtin:/project-development-full),严重误导排障。loadSpecFile:871的isBuiltinPath分支只覆盖内部产生的 entry.path,外部输入永远到不了那里。Scope
packages/opencode/src/tool/workflow.ts的resolveSpecPath(:914-941)Approach
resolveSpecPath开头加DagWorkflows.isBuiltinPath(specPath)短路:提取builtinName(specPath)后走DagWorkflows.resolve的既有 name 解析,复用 "Saved workflow not found" 报错与搜索位置提示;路径分支不动。Acceptance
read/validate以builtin://<name>为spec_path成功返回 spec 内容与校验结果builtin://<name>的报错与 bare name 的 not-found 报错同格式、列出搜索位置