fix(provider): drop removed custom models from the model picker - #9075

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models
Sep 2, 2026
Merged

fix(provider): drop removed custom models from the model picker#9075
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models

Conversation

@StiensWout

@StiensWoutStiensWout commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Removing a custom model in Settings did not remove it from the model picker. The row stayed in the composer picker and in every settings picker, and it survived server restarts.

The server's provider aggregator merges each refreshed snapshot with the previous one and, for every driver except OpenCode, keeps any model that the new snapshot no longer reports. Custom models are built from settings on every probe, so the removed slug was missing from the new snapshot and got re-added from the old one on every refresh, then persisted to the boot cache. The web option builder also took custom rows straight from the server snapshot instead of settings.

Custom rows are owned by settings and every snapshot already carries the full current list, so the aggregator and boot-cache merges now never retain previous custom rows. The web option builders only take built-ins from the snapshot and rebuild custom rows from settings, so a removal disappears immediately instead of waiting for the next probe. Mobile reads the server list directly and is fixed by the server change.

Focused tests cover the aggregator merge, the boot-cache hydrate, and the web option list.

Made with Claude Fable 5.1 in T3 Code.


Note

Medium Risk
Changes provider snapshot merging and model-picker assembly, which could affect model lists at runtime, but scope is limited to custom-model retention with targeted tests.

Overview
Fixes removed custom models sticking around in the composer and settings pickers (and across restarts) by treating custom model rows as settings-owned instead of mergeable snapshot history.

On the server, mergeProviderSnapshot and boot cache hydration no longer carry forward previous or cached isCustom models when the current settings-derived snapshot omits them; built-in models still get the existing “retain on empty/partial refresh” behavior. On web, getAppModelOptions / getAppModelOptionsForInstance take built-ins only from the provider snapshot and rebuild custom options from settings, so a deletion shows up immediately even if the server list is stale.

Adds regression tests for registry merge, cache hydrate, and web option lists.

Reviewed by Cursor Bugbot for commit 6f05db6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop removed custom models from provider snapshots, status cache, and model picker

  • Filters custom models out of the retained set in mergeProviderModels so a refreshed provider snapshot no longer resurrects custom models that were removed from settings
  • Excludes custom cached models during hydrateCachedProvider hydration so the status cache does not bring back custom models absent from the settings-derived fallback snapshot
  • Ignores server-reported custom models in getAppModelOptions and getAppModelOptionsForInstance, rebuilding custom rows solely from user settings so removals take effect immediately
  • Risk: any code path that relied on server-reported or cached custom models surviving a refresh will no longer see them; check mergeProviderModels in ProviderRegistry.ts and hydrateCachedProvider in providerStatusCache.ts for downstream consumers

Macroscope summarized 6f05db6.

Removing a custom model in Settings left it in the model picker. The server
aggregator merged each refreshed snapshot with the previous one and retained
every model missing from the new snapshot, so the removed custom row came
back on every probe and was persisted to the boot cache. The web picker also
took custom rows straight from the server snapshot.
Custom rows are settings-owned and every snapshot carries the full current
list, so the aggregator and boot-cache merges now never retain previous
custom rows, and the web option builders only take built-ins from the
snapshot and rebuild custom rows from settings.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6f05db6

Macroscope's review found this PR approvable — This is a focused provider model-picker bug fix that removes stale custom entries from snapshot merging, cache hydration, and UI option construction while preserving current settings and built-in models. The changes are limited, covered by targeted tests, and introduce no schema, deployment, security, billing, or static-analysis risk.

You can add or adjust custom eligibility rules. Learn more.

@MatthewFeroz

Copy link
Copy Markdown
Contributor
pr-9075-step1-provider-settingspr-9075-step2-picker-before-removalpr-9075-step3-picker-after-removal

just verified looks good to me

@maria-rcks
maria-rcks merged commit 941acb4 into pingdotgg:mainSep 2, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@StiensWout@MatthewFeroz@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(provider): drop removed custom models from the model picker - #9075

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models
Sep 2, 2026
Merged

fix(provider): drop removed custom models from the model picker#9075
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models

Conversation

@StiensWout

@StiensWoutStiensWout commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Removing a custom model in Settings did not remove it from the model picker. The row stayed in the composer picker and in every settings picker, and it survived server restarts.

The server's provider aggregator merges each refreshed snapshot with the previous one and, for every driver except OpenCode, keeps any model that the new snapshot no longer reports. Custom models are built from settings on every probe, so the removed slug was missing from the new snapshot and got re-added from the old one on every refresh, then persisted to the boot cache. The web option builder also took custom rows straight from the server snapshot instead of settings.

Custom rows are owned by settings and every snapshot already carries the full current list, so the aggregator and boot-cache merges now never retain previous custom rows. The web option builders only take built-ins from the snapshot and rebuild custom rows from settings, so a removal disappears immediately instead of waiting for the next probe. Mobile reads the server list directly and is fixed by the server change.

Focused tests cover the aggregator merge, the boot-cache hydrate, and the web option list.

Made with Claude Fable 5.1 in T3 Code.


Note

Medium Risk
Changes provider snapshot merging and model-picker assembly, which could affect model lists at runtime, but scope is limited to custom-model retention with targeted tests.

Overview
Fixes removed custom models sticking around in the composer and settings pickers (and across restarts) by treating custom model rows as settings-owned instead of mergeable snapshot history.

On the server, mergeProviderSnapshot and boot cache hydration no longer carry forward previous or cached isCustom models when the current settings-derived snapshot omits them; built-in models still get the existing “retain on empty/partial refresh” behavior. On web, getAppModelOptions / getAppModelOptionsForInstance take built-ins only from the provider snapshot and rebuild custom options from settings, so a deletion shows up immediately even if the server list is stale.

Adds regression tests for registry merge, cache hydrate, and web option lists.

Reviewed by Cursor Bugbot for commit 6f05db6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop removed custom models from provider snapshots, status cache, and model picker

  • Filters custom models out of the retained set in mergeProviderModels so a refreshed provider snapshot no longer resurrects custom models that were removed from settings
  • Excludes custom cached models during hydrateCachedProvider hydration so the status cache does not bring back custom models absent from the settings-derived fallback snapshot
  • Ignores server-reported custom models in getAppModelOptions and getAppModelOptionsForInstance, rebuilding custom rows solely from user settings so removals take effect immediately
  • Risk: any code path that relied on server-reported or cached custom models surviving a refresh will no longer see them; check mergeProviderModels in ProviderRegistry.ts and hydrateCachedProvider in providerStatusCache.ts for downstream consumers

Macroscope summarized 6f05db6.

Removing a custom model in Settings left it in the model picker. The server
aggregator merged each refreshed snapshot with the previous one and retained
every model missing from the new snapshot, so the removed custom row came
back on every probe and was persisted to the boot cache. The web picker also
took custom rows straight from the server snapshot.
Custom rows are settings-owned and every snapshot carries the full current
list, so the aggregator and boot-cache merges now never retain previous
custom rows, and the web option builders only take built-ins from the
snapshot and rebuild custom rows from settings.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6f05db6

Macroscope's review found this PR approvable — This is a focused provider model-picker bug fix that removes stale custom entries from snapshot merging, cache hydration, and UI option construction while preserving current settings and built-in models. The changes are limited, covered by targeted tests, and introduce no schema, deployment, security, billing, or static-analysis risk.

You can add or adjust custom eligibility rules. Learn more.

@MatthewFeroz

Copy link
Copy Markdown
Contributor
pr-9075-step1-provider-settingspr-9075-step2-picker-before-removalpr-9075-step3-picker-after-removal

just verified looks good to me

@maria-rcks
maria-rcks merged commit 941acb4 into pingdotgg:mainSep 2, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@StiensWout@MatthewFeroz@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(provider): drop removed custom models from the model picker - #9075

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models
Sep 2, 2026
Merged

fix(provider): drop removed custom models from the model picker#9075
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models

Conversation

@StiensWout

@StiensWoutStiensWout commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Removing a custom model in Settings did not remove it from the model picker. The row stayed in the composer picker and in every settings picker, and it survived server restarts.

The server's provider aggregator merges each refreshed snapshot with the previous one and, for every driver except OpenCode, keeps any model that the new snapshot no longer reports. Custom models are built from settings on every probe, so the removed slug was missing from the new snapshot and got re-added from the old one on every refresh, then persisted to the boot cache. The web option builder also took custom rows straight from the server snapshot instead of settings.

Custom rows are owned by settings and every snapshot already carries the full current list, so the aggregator and boot-cache merges now never retain previous custom rows. The web option builders only take built-ins from the snapshot and rebuild custom rows from settings, so a removal disappears immediately instead of waiting for the next probe. Mobile reads the server list directly and is fixed by the server change.

Focused tests cover the aggregator merge, the boot-cache hydrate, and the web option list.

Made with Claude Fable 5.1 in T3 Code.


Note

Medium Risk
Changes provider snapshot merging and model-picker assembly, which could affect model lists at runtime, but scope is limited to custom-model retention with targeted tests.

Overview
Fixes removed custom models sticking around in the composer and settings pickers (and across restarts) by treating custom model rows as settings-owned instead of mergeable snapshot history.

On the server, mergeProviderSnapshot and boot cache hydration no longer carry forward previous or cached isCustom models when the current settings-derived snapshot omits them; built-in models still get the existing “retain on empty/partial refresh” behavior. On web, getAppModelOptions / getAppModelOptionsForInstance take built-ins only from the provider snapshot and rebuild custom options from settings, so a deletion shows up immediately even if the server list is stale.

Adds regression tests for registry merge, cache hydrate, and web option lists.

Reviewed by Cursor Bugbot for commit 6f05db6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop removed custom models from provider snapshots, status cache, and model picker

  • Filters custom models out of the retained set in mergeProviderModels so a refreshed provider snapshot no longer resurrects custom models that were removed from settings
  • Excludes custom cached models during hydrateCachedProvider hydration so the status cache does not bring back custom models absent from the settings-derived fallback snapshot
  • Ignores server-reported custom models in getAppModelOptions and getAppModelOptionsForInstance, rebuilding custom rows solely from user settings so removals take effect immediately
  • Risk: any code path that relied on server-reported or cached custom models surviving a refresh will no longer see them; check mergeProviderModels in ProviderRegistry.ts and hydrateCachedProvider in providerStatusCache.ts for downstream consumers

Macroscope summarized 6f05db6.

Removing a custom model in Settings left it in the model picker. The server
aggregator merged each refreshed snapshot with the previous one and retained
every model missing from the new snapshot, so the removed custom row came
back on every probe and was persisted to the boot cache. The web picker also
took custom rows straight from the server snapshot.
Custom rows are settings-owned and every snapshot carries the full current
list, so the aggregator and boot-cache merges now never retain previous
custom rows, and the web option builders only take built-ins from the
snapshot and rebuild custom rows from settings.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6f05db6

Macroscope's review found this PR approvable — This is a focused provider model-picker bug fix that removes stale custom entries from snapshot merging, cache hydration, and UI option construction while preserving current settings and built-in models. The changes are limited, covered by targeted tests, and introduce no schema, deployment, security, billing, or static-analysis risk.

You can add or adjust custom eligibility rules. Learn more.

@MatthewFeroz

Copy link
Copy Markdown
Contributor
pr-9075-step1-provider-settingspr-9075-step2-picker-before-removalpr-9075-step3-picker-after-removal

just verified looks good to me

@maria-rcks
maria-rcks merged commit 941acb4 into pingdotgg:mainSep 2, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@StiensWout@MatthewFeroz@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(provider): drop removed custom models from the model picker - #9075

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models
Sep 2, 2026
Merged

fix(provider): drop removed custom models from the model picker#9075
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models

Conversation

@StiensWout

@StiensWoutStiensWout commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Removing a custom model in Settings did not remove it from the model picker. The row stayed in the composer picker and in every settings picker, and it survived server restarts.

The server's provider aggregator merges each refreshed snapshot with the previous one and, for every driver except OpenCode, keeps any model that the new snapshot no longer reports. Custom models are built from settings on every probe, so the removed slug was missing from the new snapshot and got re-added from the old one on every refresh, then persisted to the boot cache. The web option builder also took custom rows straight from the server snapshot instead of settings.

Custom rows are owned by settings and every snapshot already carries the full current list, so the aggregator and boot-cache merges now never retain previous custom rows. The web option builders only take built-ins from the snapshot and rebuild custom rows from settings, so a removal disappears immediately instead of waiting for the next probe. Mobile reads the server list directly and is fixed by the server change.

Focused tests cover the aggregator merge, the boot-cache hydrate, and the web option list.

Made with Claude Fable 5.1 in T3 Code.


Note

Medium Risk
Changes provider snapshot merging and model-picker assembly, which could affect model lists at runtime, but scope is limited to custom-model retention with targeted tests.

Overview
Fixes removed custom models sticking around in the composer and settings pickers (and across restarts) by treating custom model rows as settings-owned instead of mergeable snapshot history.

On the server, mergeProviderSnapshot and boot cache hydration no longer carry forward previous or cached isCustom models when the current settings-derived snapshot omits them; built-in models still get the existing “retain on empty/partial refresh” behavior. On web, getAppModelOptions / getAppModelOptionsForInstance take built-ins only from the provider snapshot and rebuild custom options from settings, so a deletion shows up immediately even if the server list is stale.

Adds regression tests for registry merge, cache hydrate, and web option lists.

Reviewed by Cursor Bugbot for commit 6f05db6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop removed custom models from provider snapshots, status cache, and model picker

  • Filters custom models out of the retained set in mergeProviderModels so a refreshed provider snapshot no longer resurrects custom models that were removed from settings
  • Excludes custom cached models during hydrateCachedProvider hydration so the status cache does not bring back custom models absent from the settings-derived fallback snapshot
  • Ignores server-reported custom models in getAppModelOptions and getAppModelOptionsForInstance, rebuilding custom rows solely from user settings so removals take effect immediately
  • Risk: any code path that relied on server-reported or cached custom models surviving a refresh will no longer see them; check mergeProviderModels in ProviderRegistry.ts and hydrateCachedProvider in providerStatusCache.ts for downstream consumers

Macroscope summarized 6f05db6.

Removing a custom model in Settings left it in the model picker. The server
aggregator merged each refreshed snapshot with the previous one and retained
every model missing from the new snapshot, so the removed custom row came
back on every probe and was persisted to the boot cache. The web picker also
took custom rows straight from the server snapshot.
Custom rows are settings-owned and every snapshot carries the full current
list, so the aggregator and boot-cache merges now never retain previous
custom rows, and the web option builders only take built-ins from the
snapshot and rebuild custom rows from settings.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6f05db6

Macroscope's review found this PR approvable — This is a focused provider model-picker bug fix that removes stale custom entries from snapshot merging, cache hydration, and UI option construction while preserving current settings and built-in models. The changes are limited, covered by targeted tests, and introduce no schema, deployment, security, billing, or static-analysis risk.

You can add or adjust custom eligibility rules. Learn more.

@MatthewFeroz

Copy link
Copy Markdown
Contributor
pr-9075-step1-provider-settingspr-9075-step2-picker-before-removalpr-9075-step3-picker-after-removal

just verified looks good to me

@maria-rcks
maria-rcks merged commit 941acb4 into pingdotgg:mainSep 2, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@StiensWout@MatthewFeroz@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(provider): drop removed custom models from the model picker - #9075

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models
Sep 2, 2026
Merged

fix(provider): drop removed custom models from the model picker#9075
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models

Conversation

@StiensWout

@StiensWoutStiensWout commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Removing a custom model in Settings did not remove it from the model picker. The row stayed in the composer picker and in every settings picker, and it survived server restarts.

The server's provider aggregator merges each refreshed snapshot with the previous one and, for every driver except OpenCode, keeps any model that the new snapshot no longer reports. Custom models are built from settings on every probe, so the removed slug was missing from the new snapshot and got re-added from the old one on every refresh, then persisted to the boot cache. The web option builder also took custom rows straight from the server snapshot instead of settings.

Custom rows are owned by settings and every snapshot already carries the full current list, so the aggregator and boot-cache merges now never retain previous custom rows. The web option builders only take built-ins from the snapshot and rebuild custom rows from settings, so a removal disappears immediately instead of waiting for the next probe. Mobile reads the server list directly and is fixed by the server change.

Focused tests cover the aggregator merge, the boot-cache hydrate, and the web option list.

Made with Claude Fable 5.1 in T3 Code.


Note

Medium Risk
Changes provider snapshot merging and model-picker assembly, which could affect model lists at runtime, but scope is limited to custom-model retention with targeted tests.

Overview
Fixes removed custom models sticking around in the composer and settings pickers (and across restarts) by treating custom model rows as settings-owned instead of mergeable snapshot history.

On the server, mergeProviderSnapshot and boot cache hydration no longer carry forward previous or cached isCustom models when the current settings-derived snapshot omits them; built-in models still get the existing “retain on empty/partial refresh” behavior. On web, getAppModelOptions / getAppModelOptionsForInstance take built-ins only from the provider snapshot and rebuild custom options from settings, so a deletion shows up immediately even if the server list is stale.

Adds regression tests for registry merge, cache hydrate, and web option lists.

Reviewed by Cursor Bugbot for commit 6f05db6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop removed custom models from provider snapshots, status cache, and model picker

  • Filters custom models out of the retained set in mergeProviderModels so a refreshed provider snapshot no longer resurrects custom models that were removed from settings
  • Excludes custom cached models during hydrateCachedProvider hydration so the status cache does not bring back custom models absent from the settings-derived fallback snapshot
  • Ignores server-reported custom models in getAppModelOptions and getAppModelOptionsForInstance, rebuilding custom rows solely from user settings so removals take effect immediately
  • Risk: any code path that relied on server-reported or cached custom models surviving a refresh will no longer see them; check mergeProviderModels in ProviderRegistry.ts and hydrateCachedProvider in providerStatusCache.ts for downstream consumers

Macroscope summarized 6f05db6.

Removing a custom model in Settings left it in the model picker. The server
aggregator merged each refreshed snapshot with the previous one and retained
every model missing from the new snapshot, so the removed custom row came
back on every probe and was persisted to the boot cache. The web picker also
took custom rows straight from the server snapshot.
Custom rows are settings-owned and every snapshot carries the full current
list, so the aggregator and boot-cache merges now never retain previous
custom rows, and the web option builders only take built-ins from the
snapshot and rebuild custom rows from settings.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6f05db6

Macroscope's review found this PR approvable — This is a focused provider model-picker bug fix that removes stale custom entries from snapshot merging, cache hydration, and UI option construction while preserving current settings and built-in models. The changes are limited, covered by targeted tests, and introduce no schema, deployment, security, billing, or static-analysis risk.

You can add or adjust custom eligibility rules. Learn more.

@MatthewFeroz

Copy link
Copy Markdown
Contributor
pr-9075-step1-provider-settingspr-9075-step2-picker-before-removalpr-9075-step3-picker-after-removal

just verified looks good to me

@maria-rcks
maria-rcks merged commit 941acb4 into pingdotgg:mainSep 2, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@StiensWout@MatthewFeroz@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(provider): drop removed custom models from the model picker - #9075

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models
Sep 2, 2026
Merged

fix(provider): drop removed custom models from the model picker#9075
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models

Conversation

@StiensWout

@StiensWoutStiensWout commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Removing a custom model in Settings did not remove it from the model picker. The row stayed in the composer picker and in every settings picker, and it survived server restarts.

The server's provider aggregator merges each refreshed snapshot with the previous one and, for every driver except OpenCode, keeps any model that the new snapshot no longer reports. Custom models are built from settings on every probe, so the removed slug was missing from the new snapshot and got re-added from the old one on every refresh, then persisted to the boot cache. The web option builder also took custom rows straight from the server snapshot instead of settings.

Custom rows are owned by settings and every snapshot already carries the full current list, so the aggregator and boot-cache merges now never retain previous custom rows. The web option builders only take built-ins from the snapshot and rebuild custom rows from settings, so a removal disappears immediately instead of waiting for the next probe. Mobile reads the server list directly and is fixed by the server change.

Focused tests cover the aggregator merge, the boot-cache hydrate, and the web option list.

Made with Claude Fable 5.1 in T3 Code.


Note

Medium Risk
Changes provider snapshot merging and model-picker assembly, which could affect model lists at runtime, but scope is limited to custom-model retention with targeted tests.

Overview
Fixes removed custom models sticking around in the composer and settings pickers (and across restarts) by treating custom model rows as settings-owned instead of mergeable snapshot history.

On the server, mergeProviderSnapshot and boot cache hydration no longer carry forward previous or cached isCustom models when the current settings-derived snapshot omits them; built-in models still get the existing “retain on empty/partial refresh” behavior. On web, getAppModelOptions / getAppModelOptionsForInstance take built-ins only from the provider snapshot and rebuild custom options from settings, so a deletion shows up immediately even if the server list is stale.

Adds regression tests for registry merge, cache hydrate, and web option lists.

Reviewed by Cursor Bugbot for commit 6f05db6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop removed custom models from provider snapshots, status cache, and model picker

  • Filters custom models out of the retained set in mergeProviderModels so a refreshed provider snapshot no longer resurrects custom models that were removed from settings
  • Excludes custom cached models during hydrateCachedProvider hydration so the status cache does not bring back custom models absent from the settings-derived fallback snapshot
  • Ignores server-reported custom models in getAppModelOptions and getAppModelOptionsForInstance, rebuilding custom rows solely from user settings so removals take effect immediately
  • Risk: any code path that relied on server-reported or cached custom models surviving a refresh will no longer see them; check mergeProviderModels in ProviderRegistry.ts and hydrateCachedProvider in providerStatusCache.ts for downstream consumers

Macroscope summarized 6f05db6.

Removing a custom model in Settings left it in the model picker. The server
aggregator merged each refreshed snapshot with the previous one and retained
every model missing from the new snapshot, so the removed custom row came
back on every probe and was persisted to the boot cache. The web picker also
took custom rows straight from the server snapshot.
Custom rows are settings-owned and every snapshot carries the full current
list, so the aggregator and boot-cache merges now never retain previous
custom rows, and the web option builders only take built-ins from the
snapshot and rebuild custom rows from settings.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6f05db6

Macroscope's review found this PR approvable — This is a focused provider model-picker bug fix that removes stale custom entries from snapshot merging, cache hydration, and UI option construction while preserving current settings and built-in models. The changes are limited, covered by targeted tests, and introduce no schema, deployment, security, billing, or static-analysis risk.

You can add or adjust custom eligibility rules. Learn more.

@MatthewFeroz

Copy link
Copy Markdown
Contributor
pr-9075-step1-provider-settingspr-9075-step2-picker-before-removalpr-9075-step3-picker-after-removal

just verified looks good to me

@maria-rcks
maria-rcks merged commit 941acb4 into pingdotgg:mainSep 2, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@StiensWout@MatthewFeroz@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(provider): drop removed custom models from the model picker - #9075

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models
Sep 2, 2026
Merged

fix(provider): drop removed custom models from the model picker#9075
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models

Conversation

@StiensWout

@StiensWoutStiensWout commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Removing a custom model in Settings did not remove it from the model picker. The row stayed in the composer picker and in every settings picker, and it survived server restarts.

The server's provider aggregator merges each refreshed snapshot with the previous one and, for every driver except OpenCode, keeps any model that the new snapshot no longer reports. Custom models are built from settings on every probe, so the removed slug was missing from the new snapshot and got re-added from the old one on every refresh, then persisted to the boot cache. The web option builder also took custom rows straight from the server snapshot instead of settings.

Custom rows are owned by settings and every snapshot already carries the full current list, so the aggregator and boot-cache merges now never retain previous custom rows. The web option builders only take built-ins from the snapshot and rebuild custom rows from settings, so a removal disappears immediately instead of waiting for the next probe. Mobile reads the server list directly and is fixed by the server change.

Focused tests cover the aggregator merge, the boot-cache hydrate, and the web option list.

Made with Claude Fable 5.1 in T3 Code.


Note

Medium Risk
Changes provider snapshot merging and model-picker assembly, which could affect model lists at runtime, but scope is limited to custom-model retention with targeted tests.

Overview
Fixes removed custom models sticking around in the composer and settings pickers (and across restarts) by treating custom model rows as settings-owned instead of mergeable snapshot history.

On the server, mergeProviderSnapshot and boot cache hydration no longer carry forward previous or cached isCustom models when the current settings-derived snapshot omits them; built-in models still get the existing “retain on empty/partial refresh” behavior. On web, getAppModelOptions / getAppModelOptionsForInstance take built-ins only from the provider snapshot and rebuild custom options from settings, so a deletion shows up immediately even if the server list is stale.

Adds regression tests for registry merge, cache hydrate, and web option lists.

Reviewed by Cursor Bugbot for commit 6f05db6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop removed custom models from provider snapshots, status cache, and model picker

  • Filters custom models out of the retained set in mergeProviderModels so a refreshed provider snapshot no longer resurrects custom models that were removed from settings
  • Excludes custom cached models during hydrateCachedProvider hydration so the status cache does not bring back custom models absent from the settings-derived fallback snapshot
  • Ignores server-reported custom models in getAppModelOptions and getAppModelOptionsForInstance, rebuilding custom rows solely from user settings so removals take effect immediately
  • Risk: any code path that relied on server-reported or cached custom models surviving a refresh will no longer see them; check mergeProviderModels in ProviderRegistry.ts and hydrateCachedProvider in providerStatusCache.ts for downstream consumers

Macroscope summarized 6f05db6.

Removing a custom model in Settings left it in the model picker. The server
aggregator merged each refreshed snapshot with the previous one and retained
every model missing from the new snapshot, so the removed custom row came
back on every probe and was persisted to the boot cache. The web picker also
took custom rows straight from the server snapshot.
Custom rows are settings-owned and every snapshot carries the full current
list, so the aggregator and boot-cache merges now never retain previous
custom rows, and the web option builders only take built-ins from the
snapshot and rebuild custom rows from settings.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6f05db6

Macroscope's review found this PR approvable — This is a focused provider model-picker bug fix that removes stale custom entries from snapshot merging, cache hydration, and UI option construction while preserving current settings and built-in models. The changes are limited, covered by targeted tests, and introduce no schema, deployment, security, billing, or static-analysis risk.

You can add or adjust custom eligibility rules. Learn more.

@MatthewFeroz

Copy link
Copy Markdown
Contributor
pr-9075-step1-provider-settingspr-9075-step2-picker-before-removalpr-9075-step3-picker-after-removal

just verified looks good to me

@maria-rcks
maria-rcks merged commit 941acb4 into pingdotgg:mainSep 2, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@StiensWout@MatthewFeroz@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(provider): drop removed custom models from the model picker - #9075

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models
Sep 2, 2026
Merged

fix(provider): drop removed custom models from the model picker#9075
maria-rcks merged 1 commit into
pingdotgg:mainfrom
StiensWout:t3code/drop-removed-custom-models

Conversation

@StiensWout

@StiensWoutStiensWout commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Removing a custom model in Settings did not remove it from the model picker. The row stayed in the composer picker and in every settings picker, and it survived server restarts.

The server's provider aggregator merges each refreshed snapshot with the previous one and, for every driver except OpenCode, keeps any model that the new snapshot no longer reports. Custom models are built from settings on every probe, so the removed slug was missing from the new snapshot and got re-added from the old one on every refresh, then persisted to the boot cache. The web option builder also took custom rows straight from the server snapshot instead of settings.

Custom rows are owned by settings and every snapshot already carries the full current list, so the aggregator and boot-cache merges now never retain previous custom rows. The web option builders only take built-ins from the snapshot and rebuild custom rows from settings, so a removal disappears immediately instead of waiting for the next probe. Mobile reads the server list directly and is fixed by the server change.

Focused tests cover the aggregator merge, the boot-cache hydrate, and the web option list.

Made with Claude Fable 5.1 in T3 Code.


Note

Medium Risk
Changes provider snapshot merging and model-picker assembly, which could affect model lists at runtime, but scope is limited to custom-model retention with targeted tests.

Overview
Fixes removed custom models sticking around in the composer and settings pickers (and across restarts) by treating custom model rows as settings-owned instead of mergeable snapshot history.

On the server, mergeProviderSnapshot and boot cache hydration no longer carry forward previous or cached isCustom models when the current settings-derived snapshot omits them; built-in models still get the existing “retain on empty/partial refresh” behavior. On web, getAppModelOptions / getAppModelOptionsForInstance take built-ins only from the provider snapshot and rebuild custom options from settings, so a deletion shows up immediately even if the server list is stale.

Adds regression tests for registry merge, cache hydrate, and web option lists.

Reviewed by Cursor Bugbot for commit 6f05db6. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop removed custom models from provider snapshots, status cache, and model picker

  • Filters custom models out of the retained set in mergeProviderModels so a refreshed provider snapshot no longer resurrects custom models that were removed from settings
  • Excludes custom cached models during hydrateCachedProvider hydration so the status cache does not bring back custom models absent from the settings-derived fallback snapshot
  • Ignores server-reported custom models in getAppModelOptions and getAppModelOptionsForInstance, rebuilding custom rows solely from user settings so removals take effect immediately
  • Risk: any code path that relied on server-reported or cached custom models surviving a refresh will no longer see them; check mergeProviderModels in ProviderRegistry.ts and hydrateCachedProvider in providerStatusCache.ts for downstream consumers

Macroscope summarized 6f05db6.

Removing a custom model in Settings left it in the model picker. The server
aggregator merged each refreshed snapshot with the previous one and retained
every model missing from the new snapshot, so the removed custom row came
back on every probe and was persisted to the boot cache. The web picker also
took custom rows straight from the server snapshot.
Custom rows are settings-owned and every snapshot carries the full current
list, so the aggregator and boot-cache merges now never retain previous
custom rows, and the web option builders only take built-ins from the
snapshot and rebuild custom rows from settings.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6f05db6

Macroscope's review found this PR approvable — This is a focused provider model-picker bug fix that removes stale custom entries from snapshot merging, cache hydration, and UI option construction while preserving current settings and built-in models. The changes are limited, covered by targeted tests, and introduce no schema, deployment, security, billing, or static-analysis risk.

You can add or adjust custom eligibility rules. Learn more.

@MatthewFeroz

Copy link
Copy Markdown
Contributor
pr-9075-step1-provider-settingspr-9075-step2-picker-before-removalpr-9075-step3-picker-after-removal

just verified looks good to me

@maria-rcks
maria-rcks merged commit 941acb4 into pingdotgg:mainSep 2, 2026
23 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@StiensWout@MatthewFeroz@maria-rcks