news 2026/9/11 2:21:44

OmX autoresearch Parity Smoke:用轻量验证守护核心契约的工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OmX autoresearch Parity Smoke:用轻量验证守护核心契约的工程实践

OmX autoresearch Parity Smoke:用轻量验证守护核心契约的工程实践

【免费下载链接】oh-my-codexOmX - Oh My codeX: Your codex is not alone. Add hooks, agent teams, HUDs, and so much more.项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-codex

导读

本文围绕 OmX(Oh My codeX)仓库中 missions/parity-smoke/mission.md 这份验证型任务文档展开,介绍 OmX 如何通过一个极轻量的 autoresearch "smoke 任务"(parity smoke)来快速确认核心契约在代码改动后依然成立,而无需运行耗时的全量 parity sweep。读完本文,你将掌握 mission/sandbox 双文件任务契约的写法、pass_only保留策略的含义、parity smoke 成功标准的底层实现路径(构建、runtime/contracts 测试、CLI help 路由),以及它与全量 parity sweep 的边界。

一、什么是 parity smoke,它验证什么

在 OmX 的 autoresearch 体系中,"parity"(对齐/一致性)指的是:CLI 帮助文本、运行时行为、契约定义、测试用例之间描述与执行的是同一套语义。每当源码发生编辑后,最理想的做法是跑一次完整的 parity sweep,但它的成本明显更高。

missions/parity-smoke/mission.md 定义的正是一次"小成本、快反馈"的冒烟验证:

Run a very small autoresearch smoke task against the current parity surfaces. Validate that the core autoresearch contract still holds after edits without running the entire parity sweep.

即:在不运行全量 parity sweep的前提下,用一次小型 smoke 任务确认autoresearch 核心契约仍然成立。这种"先冒烟、后全量"的分层验证策略,保证日常迭代时能第一时间捕获契约漂移,把昂贵的全量回归留给需要它的场合。

成功标准(Success means)

原文档给出了三条清晰、可判定的成功标准,全部为可执行验证:

  1. the project builds—— 项目能够成功构建;
  2. autoresearch runtime/contracts smoke tests pass—— autoresearch 运行时与契约的冒烟测试通过;
  3. CLI help routing for autoresearch still works——omx autoresearch的 CLI 帮助路由仍然工作。

这三条恰好分别对应"编译层、逻辑层、交互层"三个表面(parity surfaces),与任务名中的 parity surfaces 一一对应。

二、mission 双文件结构:任务与沙箱契约

parity-smoke 任务遵循 OmX autoresearch 的 mission bundle 约定。正如 missions/README.md 所述,每个 mission 目录都包含两个文件:

  • mission.md—— 目标、范围与预期交付物(objective, scope, expected deliverable);
  • sandbox.md—— 评估器契约加安全/操作规则(evaluator contract plus safety/operating rules)。

因此本任务实际由两份文件共同定义:

文件职责关键内容
missions/parity-smoke/mission.md定义任务目标与成功标准三条成功标准:build、smoke tests、CLI help routing
missions/parity-smoke/sandbox.md定义评估器与操作边界YAML frontmatter 声明 evaluator 命令、输出格式、保留策略

sandbox.md 的评估器契约

missions/parity-smoke/sandbox.md 的完整 frontmatter 如下:

--- evaluator: command: node scripts/eval-parity-smoke.js format: json keep_policy: pass_only ---

这是 autoresearch v1 契约中sandbox.md的标准三段式声明:

  • command:评估器执行命令。它声明为node scripts/eval-parity-smoke.js,对应仓库中的真实实现源码为 src/scripts/eval/eval-parity-smoke.ts,经构建后映射到dist下的同名 JS 产物;
  • format: json:评估器必须以 JSON 输出结果;
  • keep_policy: pass_only:保留策略为"仅通过即保留"——只要评估器输出pass: true,该候选提交即被保留,不要求数值分数超越基线。

此外,sandbox 正文还明确了操作约束:

Keep this mission lightweight and fast. Prefer minimal changes only if needed to restore the smoke path.

即:保持任务轻量与快速,仅当需要恢复 smoke 路径时才做最小改动。这决定了 parity smoke 天然是"验证型"任务而非"优化型"任务——它不追求改进分数,只追求确认契约完好。

三、契约解析的底层实现:sandbox frontmatter 如何被读取

evaluator.commandformatkeep_policy这三个字段并不是任意的文档装饰,而是由运行时强校验解析的。解析逻辑位于 src/autoresearch/contracts.ts:

  • parseSandboxContract()要求 sandbox.md 必须以 YAML frontmatter 开头(^---\r?\n...\r?\n---),否则抛出sandbox.md must start with YAML frontmatter...错误;
  • evaluator块缺失、evaluator.command为空、evaluator.format缺失或不为json都会触发对应契约错误(见EVALUATOR_COMMAND_ERROREVALUATOR_FORMAT_JSON_ERROR等常量);
  • parseKeepPolicy()只接受两个合法值:score_improvementpass_only,其余值直接抛错——这从源码层面锁死了 keep policy 的取值域;
  • format被统一归一化为小写后校验,v1 契约中强制为json

keep_policy缺省时,运行时在 src/autoresearch/runtime.ts 的prepareAutoresearchRuntime()中会回退到'score_improvement'

const keepPolicy = contract.sandbox.evaluator.keep_policy ?? 'score_improvement';

而 parity-smoke 显式声明了pass_only,因此它的决策路径会命中decideAutoresearchOutcome()中的:

if (manifest.keep_policy === 'pass_only') { return { decision: 'keep', decisionReason: 'pass_only keep policy accepted evaluator pass=true', ... }; }

即:评估器输出pass: true即直接keep,无需比较分数——这正是 smoke 任务"快、准、省"在运行时语义上的体现。

四、成功标准一:项目构建(build)

parity-smoke 的第一条成功标准是"the project builds"。这一检查被直接编码进评估器实现 src/scripts/eval/eval-parity-smoke.ts:

const build = spawnSync('npm', ['run', 'build'], { encoding: 'utf-8' }); if (build.stdout) process.stderr.write(build.stdout); if (build.stderr) process.stderr.write(build.stderr); if (build.status !== 0) { process.stdout.write(JSON.stringify({ pass: false })); process.exit(build.status ?? 1); }

构建失败时,评估器立即输出{"pass": false}并以非零码退出——构建失败 = smoke 失败,没有任何中间态。构建成功后才继续执行测试阶段。

五、成功标准二:runtime/contracts 冒烟测试

构建通过后,评估器进入测试阶段,运行三个与 autoresearch 直接相关的测试文件(编译后路径):

const test = spawnSync('node', [ 'dist/scripts/run-test-files.js', 'dist/autoresearch/__tests__/contracts.test.js', 'dist/autoresearch/__tests__/runtime.test.js', 'dist/cli/__tests__/autoresearch.test.js', ], { encoding: 'utf-8' }); process.stdout.write(JSON.stringify({ pass: test.status === 0 }));

三个测试文件的源码位置分别对应:

  • src/autoresearch/tests/contracts.test.ts —— 契约解析与校验测试:验证 sandbox frontmatter 解析、evaluator 结果解析(parseEvaluatorResult要求 JSON 必须含布尔pass,可选数值score)、keep policy 合法性等;
  • src/autoresearch/tests/runtime.test.ts —— 运行时测试:覆盖prepareAutoresearchRuntimedecideAutoresearchOutcome、候选产物解析(parseAutoresearchCandidateArtifact)等核心逻辑;
  • src/cli/tests/autoresearch.test.ts —— CLI 层测试,与成功标准三直接相关。

测试命令全部成功(退出码 0)时,评估器输出{"pass": true};否则输出{"pass": false}。整个评估器最终只输出一个 JSON 对象,严格符合format: json契约。

六、成功标准三:CLI help 路由仍然工作

第三项成功标准 "CLI help routing for autoresearch still works" 需要结合当前仓库的 CLI 现状来理解:omx autoresearch在较新版本中已被hard-deprecated(硬弃用),见 src/cli/autoresearch.ts 中的AUTORESEARCH_DEPRECATION_MESSAGEAUTORESEARCH_HELP

因此,"help routing still works" 的含义是:尽管直接启动、--resumerun <mission-dir>、裸 mission-dir 别名等旧形式均已移除,但帮助路由本身必须保留且行为正确——具体表现为:

  • 顶层帮助中omx autoresearch被标注为[DEPRECATED] Use $autoresearch; direct CLI launch removed
  • omx autoresearch --help仍能正确路由到本地弃用帮助页,其中明确指引迁移路径:
    • $deep-interview --autoresearch澄清 mission 并产出规范产物(.omx/specs/autoresearch-{slug}/);
    • $autoresearch "your mission"进入有状态、带验证器门控的执行循环;
    • 完成判定依赖验证器证据(validator evidence),而非重复 noop 或 detached tmux 启动对齐。

这些行为均有测试锁定。在 src/cli/tests/autoresearch.test.ts 的describe('omx autoresearch hard deprecation')中可以看到:测试断言顶层帮助输出包含/omx autoresearch\s+\[DEPRECATED\] Use \$autoresearch; direct CLI launch removed/i,断言autoresearch --help输出包含/\$deep-interview --autoresearch/i/\$autoresearch/i,并逐项验证autoresearchautoresearch initautoresearch run missions/demoautoresearch missions/demoautoresearch --resume run-123--topic等旧形式全部有意失败(fail intentionally)。

这意味着 smoke 的成功标准三本质上是回归防护:确保未来任何改动不会意外破坏这个"弃用但可发现"的交互表面——用户输入omx autoresearch --help时永远能得到明确的迁移指引。

七、smoke 与 sweep 的边界:何时用哪个

仓库中同时存在两个配套评估器:src/scripts/eval/eval-parity-smoke.ts(本任务)与 src/scripts/eval/eval-parity-sweep.ts(全量 sweep)。对照两者的测试清单可以清晰看到边界:

  • parity smoke(本文):仅构建 + 3 个测试文件(contracts、runtime、CLI autoresearch),聚焦"核心契约是否仍成立";
  • parity sweep(全量):在构建基础上运行 8 个测试文件,除上述外还包含indexnested-help-routingsession-search-helpteam/worktreemodes/base-autoresearch-contract等,覆盖更广的 help 路由、worktree 与 mode 契约。

missions/parity-sweep/mission.md中的目标列表(fresh run-tagged lanes、显式--resume <run-id>、repo-root 活跃运行指针/锁、权威 per-run manifest 状态、candidate.json交接、keep/discard/ambiguous/error 处理、reset-safe 工作区运行时文件、对齐的 docs/help/contracts/tests)对应的是完整的全量对齐任务;而 parity-smoke 的任务定位则明确写在 mission 标题里——在编辑后先做最小验证,再决定是否需要进入全量 sweep。这是一种典型的"快速失败、分级回归"工程节奏。

八、如何理解并复现这次 smoke

虽然omx autoresearch的直接 CLI 启动已被硬弃用,但 parity-smoke 所依赖的验证链路仍可直接观察与复现:

  1. 阅读契约:missions/parity-smoke/mission.md 定义目标与成功标准,missions/parity-smoke/sandbox.md 声明评估器(node scripts/eval-parity-smoke.jsformat: jsonkeep_policy: pass_only);
  2. 阅读评估器实现:src/scripts/eval/eval-parity-smoke.ts 展示了完整判定流水线——先npm run build,失败即输出{"pass": false};成功后运行 contracts/runtime/CLI 三个测试文件,全部通过输出{"pass": true}
  3. 对照全量版本:src/scripts/eval/eval-parity-sweep.ts 展示更广的测试面,帮助理解 smoke 有意裁剪掉的部分;
  4. 理解运行时语义:src/autoresearch/contracts.ts 中的 frontmatter 强校验与 src/autoresearch/runtime.ts 中的decideAutoresearchOutcomepass_only直接 keep)解释了"为什么声明pass_only就能得到轻量快速的 smoke 判定";
  5. 理解 CLI 现状:src/cli/autoresearch.ts 的弃用帮助与 src/cli/tests/autoresearch.test.ts 的回归断言,解释了"CLI help routing still works"的真实含义。

如果需要在当前仓库快照中真实跑一次完整端到端的 autoresearch 流程,可参考 missions/README.md 中其他 pilot 的启动方式(如omx autoresearch missions/in-action-cat-shellout-demo),并观察.omx/logs/autoresearch/<run-id>/manifest.jsoncandidate.jsoniteration-ledger.json中监督者的 keep/discard/stop 决策记录。

结语

parity-smoke 是 OmX 工程实践中的一个精妙缩影:一份三行的 mission 文档 + 一份四行的 sandbox 契约,背后却串联起完整的契约强校验、运行时决策语义、构建/测试流水线与 CLI 弃用回归保护。它证明了一件事——验证任务的"小"不是内容的贫瘠,而是刻意设计的边界:把全量对齐留给 sweep,把高频守护交给 smoke,让每一次编辑都能在秒级得到"核心契约是否仍成立"的明确答案。

【免费下载链接】oh-my-codexOmX - Oh My codeX: Your codex is not alone. Add hooks, agent teams, HUDs, and so much more.项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-codex

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 2:18:04

怀化驾校AI短视频:驾培行业招生利器

来源&#xff1a;唐sirAI&#xff08;www.tangsir.cc&#xff09; | 电话&#xff1a;18874530691━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━在怀化驾校行业竞争日益激烈的今天&#xff0c;如何低成本、高效率地进行品牌推广&#xff…

作者头像 李华
网站建设 2026/9/11 2:17:46

企业销售代表处建设与数字化运营实战指南

1. 销售代表处建设在企业运营中的战略定位销售代表处作为企业销售业务的最前线作战单元&#xff0c;其建设质量直接决定了区域市场的开拓成效。在成熟的企业组织架构中&#xff0c;销售代表处通常隶属于销售BG&#xff08;Business Group&#xff09;体系&#xff0c;承担着客户…

作者头像 李华
网站建设 2026/9/11 2:17:26

HeyGem.ai 本地部署:3 条命令跑通离线数字人

HeyGem.ai 本地部署&#xff1a;3 条命令跑通离线数字人 【免费下载链接】Duix-Avatar &#x1f680; Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning. 项目地址: https://gitcode.com/GitHub_Trending/he/Dui…

作者头像 李华
网站建设 2026/9/11 2:17:13

涂装工艺数字化转型:从老师傅经验到数据资产实践指南

干了大半辈子涂装工艺的人可能都有一个共同心病&#xff1a;线上一旦出问题&#xff0c;所有人的第一反应就是“把老周叫过来”。老周是谁&#xff1f;是那条喷粉线干了二十多年的工艺老师傅&#xff0c;他用手背贴一下烘箱外壳就知道温度有没有偏&#xff0c;看一眼漆膜光泽就…

作者头像 李华