
当上游连夜改名codex-app-mirror 如何顶住 Codex 并入 ChatGPT 品牌合并的 P0 故障复盘【免费下载链接】codex-app-mirror原样镜像官方 Codex 桌面应用:每 15 分钟探测、SHA256 可校验、国内直连下载、 Mac 可增量更新 | Verbatim, verifiable mirror of the official Codex desktop app — probed every 15 min, with a Sparkle delta-update feed.项目地址: https://gitcode.com/gh_mirrors/co/codex-app-mirrorcodex-app-mirror 是官方 Codex 桌面应用的原样镜像站每 15 分钟探测一次上游、SHA256 可校验、国内直连下载并为 macOS 提供 Sparkle 增量自动更新源。2026 年 7 月 9 日OpenAI 把 Codex 桌面应用原地并入 ChatGPT 品牌——文件名、显示名、包内入口全变了但产品没变。这次上游连夜改名让镜像管道一夜 404 中断本文完整复盘 codex-app-mirror 如何用三天时间定位根因、实施 Stable P0 修复并把这次事故沉淀为可复用的防改名纪律。一、故障现场上游改的是皮不是骨2026-07-09 起上游将 Codex 桌面应用原地并入 ChatGPT 品牌变化项合并前合并后macOS 安装包文件名Codex-darwin-arm64-*.zipChatGPT-darwin-arm64-*.zipWindows 清单入口app/Codex.exeapp/ChatGPT.exe显示名CodexChatGPTmacOS bundle IDcom.openai.codexcom.openai.codex不变Windows 包身份OpenAI.CodexProductId9PLM9XGG6VKS不变也就是说发行名称、包名、可执行文件都变了产品身份一个字节都没变。这对用户无感对按文件名工作的镜像管道却是 P0。二、根因定位镜像站为什么会 404故障点很快锁定探测脚本 probe-release.sh 是按规则拼接上游文件名Codex-${ver}-{arch}.dmg来构造下载 URL 的。上游把前缀改成ChatGPT之后拼出来的 URL 直接 404整条探测 → 比对 → 发布链路在第一步就停摆。更麻烦的是这类按规则重建上游文件名的代码散落在管道各处逐一排查后形成了一份改动清单见 chatgpt-rebrand-recovery.md 的改动位置索引read-macos-metadata.sh写死了$volume/Codex.app/Contents/Info.plist修完 probe 后必现的下一处失败点download-macos.sh / build-appcast.sh各自重建 zip 保存名与 enclosure URLstore-link/Program.csProductPrefix常量写死为OpenAI.Codex_prepare-windows-portable.sh启动器写死Codex.exe而清单入口已是ChatGPT.exe。教训一句话文件名不是产品身份任何猜文件名的代码都是定时炸弹。三、修复决策 1只认身份不认名字P0 契约确立了核心纪律chatgpt-rebrand-recovery.md只管理 Codex 产品血统允许其发行名称、包名、可执行文件随合并改变绝不纳管 ChatGPT Classiccom.openai.chat。身份矩阵全部实测于 2026-07-10通道macOS bundle IDWindows identity镜像站态度Stablecom.openai.codexOpenAI.Codex✅ 唯一纳管对象Betacom.openai.codex.betaOpenAI.CodexBeta独立增强不混入ChatGPT Classiccom.openai.chat—❌ 永不纳管配套落地 macOS身份门禁镜像介质中必须恰有一个顶层.app不再要求它叫Codex.app且CFBundleIdentifier com.openai.codex、Team ID 为2DC432GLL2、Sparkle EdDSA 公钥与固定值一致com.openai.chat即使签名团队匹配也明确拒绝。这些校验逻辑就落在 read-macos-metadata.sh 中。四、修复决策 2manifest 双字段源名动态读、镜像名稳住 ABI这是本次修复最核心的架构改动ingress 和 egress 用两套名字各读各的权威来源。ingress探测 / 下载只使用sourceUrl/sourceBasename一律从权威源读取——DMG 与 zip 的文件名来自 appcast 的enclosure标签MSIX 入口来自AppxManifest.xml的ApplicationExecutable包名来自 DisplayCatalog / FE3。所有按规则重建上游文件名的代码被删除改造见 probe-release.sh 的 enclosure 解析段。egress落盘、校验和、Release、appcast、R2 key、副镜像同步统一读取mirrorEnclosureBasename保持Codex-前缀不变避免下游短链、Release 命名一夜之间全部断裂。manifest 中的实际形态如下{ sourceBasename: ChatGPT-darwin-arm64-26.707.31428.zip, mirrorEnclosureBasename: Codex-darwin-arm64-26.707.31428.zip }为什么镜像端敢改名因为EdDSA 只签归档字节本身不签 URL 和文件名——只要镜像与官方字节级一致原始签名依然有效镜像站不会也无法伪造签名。镜像名保持Codex-前缀是独立的产品决策稳定对外 ABI与本次故障修复解耦。五、修复决策 3sharedlatest是一致性单元不许拆开切发布侧的共享 keylatest/manifest、latest/checksums、latest/win-*、macOS appcast会被客户端同时读取而 R2/S3 不提供多对象事务。如果按平台各切各的客户端可能读到新 manifest 旧包的组合。因此契约 3 规定了受控切换顺序先上传不可变对象versioned release / 候选 manifest不动 sharedlatest下游客户端完成真机验证增量更新、完整包回退、全新安装、Classic 排除等维护窗口内由同一次发布作业协调推进全部latestkey完成后立即从外部逐项验证回滚同样协调回退不可变资产不覆盖、不删除。副镜像同步 worker 里重建 basename的代码secondary-sync/core.js也同步改为从 manifest 读取避免切换时两套镜像出现名字漂移。六、复盘清单镜像项目如何防上游改名这次 P0 沉淀下来的五条通用经验任何做上游原样镜像的项目都适用用身份锚定不用文件名锚定bundle ID、ProductId、AppxManifest入口、签名 Team ID 才是稳定锚点身份矩阵见 chatgpt-rebrand-recovery.md。删掉所有猜文件名的代码上游名字必须从权威源appcast enclosure、商店元数据、清单文件动态读取。双字段 manifest 隔离内外命名源名随上游变镜像名守住对外 ABI两侧互不牵连。发布前设身份门禁一个包能通过签名但 bundle ID 不对如 ChatGPT Classic照样拒绝——签名正确 ≠ 产品正确。共享可变更 key 按一致性单元切换客户端会并发读取的多个 mutable key 必须同一次作业推进不可变资产与可移动指针分离。如今 codex-app-mirror 已按此契约完成 Stable P0 实施上游再改显示名探测端从 appcast 读到新 basename 即可照常工作而Codex-mac-*.dmg、latest/*短链与 Sparkle 更新源对下游用户零感知。上游可以连夜改名镜像站只认血统、不认皮。【免费下载链接】codex-app-mirror原样镜像官方 Codex 桌面应用:每 15 分钟探测、SHA256 可校验、国内直连下载、 Mac 可增量更新 | Verbatim, verifiable mirror of the official Codex desktop app — probed every 15 min, with a Sparkle delta-update feed.项目地址: https://gitcode.com/gh_mirrors/co/codex-app-mirror创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考