Skip to content

Surface actionable diagnostic when TypeScript codegen generator is dropped by load failure - #18125

Closed
Sébastien Ros (sebastienros) wants to merge 7 commits into
mainfrom
sebastienros/ts-apphost-codegen-error
Closed

Surface actionable diagnostic when TypeScript codegen generator is dropped by load failure#18125
Sébastien Ros (sebastienros) wants to merge 7 commits into
mainfrom
sebastienros/ts-apphost-codegen-error

Conversation

@sebastienros

@sebastienrosSébastien Ros (sebastienros) commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Description

When the configured Aspire SDK is out of sync with the installed CLI, running or restoring a TypeScript (Node.js) AppHost could fail with a cryptic, unactionable error:

Failed to run TypeScript (Node.js) AppHost: No code generator found for language: TypeScript. No code generators were discovered in any loaded assembly.

The root cause is a binary mismatch between the bundled apphost server and the integration assemblies on disk. The TypeScript code generator assembly (from the SDK packages) references an Aspire.TypeSystem assembly that the running apphost server cannot provide (for example, an older bundled server that predates that assembly version). During assembly discovery, CodeGeneratorResolver.DiscoverGenerators calls GetTypes(), hits a ReflectionTypeLoadException (whose loader exception is a FileNotFoundException for Aspire.TypeSystem), and silently drops the TypeScript generator. The downstream CodeGenerationService.GenerateCode then threw a plain ArgumentException, which the diagnostic builder did not classify, so the existing actionable IncompatibleAspireSdk diagnostic (with a "run aspire update" remediation hint) was never emitted. The bare exception then propagated across StreamJsonRpc to the CLI and surfaced as a raw stack trace / "unexpected error".

This change routes the swallowed load failure into that existing actionable diagnostic so the user instead sees:

Failed to run TypeScript (Node.js) AppHost: Aspire SDK code generation failed because the installed Aspire CLI appears to be incompatible with the configured SDK version. Run 'aspire update' to align the CLI and SDK and try again.

Approach

The fix is contained entirely within Aspire.Hosting.RemoteHost (the apphost server, which is bundled into the CLI). It has three parts:

  • CodeGeneratorResolver now retains the ReflectionTypeLoadExceptions it swallows during discovery (via a new DiscoveryResult and GetDiscoveryLoadFailures()), instead of discarding them.
  • CodeGenerationService.GenerateCode chains the first retained load failure as the inner exception of the ArgumentException it throws when no generator is found.
  • CodeGenerationDiagnostic recognizes FileNotFoundException in the exception chain (in addition to the existing reflection-load cases) and builds the structured IncompatibleAspireSdk RPC error that the CLI already renders with the actionable "run aspire update" message.

Because both the affected server code and the CLI client catch path (AppHostRpcClient.InvokeCodeGenerationAsync) are shared, this applies to every command that triggers code generation (aspire run, aspire restore, etc.). No public API or codegen exports coverage changed; the CLI-side rendering path was already in place.

Verification

In addition to the unit tests, I ran a functional A/B test against a real TypeScript AppHost configured with a daily SDK, injecting the same Aspire.TypeSystem load failure. With the fix, the message flips from the cryptic "No code generator found..." to the actionable "...incompatible with the configured SDK version. Run 'aspire update'...". This was verified end-to-end via aspire run; aspire restore exercises the same shared RPC and client paths.

Fixes#18110
Fixes#17910

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

…failure
A TypeScript AppHost whose configured SDK version diverges from the installed
CLI fails with a cryptic "No code generator found for language: TypeScript".
The real cause is a binary mismatch: the code-generation assembly references an
Aspire.TypeSystem version that is absent on disk, so type discovery raises a
ReflectionTypeLoadException that CodeGeneratorResolver swallows. The generator is
silently dropped, and GenerateCode then throws a plain ArgumentException that the
diagnostic builder does not classify, so the actionable IncompatibleAspireSdk
("run aspire update") diagnostic the CLI knows how to render is never emitted.
- CodeGeneratorResolver now retains the swallowed ReflectionTypeLoadExceptions and
exposes them via GetDiscoveryLoadFailures().
- GenerateCode chains the captured load failure as the inner exception when no
generator is found, so the existing catch path produces the IncompatibleAspireSdk
diagnostic with the version-alignment remediation hint.
- CodeGenerationDiagnosticBuilder recognizes FileNotFoundException (the actual
loader exception for a missing dependency assembly) and captures its file name.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 19:31

CopilotAI 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.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

@sebastienros
Sébastien Ros (sebastienros) changed the base branch from release/13.4 to mainJune 11, 2026 19:31
@github-actions

github-actionsBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 18125

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 18125"

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 19:42

CopilotAI 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.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

…mbly
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Only treat a bare FileNotFoundException as an incompatible-SDK signal when its
FileName is an assembly display name, so a genuine missing-file IO error during
code generation is not misreported as a version mismatch. FNFEs inside an RTLE's
loader exceptions are still always treated as assembly-bind failures.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 19:52
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

CopilotAI 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.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@sebastienros

Copy link
Copy Markdown
ContributorAuthor

PR #18125 - Functional Testing Report

PR:#18125 - TypeScript AppHost codegen failure -> actionable diagnostic
Head commit tested:4aa3bcaea6
Dogfood CLI version:13.5.0-pr.18125.g4aa3bcae (matches PR head g4aa3bcae) ✅
Platform: macOS arm64
Mode: Local (isolated install, no container)

What the PR fixes

When the installed CLI is older than the configured SDK, the bundled apphost server's
Aspire.Hosting.CodeGeneration.TypeScript references an Aspire.TypeSystem assembly the
server cannot load. CodeGeneratorResolver.DiscoverGenerators swallowed the resulting
ReflectionTypeLoadException (loader exception = FileNotFoundException for
Aspire.TypeSystem), so the TypeScript generator was silently dropped and the user got a
cryptic No code generator found for language: TypeScript instead of the existing actionable
IncompatibleAspireSdk ("run aspire update") diagnostic.

Scenario 1 - No regression on the SHIPPED PR artifact (PASS)

Installed the PR CLI to an isolated dir and ran aspire restore (issue #17910's command,
pure codegen trigger) against a minimal TypeScript AppHost (Aspire.Hosting + Aspire.Hosting.Redis).

⚙️ Restoring SDK code...
✅ SDK code restored successfully for apphost.mts.

Generated .aspire/modules/: aspire.mts (3.0 MB), base.mts, transport.mts,
.codegen-hash. Exit code 0. The TypeScript generator was discovered and ran normally -
the resolver/discovery refactor does not regress the healthy codegen path.

Note: the shipped artifact is the newest build, so its bundled server ships a matching
Aspire.TypeSystem and cannot naturally reproduce the version-mismatch failure. The
shipped server assemblies are also packed inside a single-file aspire-managed executable,
so loose-DLL injection against the artifact is not possible. The diagnostic flip is therefore
proven deterministically against the real production code (below).

Scenario 2 - Diagnostic flip proven against real production code (PASS)

The fix lives in Aspire.Hosting.RemoteHost production types
(CodeGeneratorResolver, CodeGenerationService.GenerateCode, CodeGenerationDiagnosticBuilder).
Re-ran the focused tests that drive these exact types on the current head:

Test run summary: Passed! total: 23 failed: 0

Key deterministic proof - ServiceErrorMessageTests.GenerateCode_GeneratorDroppedByLoadFailure_ThrowsIncompatibleSdkDiagnostic:
reproduces the exact bug shape (TypeScript generator dropped because
FileNotFoundException("Aspire.TypeSystem, Version=42.42.42.42") was the loader exception)
and asserts the result is now LocalRpcException with
ErrorCode == IncompatibleAspireSdk and a non-empty RemediationHint - i.e. the cryptic
ArgumentException has flipped to the actionable update path.

Supporting coverage:

  • ResolverDiagnosticsTests - resolver captures swallowed load failures via Discovery.LoadFailures.
  • CodeGenerationDiagnosticBuilderTests.TryCreateRpcException_FileNotFoundLoaderException_CapturesMissingAssemblyName
    • FNFE loader exception classified + missing assembly name captured.
  • FNFE over-broadening guard (addressed from review):
    • ..._StandaloneFileNotFound_PlainFilePath_IsNotClassified -> returns null (a genuine missing
      file is NOT misreported as an SDK mismatch).
    • ..._StandaloneFileNotFound_AssemblyDisplayName_IsClassified -> a standalone FNFE whose
      file name is an assembly display name (Version/PublicKeyToken) IS classified.

Verdict

  • Healthy TypeScript codegen works end-to-end on the shipped PR artifact (no regression).
  • The targeted failure shape now produces the actionable IncompatibleAspireSdk diagnostic
    instead of the cryptic message, with a guard preventing genuine missing-file IO errors from
    being misclassified.

PR is functionally sound for its stated intent (fixes #18110, #17910).

@github-actions

Copy link
Copy Markdown
Contributor

Re-running the failed jobs in the CI workflow for this pull request because 1 job was identified as retry-safe transient failures in the CI run attempt.
GitHub was asked to rerun all failed jobs for that attempt, and the rerun is being tracked in the rerun attempt.
The job links below point to the failed attempt jobs that matched the retry-safe transient failure rules.

@sebastienros
Sébastien Ros (sebastienros) marked this pull request as ready for review June 11, 2026 23:13
CopilotAI review requested due to automatic review settings June 11, 2026 23:13

CopilotAI 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.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM. The diagnostic chain is well-structured — the heuristic to distinguish assembly-bind FileNotFoundException from plain file IO is careful, and the test coverage is thorough across all the relevant exception shapes.

@davidfowl

Copy link
Copy Markdown
Collaborator

When the configured Aspire SDK is out of sync with the installed CLI, running or restoring a TypeScript (Node.js) AppHost could fail with a cryptic, unactionable error:

We need to harden this, not just fix the error. I think we need a breakdown of why this is happening. Unless there was some fundamental contract breakage between the apphost server between 13.4 and 13.5 (which I am not aware of), this should not happen. The version of Aspire.Hosting should come from the apphost, the apphost server's version should not impact the ALC where integrations are loaded.

@davidfowlDavid Fowler (davidfowl) 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.

No issues with improving the error but I think there's more to fix here, this scenario should not be broken.

Replace the negative/substring assertions with a single Assert.Equal against
the full SafeMessage so the test pins the actionable message verbatim.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

CLI E2E Tests unknown — 115 passed, 0 failed, 2 unknown (commit b01e4f0)

View all recordings
-TestDetail
AddPackageInteractiveWhileAppHostRunningDetachedRecording · Job · CLI logs
AddPackageWhileAppHostRunningDetachedRecording · Job · CLI logs
AgentCommands_AllHelpOutputs_AreCorrectRecording · Job · CLI logs
AgentInitCommand_DefaultSelection_InstallsDefaultSkillsRecording · Job · CLI logs
AgentInitCommand_MigratesDeprecatedConfigRecording · Job · CLI logs
AgentInit_NonInteractive_BundleOnlySkillsNotInCatalogRecording · Job · CLI logs
AgentMcpListResources_ExcludesResourceMarkedWithExcludeFromMcpRecording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterAppRecording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhostRecording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_IsolatedRecording · Job · CLI logs
AllPublishMethodsBuildDockerImagesRecording · Job · CLI logs
AspireAddAndStartWorkAgainstLegacyAppHostTsRecording · Job · CLI logs
AspireAddPackageVersionToDirectoryPackagesPropsRecording · Job · CLI logs
AspireInitSingleFileAppHostRunsViaDotnetRunAppHostRecording · Job · CLI logs
AspireInit_ExistingAppHostDir_RecreatesNuGetConfigKeepsFilesRecording · Job · CLI logs
AspireInit_SolutionFile_BuildsAgainstChannelHiveRecording · Job · CLI logs
AspireStartUpdatesStaleTypeScriptAppHostPathRecording · Job · CLI logs
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesPropsRecording · Job · CLI logs
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrentRecording · Job · CLI logs
Banner_DisplayedOnFirstRunRecording · Job · CLI logs
Banner_DisplayedWithExplicitFlagRecording · Job · CLI logs
Banner_NotDisplayedWithNoLogoFlagRecording · Job · CLI logs
CertificatesClean_RemovesCertificatesRecording · Job · CLI logs
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificateRecording · Job · CLI logs
CertificatesTrust_WithUntrustedCert_TrustsCertificateRecording · Job · CLI logs
ConfigSetGet_CreatesNestedJsonFormatRecording · Job · CLI logs
CreateAndRunAspireStarterProjectRecording · Job · CLI logs
CreateAndRunAspireStarterProjectWithBundleRecording · Job · CLI logs
CreateAndRunEmptyAppHostProjectRecording · Job · CLI logs
CreateAndRunJavaEmptyAppHostProjectRecording · Job · CLI logs
CreateAndRunJsReactProjectRecording · Job · CLI logs
CreateAndRunPolyglotAppHostWithDevLocalhostUrlsRecording · Job · CLI logs
CreateAndRunPythonReactProjectRecording · Job · CLI logs
CreateAndRunTypeScriptEmptyAppHostProjectRecording · Job · CLI logs
CreateAndRunTypeScriptStarterProjectRecording · Job · CLI logs
CreateJavaAppHostWithViteAppRecording · Job · CLI logs
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchainRecording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTracesRecording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhostRecording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTracesRecording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhostRecording · Job · CLI logs
DeployK8sBasicApiServiceRecording · Job · CLI logs
DeployK8sWithExternalHelmChartRecording · Job · CLI logs
DeployK8sWithGarnetRecording · Job · CLI logs
DeployK8sWithMongoDBRecording · Job · CLI logs
DeployK8sWithMySqlRecording · Job · CLI logs
DeployK8sWithPostgresRecording · Job · CLI logs
DeployK8sWithRabbitMQRecording · Job · CLI logs
DeployK8sWithRedisRecording · Job · CLI logs
DeployK8sWithSqlServerRecording · Job · CLI logs
DeployK8sWithValkeyRecording · Job · CLI logs
DeployTypeScriptAppToKubernetesRecording · Job · CLI logs
DescribeCommandResolvesReplicaNamesRecording · Job · CLI logs
DescribeCommandShowsRunningResourcesRecording · Job · CLI logs
DetachFormatJsonProducesValidJsonRecording · Job · CLI logs
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstanceRecording · Job · CLI logs
DoPublishAndDeployListStepsWorkRecording · Job · CLI logs
DocsCommand_RendersInteractiveMarkdownFromLocalSourceRecording · Job · CLI logs
DoctorCommand_DetectsDeprecatedAgentConfigRecording · Job · CLI logs
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchainRecording · Job · CLI logs
DoctorCommand_WithSslCertDir_ShowsTrustedRecording · Job · CLI logs
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrustedRecording · Job · CLI logs
DotNetRunFileBasedAppHostUsesAspireCliBundleRecording · Job · CLI logs
DotNetRunProjectAppHostUsesAspireCliBundleRecording · Job · CLI logs
GatewayWithoutExternalEndpoint_FailsPublishWithGuidanceRecording · Job · CLI logs
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchainRecording · Job · CLI logs
GlobalMigration_HandlesCommentsAndTrailingCommasRecording · Job · CLI logs
GlobalMigration_HandlesMalformedLegacyJsonRecording · Job · CLI logs
GlobalMigration_PreservesAllValueTypesRecording · Job · CLI logs
GlobalMigration_SkipsWhenNewConfigExistsRecording · Job · CLI logs
GlobalSettings_MigratedFromLegacyFormatRecording · Job · CLI logs
IngressWithoutExternalEndpoint_FailsPublishWithGuidanceRecording · Job · CLI logs
InitTypeScriptAppHost_AugmentsExistingViteRepoInWorkspaceSubdirectoryRecording · Job · CLI logs
InteractiveCSharpInitCreatesExpectedFilesRecording · Job · CLI logs
InvalidAppHostPathWithComments_IsHealedOnRunRecording · Job · CLI logs
JavaScriptHostingApisRunFromTypeScriptAppHostRecording · Job · CLI logs
LatestCliCanStartStableChannelAppHostRecording · Job · CLI logs
LatestCliCanStartStableChannelTypeScriptAppHostRecording · Job · CLI logs
LegacySettingsMigration_AdjustsRelativeAppHostPathRecording · Job · CLI logs
LogsCommandShowsResourceLogsRecording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterAppRecording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterAppIsolatedRecording · Job · CLI logs
ProcessCommandCallbackReceivesCliArgumentsRecording · Job · CLI logs
PsCommandListsRunningAppHostRecording · Job · CLI logs
PsFormatJsonOutputsOnlyJsonToStdoutRecording · Job · CLI logs
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifactsRecording · Job · CLI logs
PublishWithConfigureEnvFileUpdatesEnvOutputRecording · Job · CLI logs
PublishWithDockerComposeServiceCallbackSucceedsRecording · Job · CLI logs
PublishWithoutOutputPathUsesAppHostDirectoryDefaultRecording · Job · CLI logs
ResourceCommand_FailedExec_ShowsLogPathAndLogHasEntriesRecording · Job · CLI logs
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutputRecording · Job · CLI logs
RestoreGeneratesSdkFilesRecording · Job · CLI logs
RestoreGeneratesSdkFiles_WithConfiguredToolchainRecording · Job · CLI logs
RestoreRefreshesGeneratedSdkAfterAddingIntegrationRecording · Job · CLI logs
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypesRecording · Job · CLI logs
RunFromParentDirectory_UsesExistingConfigNearAppHostRecording · Job · CLI logs
RunReportsSyntaxErrorsForDotNetAppHostRecording · Job · CLI logs
RunReportsSyntaxErrorsForTypeScriptAppHostRecording · Job · CLI logs
SecretCrudOnDotNetAppHostRecording · Job · CLI logs
SecretCrudOnTypeScriptAppHostRecording · Job · CLI logs
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannelsRecording · Job · CLI logs
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssetsRecording · Job · CLI logs
StartReportsSyntaxErrorsForDotNetAppHostRecording · Job · CLI logs
StartReportsSyntaxErrorsForTypeScriptAppHostRecording · Job · CLI logs
StopAllAppHostsFromAppHostDirectoryRecording · Job · CLI logs
StopJavaPolyglotAppHostUsingApphostDirectoryRecording · Job · CLI logs
StopNonInteractiveSingleAppHostRecording · Job · CLI logs
StopTypeScriptPolyglotAppHostUsingApphostDirectoryRecording · Job · CLI logs
StopWithNoRunningAppHostExitsSuccessfullyRecording · Job · CLI logs
TerminalAttachFrontend_ShowsViteHelpAndDetachesRecording · Job · CLI logs
TypeScriptAppHostRunDoesNotDeadlockWhenLazyOptionsInvokeAsyncCallbackRecording · Job · CLI logs
TypeScriptAppHostWithVite_AllowsDifferentGuestPkgManagerRecording · Job · CLI logs
UnAwaitedChainsCompileWithAutoResolvePromisesRecording · Job · CLI logs
UpdateToStable_CSharpEmptyAppHost_KeepsConfigChannelRecording · Job · CLI logs
UpdateToStable_CSharpSingleFileInit_KeepsConfigChannelRecording · Job · CLI logs
UpdateToStable_TypeScriptSingleFileInit_KeepsConfigChannelRecording · Job · CLI logs
UpdateToStable_TypeScript_PreviewsStablePkgsAndKeepsChannelRecording · Job · CLI logs

📹 Recordings uploaded automatically from CI run #27423488724

@radical

Copy link
Copy Markdown
Member

No issues with improving the error but I think there's more to fix here, this scenario should not be broken.

Should this be draft till then?

Sébastien Ros (sebastienros) added a commit that referenced this pull request Jun 12, 2026
….0.0.0
The shipped 1.0.0.0 freeze fixed old-CLI + new-SDK skew but regressed the common
backward-compat direction (new CLI + stable-channel SDK), where the bundled
Aspire.TypeSystem (1.0.0.0) could not satisfy the codegen assemblies' strong-named
reference to the real released version (e.g. 13.4.3.0). The CLR only binds when the
loaded copy's version is >= the requested version, so a single frozen value must sit
ABOVE every shipped real version to satisfy the must-work direction. Freeze at
10001.0.0.0 (a '1.0' seeded high; major slot is the breaking-change bump axis).
- Aspire.TypeSystem.csproj: AssemblyVersion 1.0.0.0 -> 10001.0.0.0; drop
DisablePackageBaselineValidation (10001 >= package baseline, so CP0003 passes);
rewrite rationale comment.
- IntegrationLoadContext: explain the bundled high copy satisfies any lower/equal
reference; residual old-CLI case is #18125's actionable 'update your CLI' path.
- AssemblyLoader.WarnIfSharedAssemblyMismatch: warn only when bundled < libs (the
only failing order); bundled >= libs binds and logs at Debug.
- AtsSharedContractSurfaceTests / SharedContractSurface: reframe the freeze guard
around constant-version binding (content compat, not version) and reflow comments.
Fixes the regression behind #18110 and #17910; complements the #18125 diagnostics,
which still surface the genuine new-member case (already-shipped old CLI + post-freeze
codegen) as an actionable error.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@sebastienros
Sébastien Ros (sebastienros) marked this pull request as draft June 12, 2026 22:45
@sebastienros
Sébastien Ros (sebastienros) deleted the sebastienros/ts-apphost-codegen-error branch August 11, 2026 17:23
@microsoft-github-policy-servicemicrosoft-github-policy-serviceBot added this to the 13.6 milestone Aug 11, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@sebastienros@davidfowl@radical@JamesNK