没有可以真正跑一遍的检查,就不算 “完成”——一个测试、一个构建退出码、一张截图。Forge 的验证关卡各自多接住一次。设每任务漏率为 1 − p,关卡拦截率为 c,则静默漏失下降到 (1 − p)(1 − c),而这里每一道关卡都多贡献一个 c。
验证是减少,不是认证。 Crew 校验者和幻觉符号标记能降低评审负担;它们并不证明代码正确。测试和人工纠正永远胜出。
独立验证 —— forge verify
一道独立关卡:它会跑仓库真实的测试、标出幻觉符号,并检查溯源。
--deep(v0.19+)升级为多视角共识:变更必须通过多个独立的验证视角,而不只是一个。
forge verify --deep 报告的是四态 status,不是二元的通过/失败:
PASS —— 每个视角都一致通过,并且核心 forge verify 的测试状态也是 PASS。只有这个状态才算“已验证”。
FAIL —— 至少有一个视角报告了真实的失败。
INCOMPLETE —— 某个视角未能完成(超时、崩溃、缺依赖)。既没有被证伪,也没有被证明。
NOT_CONFIGURED —— 本仓库没有接入任何视角,--deep 无从检查。
PASS 蕴含基础 PASS 的规则是有意为之:一次绿色的 deep 共识永远不能跑在红色的基础运行前面,因此基础测试视角上的 INCOMPLETE 或 NOT_CONFIGURED 会把 deep 的结果降级到相应状态。
幻觉符号标记 —— forge atlas has
forge atlas has <symbol> 是幻觉检查:如果模型调用了不在代码图里的符号,该关卡会把它标出来。
atlas 有意做成纯 JSON——Codex、Cursor、Gemini 和 Aider 都可以通过 CLI 或直接的 jq 消费 .forge/atlas.json,不需要依赖 MCP。
规约即契约 —— forge spec
把行为固定到一份规约上,并检测与之的漂移:
技能关卡 —— forge scan
在安装 skill 或 MCP 服务器之前,审查它是否有注入、RCE 或数据外泄风险:
扫描通过 不是安全认证。 内置启发式只能识别已知的攻击形态(critical)和少量高严重度的模式;通过意味着 “未检测到 critical 特征”,而不是 “可以放心安装”。永远要自己审阅源码、权限、包溯源和网络行为。high 严重度的发现即便不硬阻断,也不会被标记为安全。外部扫描器是可选的,除非你启用它,否则不会发起任何网络调用。
加固 —— forge harden
接线让密钥和不安全的变更进不了仓库的安全控制:
commit 级别关卡 —— forge precommit
forge precommit(v0.19+)是一道 commit 级别的关卡——它在 commit 时运行验证下限,让部分或未验证的工作在落地前被拦下。
完成关卡 —— 需要测试证据
Stop 路径上的完成关卡(见 跨会话记忆)不再把代理的 handoff 当作代码变更已完成的证据。对于任何触及源码的会话,该关卡要求真实的测试证据:
- 在会话 diff 中改动了一个测试文件,或者
- 针对当前改动重新跑了一次通过的
forge verify。
单凭一次 forge handoff 快照无法满足该关卡——它记录的是意图,不是验证。如果两种证据都没有,关卡会以修复清单拦下一次:
只涉及文档、只涉及配置以及其他非代码会话不受影响——测试证据要求只在会话 diff 真正改动了代码时才会触发。
UI 检查 —— forge uicheck
确定性 UI 检查,前三个视角不使用 LLM 也不使用截图:
搭配 forge taste 选定一个视觉方向(brutalist、corporate、editorial、minimalist、playful),并参数化 design 关卡的阈值。