fix(runtime): treat a blank implicit agent-configuration variable as unset - #1207
Merged
Conversation
…unset 17.6.0 made caCertificate and disableTlsVerification implicit, so every integration now reads them from the environment whether or not it declared them. The conversion those values go through is unchanged since 2020: an environment variable set to an empty string is not undefined, so it never reaches the optional branch and instead fails type conversion. For a boolean that throws IntegrationLocalConfigFieldTypeMismatchError and aborts the run before the first step. Nothing is producing blank values today — the 16 integrations that declare disableTlsVerification run fine, so the platform omits the variable rather than writing it empty — but the exposure went from those 16 to all 88, none of which asked for the field. Treat a blank value as unset for a field the integration did not declare; a declared field keeps the current behaviour, since there the integration owns the contract. Also replaces the precedence test from #1203, which declared the field with the same shape as the implicit definition and so passed either way. The declaration is now observable: declared without `optional` and with no environment variable set, the loader must throw rather than resolve to undefined.
VDubber
approved these changes
Aug 18, 2026
Merged
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
17.6.0(#1203) madecaCertificateanddisableTlsVerificationimplicit, so every integration now reads them from the environment whether or not it declared them.The conversion those values go through is unchanged since the original 2020 commit: an environment variable set to an empty string is not
undefined, so it never reaches theconfig.optionalbranch and instead falls through to type conversion. For a boolean, anything that is not exactlytrueorfalsethrowsIntegrationLocalConfigFieldTypeMismatchError— which, on a field consulted before the first step runs, aborts the whole run.Nothing is producing blank values today. The 16 integrations that declare
disableTlsVerificationrun fine in production, so the platform omits the variable rather than writing it empty. What changed in17.6.0is the exposure: from those 16 integrations to all 88, none of which asked for the field.Change
A blank (or whitespace-only) value is treated as unset for a field the integration did not declare. Once an integration declares the field it owns the contract, so a value it cannot parse stays an error rather than being silently ignored.
Also
Replaces the precedence test added in #1203. It declared
caCertificateas{ type: 'string' }— the same shape as the implicit definition — with the environment variable set, so it produced an identical result either way and would have passed without the merge it was meant to cover. The declaration is now observable: declared withoutoptionaland with no environment variable set, the loader has to throw instead of resolving toundefined.Testing
packages/integration-sdk-runtimeis green, 305/305. The two new blank-value tests were confirmed to fail with the guard removed and the rest of the suite still passing, so they are pinned to this behaviour rather than passing incidentally.