Skip to content

Feat/gemini 3.8 flash 3.5 flash lite - #29443

Merged
DavidAPierce merged 6 commits into
mainfrom
feat/gemini-3.8-flash-3.5-flash-lite
Sep 22, 2026
Merged

DavidAPierce merged 6 commits into
mainfrom
feat/gemini-3.8-flash-3.5-flash-lite

Conversation

@DavidAPierce

Copy link
Copy Markdown
Contributor

Summary

This PR adds support for Gemini 3.8 Flash (gemini-3.8-flash) and Gemini 3.5 Flash Lite (gemini-3.5-flash-lite) as the latest GA models in the Flash and Flash Lite tiers, promoting gemini-3.5-flash and gemini-3.1-flash-lite to the base tiers.

Key updates include:

  • Introduced experiment-gated access flags LATEST_FLASH_GA_LAUNCHED (Flag ID: 45842815) and LATEST_FLASH_LITE_GA_LAUNCHED (Flag ID: 45827489).
  • Enabled immediate un-gated access for non-experiment auth types (USE_GEMINI, USE_VERTEX_AI, and GATEWAY).
  • Added dynamic outbound backend model ID rewriting across Code Assist and Gemini API content generators.
  • Updated model quota aggregation, auto-routing fallback chains, model picker UI dialogs, chat compression mappings, and settings schemas.

Details

  • Model Hierarchy & Constants (packages/core/src/config/models.ts):

    • Restructured the Flash tier into BASE_GEMINI_FLASH_MODEL (gemini-3.5-flash) and LATEST_GEMINI_FLASH_MODEL (gemini-3.8-flash).
    • Restructured the Flash Lite tier into BASE_GEMINI_FLASH_LITE_MODEL (gemini-3.1-flash-lite) and LATEST_GEMINI_FLASH_LITE_MODEL (gemini-3.5-flash-lite).
    • Retained LEGACY_CCPA_FLASH_MODEL (gemini-3-flash) and backwards-compatible aliases (DEFAULT_GEMINI_3_5_FLASH_MODEL, SECONDARY_GEMINI_3_5_FLASH_MODEL, DEFAULT_GEMINI_FLASH_LITE_MODEL).
    • Introduced resetModelsForTesting() to cleanly reset mutable module constants between test runs and eliminate state leakage.
  • Experiment Flag Evaluation & Non-Flag Auth Types (packages/core/src/config/config.ts):

    • Added hasLatestFlashGAAccess() and hasLatestFlashLiteGAAccess().
    • Non-experiment auth providers (USE_GEMINI, USE_VERTEX_AI, GATEWAY) bypass experiment flag checks and automatically receive access to gemini-3.8-flash and gemini-3.5-flash-lite.
    • Flag-controlled auth types (e.g. LOGIN_WITH_GOOGLE / Code Assist) check LATEST_FLASH_GA_LAUNCHED and LATEST_FLASH_LITE_GA_LAUNCHED.
    • Maintained deprecated hasGemini35FlashGAAccess() and GEMINI_3_5_FLASH_GA_LAUNCHED mappings for backward compatibility.
  • Dynamic Outbound Backend Request Mapping (packages/core/src/core/contentGenerator.ts, modelMappingContentGenerator.ts):

    • Updated ModelMappingContentGenerator to support dynamic getter functions (() => Record<string, string>) to evaluate mappings per request.
    • Rewrites gemini-3.5-flash / gemini-3-flash to gemini-3.8-flash when the latest flash flag is enabled, and maps gemini-3.5-flash to gemini-3-flash for Code Assist when disabled.
    • Rewrites gemini-3.1-flash-lite to gemini-3.5-flash-lite when the latest flash lite flag is enabled.
  • Quota Tracking & Bucket Normalization (packages/core/src/config/config.ts):

    • Normalized quota buckets across model aliases: maps gemini-3-flash, gemini-3.5-flash, and gemini-3.8-flash to either latest or base Flash depending on access, and similarly normalizes Flash Lite buckets.
  • Routing, Context Compression, UI, and Schema:

    • Updated packages/core/src/config/defaultModelConfigs.ts and schemas/settings.schema.json with conditional contexts for useLatestFlash and useLatestFlashLite across aliases (flash, flash-lite, auto, etc.).
    • Updated ApprovalModeStrategy, ClassifierStrategy, GemmaClassifierStrategy, NumericalClassifierStrategy, DefaultStrategy, FallbackStrategy, and OverrideStrategy to propagate latest model capabilities.
    • Updated chatCompressionService.ts to route compression for gemini-3.8-flash and gemini-3.5-flash-lite.
    • Updated ModelDialog.tsx to surface correct model availability options and descriptions.
    • Updated docs/reference/configuration.md with new model configurations and condition schemas.

Related Issues

Related to #29164, #28802

How to Validate

  1. Run Core Model & Configuration Tests:

    npm test -w @google/gemini-cli-core -- src/config/config.test.ts src/config/models.test.ts

    Expected: All tests pass, validating model resolution, quota normalization, and experiment flag logic.

  2. Verify Non-Flag Auth Type Access:

    npm test -w @google/gemini-cli-core -- src/config/config.test.ts -t "hasLatestFlashGAAccess model setting"

    Expected: Confirms that USE_GEMINI, USE_VERTEX_AI, and GATEWAY return true and configure gemini-3.8-flash and gemini-3.5-flash-lite even when experiment flags are false.

  3. Verify Routing & Fallback Integration Tests:

    npm test -w @google/gemini-cli-core -- src/availability/autoRoutingFallback.integration.test.ts src/availability/policyHelpers.test.ts src/context/chatCompressionService.test.ts

    Expected: Fallback chains, policy resolution, and compression models resolve correctly across access conditions.

  4. Verify Outbound Model Mappings:

    npm test -w @google/gemini-cli-core -- src/core/contentGenerator.test.ts

    Expected: Model mapping generator rewrites models appropriately for Code Assist and Gemini API pipelines.

  5. Manual Verification via CLI Model Picker:

    npm start

    Open the model selection dialog (/model) and confirm Gemini 3.8 Flash and Gemini 3.5 Flash Lite options display correctly and auto-selection routes to the expected tiers.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Podman
      • Seatbelt
    • Windows
      • npm run
      • npx
      • Docker
    • Linux
      • npm run
      • npx
      • Docker

@DavidAPierce
DavidAPierce requested review from a team as code owners September 22, 2026 14:16
@github-actions github-actions Bot added the size/xl An extra large PR label Sep 22, 2026
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

📊 PR Size: size/XL

  • Lines changed: 1695
  • Additions: +1346
  • Deletions: -349
  • Files changed: 40

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request integrates the latest Gemini Flash models (3.8 Flash and 3.5 Flash Lite) into the system. It updates the core model configuration, routing strategies, and backend mapping logic to support these new tiers while maintaining backward compatibility. The changes include new experiment-gated access flags, updated quota normalization, and comprehensive adjustments to the CLI and core services to ensure seamless model selection and fallback behavior.

Highlights

  • New Model Support: Added support for Gemini 3.8 Flash and Gemini 3.5 Flash Lite as the latest GA models.
  • Experiment-Gated Access: Introduced new experiment flags to control access to the latest Flash and Flash Lite models.
  • Dynamic Model Mapping: Implemented dynamic outbound backend model ID rewriting to ensure correct model routing for Code Assist and Gemini API.
  • System-wide Updates: Updated model hierarchy, quota tracking, routing strategies, UI components, and documentation to support the new model tiers.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

@gemini-cli gemini-cli Bot added the priority/p1 Important and should be addressed in the near term. label Sep 22, 2026

@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 refactors the model configuration system to support dynamic resolution of 'Latest' Flash and Flash Lite models, replacing hardcoded versioned references with configurable aliases. It updates multiple files across the codebase to implement this logic and adds test utilities to manage model state. The reviewer identified critical architectural and security concerns regarding the use of global mutable state for model defaults, which could lead to concurrency race conditions and experiment gate bypasses in multi-session environments.

Note: Security Review did not run due to the size of the PR.

Comment thread packages/core/src/config/models.ts
Comment thread packages/core/src/config/models.ts Outdated
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Size Change: +9.76 kB (+0.03%)

Total Size: 35.4 MB

Filename Size Change
./bundle/chunk-3S43MJEB.js 0 B -16.7 MB (removed) 🏆
./bundle/chunk-62ULU3IC.js 0 B -13 kB (removed) 🏆
./bundle/chunk-AHYK6Z5G.js 0 B -19.5 kB (removed) 🏆
./bundle/chunk-ELYOFAVK.js 0 B -3.77 kB (removed) 🏆
./bundle/chunk-F4JHHV77.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-IBYU5I4C.js 0 B -3.67 MB (removed) 🏆
./bundle/chunk-MZ5YSHZP.js 0 B -662 kB (removed) 🏆
./bundle/chunk-OTMYRRCG.js 0 B -49.2 kB (removed) 🏆
./bundle/core-F7VHPRWN.js 0 B -51.8 kB (removed) 🏆
./bundle/devtoolsService-WKYJYC6V.js 0 B -147 kB (removed) 🏆
./bundle/gemini-W52JK5CG.js 0 B -646 kB (removed) 🏆
./bundle/interactiveCli-ZHZPSDIX.js 0 B -1.31 MB (removed) 🏆
./bundle/liteRtServerManager-OFK32C3J.js 0 B -2.08 kB (removed) 🏆
./bundle/oauth2-provider-HMKDLY44.js 0 B -9.12 kB (removed) 🏆
./bundle/chunk-4QUKOR3D.js 663 kB +663 kB (new file) 🆕
./bundle/chunk-6WL7GWG5.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-KOWBAT6O.js 19.5 kB +19.5 kB (new file) 🆕
./bundle/chunk-LMEBLDAT.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-N7D5RB3J.js 3.67 MB +3.67 MB (new file) 🆕
./bundle/chunk-SXX3KGRT.js 13 kB +13 kB (new file) 🆕
./bundle/chunk-UPMLNQBJ.js 16.7 MB +16.7 MB (new file) 🆕
./bundle/chunk-YD5LBFEG.js 3.77 kB +3.77 kB (new file) 🆕
./bundle/core-2BEMMCVV.js 52.3 kB +52.3 kB (new file) 🆕
./bundle/devtoolsService-6A2WLJHX.js 147 kB +147 kB (new file) 🆕
./bundle/gemini-25ATGTTC.js 646 kB +646 kB (new file) 🆕
./bundle/interactiveCli-X5L357ZA.js 1.31 MB +1.31 MB (new file) 🆕
./bundle/liteRtServerManager-IPFK4XG4.js 2.08 kB +2.08 kB (new file) 🆕
./bundle/oauth2-provider-PWPKEGCN.js 9.12 kB +9.12 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-L5V3KIDT.js 1.62 kB 0 B
./bundle/chunk-L6PII3GR.js 41.5 kB 0 B
./bundle/cleanup-EBLR5RNW.js 0 B -902 B (removed) 🏆
./bundle/devtools-TYCPOPV3.js 683 kB 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 4.75 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/https-proxy-agent-JWL7GO47.js 479 B 0 B
./bundle/multipart-parser-E7RMVJWU.js 11.7 kB 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/sandbox-macos-permissive-open.sb 8.69 kB 0 B
./bundle/sandbox-macos-permissive-proxied.sb 8.97 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 6.86 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 7.06 kB 0 B
./bundle/sandbox-macos-strict-open.sb 8.23 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 8.44 kB 0 B
./bundle/src-65GKNWUJ.js 45.4 kB 0 B
./bundle/src-U45KTUYT.js 45.7 kB 0 B
./bundle/src-XZYPU6PJ.js 352 kB 0 B
./bundle/start-QGY6MUIL.js 0 B -622 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/worker/worker-entry.js 363 kB 0 B
./bundle/cleanup-MFLH64IH.js 902 B +902 B (new file) 🆕
./bundle/start-FTPQN6XG.js 622 B +622 B (new file) 🆕

compressed-size-action

@adamfweidman adamfweidman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Code Review Summary: LGTM with minor feedback

PR looks great overall. The promotion of Gemini 3.8 Flash (gemini-3.8-flash) and Gemini 3.5 Flash Lite (gemini-3.5-flash-lite) to the latest GA tiers is clean and well-structured, and permanently moving users off older tiers (3.1 / 2.5) onto 3.5 Flash / 3.8 Flash as the new standard makes complete sense.

Approving to unblock landing quickly. Leaving several minor inline observations, suggestions, and test cleanups for consideration (none are release-blocking):

  1. chatCompressionService.ts: Consider adding case BASE_GEMINI_FLASH_LITE_MODEL: alongside LATEST_ so any legacy session explicitly referencing 3.1-flash-lite doesn't fall through to default.
  2. flagNames.ts: If external packages consume GEMINI_3_5_FLASH_GA_LAUNCHED, consider keeping its original ID 45780819 on the deprecated alias.
  3. Tests & Isolation: A few test assertions use the mutable DEFAULT_GEMINI_FLASH_MODEL binding rather than literal 'gemini-3.5-flash'. Consider hoisting resetModelsForTesting() into afterEach at file level for clean test isolation.

},
},
},

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Stray blank line inserted between the condition and target properties of the ModelResolution context item. It is unrelated to the flag rename and Prettier preserves single blank lines, so it persists as diff noise in this definition block. Remove it.

Comment on lines +70 to +71
const useLatestFlash = config?.hasLatestFlashGAAccess?.() ?? false;
const useLatestFlashLite = config?.hasLatestFlashLiteGAAccess?.() ?? false;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

No UI test coverage for the two new capability flags. packages/cli/src/ui/components/ModelDialog.test.tsx never stubs hasLatestFlashGAAccess/hasLatestFlashLiteGAAccess (its MockConfig interface and mockConfig object only define getGemini31LaunchedSync, getHasAccessToPreviewModel, getProModelNoAccess*), so both optional calls silently resolve to false in every test and neither the dynamic-path getAvailableModelOptions arguments nor the legacy auto description are exercised with the flags on. The gap is compounded by the test's getAutoModelDescription mock, which only interpolates hasAccessToPreview and useGemini3_1 and drops the third (useLatestFlash) argument, so even an enabled flag would produce an identical rendered string. Add mocks for both getters plus assertions that the latest Flash / Flash Lite options and the auto description change when they return true; otherwise this behavior is only validated by the manual /model step in the PR description.

Comment on lines +70 to +71
const useLatestFlash = config?.hasLatestFlashGAAccess?.() ?? false;
const useLatestFlashLite = config?.hasLatestFlashLiteGAAccess?.() ?? false;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

hasLatestFlashGAAccess and hasLatestFlashLiteGAAccess are declared as required (non-optional) methods on Config (packages/core/src/config/config.ts:3596, :3628), so the ?.() call guard is dead defensiveness that only masks incomplete test doubles — it is precisely what lets ModelDialog.test.tsx pass without ever defining these methods. Prefer calling them directly so a missing/renamed method fails loudly.

Proposed suggestion:

  const useLatestFlash = config?.hasLatestFlashGAAccess() ?? false;
  const useLatestFlashLite = config?.hasLatestFlashLiteGAAccess() ?? false;

Comment on lines +232 to +233
normalizeModelId(PREVIEW_GEMINI_MODEL),
normalizeModelId(PREVIEW_GEMINI_FLASH_MODEL),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This fallback-target assertion no longer pins a concrete model. PREVIEW_GEMINI_FLASH_MODEL is now an exported mutable let (models.ts:65) that production code rewrites at runtime: resolvePolicyChain calls config.hasLatestFlashGAAccess() (policyHelpers.ts:58), which calls setFlashModels(...) (config.ts:3608-3616) during this very test. Because the expected value is read from the same live binding the code under test mutates, a regression that changes the fallback target (e.g. flash resolving to gemini-3.8-flash) would change both sides and the assertion would still pass. Pin the expected IDs literally (they are deterministic here: no experiments + LOGIN_WITH_GOOGLE => flag off).

Proposed suggestion:

      'gemini-3-pro-preview',
      'gemini-3-flash-preview',

let client: BaseLlmClient;

beforeEach(() => {
resetModelsForTesting();

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

resetModelsForTesting() was added because the Flash constants are now mutated by hasLatestFlashGAAccess(), but no case in this file exercises the flag-on path. Every test here runs with LATEST_FLASH_GA_LAUNCHED off (no experiments, LOGIN_WITH_GOOGLE), so the new gemini-3.8-flash fallback target introduced by this PR is untested, even though the PR description lists this file as the validation for "fallback chains ... across access conditions". Add a case that stubs Config.prototype.hasLatestFlashGAAccess (or the experiment flag) to true and asserts the Pro -> latest-Flash chain resolves to gemini-3.8-flash.

Comment on lines +187 to +188
const useLatestFlash = config.hasLatestFlashGAAccess?.() ?? false;
const useLatestFlashLite = config.hasLatestFlashLiteGAAccess?.() ?? false;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

These two locals duplicate logic that resolveClassifierModel already performs internally: it computes effectiveUseLatestFlash = useLatestFlash || (config?.hasLatestFlashGAAccess?.() ?? false) || ... (and the flash-lite equivalent) in models.ts:388-395, using the very same config instance passed as the 6th argument on line 196. Reading the flags here and forwarding them as arguments 7/8 is a no-op that spreads the access-check across two places, so a future change to the resolution rule in models.ts leaves an independent copy here. Consider dropping these locals and the two trailing arguments and letting resolveClassifierModel derive them from config (same applies to the sibling strategies touched in this PR). Separately, config is typed as Config, where both methods are non-optional, so the ?.() guards only serve to mask incomplete test mocks rather than a real runtime case.

useCustomTools?: boolean;
hasAccessToPreview?: boolean;
/** Matches if the current model is in this list. */
hasAccessToProModel?: boolean;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Adding hasAccessToProModel here deleted the pre-existing doc comment /** Matches if the current model is in this list. */ that documented requestedModels on the next line. Restore it; unrelated documentation should not be dropped.

Proposed suggestion:

  hasAccessToProModel?: boolean;
  /** Matches if the current model is in this list. */

const shouldShowPreviewModels = context.hasAccessToPreview ?? false;
const useGemini31 = context.useGemini3_1 ?? false;
const useGemini3_5Flash = context.useGemini3_5Flash ?? false;
const useLatestFlash = context.useLatestFlash ?? false;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Inconsistent handling of the deprecated alias. matches() (lines 270-277) explicitly honors context.useGemini3_5Flash as a fallback for context.useLatestFlash, but here the deprecated field is ignored, so a caller that still passes only useGemini3_5Flash gets resolveModelId() routing to the latest Flash model while getAutoModelDescription() is told the latest Flash is off — the dialog description and the resolved model disagree. Apply the same fallback.

Proposed suggestion:

    const useLatestFlash =
      context.useLatestFlash ?? context.useGemini3_5Flash ?? false;

Comment on lines +262 to +277
case 'useLatestFlashLite':
case 'useGemini3_1FlashLite': {
const actualValue =
key === 'useLatestFlashLite'
? (context.useLatestFlashLite ?? context.useGemini3_1FlashLite)
: (context.useGemini3_1FlashLite ?? context.useLatestFlashLite);
return value === actualValue;
}
case 'useLatestFlash':
case 'useGemini3_5Flash': {
const actualValue =
key === 'useLatestFlash'
? (context.useLatestFlash ?? context.useGemini3_5Flash)
: (context.useGemini3_5Flash ?? context.useLatestFlash);
return value === actualValue;
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

New matching branches are untested. modelConfigService.test.ts only exercises useGemini3_5Flash (lines 1049-1117) against a context that sets the same key; there is no test for useLatestFlash/useLatestFlashLite conditions, nor for the new cross-alias fallback (e.g. condition { useLatestFlash: true } with context { useGemini3_5Flash: true }, and the reverse). These fallbacks are the entire back-compat contract for user-supplied modelIdResolutions, and they also change existing behavior: a condition { useGemini3_1FlashLite: false } now matches a context that only sets useLatestFlashLite: false (previously it compared against undefined and never matched). Please add tests covering both directions and the both-defined case.

Comment on lines +282 to +283
case 'hasAccessToProModel':
return value === context.hasAccessToProModel;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

hasAccessToProModel is accepted as a ResolutionCondition key here, but it is not declared in the ModelResolution.contexts[].condition properties in packages/cli/src/config/settingsSchema.ts (lines 3523-3551), which this PR did update for useLatestFlash/useLatestFlashLite/the deprecated aliases. It is also not used by any resolution in defaultModelConfigs.ts and has no test. Either add it to the settings schema (and regenerate schemas/settings.schema.json + docs/reference/configuration.md) with a test, or drop this branch until a config needs it.

@DavidAPierce
DavidAPierce added this pull request to the merge queue Sep 22, 2026
Merged via the queue into main with commit 62364cb Sep 22, 2026
32 of 33 checks passed
@DavidAPierce
DavidAPierce deleted the feat/gemini-3.8-flash-3.5-flash-lite branch September 22, 2026 22:01
@DavidAPierce

Copy link
Copy Markdown
Contributor Author

/patch

@github-actions

Copy link
Copy Markdown

🚀 [Step 1/4] Patch workflow(s) waiting for approval!

📋 Details:

  • Channels: stable,preview
  • Commit: 62364cb2000795537a6895261b37ec668e4cf527
  • Workflows Created: 2

⏳ Status: The patch creation workflow has been triggered and is waiting for deployment approval. Please visit the specific workflow links below and approve the runs.

🔗 Track Progress:

@github-actions

Copy link
Copy Markdown

🚀 [Step 2/4] Patch PR Created!

📋 Patch Details:

📝 Next Steps:

  1. Review and approve the hotfix PR: #29455
  2. Once merged, the patch release will automatically trigger
  3. You'll receive updates here when the release completes

🔗 Track Progress:

@github-actions

Copy link
Copy Markdown

🚀 [Step 2/4] Patch PR Created!

📋 Patch Details:

📝 Next Steps:

  1. ⚠️ Resolve conflicts in the hotfix PR first: #29456
  2. Test your changes after resolving conflicts
  3. Once merged, the patch release will automatically trigger
  4. You'll receive updates here when the release completes

🔗 Track Progress:

@github-actions

Copy link
Copy Markdown

🚀 [Step 3/4] Patch Release Waiting for Approval!

📋 Release Details:

  • Environment: prod
  • Channel: preview → publishing to npm tag preview
  • Version: v0.61.0-preview.0
  • Hotfix PR: Merged ✅
  • Release Branch: release/v0.61.0-preview.0-pr-29443

⏳ Status: The patch release has been triggered and is waiting for deployment approval. Please visit the specific workflow run link below and approve the deployment. You'll receive another update when it completes.

🔗 Track Progress:

@github-actions

Copy link
Copy Markdown

❌ [Step 4/4] Patch Release Failed!

📋 Details:

  • Version: 0.61.0-preview.1
  • Channel: preview
  • Error: The patch release workflow encountered an error

🔍 Next Steps:

  1. Check the workflow logs for detailed error information
  2. The maintainers have been notified via automatic issue creation
  3. You may need to retry the patch once the issue is resolved

🔗 Troubleshooting:

@github-actions

Copy link
Copy Markdown

❌ [Step 4/4] Patch Release Failed!

📋 Details:

  • Version: 0.61.0-preview.1
  • Channel: preview
  • Error: The patch release workflow encountered an error

🔍 Next Steps:

  1. Check the workflow logs for detailed error information
  2. The maintainers have been notified via automatic issue creation
  3. You may need to retry the patch once the issue is resolved

🔗 Troubleshooting:

@github-actions

Copy link
Copy Markdown

✅ [Step 4/4] Patch Release Complete!

📦 Release Details:

🎉 Status: Your patch has been successfully released and published to npm!

📝 What's Available:

🔗 Links:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority/p1 Important and should be addressed in the near term. size/xl An extra large PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants