Skip to content

Release v3.8.33 - #4515

Merged
diegosouzapw merged 73 commits into
mainfrom
release/v3.8.33
Jun 22, 2026
Merged

diegosouzapw merged 73 commits into
mainfrom
release/v3.8.33

Conversation

@diegosouzapw

@diegosouzapw diegosouzapw commented Jun 21, 2026 •

Copy link
Copy Markdown
Collaborator

Release v3.8.33 — release/v3.8.33 → main. Finalized release notes.

[3.8.33] — 2026-06-21

✨ New Features

  • feat(combo): nested combo-ref execution (nestedComboMode: execute) — selection strategies can now treat a combo-reference step as a black box, executing the referenced combo as a single unit instead of flattening its targets. (#4537 — thanks @adivekar-utexas)
  • feat(combo): sticky weighted selection limit with exhaustion-aware renormalization — weighted strategies gain a configurable sticky-selection limit; once a target is exhausted, remaining weights renormalize so traffic is redistributed correctly. (#4489 — thanks @adivekar-utexas)
  • feat(combos): provider-wildcard expansion in combo steps — a combo step may now reference a whole provider via wildcard and have it expand to that provider's models at resolution time. (#4545 — thanks @Rahulsharma0810)
  • feat(compression): Phase 2 — named profiles + active selector — the compression settings panel becomes the single source of truth via a single active-profile selector (Default panel vs a named combo) wired into the runtime. (#4521 — thanks @diegosouzapw)
  • feat(sse): route web_search requests to a configured model — CCR-style webSearch scenario: requests carrying a web_search* tool can be routed to a dedicated webSearchRouteModel, configurable from the Routing tab. (#4509 — thanks @shafqatevo / @diegosouzapw)
  • feat(mcp): omniroute_web_fetch tool for URL content extraction — new MCP tool that fetches and extracts the content of a URL. (#4510 — thanks @ponkcore)
  • feat(models): qualify duplicate model names with their provider prefix — when two providers expose a same-named model, the catalog now disambiguates each with its provider prefix. (#4516 — thanks @Rahulsharma0810)
  • feat(translator): accept OpenAI audio input parts in Gemini translation — input_audio message parts are now translated through to Gemini. (#4434 — thanks @diegosouzapw)
  • feat(webhooks): enrich Telegram request notifications — Telegram webhook payloads carry richer request context. (#4524 — thanks @mppata-glitch)
  • feat(bazaarlink): add authHint to the existing APIKEY_PROVIDERS entry — surfaces the auth hint for the bazaarlink provider. (#4522 — thanks @adivekar-utexas)
  • feat(usage): API-key USD quota percent + reset hints, weekly-window cutoff — usage dashboard surfaces API-key USD quota percentage and reset hints, honoring the weekly window cutoff. (#4398 — thanks @Witroch4)
  • feat(usage): surface Codex code-review weekly window + additional_rate_limits fallback — exposes the Codex code-review weekly window and falls back to additional_rate_limits when present. (#4494 — thanks @diegosouzapw)
  • feat(dashboard): per-provider dropdown filter on the quota dashboard — filter the quota dashboard by provider. (#4495 — thanks @diegosouzapw)
  • feat(dashboard): inline show/hide toggle for API keys on the API Manager page (#4505 — thanks @diegosouzapw)
  • feat(dashboard): toggle-style model deselection in the combo builder modal (#4498 — thanks @diegosouzapw)
  • feat(dashboard): Done button in the model picker for combo creation (#4496 — thanks @diegosouzapw)
  • feat(providers): expose gpt-4o on the built-in GitHub Copilot (gh) provider (#4487 — thanks @diegosouzapw)
  • feat(pricing): default pricing for the Qwen coder-model on the qw provider (#4488 — thanks @diegosouzapw)

🔧 Bug Fixes

  • fix(api): resolve a compatible provider node by base type, not only exact id — connection→node resolution now matches on the bare derived node type when the exact id isn't found and the match is unambiguous (ambiguous → 404), via a pure providerNodeSelect helper. (#4576 — thanks @aleksesipenko / @diegosouzapw)
  • fix(cli): supervisor restarts on spontaneous exit-0 (OOM cgroup) + waits for port before respawn — a child that exits 0 because the cgroup OOM-killer reaped it is now restarted (not treated as a clean shutdown), the restart reset window widened 30s→60s, and the supervisor waits for the port to be free before respawning. (#4578 — thanks @oyi77 / @diegosouzapw)
  • fix(combo): attribute lockout decay & success telemetry to the dynamically-selected connection — on the combo success path the actual connection chosen by dynamic account-selection is read from the X-OmniRoute-Selected-Connection-Id response header (instead of the often-empty static target.connectionId), so model-lockout decay, recordProviderSuccess, LKGP and success/failure telemetry attribute to the right connection on both the priority and round-robin paths. The pre-screen "unavailable" snapshot is also no longer a permanent skip — availability is re-checked on each retry since connection cooldowns can expire mid-request. (#4550 — thanks @Chewji9875)
  • fix(auto): enforce the quota cutoff before scoring (opt-in) — auto-routing now evaluates a hard quota cutoff in buildAutoCandidates to drop low-quota candidates before scoring, with a 429 guard when all candidates fall below cutoff. The cutoff is opt-in behind QuotaPreflightSettings.enabled (default OFF via QUOTA_PREFLIGHT_CUTOFF_ENABLED), so default behavior is unchanged. (#4483 — thanks @megamen32)
  • fix(antigravity): reasoning/thinking models no longer 400 with oneOf at '/' not met — the Cloud Code envelope passthrough also leaked the Claude/OpenAI-native thinking fields (thinking, reasoning_effort, reasoning, enable_thinking, thinking_budget) the unified thinking adapter sets at the body root; Google rejected them with 400 Bad input: oneOf at '/' not met. The whole thinking family is now stripped before the envelope is built; Gemini's own generationConfig.thinkingConfig is unaffected. (#4485 — port from 9router#1926, thanks @theseven99 / @diegosouzapw)
  • fix(integration): restore the codex and memory pipeline contracts — realigns the CLI fingerprint + memory-tools contracts so the codex and memory pipelines pass their integration checks again. (#4474 — thanks @KooshaPari)
  • fix(sse): RTK must preserve cache_control-marked tool_result blocks — reasoning-token-keeping no longer drops tool_result blocks that carry a cache_control marker. (#4560 — thanks @diegosouzapw)
  • fix(auto-combo): respect model visibility (isHidden) in the auto-combo candidate pool — hidden models are excluded from auto-combo candidates. (#4558 — thanks @herjarsa)
  • fix(dashboard): avoid overlapping provider health polls — guards against concurrent provider-health poll cycles overlapping. (#4557 — thanks @KooshaPari)
  • fix(dashboard): make the API Manager key table usable on mobile (#4556 — thanks @janeza2)
  • fix(executors): decode Composer/Cursor </think>-marked visible output — visible text wrapped in Cursor Composer's </think> markers is now decoded correctly. (#4554 — thanks @diegosouzapw)
  • fix(oauth): improve Cursor auto-import reliability on macOS (#4552 — thanks @diegosouzapw)
  • fix(providers/test): probe the real Codex /responses endpoint — connection test hits the actual Codex /responses endpoint. (#4551 — thanks @diegosouzapw)
  • fix(mcp): webFetchInput emits URL is required for a missing url — clearer validation error for the web-fetch tool. (#4541 — thanks @ponkcore / @diegosouzapw)
  • fix(compression): allow enginesExplicit through the PUT validation schema — the compression settings PUT no longer rejects the enginesExplicit flag. (#4532 — thanks @DevEstacion)
  • fix(no-think): normalize provider prefix to canonical in no-think variants (#4531 — thanks @Rahulsharma0810)
  • fix(combo): pass maxCooldownMs from settings to the recordModelLockoutFailure call sites (#4530 — thanks @Chewji9875)
  • fix(combo): allow fallback on context-overflow & param-validation 400s; preserve upstream codes — combo fallback now triggers on recoverable 400s while keeping the original upstream status. (#4519 — thanks @adivekar-utexas)
  • fix(command-code): cap max_tokens per model using the registry maxOutputTokens (#4518 — thanks @adivekar-utexas)
  • fix(mitm): gate sudo prompts on server platform, not browser UA (#4514 — thanks @diegosouzapw)
  • fix(mitm): graceful sudo degradation in slim Docker / non-root containers (#4513 — thanks @diegosouzapw)
  • fix(usage): clear auth-expired message for Kiro social-auth accounts (#4512 — thanks @diegosouzapw)
  • fix(pricing): default cost rows for Antigravity Gemini 3.5 Flash tiers + gemini-pro-agent (#4508 — thanks @diegosouzapw)
  • fix(api): dedupe exact-duplicate ids in /v1/models — low-noise model output without alias/canonical duplicates. (#4506 — thanks @Rahulsharma0810 / @diegosouzapw)
  • fix(dashboard): enable Codex Apply/Reset buttons when the CLI is installed (#4504 — thanks @diegosouzapw)
  • fix(dashboard): show API-Key-compatible providers in the Antigravity CLI Tools model picker (#4503 — thanks @diegosouzapw)
  • fix(dashboard): migrate ManualConfigModal copy to the shared useCopyToClipboard hook (#4502 — thanks @diegosouzapw)
  • fix(sse): skip disabled providers in combo fallback (#4500 — thanks @diegosouzapw)
  • fix(usage): parse numeric-string quota reset timestamps as Unix sec/ms (#4493 — thanks @diegosouzapw)
  • fix(db): scheduled VACUUM + persist lastVacuumAt — a new vacuumScheduler.ts persists the last run timestamp and last error to the key_value table (migration 102) and feeds the database settings panel; wired into the Next.js lifecycle (default 24h, window 02:00–04:00 local). New env flags: OMNIROUTE_VACUUM_ENABLED, OMNIROUTE_VACUUM_INTERVAL_HOURS, OMNIROUTE_VACUUM_WINDOW. (#4480 — thanks @KooshaPari / @oyi77)
  • perf(quota): stop writing redundant quota_snapshots rows from idle connections — the 60s background refresh persisted a snapshot for every window of every connection regardless of change, generating 400K+ rows/day from idle accounts. setQuotaCache now skips the write when a window's remaining_percentage/is_exhausted is unchanged from the last cached observation; the first observation and every real change still persist. (#4565, #4438 — thanks @oyi77)

🔒 Security

  • fix(sse): crypto-secure RNG for combo/deck load-balancing selection — replaces Math.random() with a crypto-secure source in the combo/deck weighted-selection path. (#4455 — thanks @diegosouzapw)

📝 Maintenance


🙌 Contributors

Thanks to everyone whose work landed in v3.8.33:

Contributor
@adivekar-utexas combo nested-execute, sticky-weighted, fallback 400s, max_tokens cap, bazaarlink authHint
@Rahulsharma0810 provider-wildcard combos, model-name disambiguation, no-think prefix, low-noise /v1/models
@KooshaPari provider-asset shrink, codex/memory contracts, scheduled VACUUM, health-poll guard, i18n cleanup
@ponkcore omniroute_web_fetch MCP tool + validation
@Witroch4 API-key USD quota percent + reset hints
@mppata-glitch enriched Telegram webhook notifications
@DevEstacion enginesExplicit PUT validation
@Chewji9875 model-lockout maxCooldownMs wiring, dynamic-connection lockout decay
@herjarsa auto-combo isHidden visibility
@janeza2 mobile API Manager key table
@megamen32 opt-in auto quota cutoff
@shafqatevo web_search routing scenario (#4481)
@theseven99 antigravity thinking-field strip (9router#1926)
@aleksesipenko provider-node base-type resolution (#4421)
@oyi77 quota_snapshots dedup, VACUUM, supervisor exit-0 restart
@diegosouzapw maintainer

KooshaPari and others added 5 commits June 21, 2026 09:32
Thanks @KooshaPari! Rebased onto release/v3.8.32 (clean cherry-pick — coexists with #4467's specialty changes, 118/118 unit + 12/12 memory-pipeline integration). Codex fingerprint ordering + memory-search contract fixes land.

(cherry picked from commit 21d61c6)
…4464)

Thanks @KooshaPari! Merged the core of this PR (provider-asset shrink + budget gate + usage-rollup same-day cutoff fix + test), rebuilt scoped on release/v3.8.32. On review we dropped the codeqlAlerts 0->1 baseline loosening and the off-topic changes (the codex/memory contract fixes already landed via #4474; getProviderNames removal + cognitive baseline left out). Asset gate passes, rollup 22/22.

(cherry picked from commit 911e1fb)
… envelope (port from 9router#1926) (#4485)

The unified thinking adapter can set Claude/OpenAI-native thinking fields
(thinking, reasoning_effort, reasoning, enable_thinking, thinking_budget) at
the request body root. The Antigravity envelope spreads ...passthroughFields,
so these leaked into the Google Cloud Code envelope and Google rejected the
request with `400 Bad input: oneOf at '/' not met` (or `Unknown name
"thinking"`), breaking every reasoning/thinking model served via Antigravity
(e.g. claude-opus-4-x-thinking).

Extends the existing #1944 envelope strip (output_config/output_format) to
also drop the whole thinking family. Gemini's own generationConfig.thinkingConfig
travels inside the inner request and is unaffected, so thinking still works.

Reported-by: theseven99 (decolua/9router#1926)

Co-authored-by: Arcfoz <62255009+Arcfoz@users.noreply.github.com>
(cherry picked from commit 5a7c1e1)
Thanks @megamen32! Rebased onto release/v3.8.32. On review (owner decision) the auto-routing quota cutoff was made OPT-IN behind QuotaPreflightSettings.enabled (default OFF, so current behavior is unchanged) and the ...eligibleTargets last-resort fallback was restored so a quota-blocked target survives as final fallback rather than vanishing. The 429-when-all-blocked guard stays for the enabled path. typecheck clean, 13/13 tests.

(cherry picked from commit 1831c6e)
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces an opt-in hard quota cutoff feature in the auto-routing strategy to filter out low-quota candidates before scoring, supported by new preflight evaluation logic. It also prevents API errors in the Antigravity executor by stripping Claude and OpenAI-native thinking fields from the request envelope, adds a provider asset validation script to the quality gates, and refactors usage analytics queries to use date strings instead of ISO strings. Feedback from the review highlights opportunities to improve defensive programming by adding null/undefined checks for window information in the quota preflight logic and safely handling undefined window names in the auto-routing thresholds.

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.

Comment on lines +162 to +163
for (const [windowName, windowInfo] of Object.entries(windows)) {
if (!Number.isFinite(windowInfo.percentUsed)) continue;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Add a null/undefined check for windowInfo before accessing its properties. If the upstream API or parsed object contains null or unexpected values for a window, accessing windowInfo.percentUsed will throw a TypeError at runtime.

Suggested change
for (const [windowName, windowInfo] of Object.entries(windows)) {
if (!Number.isFinite(windowInfo.percentUsed)) continue;
for (const [windowName, windowInfo] of Object.entries(windows)) {
if (!windowInfo || !Number.isFinite(windowInfo.percentUsed)) continue;
References
  1. Enforce defensive programming by ensuring appropriate null/nil/undefined checks exist before object property accesses.

Comment on lines +271 to +272
resolveMinRemainingPercent: (windowName: string | null): number => {
if (windowName !== null) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Use windowName != null instead of windowName !== null to safely guard against both null and undefined values at runtime. If windowName is undefined, windowName !== null evaluates to true, which will cause a crash when calling toLowerCase() inside quotaWindowLookupNames.

Suggested change
resolveMinRemainingPercent: (windowName: string | null): number => {
if (windowName !== null) {
resolveMinRemainingPercent: (windowName: string | null | undefined): number => {
if (windowName != null) {
References
  1. Enforce defensive programming by ensuring appropriate null/nil/undefined checks exist before object property accesses.

ponkcore and others added 5 commits June 21, 2026 11:55
…4510)

Adds an MCP tool to extract URL content via the existing /v1/web/fetch endpoint (Firecrawl/Jina/Tavily). Mirrors omniroute_web_search; scope execute:search; mcp_audit logged.

Integrated into release/v3.8.33.
Disambiguates display names when the same model name appears across distinct provider prefixes. Pure, non-mutating; complementary to id-dedupe.

Integrated into release/v3.8.33.
Removes dead exports DOCS_TARGET_LOCALES and getLanguage (zero callers, Knip-reported) and adds config-adapter coverage test.

Integrated into release/v3.8.33.
…#4523)

tools.ts 1437->1497, server.ts 1509->1555 from #4510. Justification per Rule #9.
…utoff (#4398)

Adds USD usage percentages and reset hints to @@om-usage and 400 quota rejections, and cuts the weekly USD window at the real observed reset via quota_snapshots instead of resetAt-7d. Rebuilt onto release/v3.8.33 (squash-base-stale; delta = 5 files/+353).

Integrated into release/v3.8.33.
@github-actions

github-actions Bot commented Jun 21, 2026 •

Copy link
Copy Markdown
Contributor

CI Coverage Report

  • Coverage job: success
  • PR test policy: success

Coverage artifact was not available for this run.

adivekar-utexas and others added 17 commits June 21, 2026 12:29
…s; preserve upstream codes (#4519)

Context-overflow and param-validation 400s now fall through to the next combo target (different targets have different context windows / output limits); normalizeUpstreamFailure keeps context_length_exceeded=400 and rate-limit=429. Pure predicates extracted + tested (Rule #18). The codex.ts compression seen in the raw diff was base-divergence noise, not in the feature commit.

Integrated into release/v3.8.33.
Adds a scheduled SQLite VACUUM job that persists last-run state to key_value and fixes the hardcoded lastVacuumAt:null in getDatabaseSettings. Review fixes: corrected the key_value write (no updated_at column), dropped a dead/colliding migration, rewrote the test from Vitest to node:test against the real interface.

Integrated into release/v3.8.33.
…okens (#4518)

clampMaxTokens now uses the per-model maxOutputTokens from REGISTRY['command-code'] as the upper bound (falls back to MAX_COMMAND_CODE_TOKENS), so GLM-5.x stops being rejected for max_tokens > 131072. Rebuilt onto release/v3.8.33 (passthrough block from the PR base is already present via #2986); 3 tests added.

Integrated into release/v3.8.33.
combo.ts/accountFallback.ts/openai-responses.ts from #4519. Rule #9.
Cycle drift + #4398 +2. Documented breakdown. Rule #9.
…4455)

Replaces Math.random with crypto-secure RNG in combo/deck load-balancing selection (CodeQL #665).

Integrated into release/v3.8.33.
)

Routes requests carrying a web_search tool to a configured webSearchRouteModel (#4481 layer-2).

Integrated into release/v3.8.33.
Compression config Phase 2: named profiles + single active-combo selector wired into the runtime.

Integrated into release/v3.8.33.
…er (#4487)

Rebuilt onto release/v3.8.33 (squash-base-stale). Integrated into release/v3.8.33.
#4488)

Rebuilt onto release/v3.8.33 (squash-base-stale). Integrated into release/v3.8.33.
…on (#4434)

Rebuilt onto release/v3.8.33 (squash-base-stale). Integrated into release/v3.8.33.
Rebuilt onto release/v3.8.33 (squash-base-stale). Integrated into release/v3.8.33.
Rebuilt onto release/v3.8.33 (squash-base-stale). Integrated into release/v3.8.33.
#4493)

Rebuilt onto release/v3.8.33 (squash-base-stale). Integrated into release/v3.8.33.
…e_limits fallback (#4494)

Rebuilt onto release/v3.8.33 (squash-base-stale). Integrated into release/v3.8.33.
…4512)

Rebuilt onto release/v3.8.33; usage.ts baseline reconciled for the #4493/#4494/#4512 quota trio. Integrated into release/v3.8.33.
janeza2 and others added 20 commits June 21, 2026 18:25
) (#4565)

Closes #4438. Dedupes quota_snapshots writes for idle connections via pure quotaSnapshotChanged() gate. TDD 5/5. Admin-merged over a pre-existing, unrelated base red (model-lockout-max-cooldown.test.ts 'markAccountUnavailable local 404 ... maxCooldownMs', from #4530 incomplete wiring) proven to fail on release/v3.8.33 HEAD without this change.
…ndidate pool (#4558)

Integrated into release/v3.8.33
…e renormalization (#4489)

Integrated into release/v3.8.33
…key-health, request-format, claude-effort, target-format) (#3501) (#4538)

Integrated into release/v3.8.33 (resolved overlap with #4547: requestFormat/claudeEffort leaves already restored, this adds keyHealth/targetFormat + wires all 4)
…eadersForExecute para leaves puros (#3501) (#4548)

Integrated into release/v3.8.33
…r4 owner batch) (#4579)

Reconcile complexity baseline
…ion for selection strategies (#4537)

Integrated into release/v3.8.33
…h for precise lockout decay and success telemetry (#4550) (#4581)

Integrated into release/v3.8.33 (cherry-pick of #4550 with stale reverts dropped; @Chewji9875 credited in CHANGELOG)
…ct id (#4421) (#4576)

* fix(api): resolve compatible provider node by base type, not only exact id (#4421)

* chore(quality): rebaseline db/providers.ts file-size 1050->1063 (#4421)

* chore(quality): mark providerNodeSelect db-internal in db-rules allowlist (#4421)

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
…its for port before respawn (#4425) (#4578)

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
…ted base-reds

- Reconcile [3.8.33] CHANGELOG to 1:1 commit coverage (51 bullets) + env contract
  (QUOTA_PREFLIGHT_CUTOFF_ENABLED, KIRO_VERIFY_FULL_CRC) + README What's New range.
- fix(translator): dedupe the duplicate input_audio handler in geminiHelper; mp3
  normalizes to canonical audio/mpeg and the data: prefix is stripped (#912/#913).
- fix(auth): wire admin-configured maxCooldownMs to all 4 markAccountUnavailable
  model-lockout sites (#4530 follow-up — combo.ts sites were already covered).
- fix(api): add src/models/ to package.json files so the published --mcp closure
  ships it (#3578 gate).
- test: align stale expectations to intentional code (10 essential MCP tools incl.
  web_fetch; busy_timeout 2s cap from v3.8.32).
- chore(quality): rebaseline file-size for auth.ts 2279->2289 + db-core-init.test.ts.
src/models/index.ts was added to package.json "files" so the published --mcp
import closure ships it (#3578 gate); the bidirectional pack-artifact validator
also needs the matching src/models/ prefix in PACK_ARTIFACT_ALLOWED_PATH_PREFIXES,
otherwise it flags the newly-shipped file as an unexpected artifact. Mirrors the
src/lib/ / src/sse/ entries. Covered by tests/unit/pack-artifact-policy.test.ts.
Diego Rodrigues de Sa e Souza added 3 commits June 22, 2026 00:03
…cted set (28->29)

#4576 added src/lib/db/providerNodeSelect.ts (pure node-resolution helper, not
re-exported from localDb) which the audit gate correctly classifies as internal,
but the regression guard's expected-set count wasn't updated → deterministic red
across the unit-test shards. Aligns the expected list + count to the real module set.
…rift)

Cumulative warnings drift across this cycle's parallel-session merges, surfaced
only by the release PR's full CI (the Quality Ratchet doesn't run on PR→release
fast-gates). My release-finalize changes contribute 0 warnings (verified). No
coverage/openapi/i18n regressions.
…e drift)

Pre-existing drift on origin/release/v3.8.33 surfaced by the release full CI
(cognitive-complexity doesn't run on PR->release fast-gates). My release-finalize
prod changes add 0 new violations to the count (verified: geminiHelper merge is
intra-function; auth.ts only gained args). +4 from this cycle's combo logic
(#4537/#4489/#4581). Structural shrink tracked in #3501.
@diegosouzapw
diegosouzapw merged commit ee24eb5 into main Jun 22, 2026
10 checks passed
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)
D Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
Release v3.8.33 — full CHANGELOG in the PR body. Blocking gates green (Build, Lint, Unit Tests 8/8, Package Artifact, Quality Gates, Quality Ratchet, Docs Sync, PR Test Policy, test-vitest). Admin-merged over a Node 26 future-compat timer flake (1/4) + an E2E UI flake (3/9) — both verified non-deterministic; full test:unit validated locally (16936 pass).
Poid-ZA pushed a commit to Poid-ZA/OmniRoute that referenced this pull request Aug 5, 2026
Release v3.8.33 — full CHANGELOG in the PR body. Blocking gates green (Build, Lint, Unit Tests 8/8, Package Artifact, Quality Gates, Quality Ratchet, Docs Sync, PR Test Policy, test-vitest). Admin-merged over a Node 26 future-compat timer flake (1/4) + an E2E UI flake (3/9) — both verified non-deterministic; full test:unit validated locally (16936 pass).
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
Release v3.8.33 — full CHANGELOG in the PR body. Blocking gates green (Build, Lint, Unit Tests 8/8, Package Artifact, Quality Gates, Quality Ratchet, Docs Sync, PR Test Policy, test-vitest). Admin-merged over a Node 26 future-compat timer flake (1/4) + an E2E UI flake (3/9) — both verified non-deterministic; full test:unit validated locally (16936 pass).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.