oh-my-codex 0.20.0 发布就绪评估:GPT-5.6 模型契约迁移的验证、门禁与发布全记录
【免费下载链接】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
本指南基于 oh-my-codex 仓库中 docs/qa/release-readiness-0.20.0.md 这份发布就绪评估文档,逐节解析 0.20.0 版本的验证方法、门禁命令、CI 证据链与已知缺口。读者既能复现这套「本地门禁 + CI 证据 + 发布证明」的发布流程,也能理解 GPT-5.6(Sol/Terra/Luna)模型契约迁移的落地细节与它如何被测试锁定。
一、为什么需要「发布就绪评估」文档
oh-my-codex 是一个为 OpenAI Codex CLI 提供多 Agent 编排能力的开源项目(TypeScript 主体 + Rust 工作区),每个版本发布前都必须在 docs/qa/ 目录下沉淀一份release-readiness-<version>.md。这份文档不是形式主义,而是 RELEASE_PROTOCOL.md 强制要求的发布证据:
- 冻结发布范围:明确上一版本 tag 与候选 ref,并用
git merge-base --is-ancestor验证祖先关系; - 依据证据而非记忆撰写发布说明:要求生成
CHANGELOG.md、docs/release-notes-<version>.md、docs/qa/release-readiness-<version>.md、RELEASE_BODY.md四份发布物料; - 发布就绪门禁(第 4 节):本地门禁通过、
devCI 绿、就绪文档记录 compare range / PR 清单 / 本地门禁 / CI run ID / 已知缺口、发布说明对照git log全量核对。
0.20.0 这份就绪文档正是一个标准样本:它用 21 个提交的 compare range、15 个 PR、全套门禁输出和 8 条 CI run ID,把「可以发布」这个结论变成了可审计的证据。
二、Compare range:冻结发布范围
0.20.0 的 compare range 事实(来自就绪文档):
- 上一发布 tag:
v0.19.1- 发布 tag:
v0.20.0-> commit456effa2afcb7967e8ba7130ee15b2835c235d72- 血缘:
v0.19.1是v0.20.0的祖先;v0.20.0同时位于main与dev分支- 完整对比范围:
v0.19.1...v0.20.0(21 个提交)
Compare range 是发布证据的骨架。按 RELEASE_PROTOCOL.md 第 1 节的命令模板,可用如下命令重建该范围:
git merge-base --is-ancestor v0.19.1 v0.20.0 # 验证祖先关系,退出码 0 表示成立 git log --oneline --decorate v0.19.1..v0.20.0 # 21 个提交的全量清单 git log --format='%h %s' v0.19.1..v0.20.0 | grep -Eo '#[0-9]+' | sort -u # 提取 PR 编号21 个提交中,除 15 个 PR 的合并提交外,还包含 3 个直接落在分支上的 GPT-5.6 迁移提交(未单独建 PR):3e579633(feat: migrate model contract to GPT-5.6 sol/terra/luna)、0ac484e0(fix: resolve migration review blockers)、51ee0c28(fix: doctor spark source labeling + alias docs),以及 3 个发布物料提交1ef0b8ce、5f5150d2、456effa2。这提醒我们:发布范围必须同时覆盖 PR 提交与直接提交,仅数 PR 会低估范围——这也是 0.20.0 在发布后需要修正 changelog 的根源(见下文「已知缺口」)。
三、PR 清单与「未列 PR 的迁移提交」
0.20.0 共 15 个 PR:#3079、#3080、#3082、#3085、#3086、#3087、#3088、#3091、#3092、#3094、#3097、#3099、#3100、#3102、#3104。对照 CHANGELOG.md 的 0.20.0 条目,可以看清每个 PR 的落点:
| 类别 | PR | 内容 |
|---|---|---|
| 稳定性修复 | #3079 | 无原生子 Agent 时防止 conductor 死锁 |
| #3080 | resume--sort updated保留 transcript mtime | |
| #3082 | 插件 Stop hook 兼容 launcher 噪声后的末行 JSON | |
| 插件与项目设置 | #3085 | 项目 setup 默认插件模式 + 插件缓存 |
| #3086 | 插件 hooks 仅在 omx 启动的会话中生效 | |
| #3088 | resume 插件 preflight 改为 opt-in | |
| 能力清单 | #3087 | 新增omx capabilities lock/checkCLI |
| 深度访谈状态 | #3091 / #3092 | 运行时状态 allowlist / 终端状态归一化 |
| Ralplan/Ultragoal | #3094 / #3097 / #3100 | 审批 handoff 与车道复用 / 目标派生守卫 / steering 清理 |
| 会话与上下文 | #3099 | SessionStart 时重开持久化子 Agent |
| #3102 | 规范化 worktree 工具上下文 | |
| 模型别名 | #3104 | GPT-5.6 模型别名(terra/luna/sol) |
PR 清单的意义在于「双向可核」:每个合并提交都能在清单中找到对应 PR,每个 PR 都能在 release notes 中找到说明或被明确标注为内部事项。
四、本地门禁:发布前的第一道关卡
0.20.0 就绪文档记录的本地门禁全部通过,下面逐条说明命令、输出与它们在代码中的落点。
1. TypeScript 构建
npm run buildnpm run build(见 package.json)执行「清空dist/->tsc编译 -> 为dist/cli/omx.js加可执行权限」三步,产出发布用的编译产物。0.20.0 门禁结果为 pass。
2. 版本同步检查
node src/scripts/check-version-sync.ts输出package=0.20.0 workspace=0.20.0。这个脚本(src/scripts/check-version-sync.ts)是版本一致性的守护者,它校验:
package.json的version与Cargo.toml的[workspace.package].version一致;- 6 个 Rust crate(
omx-api、omx-explore、omx-runtime-core、omx-mux、omx-runtime、omx-sparkshell)的版本均声明version.workspace = true,不允许独立漂移; - 若传入
--tag,还校验 tag 与package.json版本匹配。
因此 0.20.0 的版本号0.20.0被同步到了package.json、package-lock.json、Cargo.toml [workspace.package]、Cargo.lock以及plugins/oh-my-codex/.codex-plugin/plugin.json五处。
3. 插件镜像同步检查
node dist/scripts/sync-plugin-mirror.js --check校验 29 个规范 skill 目录与插件元数据一致。该命令对应 src/scripts/sync-plugin-mirror.ts 的--check模式:它依据plugins/oh-my-codex/下的插件清单,比对skills/与prompts/等目录的镜像内容,任何漂移都会以plugin_bundle_metadata_out_of_sync之类的错误中断。0.20.0 时 29 个目录全部通过。
4. Node 测试套件:370/371
npm test0.20.0 结果是 370/371 个测试文件通过。唯一失败的是dist/cli/__tests__/resume.test.js("preserves transcript mtimes while materializing runtime history for updated sort"),就绪文档给出了完整的定性:
- 它是预先存在(pre-existing)的 macOS-only 环境问题:测试内的假 codex 使用了 GNU
stat -c,在 BSD/macOS 上不可用; - 已在迁移前的提交
5a6c454b上复现出完全相同的结果,证明与本次迁移无关; - 在 Linux CI 上通过。
这种「先复现基线、再定性、再证明与本次改动无关」的处置方式,是就绪评估中处理环境性失败的规范动作。
5. Rust 工作区测试:237/237
cargo test0.20.0 的 Rust 工作区(omx-api、omx-explore、omx-mux、omx-runtime-core、omx-runtime、omx-sparkshell,见 Cargo.toml)237 个测试全部通过。Rust 侧同样被纳入 GPT-5.6 迁移范围:sparkshell/explore/api 的默认模型与文档均同步迁移。
6. 迁移质量门禁:三轮架构评审 + 三轮红队
0.20.0 的迁移质量门禁记录了完整的评审轨迹:
- 架构评审三轮:BLOCK -> COMMENT -> CLEAR/APPROVE;
- 执行者 QA/红队(red-team)三轮;
- 证据产物存放在
artifacts/qa-gpt56/、artifacts/qa-gpt56-r2/、artifacts/qa-gpt56-r3/,发布 QA 在artifacts/qa-release-0200/。
这说明模型契约迁移不是「改几个默认值」就完事,而是经历了「架构阻断 -> 提意见 -> 放行」的完整评审链与对抗性验证。
五、CI 证据链:从迁移到发布的全过程
0.20.0 就绪文档用 8 条 CI run ID 串起了「迁移 -> 发布准备 -> 发布 commit -> 双分支验证 -> tag 触发发布」的完整证据链:
| 阶段 | 提交 | CI run ID | 结果 |
|---|---|---|---|
| dev(迁移 + 修复) | 51ee0c28 | 29066232940 | 成功 |
| dev(发布准备) | 1ef0b8ce | 29066522175 | 失败(插件 manifest 版本陈旧),由5f5150d2修复 |
| dev | 5f5150d2 | 29066777285 | 成功 |
| dev(发布 commit) | 456effa2 | 29068579015 | 成功 |
| main | 5f5150d2 | 29067030836 | 成功 |
| main(发布 commit) | 456effa2 | 29068657404 | 成功 |
| tag v0.20.0 发布工作流 | 456effa2 | 29068946855 | 成功 |
tag 尝试(早期,5f5150d2) | — | 29067574902 | 失败(release body 缺少## Contributors节),tag 在456effa2重建 |
这组数据还原了真实的发布曲线:CI 失败不是终点,而是证据——1ef0b8ce的失败定位到「插件 manifest 版本陈旧」,由5f5150d2修复;tag 工作流第一次失败是因为 release body 模板缺少## Contributors节(这正是 RELEASE_PROTOCOL.md 第 3 节硬性要求的模板内容),于是 tag 在456effa2重建并成功。就绪文档不粉饰失败,反而把失败与修复一一对应记录,这是它可信的关键。
六、发布证明:GitHub release 与 npm 双通道
- GitHub release
v0.20.0已发布(非 draft),并附带 native assets 与 manifest; - npm
oh-my-codex@0.20.0已发布,npm view oh-my-codex version返回0.20.0,gitHead指向456effa2(与发布 commit 一致)。
按 RELEASE_PROTOCOL.md 第 5 节,发布后还应将dev快进到已发布的maincommit 并在dev上立即把版本号 bump 到下一个开发基线(如 0.20.1-dev),避免 dev 安装与已发布版本混同。仓库当前的 package.json 与 Cargo.toml 中版本为0.21.2,正是该机制持续运转的体现。
七、已知缺口:发布后的修正轨迹
就绪文档的「Known gaps」记录了一个诚实的问题:最初发布的 changelog/release-notes 低估了完整 compare range(主要是未把未列 PR 的直接迁移提交计入),发布后通过 collateral-accuracy follow-up 提交修正,并用gh release edit更新了 GitHub release 正文。
这条记录对应 RELEASE_PROTOCOL.md 第 6 节的「发布后修正」流程:不移动已发布的 npm provenance tag,而是把修正后的发布物料提交到dev,经正常 CI 路径提升到main,重新生成 release body 后执行gh release edit,并在就绪文档中记录修正。版本发布是允许修正的,前提是修正本身留痕。
八、0.20.0 的技术主体:GPT-5.6 模型契约迁移
就绪文档验证的对象,本质上是这次「把整个模型契约迁到 OpenAI GPT-5.6 代(Sol/Terra/Luna,2026-07-09 公开)」的变更。结合 docs/release-notes-0.20.0.md 与源码,迁移的内容可以精确展开。
1. 三条车道默认模型全面替换
frontier(前沿) : gpt-5.5 -> gpt-5.6-sol standard(标准) : gpt-5.4-mini -> gpt-5.6-terra spark(快速) : gpt-5.3-codex-spark -> gpt-5.6-luna落点覆盖:运行时默认值、Codex Agent 默认值、Rust crates、文档、prompts、skills 与插件镜像。核心常量定义在 src/config/models.ts:
export const DEFAULT_FRONTIER_MODEL = 'gpt-5.6-sol'; export const DEFAULT_STANDARD_MODEL = 'gpt-5.6-terra'; export const DEFAULT_SPARK_MODEL = 'gpt-5.6-luna'; export const GPT_5_6_MODEL_ALIASES = [DEFAULT_STANDARD_MODEL, DEFAULT_SPARK_MODEL, DEFAULT_FRONTIER_MODEL] as const; export const KNOWN_CODEX_MODEL_ALIASES = GPT_5_6_MODEL_ALIASES;isKnownCodexModelAlias()即 #3104 引入的「已知 Codex 模型别名」判定函数,用于识别这三个别名。
2. 子 Agent 角色分配
- planner:精确固定
gpt-5.6-sol(medium 推理) - architect:精确固定
gpt-5.6-sol(xhigh 推理) - researcher:精确固定
gpt-5.6-terra - 标准 worker / review 角色:
gpt-5.6-terra - explore / style-reviewer 与团队低复杂度 worker:
gpt-5.6-luna
3. 精确模型组合缝(exact-model composition seam)
原EXACT_GPT_5_4_MINI_MODEL更名为EXACT_GPT_5_6_TERRA_MODEL:指引以「trim 后最终解析模型」与gpt-5.6-terra做大小写敏感精确相等匹配,且优先于角色的exactModel固定 pin。
4. 兼容性边界(来自 release notes 与源码)
- 已有显式模型覆盖(包括旧代模型名)仍作为不透明字符串正常工作,不强制封闭 allow-list;
- 新配置
gpt-5.6-sol会保留model_context_window = 250000/model_auto_compact_token_limit = 200000的种子建议; - 模型解析优先级(见 src/config/models.ts 的
getMainDefaultModel/getSparkDefaultModel/getTeamChildModel):- 主模型:
OMX_DEFAULT_FRONTIER_MODEL>config.toml model>gpt-5.6-sol; - spark 模型:
OMX_DEFAULT_SPARK_MODEL>OMX_SPARK_MODEL>.omx-config.json models.team_low_complexity(及别名键)>gpt-5.6-luna; - 团队子模型:
OMX_TEAM_CHILD_MODEL>.omx-config.json env配置 >gpt-5.6-terra。
- 主模型:
5. 迁移附带的行为修正
- Autopilot 将规范的
gpt-5.6-terra/gpt-5.6-luna分类为廉价车道,主模型为 Terra 时重型规划路由给专职 planner; - setup 对
gpt-5.3-codex与gpt-5.5根模型提供 prompt 门控升级到gpt-5.6-sol,拒绝或非交互运行则保留原模型; - Doctor 准确报告 Spark 模型来源,包括
.omx-config.json models.team_low_complexity; - 团队委派子模型回退改为经
getTeamChildModel()解析(尊重OMX_TEAM_CHILD_MODEL),不再依赖硬编码缝常量。
九、配套新能力:omx capabilities lock/check
#3087 为本版本带来omx capabilitiesCLI(实现见 src/cli/capabilities.ts),命令行为:
omx capabilities lock [--lockfile <path>] [--json] omx capabilities check [--lockfile <path>] [--observations <path>] [--require-observations] [--strict-external-schemas] [--json]lock:构建并写出能力锁文件,默认路径为工作目录下的omx-capabilities.lock.json(常量见 src/capabilities/lockfile.ts),并输出configured_tools/skills/agents/fixtures四个表面的摘要 digest,以及外部 MCP server 缺 schema 快照的告警;check:对照锁文件做发布前预检(preflight),可要求必须携带观测数据(--require-observations)或对外部 schema 严格化(--strict-external-schemas),失败时以非零退出码结束。
仓库根目录的 omx-capabilities.lock.json 就是该命令产物的实例,npm test中的verify:capabilities-lock也用它做生成物一致性校验。
十、如何把这份就绪评估当作「可复用的发布清单」
对于想在自己的 fork 或 CI 流水线中复用 0.20.0 发布流程的读者,核心清单如下:
- 冻结范围:确认上一 tag 是候选 ref 的祖先,用
git log与gh pr list建立 commit + PR 双份清单; - 跑全部门禁:
npm run build、版本同步检查、插件镜像--check、npm test、cargo test,以及新增的omx capabilities lock/check; - 环境性失败要复现基线:在改动前的提交上复现,证明与本次变更无关,并在就绪文档中记录;
- 记录 CI 证据链:dev/main 双分支、发布 commit、tag 触发工作流的 run ID 逐一对应,失败也要记录修复路径;
- 发布证明双通道:GitHub release 非 draft 且带 native assets 与 manifest,
npm view oh-my-codex version返回发布版本且gitHead与发布 commit 一致; - 修正留痕:若发布后才发现 collateral 低估范围,按协议在
dev修正、走 CI 提升、gh release edit更新正文,并把修正记录进就绪文档。
这套证据驱动的发布方法,正是 RELEASE_PROTOCOL.md 想要固化的工程纪律:把「我觉得可以发布」变成「证据表明可以发布」,并让任何后来者都能沿文档、源码与测试路径复核每一次结论。
【免费下载链接】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),仅供参考