Release v3.8.16 - #3385
Release v3.8.16#3385
Conversation
There was a problem hiding this comment.
Code Review
This pull request bumps the project version from 3.8.15 to 3.8.16 across multiple configuration files, including package.json, package-lock.json, and openapi.yaml. It also introduces an 'Unreleased' section for version 3.8.16 in the main changelog and all internationalized changelog files. As there are no review comments, I have no feedback to provide.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
CI Coverage Report
Coverage artifact was not available for this run. PR Test PolicyThis PR changes production code in |
…droom) (#3387) The heaviest E2E shard (5/6 — responsive viewport matrix + studio/smoke) overran the job's 20m timeout-minutes because each shard re-runs `npm run build` (~5m) before Playwright, then runs ~24 serial tests with retries:2. The job was killed (CANCELLED mid-run, 'Terminate orphan process') instead of any test failing. - Bump test-e2e timeout-minutes 20 -> 35 (cumulative build+tests headroom). - Lower the Playwright per-test timeout 600s -> 180s so a genuine hang fails fast and visibly (a clear per-test timeout) instead of silently eating the job budget.
) 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.
…ed files (#3393) Integrated into release/v3.8.16
…rify environment variable requirement (#3394) Integrated into release/v3.8.16
Integrated into release/v3.8.16
Integrated into release/v3.8.16
… using emitted content state (#3382) Integrated into release/v3.8.16
…#3400) Integrated into release/v3.8.16
Integrated into release/v3.8.16
…3395) Integrated into release/v3.8.16
Integrated into release/v3.8.16
Integrated into release/v3.8.16
…sist context_cache_protection toggle (#3399) Integrated into release/v3.8.16
…3405) Integrated into release/v3.8.16
Integrated into release/v3.8.16
Integrated into release/v3.8.16
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.
…-effect lint - 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.
- 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).
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.
…s, cp after download) and update skill count to 43
- 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.
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.
…odels mock + close)
|
|
Kilo Code Review could not run — your account is out of credits. Add credits or switch to a free model to enable reviews on this change. |



[3.8.16] — 2026-06-08
✨ New Features
get_web_session_pool_healthand a health-matrix REST response (GET /api/web-session-pool/health) expose per-provider slot counts, lease ages, and error budgets so operators can diagnose pool exhaustion without digging through logs. (#3395 — thanks @oyi77)POST /api/web-session/import) — import a JSON array of session credentials in one call; each entry is validated and inserted atomically, with per-entry success/failure reported in the response. (#3403 — thanks @oyi77)GET /api/session-pool/health) — a dashboard-facing endpoint that aggregates live slot usage, wait-queue depth, and error rates across all active session pools; wired to a new dashboard widget. (#3404 — thanks @oyi77)🔧 Bug Fixes
usageTokenBuffersettings update — a concurrent save + stream-start could race to apply stale settings, causing token counts to roll back by up to 2 000 tokens after a restart; the update now uses an atomic read-modify-write on the shared settings ref. (#3405 — thanks @diegosouzapw)context_cache_protectiontoggle is properly saved to the DB on change. (#3399 — thanks @k0valik)sync-modelscall — previously the stale list remained until a full page reload. (#3402 — thanks @0xtbug)finish_reason) are now silently dropped rather than emitted as aretry:SSE event — removes spurious retry lines from streaming responses for providers that emit heartbeat keep-alive chunks. (#3400 — thanks @0xtbug)containsTextualToolCallMarkernow tracks how much of the accumulated streamed content has already been emitted, so it only withholds the unemitted tail rather than re-scanning from the start on every new chunk. (#3382 — thanks @Ardem2025)containsTextualToolCallContent()now requires the complete[Tool call: name]\nArguments:header pattern instead of a bare.includes("[Tool call:")check — prevents the non-streaming response sanitizer from nulling out model responses that merely quote[Tool call:]in prose or code examples. (#3355 — thanks @diegosouzapw)"Arguments:"— previously, a partial/incomplete tool-call header that arrived at end-of-stream was silently dropped. (#3355 — thanks @diegosouzapw)PROVIDERS_REQUIRING_USER_LAST_MESSAGE) no longer receives a trailingassistantmessage with plain text content —stripTrailingAssistantForProviderdrops it on the upstream-send path, fixing the400: Expected last role User or Tool … but got assistantrejection. (#3396 — thanks @diegosouzapw)getMitmStatus()in the build-time stub (Docker image) now returns a graceful{ running: false }status instead of throwing, so the Agent Bridge UI shows a clean "stopped" state rather than an error banner in containerised deployments. (#3390 — thanks @diegosouzapw)OMNIROUTE_TRACEin.env.exampleand all related documentation files — was previously mixed-case in some places, causing the variable to be silently ignored on case-sensitive file systems. (#3393 — thanks @androw)PRICING_SYNC_ENABLEDdescription now clearly states that the feature requires the corresponding environment variable to be set — removes the ambiguity that led operators to enable it via the UI only and wonder why sync never ran. (#3394 — thanks @androw)📝 Maintenance
-webimage variant in the same Docker publish workflow, so both the standard and browser-backed images stay in sync on every release. (#3389 — thanks @zhiru)tarbundle to avoidupload-artifact@v4LCA path ambiguity;node_modulescopied into standalone after download; browser cache added to cut cold-shard time;sync-modelsendpoint mocked inproviders-management.spec.tsso the import modal reaches "done" immediately. (#3387 / #3392 — thanks @diegosouzapw)/dashboard/codex-config) — covers profile naming, model selection, and theCODEX_*environment variables accepted by OmniRoute. (thanks @diegosouzapw)config-codex-cliadded as a newCONFIG_SKILL_IDScategory; all skill-count assertions updated across unit and integration test suites;next-fetchopts cast to satisfy the TypeScript overload signature in the skill runner. (thanks @diegosouzapw)🙌 Contributors
Thanks to everyone whose work landed in v3.8.16:
✅ Quality Gate
📊 Coverage of commits since v3.8.15
v3.8.15..HEAD