Conversation
#13248) Merged after renumbering. `176_provider_connection_synced_models_at.sql` collided with `176_xp_action_counts.sql` (#12651), which made the migration runner abort on every DB open. Renamed to **177**; the doc count moves 173 → 174 across README.md, AGENTS.md, llm.txt and the i18n mirrors (operator-approved, 206 numeric substitutions and nothing else). - `check:migration-numbering`: OK, 174 migrations, no duplicates - `check:docs-counts` migrations: ✓ - 84/84 across the NVIDIA suite plus the seven DB-touching suites the collision had taken down - ESLint and `typecheck:core`: exit 0 Heads-up for whoever lands next: **177 is claimed by eight other open PRs** (#13610, #13602, #13580, #13554, #13405, #13331, #13177, #13116) and 176 by #13373 and #13102. With this merged, all of them need to renumber at merge time — `check:migration-numbering` forbids new gaps, so the next free number is always the only valid one.⚠️ base-red inherited: #12732
|
Really solid piece of work — the request-local Symbol-tagged credentials approach for the |
|
Thanks — fixed the migration collision and added Validation on the reconciled branch:
A separate checkout combining the editor, reasoning-reliability and adaptive-effort PRs passes 40 focused runtime tests and 6 editor tests. The editor overlap needs a small deliberate merge resolution: retain the redesigned workspace and insert the service-mode section for the selected key. The reasoning overlap must retain both request-local credential contexts. No sibling implementation was added to this PR. Full PR CI has not been awaited. |
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
…ken) Renamed 180_api_key_preferred_connections.sql to 184_api_key_preferred_connections.sql: the release tip landed 180_memory_fts_au_conditional_memory_id.sql after this PR's previous renumbering pass. Slot 184 is the owner-assigned number for this PR among the 7 PRs that collided on the 180 slot (diegosouzapw#13610=181, diegosouzapw#12962=182, diegosouzapw#12967=183, diegosouzapw#13102=184, diegosouzapw#13222=185, diegosouzapw#13373=186, diegosouzapw#13554=187). Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Slot 180 now collides with the tip's 180_memory_fts_au_conditional_memory_id.sql (diegosouzapw#13331, merged 2026-09-16). The maintainer assigned 187 as the coordinated slot for this PR among the six others contending for the same range. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Six open PRs claimed migration slot 180 after diegosouzapw#13331 landed it on the release tip; the owner assigned diegosouzapw#13373 slot 186 in the sequence (diegosouzapw#13610=181, diegosouzapw#12962=182, diegosouzapw#12967=183, diegosouzapw#13102=184, diegosouzapw#13222=185, diegosouzapw#13373=186, diegosouzapw#13554=187). Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
…ouzapw#12849) (diegosouzapw#13248) Merged after renumbering. `176_provider_connection_synced_models_at.sql` collided with `176_xp_action_counts.sql` (diegosouzapw#12651), which made the migration runner abort on every DB open. Renamed to **177**; the doc count moves 173 → 174 across README.md, AGENTS.md, llm.txt and the i18n mirrors (operator-approved, 206 numeric substitutions and nothing else). - `check:migration-numbering`: OK, 174 migrations, no duplicates - `check:docs-counts` migrations: ✓ - 84/84 across the NVIDIA suite plus the seven DB-touching suites the collision had taken down - ESLint and `typecheck:core`: exit 0 Heads-up for whoever lands next: **177 is claimed by eight other open PRs** (diegosouzapw#13610, diegosouzapw#13602, diegosouzapw#13580, diegosouzapw#13554, diegosouzapw#13405, diegosouzapw#13331, diegosouzapw#13177, diegosouzapw#13116) and 176 by diegosouzapw#13373 and diegosouzapw#13102. With this merged, all of them need to renumber at merge time — `check:migration-numbering` forbids new gaps, so the next free number is always the only valid one.⚠️ base-red inherited: diegosouzapw#12732
|
Re-homed to |
Summary
Allow an API key to inherit existing behavior or force Standard (
default), Fast/Priority (priority), or Flex (flex) for the OpenAI OAuth provider (codex). Other providers, including regular OpenAI API-key connections, remain unchanged.service_tier, global service-mode settings and connection defaults.service_tier: "default"for Standard, so an account/global Priority default cannot reappear.Existing and newly created keys default to
inherit. This does not grant provider/model access or guarantee a tier is available for an account.Related Issues
Historical base-red report #12732 is now closed. Current CI failures must be assessed on their own merits.
The feature was initially based on
release/v3.8.51at152d95108c9c3d557562311ffed63240a511eb31. No fork deployment workflow, container configuration, admission hotfix, or provider-catalog patch is included.Validation
node --import tsx/esm --test tests/integration/api-key-codex-service-mode.test.ts— 12 passed, rerun on this branch.npm run check:migration-numbering— passed.npm run check:db-rules— passed.git diff --checkpassed.The equivalent fork deployment was verified with a short-lived restricted key: both native Responses and Chat through a combo returned HTTP 200 and captured provider requests contained
service_tier: "default"despite clientpriority. The test key was deleted and existing keys stayed unchanged. This live check verifies Standard enforcement; Priority/Flex availability for every real account is not claimed.Tests Added Or Updated
tests/integration/api-key-codex-service-mode.test.ts: migration defaults/constraints, management API round-trip, metadata-cache invalidation, all three forced tiers, inherited precedence, isolation, combo legs, retries, no silent downgrade, app-server rejection and WebSocket preparation.Coverage Notes
Tests use isolated storage and a mocked upstream, including the final serialized provider body. Full coverage was not measured locally.
Reviewer Notes
Migration:
179_api_key_codex_service_mode.sqladds a constrained TEXT column with defaultinherit; the legacy-column fallback uses the same definition. No existing key setting is force-changed. Confirm the migration number is still free if the release branch advances before merge.This branch does not depend on the new editor: the selector is wired into the existing per-key routing card. If the editor PR lands first, place that same section in its selected-key workspace. If the reasoning reliability PR lands first, preserve both request-local credential contexts at their overlapping preparation sites.
Related independent PRs
All three target the same release tip directly, not each other. Shared-file overlaps may need small integration resolutions after the first PR lands; unrelated fork-only changes are deliberately excluded.
Review follow-up: reconciled with release tip
ac52d4d9e; the migration is now 179, avoiding the released 177/178 migrations. The 12 integration tests, migration-numbering gate, DB rules, changelog integrity and core typecheck pass. See the review reply for cross-PR integration evidence.