opencodex 发布前稳定性门禁实战:从 dev 同步到 3431 项测试全绿的 WP2 门禁体系

发布时间:2026/9/25 8:26:16
opencodex 发布前稳定性门禁实战:从 dev 同步到 3431 项测试全绿的 WP2 门禁体系
【免费下载链接】opencodexUniversal provider proxy for OpenAI Codex Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code项目地址https://gitcode.com/gh_mirrors/ope/opencodex点击查看免费下载导读本文基于 opencodex 仓库维护记录中的 WP2 稳定性门禁020_stabilize_gates.md完整还原一次远程 dev 大同步 稳定性判定的标准流程当本地 dev 落后 origin/dev 21 个提交、并经历多轮 review-修复循环后如何在最终 HEAD 上跑通全套质量门禁隔离测试、TypeScript 类型检查、prepush 推送门禁并据此作出无新增缺陷、无需额外修改提交的判定。读完本文你将掌握 opencodex 的本地四层门禁命令、其背后的源码实现测试隔离沙箱、并行 lane、隐私扫描、GUI lint 与 React Doctor以及如何在日常开发中复现和解读这套门禁结果。一、背景为什么需要一次稳定性门禁专项在 000_research.md 中记录了本次工作的前提维护者团队批量处理了社区 PR本地 dev 分支c5e5b6d2相比 origin/dev落后 21 个提交通过git pull --ff-only同步到 3a5f984d。这 21 个提交来自 #229~#264 等大量 PR覆盖 auth/provider 修复如 anthropic adaptive max_tokens 重设、expireCodexAuthFlow(null)、combo 请求头重构、GUI 日文本地化、OpenRouter 路由、config 迁移备份策略等其中包含 42 文件的高风险改动。随后 WP1review-修复循环已在 dev 上堆积了两个缺陷修复提交a41170c9、29763560因此 WP2 的任务非常明确以最终 HEAD 为基准重新确认全套门禁并判定是否存在额外缺陷。这不是一次普通的跑一遍测试而是一次工程化的质量判定关卡——门禁全绿且无新增缺陷时后续 WP3部署 readiness 判定与 WP4release train才有资格继续。二、门禁清单四层判定逐项复核按 020_stabilize_gates.md 的规划WP2 在最终 HEAD29763560上执行四步bun test --isolate ./tests/全绿WP1 执行片段为 3431/0bun x tsc --noEmit退出码为 0lint:gui/privacy-scan/ locale sync 全绿push 时 prepush 门禁已覆盖并通过若无新增缺陷则不产生新的修改提交记录为 NOOP。这四层分别对应测试、类型、静态质量与隐私安全四个维度其命令均可在根目录 package.json 的scripts中找到落点。下面逐层展开其命令含义与源码实现。三、第一道门bun test --isolate ./tests/全量隔离测试3.1 命令语义bun test --isolate是 opencodex 全量测试的标准形态--isolate让每个测试文件拥有独立的全新全局状态fresh global per file避免跨文件状态污染。仓库通过bun scripts/test.ts对应package.json中的test脚本包装该调用其参数解析实现在 scripts/test.ts。从源码resolveBunTestArgsscripts/test.ts可以看到两处关键设计默认并行度 4--parallel4是仓库默认值。注释记录了实测依据仅用 isolate 单核跑全量到约 900 个文件时会从慢退化为看起来挂死实测 1 小时 29 分无输出、~57% CPU、8.5 MB RSS而 4 个 worker 只需几分钟全部 10 个 worker 又会让 deadline 敏感的测试在负载下失败因此仓库固定为 4调用方显式传入--parallel时才覆盖。无过滤即全量不带文件参数、不带--changed时自动追加./tests/即isFullSuiteRun判定为全量运行。3.2 隔离测试沙箱createIsolatedTestEnvironment全量测试跑在完全沙箱化的环境中scripts/test.ts 的createIsolatedTestEnvironment为每次 lane 创建独立临时根目录并把以下环境变量全部重写——HOME、USERPROFILE、OPENCODEX_HOME、CODEX_HOME、TEMP/TMP/TMPDIR。这意味着测试中的配置读写、Codex/OpenCodex 数据目录、临时文件全部被限制在临时沙箱内不会触碰开发者真实主目录。两个细节值得注意真实 HOME 透传OCX_REAL_HOME在 HOME 被改写前捕获供真实主目录写保护守卫使用Windows 特例Windows 下必须预创建AppData/Local与AppData/Roaming否则 .NET 的 known-folder API 会返回空字符串导致 Codex coordinator 查找失败、错误表现为无关断言。3.3 串行 lane高风险文件的隔离全量运行时scripts/test.ts 的SERIAL_FULL_SUITE_FILES会把一批风险文件从并行主 lane 抽出各自以--parallel1单独进程运行例如server/server-live.test.ts端到端中转 50 MiB WebSocket 帧、受 15s deadline 约束并行分区会干扰其计时service/service.test.ts等三个文件争夺默认 home 的服务 authority需独立 homeci-workflows/structure-ssot.test.ts同步 Git 子进程在长活 isolate 父进程上会卡死。该清单正是隔离测试结果可复现的关键--isolate保证状态隔离串行 lane 保证计时敏感与资源独占型测试不被邻居文件影响。3.4 本次结果在 HEAD29763560上3431 pass / 0 fail / 287 files耗时 78.06s。全量零失败是第一道门全绿的硬证据。四、第二道门bun x tsc --noEmit类型检查bun x tsc --noEmit对应 package.json 的typecheck脚本即只做类型检查、不产出 JS 文件。仓库根 tsconfig.json 负责类型范围与严格度配置GUI 侧另有 gui/tsconfig.json。--noEmit的意义在于把类型检查当作独立的门禁步骤而不是构建的副作用——即使测试全绿类型层回归例如 21 个 PR 合并后某接口签名不匹配也必须在此暴露。本次判定exit 0无类型错误。五、第三道门push 时的 prepush 门禁lint / privacy / locale / doctor5.1 prepush 是什么prepush是git push时由 pre-push 钩子触发的本地 CI 门禁package.jsonprepushprepush: bun run typecheck bun run lint:gui:if-changed bun run test bun run privacy:scan bun run doctor:gui:if-changed即推送前依次执行类型检查 → GUI lint仅 gui/ 变更时→ 全量测试 → 隐私扫描 → GUI React Doctor仅 gui/ 变更时。钩子本体是 scripts/pre-push.sh 这个 shimset -e保证任一环节失败即中止随后exec bun run prepush。5.2 钩子如何安装scripts/setup-hooks.ts 通过bun run setup:hooks安装两个钩子pre-push跑上述 prepush 全链本地 CI 的本地部分post-merge当 merge/pull 带来 gui/ 变更时重建打包 GUIgui/dist被 gitignoreff 只推进源码仪表盘继续服务旧 bundle。安装采用确定性覆盖策略已存在的同名钩子若内容不同会先以hook.backup-ts重命名保留再安装受管版本内容一致则为 no-op。紧急情况下可git push --no-verify跳过钩子注释与 setup 脚本均明确提示。5.3 各子门禁的源码落点lint:gui:if-changedbun scripts/lint-gui-if-changed.ts仅在 gui/ 有变更时执行 gui/package.json 的 lint避免无关改动触发重跑doctor:gui:if-changedbun scripts/doctor-gui-if-changed.ts对应 React Doctorcd gui bun run doctor对 GUI 组件做 React 规则级静态体检privacy:scanbun scripts/privacy-scan.ts见下节locale sync跨语言资源键同步由 readme/i18n-manifest.json 等清单驱动保证 zh/ja/ko 等语言包与 GUI 文案键一致本次涉及 #244 的日文本地化 984 行 docs-site ja 全量键同步是回归重点。5.4 隐私扫描不是普通的静态检查scripts/privacy-scan.ts 对git ls-files列出的全部文本文件做正则扫描检测 7 类敏感内容home-path、email、bearer-token、token-lookingsk-/ghp_/JWT、meta-api-keyLLM|digits|…、ssh-endpointHostName、ssh-proxy-commandProxyCommand。其设计值得强调白名单是形状化的允许的必须是自己说自己假的值例如sk-test-*/sk-rawsentinel*哨兵、example.test域、%h:%p这类 SSH 替换符——真实高熵密钥不会匹配任何白名单形状敏感值不回显对 credential 类 finding输出只报文件:行号 kind值一律redacted防止扫描器把密钥二次复制进 CI 日志git 归属上下文豁免devlog 中Co-authored-by:等提交署名地址已在 git 历史公开按行形状豁免而非按地址列表新贡献者无需改扫描器可测试性scanText以独立导出供测试直接驱动真实检测器防止测试复制正则导致生产检测器被删、测试仍绿。六、结果判定与证据链020_stabilize_gates.md 给出的最终证据门禁结果bun test --isolate ./tests/297635603431 pass / 0 fail / 287 files78.06sbun x tsc --noEmitexit 0push 时 prepush 门禁typecheck lint:gui test privacy:scan全量通过3a5f984d..29763560push成功新增缺陷无 → 新修改提交记 NOOP这套证据不是孤立数字它与上下游文档形成完整闭环WP1 期间 solMeitner 子代理的敌意评审发现两个 BLOCKER——init 无条件unlinkSync删除有效 v1 回滚备份a41170c9 修复与Date.now()重命名冲突导致快照覆盖29763560 用COPYFILE_EXCL修复详见 010_fix_init_backup_unlink.mdWP3 则以本次门禁为基础叠加远程 Cross-platform CIUbuntu/Windows 全绿与 sol R3 PASS判定READY见 030_deploy_readiness.mdWP4 随后执行 preview/main 双线 release train见 040_release_train.md。可以推断这套本地门禁 → 远程 CI → 敌意评审的三层判定结构是该仓库面向发布的固定质量协议。七、本地复现这套门禁实操清单在本地 opencodex 检出上可按顺序复现 WP2 的全部判定克隆后先执行bun run setup:hooks安装钩子# 1) 安装 pre-push / post-merge 钩子一次性 bun run setup:hooks # 2) 全量隔离测试默认 --parallel4自动追加 ./tests/ bun run test # 或与 WP2 完全一致的原始形态 bun test --isolate ./tests/ # 3) 类型检查 bun run typecheck # bun x tsc --noEmit # 4) 隐私扫描推送前必过 bun run privacy:scan # 输出 Privacy scan passed 即通过 # 5) GUI 侧门禁gui/ 有变更时 bun run lint:gui:if-changed bun run doctor:gui:if-changed # 6) 推送prepush 门禁将自动依次执行 typecheck → lint → test → privacy → doctor git push注意事项若 gui/ 依赖缺失scripts/test.ts 的ensureGuiDependencies会自动按需执行cd gui bun install --frozen-lockfile因为gui/node_modules是 gitignored 构建产物根包bun install不会创建它测试运行持有用户级运行锁并行跑第二个bun run test会排队等待可用OCX_TEST_NO_QUEUE1仅在有意的重叠场景绕过紧急跳过钩子的逃生门是git push --no-verify/git pull --no-verify但仅限紧急情况——门禁本身是发布质量的底线全量套件主 lane 默认超时 900s可用OCX_TEST_MAIN_TIMEOUT_MS调整范围 60s~3600s超过 10 分钟会输出性能告警提示排查外部负载。结语一次dev 大同步后无新增缺陷的判定在 opencodex 中不是一句口头结论而是由四层可复现的门禁 完整证据链支撑的工程事实bun test --isolate的沙箱与 lane 设计保证测试结果可信tsc --noEmit锁住类型层prepush 门禁把 lint/隐私/Doctor 前移到每次推送最终以3431/0 全绿 NOOP收口。这套体系既是发布质量的守门员也可以直接作为任何 TypeScript Bun 项目搭建本地先于 CI质量门的参考模板。赞分享【免费下载链接】opencodexUniversal provider proxy for OpenAI Codex Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code项目地址https://gitcode.com/gh_mirrors/ope/opencodex点击查看免费下载相关推荐opencodex 发布可部署性加固从 dev 分支脏工作区到 npm 2.6.14 的发布门禁实战opencodex 发布可部署性加固从 dev 分支脏工作区到 npm 2.6.14 的发布门禁实战 本文基于 opencodex 仓库 devlog 中的发opencodex 远程同步与稳定性加固dev 分支批量 PR 吸收、ocx init 回滚备份保护与三层发布门禁实录opencodex 远程同步与稳定性加固dev 分支批量 PR 吸收、 ocx init 回滚备份保护与三层发布门禁实录 本文基于 opencodex 仓库的opencodex v2.7.29 发布全流程解析从 dev 合并到 npm publish 的自动化门禁与验证opencodex v2.7.29 发布全流程解析从 dev 合并到 npm publish 的自动化门禁与验证 导读 本文以 devlog/_fin/260上一篇3分钟搞懂图像分割评估指标从原理到gh_mirrors/exam/examples实战下一篇CANN/cannbot-skills特殊操作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考