Repository navigation
Merged
Conversation
…oxy env fields Finding 1255: since #2347 only model baseUrl and request.proxy.url were checked for a user name or password. Configuration and Preset saves now also refuse one in proxy.proxyUrl, channels.<channel>.proxy and its accounts' proxy, MCP server urls (mcp and nodeHost.mcp), and *_PROXY variables in env and env.vars (any case; a value without a scheme is read as http). Stored documents still read. Moves the oldest breaking-changes notice to the archive to make room.
…rl or api variables
Finding 1256: an http(s) baseUrl whose written authority is empty
(https:///v1, as an empty Preset variable leaves it) parsed with its first
path segment as the host; it is now refused on every write.
Finding 1257: a number or boolean Preset variable that is the whole baseUrl
or api saved and failed every launch. The Preset render now reports the
declared type of a whole-value variable (unresolvedType) and the model
provider rule refuses a non-string one at save.
Review nit on 1255: a proxy environment name that waits on a Preset variable
({{ vars.x }}_PROXY) is matched as the text around it. The notice names the
new fields and that the next deployment fails until edited.
…ploy Review nit: deployment re-checks the native credential slots, not the model provider baseUrl rule, so a stored empty-host baseUrl still deploys. Name the baseUrl refusal message and the steps for findings 1256 and 1257.
Contributor
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review blockedAutomated review did not run, so no review verdict was produced. Reason: The input-safety check rejected material in this revision. No detected value, path, or scanner output is reproduced here. Automatic review is on hold, including after source changes. Request a fresh re-review after resolving the failure; maintainers can also release the hold through an intentional scanner-policy update. Next step: If this is a genuine credential, remove and rotate it. If it is an intentional test fixture, a maintainer must review and qualify it. |
freeqaz
had a problem deploying
to
integration-qa-pr
October 13, 2026 17:17 — with
GitHub Actions
Error
freeqaz
had a problem deploying
to
integration-qa-pr
October 13, 2026 17:17 — with
GitHub Actions
Error
The notice moved to breaking-changes-archive.md to make room; the docs build refused the stale anchor.
This was referenced Oct 13, 2026
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Three low-severity gaps in Configuration and Preset save checks.
URL userinfo in other native URL fields. Since #2347, saves refuse a user name or password only in a model
baseUrlandrequest.proxy.url(urlHoldsUserinfo). These other native URL fields carry the same credential, because a proxy sends it asProxy-Authorization, and they still saved it:proxy.proxyUrl(Gateway egress proxy)channels.<channel>.proxy,channels.<channel>.accounts.<id>.proxychannels.proxyUrland its directory proxy, not the Configuration.mcp.servers.<name>.url,nodeHost.mcp.servers.<name>.urlHTTPS_PROXY,HTTP_PROXY,ALL_PROXY(any case) inenv/env.varsrequireHarnessCredentialBindingchecks only model provider credential names.Empty
baseUrlhost. A PresetbaseUrlofhttps://{{ vars.h }}/v1withhempty (an empty default or an empty launch input) rendershttps:///v1. The URL parser readsv1as the host, and Configuration create accepted it.Non-string variable as the whole
baseUrlorapi.baseUrl: "{{ vars.n }}"orapi: "{{ vars.n }}"with a number or boolean variable saved, then failed every launch.Change
Userinfo
validateModelCredentialReferences(model-auth.ts) refuses userinfo in the fields above on every write. It uses the sharedurlHoldsUserinfocheck with the same variable handling: the Preset text around{{ vars.x }}placeholders,${VAR}references and:-fallbacks.Configuration field /env/vars/HTTPS_PROXY carries a user name or password in the URL. Remove it, or make the whole URL a ${NAME} reference.*_PROXYname in any case (HTTPS_PROXY,all_proxy,npm_config_proxy) exceptNO_PROXY. A name that waits on a Preset variable ({{ vars.x }}_PROXY) is matched on the text around the variable. A value without a scheme is also checked ashttp://<value>, which is how curl and git read it.Empty host
isRuntimeUrl(model-provider-settings.ts) refuses an http(s) URL whose written authority is empty: three or more slashes or backslashes after the scheme.Non-string variables
presetTemplateDefaultsWithPlaceholdersalso returnsunresolvedType(path), the declared type of an unfilled variable that makes up the whole value at that path.ConfigurationValidationOptions.unresolvedType, and Preset admission now refuses a number or booleanbaseUrlorapiwith the existing message.Stored documents and docs
Verification
Configuration and Preset saves refuse a user name or password in proxy, channel proxy, MCP server and proxy environment URLs:NO_PROXY, an@in a path, and variable hosts.Preset and Configuration saves refuse a baseUrl or api that a variable fills with no host or no string:baseUrlorapivariables, including on a model row.contextWindowstill saves.origin/mainsources. All of them were accepted there, and all are refused with this change.tests/integration/configuration-controller.test.mjstests/integration/presets-controller.test.mjstests/conformance/kubernetes-configuration.test.mjstests/conformance/kubernetes-compute.test.mjstests/conformance/presets.test.mjstsc --build, plus eslint and prettier on the touched files: clean.Risks
https:///host/v1keeps deploying, but an edit that keeps it is refused.https:/v1andhttps:v1with zero or one slash (also hostv1; refusing them would break URLs that work today)envmapgit merge-tree.