npx playwright falls back to a registry download when playwright is absent from
the slim runtime image's node_modules. On GitHub-hosted runners this download
fails with exit 127, breaking both amd64 and arm64 -web image builds.
Fix: COPY playwright and playwright-core from the builder stage and invoke
node node_modules/playwright/cli.js directly — no network access, same version,
and playwright remains available at runtime for web-session providers.
Update Codex CLI docs and configuration skill to use the v0.137+
profile file naming format: ~/.codex/<name>.config.toml instead of
the deprecated profile- prefix.
Clarify that missing profile files silently fall back to defaults, and
rename the setup workflow heading to match the config-codex-cli skill.
- Unit/integration tests: update hardcoded 42→43 in 7 test files
(agentSkillTools-mcp, agentSkills-catalog, agentSkills-generator,
agent-skills-content, agent-skills-discovery, listCapabilities-a2a)
to match the 43rd skill (config-codex-cli) added in the previous commit.
- Include CONFIG_SKILL_IDS in integration content test ALL_IDS so
skills/config-codex-cli/ is no longer "unexpected".
- listCapabilities.ts: change totalSkills from literal 42 to catalog.length
so it adapts to catalog growth automatically.
- computeCoverage assertions: include config.have in totalSkills check.
- CI: switch E2E artifact from upload-artifact path (ambiguous stripping)
to explicit tar archive. Fixes "Could not find a production build in
./.build/next" — the previous approach's download path was double-nested
(.build/next/next/...) due to upload-artifact LCA computation. tar -czf
stores .build/next/... relative to CWD; tar -xzf restores them verbatim.
- Also exclude .build/next/cache from the tar to keep archive lean.
- feat(translator): strip client_metadata in Responses→Chat translation
(Mistral 422 extra_forbidden fix); add regression test.
Upload the Next.js build from the build job and reuse it across E2E
shards to avoid rebuilding in each shard. Increase Playwright sharding
from 6 to 9, cache Chromium browsers, and lower the E2E timeout to match
the faster expected runtime.
Add a Codex CLI configuration skill for OmniRoute setup and ignore local
credential-bearing setup prompts.
- Remove 429 from PROVIDER_BREAKER_FAILURE_STATUSES; 429 belongs to
connection cooldown, not whole-provider breaker (CLAUDE.md §resilience).
PR #3366 correctly added 429 to PROVIDER_FAILURE_ERROR_CODES in
accountFallback.ts (combo infinite-retry fix) but the parallel change
to chat.ts was wrong — the integration test from v3.8.10 confirms this.
- Align stream-utils tests to PR #3399 (SYNTHETIC_CLAUDE_EMPTY_RESPONSE_TEXT
→ "", message.content → null) and PR #3355 (malformed tool-call buffer
now emitted as plain text, not suppressed).
- Align services-branch-hardening test to PR #3399 (pinnedModel always
null from applyComboAgentMiddleware; server-side session pinning replaced
client-side <omniModel> tag extraction).
- Align combo-routing-engine context-cache tests to PR #3399 (no <omniModel>
tag in output, no X-OmniRoute-Model header, priority routing unchanged).
- docs/guides/CODEX-CLI-CONFIGURATION.md was missing the YAML frontmatter
block required by fumadocs (title/version/lastUpdated), causing the
production build to fail with "invalid frontmatter" MDX error.
- CodexCliGuideModal.tsx called setLoading/setError synchronously in a
useEffect body, triggering the react-hooks/set-state-in-effect lint error.
Refactored to an internal async function with an `cancelled` guard to
prevent state updates on unmounted components.
Add a comprehensive guide for configuring Codex CLI to use OmniRoute as an OpenAI-compatible backend.
Document ready-to-use config examples, Responses API routing behavior, context window settings, token limits, model profiles, and troubleshooting guidance to help users avoid direct-provider compatibility issues.
The 35m bump still wasn't enough — shard 5/6 (responsive viewport matrix +
studio/smoke, ~24 serial tests after a ~5m build) was still cancelled at 35m,
and the `github` Playwright reporter buffers output so the cancelled log showed
no per-test results (couldn't tell which test was slow).
- e2e timeout-minutes 35 -> 50 (the shard observably needs >35m; other shards
finish in ~7m so they're unaffected).
- Playwright CI reporter github -> line so per-test progress + timing stream
live to the job log, making any genuinely slow/hung test diagnosable.