Skip to content

Releases: mingisrookie/codex-switch

ChatGPT Switch v0.5.0-macos.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Oct 05:40

ChatGPT Switch v0.5.0-macos.1 — macOS 预览版

首次提供 macOS 原生安装包,分别支持 Apple Silicon 和 Intel。此版本标记为 Pre-release,Windows 的 Latest 继续使用 v0.4.0。

下载

设备 安装包
Apple M 系列芯片 codex-switch_0.5.0-macos.1_aarch64.dmg
Intel Mac codex-switch_0.5.0-macos.1_x64.dmg

打开 DMG,将 ChatGPT Switch.app 拖到“应用程序”,弹出磁盘映像后运行。安装包最低系统标记为 macOS 12.0,原生 CI 在 macOS 15 验证;Codex/ChatGPT 自身的系统要求独立适用。

签名说明:本版仅使用 ad-hoc 签名,没有 Apple Developer ID 签名和公证。 首次运行可能被 Gatekeeper 阻止。核对下载来源和 SHA-256 后,如确认继续,可按 Apple 官方说明 在“系统设置 → 隐私与安全性”选择“仍要打开”。

本版支持

  • 保存 Account / Relay 配置,切换官方账号与自有 API 请求路由。
  • 使用 macOS 钥匙串主密钥和 AES-256-GCM 保护已保存凭据;官方 auth.json 保持只读。
  • 识别标准安装目录下、通过 OpenAI 签名验证的 Codex.app / ChatGPT.app,请求正常退出并重新启动;独立 CLI 保持阻断。
  • 会话查看、搜索,以及兼容 SQLite 结构的视图切换;通过数据库锁、快照校验和事务恢复保护中断场景。
  • 脱敏诊断、私有文件权限及 Finder 定位。

预览版限制

高级迁移、合并、恢复可见、离线清理、完整备份恢复及内置技能尚未开放。Mac 请下载新 DMG 手动更新,Windows 的 EXE 更新通道保持独立。

工具数据位于 ~/Library/Application Support/codex-switch。Mac 与 Windows 的加密槽位不能直接互换。Relay 使用期间,客户端需要的 bearer token 仍存在于受管 config.toml 中,请勿分享该文件。

受管客户端需位于 /Applications 或 ~/Applications,bundle identifier 为 com.openai.codex;ChatGPT Classic 不属于此范围。保存和切换只证明本地配置已应用,不证明第三方服务已连通。

构建与验证

安装包由该 tag 的 GitHub Actions 原生构建。发布前置门包括双架构 Mac 专项测试、最终 App 隔离启动与正常退出、DMG 内容/架构/签名核验、Windows 回归及依赖审计。各架构的验证 JSON、SHA-256 和 Rust CycloneDX SBOM 随本次 Release 提供。

验证使用合成数据和隔离钥匙串,未使用真实账号,也未向第三方服务发送请求。GitHub 构建来源证明及 SHA-256 不等于 Apple 签名或公证。

完整安装、数据与恢复边界见 macOS 预览版说明。

ChatGPT Switch v0.4.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 03:42

Provider compatibility

  • Relay 传输改为显式能力模型:默认使用 HTTP Responses,并只在用户明确选择时启用 Responses WebSocket。旧槽位没有该字段时安全迁移为 HTTP,避免不支持 WSS 的中转站反复重连。
  • Base URL 归一化不再机械给已有网关路径追加 /v1;仅 origin 地址补 /v1。远程明文 HTTP、内嵌凭据、query 和 fragment 继续拒绝。
  • UI、回执和文档明确区分“本地请求路由已应用”和“远端服务已验证”;保存/切换仍不发送 /models 或探测请求。

Runtime and storage safety

  • 新增受管 ChatGPT/Codex 包版本只读采集,以及基于 file identity、SQLite quick_check、schema_version、关键列和稳定 Schema 指纹的能力门禁。请求配置、会话视图和高级存储分别判定;未知结构不再按旧假设写入。
  • “存储”改为“高级存储与恢复实验室”。兼容性不足时全部迁移、冲突、恢复导入、降级和离线 GC 写操作关闭,只保留安全的重新扫描和脱敏排查。
  • 收紧共享 SQLite sidecar 合同:未建立 Relay 视图不再接受 -wal、-shm 或 -journal;既有 hard-link 视图只 checkpoint active 路径,并在前后验证 inactive sidecar 缺失和主库 file identity 未变。
  • Provider 与兼容性失败新增稳定错误码和恢复分类,不再依赖中文/英文自由文本决定 UI 行为。

Architecture and tests

  • 从巨型 commands.rs 提取请求路由应用服务,从 App.tsx 提取兼容性面板,缩小命令/UI 编排边界。
  • 新增 Provider URL/transport、typed error 和进程关闭状态机的 property tests,并补齐 sidecar、未知 Schema、HTTP 默认/WSS 显式、只读降级等回归测试。
  • Rust 工具链固定为 1.94.1,Node 主版本与 direct TypeScript 类型依赖固定;新增文档链接合同检查。

Integration fixes

  • 整合 v0.3.5 后补齐复合主键、SQLite 类型亲和性、writer 关闭后结构复检、全局库 sidecar 句柄交接复核以及错误信封大小限制;兼容性查询移出界面线程。
  • 修复组件清单输出名重复 .json 与工作区绝对路径、依赖图校验问题,文档链接检查同时支持 Windows/POSIX 和 HTML 图片;保留 v0.3.5 的搜索优化、首页和原生测试进程回收修复。

Supply chain and release

  • 为生成的 CycloneDX 组件清单补齐 GitHub SBOM 证明所需的 UUID serialNumber;已有合法标识保持不变,非法标识在签名前拒绝。

  • CI 新增 npm 生产依赖审计、cargo-deny advisories/source/license 门、按锁定依赖生成的 Rust CycloneDX SBOM;tag 发布流程为最终 EXE 生成 GitHub/Sigstore 构建来源与 SBOM attestation,并在 Release 同时公开 codex-switch.cdx.json 供离线审阅。

  • Windows EXE 的 Authenticode 状态为 NotSigned,尚未使用商业代码签名证书。GitHub attestation、SHA-256、UPX 和 PE 合同不能替代 Authenticode 或终端防护扫描。

Upgrade and validation

  • v0.3.5 用户可通过应用内“检查更新”升级;没有保存 transport 的旧槽位按 HTTP Responses 读取,已明确选择 WebSocket 的槽位保留该选择。工具只应用本地配置,不承诺第三方服务已经连通。
  • 保留 v0.3.5 的会话搜索、稳定分页、跨页选择、备份格式和更新器固定 EXE 文件名。Release 附带的 JSON 组件清单不是安装包。
  • 发布检查覆盖前端测试/类型/生产构建、Rust fmt/Clippy/runtime-evidence 测试、文档与发布脚本检查、依赖和许可证检查、最终 EXE 原生验证,以及公开 v0.3.5 到 v0.4.0 的升级和替换失败回滚。构建与发布结果以本版本 GitHub Actions、公开资产及验证记录为准。

发布验证记录

发布提交:a2d874e320fe04a390a1d77467025b1ad9d39c9c。正式产物来自 v0.4.0 标签构建;五个质量、构建与发布任务均通过。

项目 验证结果
Windows x64 程序 codex-switch.exe,2,667,008 字节;公开回下载与同次 CI 产物一致
Rust 组件清单 codex-switch.cdx.json,345,988 字节;公开文件与签名证明中的清单一致
构建来源与 SBOM 证明 GitHub CLI 按本仓库、签名工作流、标签和精确提交验证通过
前端与脚本 209 项前端测试、48 项发布/供应链脚本测试通过
Rust 840 项库测试及相关集成测试通过;格式、Clippy 通过;显式 ignored 专项用例未计入已执行
公开 EXE 原生检查 全新、已初始化、兼容性测试三种隔离环境;各完成 1200×820、900×640、390×844 窗口验证
应用内更新 公开 v0.3.5 → v0.4.0 成功;模拟目标文件占用后正确回滚并启动 v0.3.5

EXE SHA-256:c926b88c394a4f6cebd74ea2e7d9bd4990cc69173db8a435d027eef97173b680
组件清单 SHA-256:f1cbb11661636483827dc978d41db86383ede0ba61287e78971b1bc5faac2884

更新和回滚在隔离安装目录中完成,三个受保护的合成标记文件前后字节一致;未操作真实用户凭据或会话。未验证第三方中转站的真实连通性。

Windows Authenticode:NotSigned。 GitHub 构建/组件清单证明不等于 Windows 商业代码签名。

ChatGPT Switch v0.3.5

Choose a tag to compare

@github-actions github-actions released this 07 Sep 06:51

Changed

  • 会话搜索复用随库存更新的内存索引,排序结果只在库存或排序方式改变时重新计算,避免每次输入和勾选都重建搜索文本或排序。
  • 会话列表新增匹配数量、本页范围、清空搜索、只看已选和跨页/筛选外已选项提示;搜索无结果时仍可清空已有选择。

Fixed

  • 统一旧记录的秒级时间与毫秒级时间后再排序,显示和排序使用同一时间值;无效时间排在末尾,同时间或同标题以会话 ID 稳定排序。
  • 列表刷新保留当前页,结果减少时将页码收敛到有效范围,后续刷新不会跳回已经失效的页码。

Release engineering

  • 修复发布验证中的原生数据库初始化超时清理:初始化与退出均设有界等待,失败时回收本次创建的子进程,不再让验证流程无限挂起;新增提前退出、无响应、拒绝初始化、缺失数据库及退出超时回归。
  • 将构建/测试链中的间接依赖 nanoid 和 undici 更新到现有版本范围内的安全修订,消除发布前 npm audit 报告;不新增直接依赖或改变产品运行时依赖。
  • 修复 GitHub Actions 旧版槽位兼容测试调用 GitHub CLI 时缺少认证的问题:仅向该测试步骤注入仓库自带的只读令牌,保留原有兼容测试、打包和发布检查。
  • 重整仓库首页:提供 Windows 直接下载、当前界面截图、简明操作步骤和数据安全边界。
  • 发布资产仍为唯一的 Windows x64 便携文件 codex-switch.exe,由版本 tag 的 CI 构建;保留应用内更新兼容性。

Compatibility and validation

  • 不合入 v0.4.0 开发内容,不改变官方登录、API Key、请求路由、会话正文、备份格式或更新器协议。
  • 发布检查包含前端测试与类型检查、Rust fmt/clippy/test、发布脚本回归、Windows 打包合同、隔离启动、公开文件校验及前一稳定版的更新/回滚验证。实际发布结果以版本对应的 GitHub Actions 和公开资产为准。

发布验收结果

  • GitHub Actions 版本流水线全部通过:Windows 质量检查、v0.2.7 旧版槽位兼容、便携版构建及正式发布。
  • 公开 EXE 已重新下载,与同一版本 CI artifact 的文件大小和 SHA-256 完全一致,PE 版本及 UPX 完整性检查通过。
  • 公开 EXE 在全新环境与已有初始化环境均完成实际启动/正常退出,并通过 1200×820、900×640、390×844 界面检查。
  • 已在隔离测试目录实测 v0.3.4 → v0.3.5 一键更新成功;同时用目标文件读锁模拟替换失败,验证自动回滚到 v0.3.4。测试数据保持不变,临时运行目录已清理。
  • 本轮包含 201 项前端测试、30 项发布脚本回归,以及 Rust fmt、Clippy 和测试检查。显式标记 ignored 的专项测试不计为本轮已执行。

Windows x64 便携文件: codex-switch.exe,2,881,024 bytes。

SHA-256: 294605d5ed89083cc4f22ef5fdf77bad2744e319e9edf285daa6782f7771b809
Release commit: 6738848e6e4d3ba8a32633ecf70fd5a61c84372a

已有用户可在应用中点击“检查更新”。上述更新测试均使用隔离环境,没有修改任何用户正在使用的安装或真实会话。

ChatGPT Switch v0.3.4

Choose a tag to compare

@github-actions github-actions released this 03 Sep 14:20

Fixed

  • 修复未完成初始化的 Relay 会话视图在目录中已经存在合法共享全局 SQLite(logs_2.sqlite、goals_1.sqlite、memories_1.sqlite)时,被“目录非空”检查误判并阻止切换的问题。现在会继续进入既有 file-identity / quick-check / hard-link 校验链;只有这些数据库确实属于已验证共享视图时才允许继续。
  • 未初始化 Relay 目录中的 state_5.sqlite、未知文件、目录、符号链接或其他非受管内容仍保持 fail-closed;独立的 Account/Relay 全局数据库也仍拒绝覆盖,避免为了恢复切换而静默丢弃数据。
  • 新增回归测试覆盖“last_common_state_sha256 尚未建立,但 Relay 目录已包含合法共享全局数据库”的真实恢复路径,确保可完成 Relay 物化并建立共同状态摘要。

Release engineering

  • 本补丁版本只收敛上述 Relay bootstrap 恢复边界,不改变 auth.json、Relay Key、请求路由或会话正文的既有安全合同。

ChatGPT Switch v0.3.3

Choose a tag to compare

@github-actions github-actions released this 31 Aug 05:22

Changed

  • 移除前端 API 中已废弃的全量 loadDashboard 聚合入口,避免后续代码绕过现有分域加载机制,在首屏重新触发会话、备份和检查点扫描。
  • 保留并验证正式使用的 loadRuntimeDashboard、loadSessionDashboard、loadBackupDashboard 按需加载路径;会话域单项失败仍不会覆盖其他域的真实状态。

Release engineering

  • 版本 tag 的 Windows CI 只有在前端、Rust、旧版槽位兼容和 packed EXE 门禁全部通过后,才会下载同一 workflow 中已验证的 codex-switch.exe,复核 release contract,并使用受限的 GitHub Actions 仓库令牌创建 Release。
  • Release 标题和说明绑定 tag、五处版本号与当前 Changelog 段落;同名 Release 已存在时拒绝覆盖,防止重跑 CI 静默替换公开资产。
  • 本版本不改变界面、账号/Relay 路由、会话、备份、恢复或更新器运行逻辑,是一次代码维护与发布链路收敛更新。

ChatGPT Switch v0.3.2

Choose a tag to compare

@mingisrookie mingisrookie released this 30 Aug 13:28

v0.3.2

本版本完成无官方登录 / fresh Codex Home 的 Relay 切换修复,并补齐首次启动与自更新竞态。

修复

  • 完全空的 Codex Home 尚未生成 state_5.sqlite 时,手机连续性状态现在返回合法零会话,不再报 SQLite CannotOpen;只读启动不会创建数据库。
  • 未登录官方 ChatGPT、auth.json 和 config.toml 均不存在时,Relay 仍可保存和切换;Account 仍要求有效官方登录。
  • 启动连续性初始化占用 mutation guard 时,写操作会短暂禁用并在初始化结束后恢复,避免立即点击触发偶发 another mutation。
  • updater 验证等待完整页面和真实 Tauri invoke bridge 后再调用命令,避免首屏与原生桥就绪之间的竞态。

验证与安全

  • 同一正式资产分别通过 initialized Home 和真正 fresh Home 的三档生产 UI E2E;fresh Home 中 auth.json、config.toml、state_5.sqlite 均保持不存在。
  • 从公开 v0.3.0 和 v0.3.1 到 v0.3.2 的成功更新与替换锁回滚均使用隔离实例验证,受保护状态保持字节不变且无 helper/staging 残留。
  • 测试未调用 taskkill、Stop-Process 或进程强杀,也未向本机 ChatGPT/Codex 发出关闭请求;只正常退出或精确关闭隔离的 codex-switch.exe 测试实例。

完整变更见 CHANGELOG.md。

ChatGPT Switch v0.3.1

Choose a tag to compare

@mingisrookie mingisrookie released this 30 Aug 11:16

v0.3.1

本版本集中修复 API 中转站切换可靠性,并补齐无官方登录 / fresh Codex Home 场景。

修复

  • 未登录官方 ChatGPT 时,现在可以保存和切换 API 中转站;Account 目标仍明确要求有效官方登录。
  • config.toml 或 state_5.sqlite 不存在时,Relay 首次保存/切换不再失败;失败回滚会恢复到原始“文件不存在”状态。
  • 修复后台自动 GC 轮询长期占用 mutation lock、导致前台偶发 mutationBusy 的竞争。
  • 切换失败改为稳定的类型化 reason,UI 可显示准确恢复建议,不再依赖错误字符串猜测。
  • 只持久化最近验证且仍可信的 ChatGPT AppUserModelID,避免重启目标歧义。
  • 发布/升级验证脚本支持连续补丁版本,并移除所有强制结束子进程的 fallback。

安全与兼容

  • 既有官方登录在 Relay 切换前后保持字节不变;应用不会伪造、替换或创建官方 auth.json。
  • Relay Key 仍使用 DPAPI 槽位;Account/Relay 两槽合同和 WebSocket 配置保持兼容。
  • 配置回滚增加外部替换保护,不覆盖并发外部写入。
  • 测试使用隔离目录和隔离实例;未调用 taskkill、Stop-Process 或进程强杀。

完整变更见 CHANGELOG.md。

ChatGPT Switch v0.3.0

Choose a tag to compare

@mingisrookie mingisrookie released this 15 Aug 02:14

Canonical 会话存储

  • 新增统一 SessionReferenceGraph 与语义 JSONL provenance,覆盖 OpenAI 主目录、Account、Relay、Shared、legacy/relocated 与备份库存;无法判断的历史一律 fail closed。
  • Account / Relay / Shared 改为数据库视图与请求路由,canonical 就绪后延续同一逻辑 threadId,不再按 provider 永久物化完整正文。
  • 旧“完全同步”改为“会话合并与修复”;真实分叉默认不覆盖,显式覆盖后的旧主版本进入 7 天冲突回收。
  • 生产版移除会话 hard-delete command 与 UI 永久删除入口。

迁移、备份、GC 与降级

  • 一次性前台迁移状态机:只读 Preflight → 完整备份 → 真实 Codex 隔离恢复验证 → 原子计划 → Apply/Validate/Commit,全程由持久操作账本驱动。
  • fail-closed 安全窗口离线 GC:在线阶段固定只扫描,候选须同时满足有效 marker、确定 canonical peer、Equal/Prefix、连续两次未变化与全运行时零引用。
  • 新增 v0.2.0–v0.2.7 显式隔离降级导出与再次升级导入;旧版只使用自描述隔离存储,canonical 保持不动。
  • 顶部新增“存储”页,集中展示存储状态、canonical 会话、安全副本、冲突、已回收字节与安全窗口状态。

完整条目见 CHANGELOG.md。

发布工程修复

本版本发布前,v0.2.7 降级门禁在 CI 上连续 15 次失败且从未通过。根因与修复:

  • 门禁通过 WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS 注入 CDP 调试开关。托管 runner 完整收到该变量却不据此启动浏览器,本地开发机则会,因此门禁在 CI 上永远拿不到调试端口。改为同时通过 --edge-webview-switches 宿主命令行通道注入,并固定 WebView2 用户数据目录。
  • 门禁此前以 stdio: "ignore" 启动被测产品,失败时只有一句 fetch failed。现在全部启动均记录 stdout/stderr、退出码与 spawn 失败,就绪等待在子进程退出时立即中止,并附带端口监听者、WebView2 进程命令行与运行时版本。
  • 门禁此前硬性拒绝在 GitHub Actions 之外运行,每个假设都必须花费一次提交与一轮完整 CI。现支持显式隔离本机运行。
  • 应用后断言要求 sqlite_home 缺席,而 v0.2.7 本就拥有并重写该键,旧运行时无法满足。改为断言该键不得逃逸隔离包;导出槽不得携带 sqlite_home、不得重新引入源 canonical 根、数据库引用包含性三项检查保持不变。
  • CI 拆分为质量门禁、降级门禁与 release 构建三个 job,失败时同样上传证据,并支持手动触发。

验证

  • 前端 166 tests passed(8 test files);TypeScript typecheck 与 production build 通过。
  • Rust 789 tests passed、11 ignored;cargo fmt --check 与 cargo clippy -D warnings 通过。
  • 发布 harness 安全契约 20 tests passed。
  • v0.2.7 隔离降级 saved-slot apply 门禁在托管 runner 上通过。
  • main CI run 31856956413 与 tag CI run 31858620663 均为三个 job 全部成功,同指提交 7f5e759。
  • 唯一资产 codex-switch.exe 为 2,872,832 bytes,SHA-256 BBA8CE095ECEB6F005A5A3708CD6DBBBABF4EA56AA46E701A8A9EDAFFEBDCD62,取自 tag CI artifact,未在本地重新构建;公开回下载与该 artifact 逐字节一致。
  • 出处更正:发布后约 4 小时内曾短暂提供同一提交 main CI 构建的资产(2,872,320 bytes,SHA-256 FE89B0E7…,其 run 内 release contract/UPX/PE 校验同样全部通过),后按发布流程替换为 tag CI artifact。两份文件均为同一源码的已验证构建,仅 UPX/PE 时间戳不同。
  • 真实 updater 首跳与回滚已闭环(发布后补跑,隔离环境、无信任绕过、无故障注入接缝):
    • success:0.2.7 → 0.3.0,同路径替换、PID 变更、启动回执 updated,安装后 SHA-256 与公开资产一致,受保护状态字节不变,残留 0。
    • replacement-lock-rollback:对目标文件施加外部独占读句柄后,产品回滚至 0.2.7,启动回执 rolledBack,安装后 SHA-256 回到 v0.2.7 资产,受保护状态字节不变,残留 0。
    • 证据 updater-e2e.json SHA-256 7DAAFDF4C2BFA0F6EB7703E9A801012AD6AC0A8FF9B02B5323F2A7A848C92859。

ChatGPT Switch v0.2.7

Choose a tag to compare

@mingisrookie mingisrookie released this 09 Aug 18:55
7483203

新增

  • 新增“诊断与支持”:记录切换、同步、备份/恢复、Skill、更新等失败的结构化诊断,并支持导出最近诊断或本次失败诊断。
  • 导出固定五文件 ZIP,可私下发给维护者排查;默认保存到 Windows 下载目录,失败时可由用户主动改存应用诊断目录。

隐私、兼容性与边界

  • 诊断事件与 durable operations.jsonl 分离;诊断失败不会改变原业务终态,清除诊断日志不会删除操作历史、备份、会话、配置或凭据。
  • ZIP 经过双层脱敏、路径/UUID/秘密形态扫描和 hash/self-check,不包含凭据、聊天正文、原始 JSONL/SQLite、完整配置、进程命令行或稳定设备标识。
  • v0.2.6 只创建了 annotated tag,最终独立隐私审查在 GitHub Release 前拦截;未创建 Release/Latest,旧 tag 未移动,修复统一进入 v0.2.7。
  • 仍只发布唯一 Windows x64 portable 资产 codex-switch.exe,兼容现有一键更新器。

验证

  • 前端:139 tests passed;TypeScript typecheck 与 production build 通过。Rust:499 tests passed,4 tests intentionally ignored;fmt 与 clippy -D warnings 通过。
  • 隔离 APPDATA / CODEX_HOME 的故障注入、五文件 ZIP 外部敏感扫描、真实 packed EXE UI/E2E、PE32+ x64/双版本 release contract 与 upx -t 通过。
  • PR CI 31328121903 / 31328135186、main CI 31328794302、tag CI 31329458760 均通过;Release 资产取自唯一 tag-CI artifact。
  • 唯一资产 codex-switch.exe 为 2,411,008 bytes,SHA-256 E8905135EAB0C5D76117BAA25770371E3D8BFDAF07495805463C96A823A5B78E;公开回下载与 tag-CI artifact 完全一致,两个 live GitHub Release 合同测试均通过。
  • 正式 v0.2.5 -> v0.2.7 一键更新 smoke 通过:同路径自动替换并重启,用户状态 byte-exact,staging/install 残留为 0。

ChatGPT Switch v0.2.5

Choose a tag to compare

@mingisrookie mingisrookie released this 01 Aug 06:24

修复

  • 修复 Relay 槽位把 supports_websockets 保存为 false 的问题。
  • 切换到中转站时,现在会在 [model_providers.openai_custom] 中权威写入布尔值 supports_websockets = true。
  • 兼容旧槽位:即使已保存的字段为 false 或缺失,下一次 Relay 切换也会纠正为 true。
  • live 配置中该字段为 false 或缺失时,不再误报为 Relay 精确匹配。

兼容性与边界

  • Account 路由、官方 auth.json、用户自有 provider 和其他全局配置保持原有保护边界。
  • Release 仍提供唯一的 Windows x64 portable 资产 codex-switch.exe,兼容现有一键更新器。
  • 本版本不包含关闭流程、切换性能或会话清理策略调整。

验证

  • 前端:122 tests passed,TypeScript typecheck 与 production build 通过。
  • Rust:402 tests passed,4 tests intentionally ignored;fmt 与 clippy -D warnings 通过。
  • Windows fresh production build、PE32+ x64/双版本 release contract、固定 UPX 5.2.0 打包与 upx -t 通过。
  • packed EXE 在隔离 APPDATA / LOCALAPPDATA / CODEX_HOME 中成功启动 ChatGPT Switch 原生窗口,用户 live 配置哈希保持不变。
  • Main CI 30686563931 与 tag CI 30687043534 的 Windows quality gate 均通过;Release 资产取自 tag CI,不使用本地候选文件。