Skip to main content
Preflight 对锁定的 Run 做机械就绪检查。它不是顶层 kind,也不是授权系统。 当前 CLI 产生两份输出:更新后的 Run,以及 spec.type: huoban.dev/preflight-reportArtifact。完整 checks 保存在 Artifact;Run.status.preflight 只保存 scope、时间、snapshot hash 和报告引用。

命令

可选参数是 --stage <id>--live--offline、可重复的 --runner-capability <name> 和用于确定性输出的 --at <time>。默认是 offline;--live--offline 不能同时出现。

Report 字段

Preflight Report 是 Artifact.spec.contentRef.data 中的共享 fragment。 每个 check 的字段如下: resolution.statusreadiness.status 都只能是 "True""False"Unknown

Run 状态摘要

Run scope 会写入 PreflightResolvedPreflightReady conditions;stage scope 会写入 StagePreflightResolvedStagePreflightReady。存在 readiness 非 True 的可选检查时,还会写入 OptionalDependencyUnavailable=True

合法示例

当 Artifact type 为 huoban.dev/preflight-report 时,schema 额外要求 runRefcontentRef.type: object、符合本页字段的 contentRef.data 和 canonical object data hash。

Offline 与 live

默认 offline 会检查 Flow input contract、结构化 stage source、Run input binding、本地输入内容、workspace 引用、generation、capability、implementation binding、本地路径、PATH、环境变量以及显式 runner capability。远程 context source、MCP readiness 和无法取得内容的远程 Artifact input 保持 Unknown --live 增加以下只读 discovery:
  • context URL 使用 5 秒超时的 HEAD
  • MCP endpoint 执行 initialize 与 initialized notification。
  • MCP tool 使用 tools/list,MCP resource 使用 resources/list,最多 20 页。
  • 每次 MCP 响应体最多读取 1 MiB。
  • JSON 与 SSE response 必须恰好包含一个与请求匹配的 JSON-RPC id。
  • Preflight 不调用 MCP tool。
报告不会保留 URL user info、query、fragment、常见 credential 形式或远端 MCP error text。--at 只用于确定性示例和测试;生产实现应使用可信时钟并拒绝过期证据。

执行门槛

required checks 的聚合顺序是:任一 False 得到 False;否则任一 Unknown 得到 Unknown;其余为 True execute 必须取得 Run scope 的 PreflightReady=TrueStagePreflightReady=True 只记录所选 stage 的检查结果,不能授权整次 Run。当前 CLI 在 stage 局部检查满足其 mode 规则时可返回退出码 0,同时明确提示它不构成 Run gate。 当前仓库没有 execute runtime;CLI 的 gate 只决定 Preflight 命令是否以失败状态退出。PreflightReady=True 也不代表 Policy 允许、Trust 足够或审批已经完成。

验证边界

  • CLI 会先校验输入 Run;对 workspace 中具有已注册 kind schema 的对象执行 schema validation。
  • workspace 中相同 kind/name 的重复对象会使 Preflight 失败。
  • Preflight 解析有效 Flow、Profile/Policy refs、Flow input、stage input source、Run input binding、stage/handler implementation binding、可达 Requirement,以及 Skill/Adapter/Trust 的当前已实现关联。
  • Preflight 按解析后的 Flow spec、有效 Profile refs、有效 Policy refs、implementation bindings 和 input bindings 重算五个 Run snapshot hash;缺失或不匹配均阻断权威结果。
  • 文件 input 按 raw bytes 校验;Artifact input 先解析 ref/generation/declared hash,再对本地 object/file 内容复核 hash。无法取回内容时 readiness 为 Unknown
  • 任何带 path 的 Adapter source 与 MCP tool source 必须存在精确匹配的 required Requirement。
  • 它不解释 Policy rule,不验证 Trust signature,不执行 sandbox,也不解析 Checkpoint 决策。
  • stage scope 仍会检查 Run 的 Flow、有效 Profile/Policy 和 Flow 结构;它只把 stage binding 与 stage lifecycle handler 限定到所选 stage。

相邻概念边界

常见错误

  • 把 Preflight Report 写成顶层 kind: PreflightReport,而不是特殊类型的 Artifact。
  • 用 Flow hash 代替 snapshotHash;当前实现哈希完整 Run.spec
  • 只保存 Run status,不保存完整 report Artifact。
  • 在 offline 结果中把远程 MCP readiness 强行写成 True
  • 因 Artifact 引用存在就把不可取得的内容标成 ready,或在文件改变后继续复用旧 hash。
  • 把 optional 失败当作 required gate 失败,或反过来忽略 required False
  • 用 stage scope 结果满足 execute 的 Run scope 门槛。
  • 把未签名、过期或 snapshotHash 不匹配的报告当成可信运行依据。