Skip to main content
Run 是 Huoban 的一次锁版印刷:它锁定某次计划使用的 Flow、动态输入、Profile、Policy 和实现 binding,并承载工具观察到的状态。Run 可以表示 explaindryRunexecute 计划;当前仓库不提供 execute runtime。 设计背景见 Run 模型,Preflight 状态见 Preflight

Spec 字段

这五个名称是当前 schema 的完整 snapshot 字段集,并统一使用 sha256:<64 位小写十六进制> Huoban canonical JSON v1 的算法固定为:递归按 UTF-16 code unit 升序排列对象 key,保持数组顺序,使用 ECMAScript JSON.stringify 语义序列化,再对 UTF-8 bytes 做 SHA-256。不同实现必须使用相同算法;不能直接哈希 YAML、未排序 JSON 或平台相关文本。

Input binding

每个 spec.inputBindings.<name> 必须匹配 Flow 的同名入口与类型: Run schema 只验证 binding 形状。print 负责验证 Flow 契约并物化绑定;Preflight 负责验证 required、未知、类型、内容引用与 hash。

Implementation binding

每个 spec.bindings.<role> 的主目标必须且只能选择一种:
或:
主目标或 fallback 同时写两类 ref 会因 oneOf 失败。fallback 只存在于 Run binding;Adapter schema 没有 spec.fallback

Status 字段

Run 在通用 status 之外增加: status.phasestatus.observedGenerationstatus.conditions 来自通用状态。除 lifecycle invocation 的 phase 外,schema 不为 Run phase 定义枚举。

合法示例

对应 source example:examples/runs/idea-to-spec-review-run.yaml

当前 CLI 行为

生成 dry-run

--input 可重复,格式为 name=file:path|text:value|object:json|artifactRef:name[@generation]#sha256:digest。当前 parser 还支持可重复的 --profile <name>--policy <name>--fallback 只有在同一 role 已有 --bind 时才合法。 生成器将 Flow spec、Profile refs、Policy refs、implementation bindings 和 input bindings 分别锁定到五个 snapshot 字段。文件 binding 自身使用 raw-byte SHA-256。输出 phase 为 Planned,conditions 包含 RunPlanned=TrueFlowSnapshotCreated=True。此命令只生成计划。

Preflight

Preflight 会解析 flowRef 及 generation,将 Flow 默认 Profile/Policy refs 与 Run refs 按名称合并,并检查 role binding、capability、fallback 和可达依赖。fallback 是锁入 Run 的执行候选:它与主 binding 使用相同 requiredness,必须能力匹配并通过同一次 Preflight;reference CLI 不提供自动切换 runtime。 Preflight 的 snapshotHash 与五个 spec.snapshot.* 字段不同:它直接哈希完整 Run.spec。详见 Preflight mode: execute 只有在 Run scope 的 required resolution/readiness 都为 True 时才通过当前 Preflight gate,并产生 PreflightReady=True。stage scope 的 StagePreflightReady=True 不能授权整次 Run。

验证边界

  • validate 检查 binding 的严格二选一,但不解析目标对象或 capability。
  • Preflight 解析当前实现收集的 refs 与 bindings,但不执行 Flow、Policy 或 Checkpoint。
  • Run-scope 与 stage-scope Preflight 都会按当前解析结果重算并比对五个 spec.snapshot.* 字段;缺失或不匹配会产生 required False
  • Preflight 检查 input binding 的声明、必填性、类型和本地可取得内容;URL 等不可取得 Artifact 内容保持 Unknown
  • 报告的 snapshotHash 另行哈希完整 Run.spec,用于把证据绑定到本次 Run 声明。
  • Profile/Policy refs 在当前 Preflight 中按名称覆盖 Flow 默认引用;这不是通用 Profile merge DSL。
  • status.artifacts 只检查引用形状;当前 Preflight 不验证它们与 stage 的归属关系。
  • PreflightReady=True 不是 Policy 或 Trust 授权。

相邻概念边界

常见错误

  • 使用不存在的 profileSpecHashskillBindingHash 或其他 snapshot 字段,或漏掉 inputBindingHash
  • 在同一 binding 同时写 skillRefadapterRef
  • 把 fallback 写进 Adapter,而不是 Run binding。
  • 写入 Flow 未声明的 input binding,或只记录文件 path 而不记录 hash。
  • 认为 dry-run 已经执行 stage 或做过 Preflight。
  • 用 stage scope 结果满足 execute 的 Run scope 门槛。
  • status.artifacts 当作产物正文容器。