Skip to content

Merge v13.3.4 to main (replaces #17139)#17326

Merged
joperezr merged 56 commits into
mainfrom
joperezr/merge-v13.3.4-to-main
May 21, 2026
Merged

Merge v13.3.4 to main (replaces #17139)#17326
joperezr merged 56 commits into
mainfrom
joperezr/merge-v13.3.4-to-main

Conversation

@joperezr
Copy link
Copy Markdown
Member

This PR replaces #17139 with a much smaller, reviewable back-merge of the v13.3 release into main.

Background

The original PR (#17139) showed 527 file changes / 24K insertions — a misleading three-dot diff that included all release-branch commits since the v13.3 branch point, including ~36 backports whose content was already on main with different commit SHAs. That made it impractical to review.

This PR is rebuilt from the v13.3.4 tag (so it intentionally excludes the still-unreleased 13.3.5 work that sits on release/13.3), with conflict resolution applied to keep main on the 13.4.0 unstable build.

Resolution policy

Category Policy
eng/Versions.props, eng/Version.Details.xml, Directory.Packages.Helix.props, polyglot test-*-playground.sh, ci.yml, pipeline YAMLs, Kubernetes E2E [ActiveIssue] tags Take main — keep main unstable at 13.4.0; do not stabilize, do not pin Helix packages, do not skip kubernetes E2E for the stabilization gap
src/*/api/*.cs and src/*/api/*.txt Take v13.3.4 — bring forward the regenerated public API baseline so main reflects shipped 13.3 APIs
Real source/test conflicts (~45 files) Take main — main has forward-progress on top of the backported code; backport content already exists on main with different SHAs
Verify snapshots (3 polyglot snapshots) Take main — main snapshots reflect main's current code generators

What ends up flowing to main

What does NOT flow to main (intentionally)

Validation

  • ./build.cmd /p:SkipNativeBuild=true succeeds.
  • DestroyCommandTests, DoCommandTests, TelemetryLogsCommandTests, TelemetryTracesCommandTests all pass (56/56).

Closes #17139.

joperezr and others added 30 commits April 29, 2026 12:34
…6566)

* [release/13.3] Stabilizing builds in preparation for 13.3 release

- Flip StabilizePackageVersion default to true in eng/Versions.props
- Drop the compute_version_suffix step from ci.yml so PR builds use the stabilized version
- Pin Aspire.AppHost.Sdk import to 13.3.0 in RepoTesting.targets
- Pin all stabilizable Aspire packages to 13.3.0 in Directory.Packages.Helix.props
  (packages whose csproj sets SuppressFinalPackageVersion=true keep $(PackageVersion))
- Skip preview-only AppHosts (Kusto, Foundry, Keycloak, Kubernetes, Maui) in the
  TypeScript polyglot validation script (see #15335)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* [release/13.3] Skip tests blocked by suppressed-package stabilization gap

Two test buckets cannot run on a stabilized branch because they exercise NuGet
restore against Aspire.Hosting.* packages that have SuppressFinalPackageVersion=true
and therefore only ship as prerelease (e.g. 13.3.0-dev.<sha>) — but the stabilized
build asks for >= 13.3.0 stable.

Polyglot SDK Validation:
- Add 'Aspire.Hosting' to the skip list in test-typescript-playground.sh (it
  transitively depends on Aspire.Hosting.Azure.Kubernetes via aspire.config.json).
- Apply the same skip block to test-python-playground.sh and test-java-playground.sh
  (the 13.2 PR only updated the TypeScript script).

Cli.EndToEnd-KubernetesDeploy* (11 files):
- Mark each [Fact] with [ActiveIssue(#15335)]. The proper fix is the dynamic
  version computation tracked by #15335 (PR #15681). When that lands the
  ActiveIssue tags can be removed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e strings (#16584)

Replace HTML-embedded resource strings with plain label strings and
move the <strong> formatting into Razor markup directly. This eliminates
the need for MarkupString casts and string.Format for these toolbar items.
#16583)

* Ensure compute environment prepare waits for validation

When Foundry is used with another compute environment, the compute environments get confused about who takes ownership of which compute.

Make all compute-environment prepare pipeline steps depend on the shared validate-compute-environments step so before-start cannot race environment validation.

Add diagnostics coverage for a mixed Foundry hosted-agent and Azure Container Apps app.

Cover deployment target lookup returning null for a different compute environment.

* Fix tests

---------

Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
…ifiers (#16564)

* Initial plan

* Normalize app service app insights bicep identifiers

Agent-Logs-Url: https://github.com/microsoft/aspire/sessions/e848458a-5173-4241-b442-80d01de3d5c2

Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com>

* Preserve app insights bicep suffix separators

Agent-Logs-Url: https://github.com/microsoft/aspire/sessions/e848458a-5173-4241-b442-80d01de3d5c2

Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com>

* Address PR feedback

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com>
Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
* Fix TypeScript package manager detection

Treat package-lock.json as an npm marker and limit parent directory package manager probing to the AppHost directory's direct parent. Log the marker used to select the TypeScript AppHost package manager.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix TypeScript AppHost path comparisons

Use OS-appropriate path comparison when deciding whether to skip root and home parent directories for package manager detection.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Preserve same-directory yarn marker precedence

Keep yarn markers ahead of package-lock.json within the same candidate directory while still allowing a local npm lockfile to beat parent-directory yarn markers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove yarn directory package manager hint

Only use file-based yarn markers for TypeScript AppHost package manager detection and update the resolver test accordingly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address TypeScript toolchain review feedback

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Sebastien Ros <sebastienros@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix Windows detached AppHost launcher

Use the Windows DETACHED_PROCESS creation flag when launching the detached child CLI process so aspire start is not tied to the launching console lifetime. Keep the existing new process group and restricted handle inheritance behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Clarify Windows detach launcher comment

Document that the detached Windows flag combination follows established daemonization patterns used by libuv/Node.js and GitHub CLI, without over-claiming Docker parity.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove Windows detach unit test

Remove the unit test coverage for the Windows detached process creation flags while keeping the implementation change and manual repro validation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: David Fowler <davidfowl@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ne (#16582)

* Validate build-only container references in the pipeline

Add the publish/deploy validation step and implement the opt-out by clearing its RequiredBySteps during pipeline configuration.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix tests

* PR feedback

Move DisableBuildOnlyContainerValidation to the Pipeline.

* PR feedback

* Fix tests

* Address build-only container validation feedback

Ensure manifest publishing runs the build-only container validation step and strengthen tests to cover mixed consumed and unconsumed build-only containers.

* Revert publish-manifest changes.

* Apply suggestion from @eerhardt

---------

Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Normalize CLI yes/no prompts

Use single-key confirmation prompts for CLI yes/no choices so y/n answers are accepted without arrow-key selections while preserving [Y/n] and [y/N] defaults.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Prefer local hive versions in aspire add

Treat the configured local hive as a local build channel so aspire add keeps generated AppHosts on the same CLI/SDK version and writes the local NuGet source when needed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Revert "Prefer local hive versions in aspire add"

This reverts commit 6821787.

---------

Co-authored-by: Sebastien Ros <sebastienros@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(publishing): stage native CLI tool packages

Download RID-specific Aspire.Cli tool packages from native build artifacts and stage them in the shipping packages directory so publishing can include them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(publishing): validate CLI package RIDs

Compare discovered CLI archives and RID-specific tool packages against the expected clipack RIDs, require exactly one pointer package, and summarize publish output without listing every NuGet package.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Ankit Jain <radical@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… avoid CLI log overlap (#16596)

* Rename pipeline --log-level to --pipeline-log-level to avoid CLI log overlap

The pipeline commands (do, publish, deploy, destroy) had a --log-level option
that collided with the global CLI --log-level/-l option. When a user passed
--log-level Debug to control pipeline verbosity, Program.ParseLoggingOptions()
also picked it up and cranked CLI internal logging to Debug, flooding output
with mixed noise.

Rename the pipeline-specific option to --pipeline-log-level so the two
concerns are cleanly separated:
- --log-level / -l (global, recursive) controls CLI internal logging
- --pipeline-log-level (pipeline commands only) controls pipeline step output

The value is still forwarded as --log-level to the AppHost process, which is
correct since the AppHost has its own --log-level parameter.

Also adds tests verifying the separation and argument forwarding.

* Rename s_logLevelOption to s_pipelineLogLevelOption
… symlinks fails (#16618)

* Fallback to junctions if either creating OR evaluating symlinks fails

* Update src/Aspire.Cli/Utils/ReparsePoint.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update outdated test verified results

* Regenerate the verified file

---------

Co-authored-by: David Negstad <David.Negstad@microsoft.com>
Co-authored-by: David Negstad <50252651+danegsta@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix TypeScript AppHost generated port ranges

Use a shared AppHost profile port generator for CLI templates, init, and TypeScript AppHost scaffolding so generated dashboard and service profile ports avoid the Windows ephemeral range. Add regression coverage for the generated TypeScript apphost.run.json ports.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* PR feedback

---------

Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…#16590)

* Fix unbounded collection growth in TelemetryRepository and related types

- Add MaxResourceCount option to TelemetryLimitOptions (default 10,000)
  to cap _resources growth. Throws on limit exceeded.
- Clear _logScopes, _logPropertyKeys on ClearStructuredLogs (full clear)
  and remove per-resource property keys on per-resource clear.
- Clear _traceScopes, _tracePropertyKeys, _spanLinks on ClearTraces
  (full clear) and clean up span links and property keys per-resource.
- Clear _meters alongside _instruments in OtlpResource.ClearMetrics.
- Add internal const limits on TelemetryRepository for resource views
  (10,000), instruments (10,000), dimensions (10,000), known attribute
  value keys (10,000), and values per key (10,000).
- Enforce instrument limit in OtlpResource.AddMetrics.
- Enforce resource view limit in OtlpResource.GetView.
- Enforce dimension limit in OtlpInstrument.FindScope.
- Cap KnownAttributeValues keys and per-key value lists in
  OtlpInstrument.CreateDimensionScope.
- Add clarifying comments to fields describing their bounds.

* Add limit enforcement tests and fix uncaught exceptions from resource limit

- Add TelemetryLimitTests with 5 tests for resource and instrument limits
- Add maxResourceCount parameter to CreateRepository test helper
- Wrap GetOrAddResource calls in GetPeerResource (return null), CalculateTraceUninstrumentedPeers, and OnPeerChanged with try/catch
- Fix _meters comment to not claim an unenforced bound
- Document TOCTOU soft-cap behavior on resource limit check

* Reset HasTraces/HasLogs and clear unviewed error logs on full clear

- ClearTraces full-clear now resets HasTraces on all resources
- ClearStructuredLogs full-clear now resets HasLogs on all resources and clears _resourceUnviewedErrorLogs

* Remove redundant per-telemetry-type resource limit tests

* Add scope and instrument limits with TryGetValue pattern

- Add MaxScopeCount limit to TryGetOrAddScope, using TryGetValue instead
  of GetValueRefOrAddDefault to avoid add-then-remove on overflow
- Refactor instrument add in OtlpResource to use TryGetValue + count check
  before inserting, removing the add-then-remove pattern
- Fix AddLogs failure count: count log records, not scopes
- Fix AddMetrics failure count: count data points, not metrics
- Add tests for resource limit, scope limit, and correct failure counting
#16633)

KubernetesGatewayExtensions and KubernetesIngressExtensions were in
the Aspire.Hosting.Kubernetes namespace, requiring users to add an
explicit using directive. Move them to Aspire.Hosting to match the
convention used by other extension methods like
KubernetesEnvironmentExtensions and KubernetesServiceExtensions.

Co-authored-by: Mitch Denny <mitch@mitchdenny.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove obsolete internal compatibility shims from the ATS export surface so generated polyglot SDKs only expose the unified methods.

Co-authored-by: Sebastien Ros <sebastienros@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add BrowserLogs CDP transport seam

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use CDP pipe for BrowserLogs owned browsers

Switch owned tracked-browser launches to a private CDP pipe, keep WebSocket adoption as an opt-in seam, and add session/persistent process lifetime configuration.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove BrowserLogs persistent lifetime

BrowserLogs pipe-launched browsers are always session scoped because Chromium exits when the CDP pipe closes. Remove the public lifetime option and mark public BrowserLogs types experimental.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Split BrowserLogs pipe launcher partials

Move platform-specific native launch logic into Windows and Unix partial classes while keeping the shared launcher entry points in the common file.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use posix_spawn for BrowserLogs Unix pipe launches

Replace the managed fork/exec launcher with posix_spawn file actions so Chromium still receives CDP pipe fds 3 and 4 without running managed code in a forked child.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Move BrowserLogs to Aspire.Hosting.Browsers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Move BrowserLogs tests to Browsers assembly

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update CI snapshots after BrowserLogs move

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update TypeScript capabilities snapshot

Remove the BrowserLogs capability from the Hosting assembly scanner snapshot now that BrowserLogs lives in Aspire.Hosting.Browsers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove BrowserLogs friend assembly access

Stop relying on InternalsVisibleTo for the Browsers package and its tests by source-sharing the BrowserLogs implementation into the test assembly and replacing Hosting-internal runtime dependencies with public-compatible behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Restore BrowserLogs health report publishing

Add a public CustomResourceSnapshot helper for publishing health reports without InternalsVisibleTo and use it to restore BrowserLogs session and last-error health report rows.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address BrowserLogs localization feedback

Add translator comments for BrowserLogs resource strings with format placeholders and regenerate XLF files.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix review findings in BrowserLogs

- Fix null-forgiveness on screenshot Data property to throw
  InvalidOperationException instead of ArgumentNullException
- Guard _stopCts.Cancel() against ObjectDisposedException when
  MonitorAsync cleanup races with StopAsync
- Block '..' path traversal in SanitizePathSegment

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: David Fowler <davidfowl@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Mitch Denny <mitch@mitchdenny.com>
…Host endpoint fix (#16585)

* Support Gateway TLS without pre-known hostname (FQDN discovery)

When WithTls() is called without WithHostname(), the Gateway now:
1. Generates an HTTPS listener without a hostname restriction
2. After Helm deploy, polls Gateway status for the assigned address
3. Patches the HTTPS listener to add the discovered hostname
4. Creates a bootstrap self-signed TLS secret with the discovered FQDN
5. cert-manager then detects the hostname and issues a real certificate

This enables a single-deploy TLS workflow for controllers like AGC that
assign FQDNs automatically (e.g., *.alb.azure.com), without requiring
users to deploy once to discover the FQDN and then redeploy with it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use helm field-manager for Gateway hostname patch to avoid conflicts

After patching the Gateway hostname via JSON patch, re-apply the full
Gateway YAML with --server-side --field-manager=helm --force-conflicts
to transfer field ownership back to Helm. This prevents SSA conflicts
when the user later redeploys with an explicit hostname via WithHostname().

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix endpoint resource lookup for TS AppHost RPC bridge

Use ResourceNameComparer on the deploymentTargets dictionary so that
endpoint references created through the TypeScript AppHost RPC bridge
(which may use a different resource instance) resolve correctly by
resource name. This matches the pattern already used in
KubernetesEnvironmentContext._kubernetesComponents.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix test assertion for YAML quoted protocol values

The YAML serializer quotes string values like protocol: "HTTPS" on CI.
Use a more flexible assertion that matches both quoted and unquoted forms.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address all automated review feedback

1. Address type validation: Parse full Gateway JSON status, prefer
   Hostname-type addresses, fall back to DNS-like values, skip IPs.
2. Use -o json instead of jsonpath: Parse full Gateway JSON for both
   address discovery and listener index detection. More reliable.
3. Use JsonSerializer + --patch-file: Build JSON patch operations with
   proper serialization, write to temp file to avoid shell escaping.
4. Minimal manifest for field ownership: Read current Gateway JSON,
   strip server fields (status, resourceVersion, managedFields), keep
   only apiVersion/kind/metadata(name,namespace)/spec for SSA apply.
5. Temp file pattern: Use CreateTempSubdirectory consistently.
6. Add SAN to bootstrap certs: Add SubjectAlternativeNameBuilder with
   DNS name in both DiscoverFqdnAndBootstrapTlsAsync and the existing
   BootstrapTlsSecretsAsync. Modern TLS clients require SAN.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Preserve annotations and labels in Gateway ownership transfer

The minimal manifest used for server-side apply field ownership transfer
was missing annotations and labels, causing AGC annotations like
alb.networking.azure.io/alb-name to be stripped. Now copies annotations
and labels from the current Gateway metadata.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add E2E test for K8S Gateway TLS deployment with HTTP-01

Tests the full flow: provision AKS with ALB controller, install cert-manager
with gatewayHTTPRoute HTTP-01 solver, create a project with AddKubernetesEnvironment
+ AddGateway + WithTls (no hostname), deploy with aspire deploy, and verify
FQDN discovery, certificate issuance, and HTTPS access.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use --enable-alb in az aks create and AMD VM SKU

Consolidate ALB enablement into the az aks create command instead of a
separate az aks update step. Use Standard_D2as_v5 (AMD) for quota
compatibility with E2E test subscription.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix E2E test: use --enable-gateway-api --enable-application-load-balancer

Per the official AGC quickstart docs, use the correct flags:
- --enable-gateway-api: enables Gateway API CRDs
- --enable-application-load-balancer: enables ALB controller addon
- --network-plugin azure: required Azure CNI
- Standard_D2as_v5: AMD VM SKU for quota compatibility
- Use the add-on's auto-created aks-appgateway subnet instead of
  creating one manually

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Wait for ALB controller pods to be Running before checking GatewayClass

The ALB controller pods need time to initialize after cluster creation.
Poll until pods are Running and GatewayClass azure-alb-external exists,
with up to 10 minutes timeout.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix ClusterIssuer: parentRefs requires name and namespace

cert-manager requires parentRefs to include a name. Use 'ingress' to
match the Gateway name from AddGateway('ingress'), and include the
namespace to match the Helm deploy namespace.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix E2E test AppHost: add using directive and pragma suppressions

The injected AppHost code needs:
- using Aspire.Hosting.Kubernetes for AddGateway extension methods
- #pragma warning disable ASPIRECOMPUTE003 for AddContainerRegistry
Both prepended to the top of the file alongside ASPIREPIPELINES001.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix E2E test: capture webfrontend variable from starter template

The starter template generates builder.AddProject('webfrontend') without
assigning to a variable. The Gateway route needs a reference to it, so
inject 'var webfrontend =' before the AddProject call.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Refactor FQDN discovery polling to use Polly retry pipeline

Replace the manual for-loop retry with a Polly ResiliencePipeline
using constant 5s backoff, 60 max attempts, and result-based retry
(retries when result is null). Polly.Core is already a transitive
dependency via Aspire.Hosting.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Mitch Denny <mitch@mitchdenny.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix Python starter health check template

Update the Python starter TypeScript AppHost to use the supported withHttpHealthCheck options object and align its root build script with AppHost-only type checking. Add E2E coverage that verifies the generated starter builds successfully.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use fail-fast helper for Python starter build test

Update the Python React template E2E build verification to use the existing fail-fast command helper so npm build failures are surfaced immediately.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Verify TypeScript templates build

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add build script aliases to TypeScript AppHost scaffold

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use AppHost tsconfig for TypeScript AppHost lint

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use AppHost tsconfig name for Python starter

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Sebastien Ros <sebastienros@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The 'Finding apphosts' message was displayed via DisplayMessage, which
the extension renders as a sticky vscode.window.showInformationMessage
toast that has no programmatic dismissal. Fold it into the surrounding
ShowStatusAsync status text so it rides on the existing progress
notification (auto-dismissed via the finally block) instead.

Co-authored-by: Adam Ratzman <adam@adamratzman.com>
* API Review Feedback

Addressing feedback from #16602

Rename JS experimental ID, refactor AKS/EF resource APIs

Renames ASPIREEXTENSION001 to ASPIREJAVASCRIPT001 for JavaScript APIs, resources, and tests. Refactors AKS-related code to Aspire.Hosting.Azure.Kubernetes, makes AksSkuTier internal, and defaults AKS SKU tier to Free. Renames EFMigrationResource.ContextTypeName to DbContextTypeName throughout. Adds missing using directives, Experimental attributes, and AspireValue metadata. Updates tests and samples for new names and diagnostics.

* Remove unused enum

* Change more dbContextTypeName instances.

* Update CodeGeneration snapshots for new WellKnownPipelineSteps entries

Adding [AspireValue("WellKnownPipelineSteps")] to BeforeStart and
CheckContainerRuntime causes the language code generators to emit them
in the WellKnownPipelineSteps exported value catalog. Update the
TwoPassScanningGeneratedAspire snapshots for Go, Java, Python, Rust, and
TypeScript to include the two new entries.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
Co-authored-by: Jose Perez Rodriguez <joperezr@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…CLI HTTP requests (#16708)

* Normalize *.localhost dashboard URLs to localhost for HTTP requests

DNS resolvers typically don't implement RFC 6761 for localhost subdomains,
so hosts like 'myapp.dev.localhost' fail to resolve. This adds
NormalizeDashboardUrl to McpToolHelpers which rewrites *.localhost API
base URLs to localhost before making HTTP requests, while preserving the
original hostname in dashboard display URLs (used in JSON output hyperlinks).

- Add NormalizeDashboardUrl and IsLocalhostTld to McpToolHelpers
- Normalize API base URL in TelemetryCommandHelpers and McpToolHelpers
- Preserve original *.dev.localhost hostname in dashboard display URLs
- Add unit tests for logs/traces with dev.localhost backchannel URLs
- Add E2E test variant using dev.localhost dashboard URL

* Refactor E2E test to use aspire ps --format json for dashboard URL

* Fix E2E test: use --frontend-url and extract dashboard URL from logs

- Use --frontend-url instead of invalid --dashboard-url for aspire dashboard run
- Extract dashboard login URL from log output instead of aspire ps (which
  cannot discover standalone dashboards)
- Pass login?t=xxx URL to aspire otel traces for proper token exchange
- dev.localhost variant passes *.localhost to --frontend-url to exercise
  NormalizeDashboardUrl end-to-end

* Fix E2E test: extract URL from dashboard run output, use --allow-anonymous

- Add --allow-anonymous to avoid token exchange issues in standalone mode
- Extract dashboard URL from 'Now listening on:' in aspire dashboard run output
- Avoids needing login token exchange which fails in container E2E tests

* Fix E2E test: use auth with login token from dashboard run output

- Remove --allow-anonymous to verify authentication works end-to-end
- Extract login URL (with ?t=xxx token) from aspire dashboard run output
- CLI exchanges login token for API key via validateToken endpoint

* Add echo of OTEL_DASHBOARD_URL for debugging visibility

* Add AppHost otel traces tests with dev.localhost variant

- Add AppHostOtelTracesReturnsTraces and _DevLocalhost variants
- New tests create Starter project, start AppHost, generate traces, verify otel traces output
- DevLocalhost variant uses useDevLocalhost flag in AspireNewAsync to test URL normalization
- Add useDevLocalhost parameter to AspireNewAsync helper

* Fix standalone dashboard tests and add dev.localhost otel logs test

- Fix grep regex to use [a-f0-9]+ for token to avoid Spectre Console link duplication
- Remove AppHost otel traces tests (covered by OtelLogs tests)
- Add OtelLogsReturnsStructuredLogsFromStarterApp_DevLocalhost test

* Use DASHBOARD__FRONTEND__BROWSERTOKEN instead of parsing URL from logs

Spectre Console OSC 8 escape sequences in redirected output cause grep
to capture a doubled URL. Instead, set a known browser token via env var
and construct the dashboard URL directly.

* Fix AspireStartAsync sed pattern to match *.localhost dashboard URLs

The sed pattern for extracting dashboardUrl from JSON only matched
'localhost' literally. With dev.localhost subdomains (e.g.
dashboard.dev.localhost:18888), the pattern failed to match, causing
'aspire start did not return a dashboard URL'. Broadened to [a-z.]*localhost.

* Preserve original *.localhost hostname in display URLs for --dashboard-url path

The --dashboard-url code path was normalizing the URL and using it for
both HTTP requests and JSON output hyperlinks. Now it preserves the
original hostname (e.g. dashboard.dev.localhost) for display URLs while
still normalizing to localhost for HTTP requests, matching the
backchannel path behavior.

Also adds remarks to NormalizeDashboardUrl explaining the RFC 6761 DNS
resolution motivation, and tests for the --dashboard-url display URL
preservation.

* Address review comments: normalize URL in StaticDashboardInfoProvider, fix error messages, fix E2E test

- Normalize apiBaseUrl in StaticDashboardInfoProvider so aspire agent mcp
  --dashboard-url with *.dev.localhost URLs works correctly
- Use displayDashboardUrl in error messages so users see the URL they typed
- Fix E2E test to pass frontendUrl to aspire otel traces, actually exercising
  the NormalizeDashboardUrl code path end-to-end

* Add test asserting error messages show original *.dev.localhost URL

* Add E2E tests for aspire agent mcp list_structured_logs

* Rename DashboardOtelTracesTests to DashboardRunTests and add agent mcp tests

- Rename class and file to DashboardRunTests
- Add E2E tests for aspire agent mcp --dashboard-url against standalone dashboard
- Extract CallAgentMcpToolAsync helper to CliE2EAutomatorHelpers
- Use shared helper in AgentMcpLogsTests
…ilds (#16654) (#16672)

* [release/13.3] Fix aspire init template install for non-stable CLI builds (#16654)

�spire init ran `dotnet new install Aspire.ProjectTemplates@<cliVersion+sha>`
with `nugetConfigFile: null` and `nugetSource: null`, bypassing the channel
feed wiring used by `aspire new`. For non-stable CLI builds (staging/daily/PR),
`Aspire.ProjectTemplates@<cliVersion+sha>` is only available on a per-commit
darc feed (e.g. `darc-pub-microsoft-aspire-<sha8>`), so install failed with
exit code 103 in any C# repo containing a `.sln`.

Extract the channel-aware template package resolution and install logic out of
`DotNetTemplateFactory.ApplyTemplateAsync` and into `TemplateNuGetConfigService`
as `ResolveTemplatePackageAsync` and `InstallTemplatePackageAsync`. Both
`DotNetTemplateFactory` and `InitCommand` now consume the helper. The
existing `aspire new` install path is preserved bit-for-bit (extraction is
mechanical; `IncludePrHives: true` keeps PR-hive widening behavior).

For `aspire init` this means:
- The version sent to `dotnet new install` is now the channel-resolved one
  (e.g. `13.3.0`), not the raw `+sha` build metadata.
- Init now honors the global `channel` configuration, matching `aspire new`.
- On install failure, captured stdout/stderr is displayed before the error.
- `ChannelNotFoundException` and `EmptyChoicesException` produce friendly
  errors instead of bubbling to the top-level "unexpected error" handler.
- PR hives are intentionally NOT included in init's channel discovery so a
  developer with stale `~/.aspire/hives/*` doesn't get a different template
  than they'd get on a clean machine.

Notes:
- `TemplateNuGetConfigService` is a singleton; `IDotNetCliRunner` is
  transient and is therefore passed as a method parameter to
  `InstallTemplatePackageAsync` instead of being injected.
- New regression tests cover: explicit channel passes the temp NuGet config,
  implicit channel leaves it null, PR hives don't widen init, and channel
  resolution failures produce friendly errors.

Fixes #16654

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review feedback (#16672)

Multi-model code review caught the following issues:

1. Restore original order of operations in DotNetTemplateFactory.ApplyTemplateAsync.
   The first refactor moved extraArgsCallback ahead of template package resolution,
   which changed prompt/error precedence for `aspire new` (extra-args prompts
   like Redis-cache, test-framework, xUnit-version would now run before channel
   lookup, and answers would be discarded if resolution failed afterward).
   Restored the BEFORE order from release/13.3: ResolveTemplatePackageAsync
   first, then extraArgsCallback, then InstallTemplatePackageAsync. Updated the
   in-source comment to be accurate.

2. Catch NuGetPackageCacheException in InitCommand.DropCSharpProjectSkeletonAsync.
   The pre-extraction init code went straight to `dotnet new install` and
   never invoked a NuGet search, so feed search failures (offline, inaccessible
   feed, etc.) couldn't bubble up. After the extraction init now performs the
   search and was missing the catch, surfacing the failure as an unhandled
   "unexpected error". Added the catch with the same friendly-error treatment
   as ChannelNotFoundException / EmptyChoicesException.

3. Use TemplatingStrings.TemplateInstallationFailed in InitCommand for parity
   with `aspire new`. The previous ad-hoc string omitted the log file path,
   making post-mortem diagnosis harder.

4. Added a comment in InstallTemplatePackageAsync clarifying that the temporary
   NuGet config is intentionally disposed at the end of the install (only
   `dotnet new install` consumes it; the subsequent `dotnet new <template>`
   call uses the already-installed template hive and ambient NuGet config).

5. Added regression test InitCommand_WhenChannelTemplateSearchFails_DisplaysFriendlyError
   covering the new NuGetPackageCacheException catch.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move the JSON code writer out of Aspire.TypeSystem so it is not exposed as public API. Link the shared internal helper into each CLI and code generation project that uses it.

Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Validate TypeScript AppHost before start

Add a pre-execute runtime hook and use it to run TypeScript type validation before starting or publishing TypeScript AppHosts. Watch mode validates on every restart so startup is not blocked by existing errors while editing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address TypeScript AppHost review feedback

Clarify the PreExecute contract and make Bun typecheck/watch commands use project-local binaries via bun run instead of bun x.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix TypeScript AppHost E2E type checks

Use Yarn run for project-local TypeScript tools so arguments are forwarded correctly, and update the TypeScript publish E2E fixture to use the typed dashboard options shape.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix Kubernetes TypeScript E2E type check

Update the Kubernetes TypeScript deploy E2E fixture to use the generated withHelm options shape so it passes runtime type validation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use project-local Bun nodemon in watch

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Sebastien Ros <sebastienros@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…4 On relative base path root Microsoft.DeveloperControlPlane.darwin-amd64 , Microsoft.DeveloperControlPlane.darwin-arm64 , Microsoft.DeveloperControlPlane.linux-amd64 , Microsoft.DeveloperControlPlane.linux-arm64 , Microsoft.DeveloperControlPlane.linux-musl-amd64 , Microsoft.DeveloperControlPlane.windows-amd64 , Microsoft.DeveloperControlPlane.windows-arm64 From Version 0.23.3 -> To Version 0.23.4 (#16757)

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
* Fix HostUrl with container tunnel

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Scope HostUrl matching to host endpoints

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: David Negstad <David.Negstad@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
)

* Avoid AppHost discovery when config path is valid

Validate configured AppHost paths before using them and skip recursive discovery for normal CLI resolution when the configured path is already a valid AppHost. Preserve candidate listing behavior so extension commands can still enumerate all AppHost candidates.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Restore silent: true for fast-path settings lookup

Reverts an unintended verbosity change so users with a stale legacy
.aspire/settings.json don't see a 'AppHost was specified but doesn't
exist' warning on every aspire run when the CLI is going to fall
back to discovery anyway.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add ProjectLocator tests for fast-path coverage requested in review

- Add Throw-mode variant of UseOrFindAppHostProjectFileUsesValidSettingsWithoutScanning
  to prove recursive discovery is also skipped for non-interactive/JSON callers.
- Add fast-path test with a configured guest AppHost (apphost.ts) and a throwing
  language discovery to cover the production guest-AppHost scenario from the issue.
- Add a parameterized fallback test that verifies an existing-but-invalid configured
  AppHost (IsUnsupported / IsPossiblyUnbuildable) falls back to discovery.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: adamint <adamratzman1@gmail.com>
* Reject Yarn Classic for TypeScript AppHosts

Yarn Classic is not supported for TypeScript AppHosts because its command behavior differs from supported package managers and can break Aspire argument forwarding.

Detect Yarn Classic through packageManager declarations and Yarn v1 lockfiles, then fail early with guidance to use Yarn 4 or later, npm, pnpm, or Bun.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update yarn tests to v4

* Update tes dockerfiles

---------

Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Run dashboard in .NET 11

* Update

* Update
* Fix Aspire new empty AppHost language picker

Keep a single interactive Empty AppHost template entry while retaining direct language-specific subcommands for non-interactive creation. Filter the language picker by enabled AppHost languages and add missing Python/Rust shortcut template IDs. Update NewCommand tests and E2E helper selection for the new flow.



* Address empty AppHost prompt review feedback



* Include hidden templates in non-interactive suggestions



* Stop persisting new command language selection



* Allow language option on new subcommands



---------



(cherry picked from commit 8bd4b60)

Co-authored-by: Maddy Montaquila (Leger) <maddyleger1@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI and others added 8 commits May 14, 2026 13:25
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: joperezr <13854455+joperezr@users.noreply.github.com>
#17070)

On relative base path root
Microsoft.DeveloperControlPlane.darwin-amd64 , Microsoft.DeveloperControlPlane.darwin-arm64 , Microsoft.DeveloperControlPlane.linux-amd64 , Microsoft.DeveloperControlPlane.linux-arm64 , Microsoft.DeveloperControlPlane.linux-musl-amd64 , Microsoft.DeveloperControlPlane.windows-amd64 , Microsoft.DeveloperControlPlane.windows-arm64 From Version 0.24.1 -> To Version 0.23.6

(cherry picked from commit 3f7c8ab)

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Backport the Aspire skill metadata length fix and regression coverage for agent host description limits.

Backport of #17183 to release/13.3

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: joperezr <13854455+joperezr@users.noreply.github.com>
Brings forward changes from v13.3.4 that originated on the release/13.3
branch. Conflict resolution policy applied:
- eng/Versions.props, eng/Version.Details.xml, polyglot/Helix/CI infra:
  keep main (do not stabilize main; keep 13.4.0 unstable build).
- src/*/api/*.cs and src/*/api/*.txt: take v13.3.4 regenerated API
  baselines so main reflects shipped 13.3 APIs.
- All other conflicts: take main; forward-bound release-only PRs that
  need genuine application will be added as follow-up commits.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The merge commit took main's version of DashboardCommandExecutor.cs and
NotificationEntryComponent.razor.cs, but INotificationService.cs was
only modified on release (changing OnClick to Func<IServiceProvider, Task>).
Without this commit, the merge breaks the build because the call sites
do not pass IServiceProvider.

Reconcile by applying #16763's call-site changes on top of main:
- DashboardCommandExecutor.cs: thread IStringLocalizer through
  CreateViewResponseNotificationAction so the lambda no longer closes
  over scoped services; resolve DashboardDialogService from the
  IServiceProvider passed to OnClick.
- NotificationEntryComponent.razor.cs: inject IServiceProvider and
  pass it to primaryAction.OnClick while preserving main's
  Dialog.Hide/Dialog.Show wrapping.
- Keep main's FluentMessageIntent enum naming (the rename was forward
  work on main and is unrelated to the closure fix).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Two release-only PRs renamed identifiers that already had call sites on
main, and the merge needs follow-up edits to keep main building:

- PR #16596 (release-only): renamed pipeline option from s_logLevelOption
  to s_pipelineLogLevelOption and switch --log-level to --pipeline-log-level.
  PipelineCommandBase.cs picked up the rename via the merge (file only
  changed on release). DestroyCommand.cs was conflicted (main also added
  the --yes / --non-interactive validation) and resolved as 'take main',
  which still referenced the old name. Update the single call site here
  to s_pipelineLogLevelOption to match the base class.

- ExitCodeConstants was renamed to CliExitCodes on main while the
  TelemetryTracesCommandTests.cs file (added by release-only telemetry
  work) still referenced the old name. Rename to CliExitCodes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions
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 -- 17326

Or

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

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Back-merges the v13.3.4 release tag into main to align main with shipped 13.3 API baselines while preserving main’s 13.4.0 unstable versioning, and reconciles a small set of post-merge conflicts (notably dashboard notification actions and CLI pipeline log-level option behavior).

Changes:

  • Updates shipped public API baselines (src/*/api/*.cs) and related hosting Azure API surface adjustments.
  • Reconciles dashboard changes (notification action service-scope fix, OTLP telemetry bounding, UI resource-string markup removal, framework JS selection).
  • Updates CLI pipeline log-level forwarding + adds/adjusts CLI E2E and unit tests (including dev.localhost/MCP scenarios).
Show a summary per file
File Description
tests/Shared/Telemetry/TelemetryTestHelpers.cs Adds ability to configure MaxResourceCount in telemetry repository tests.
tests/Shared/Hex1bAutomatorTestHelpers.cs Adds automation support for answering the “Use *.dev.localhost URLs” prompt.
tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs Updates CLI test DI setup (includes a new service registration).
tests/Aspire.Cli.Tests/Commands/DoCommandTests.cs Adds unit tests for pipeline log-level forwarding behavior.
tests/Aspire.Cli.EndToEnd.Tests/TypeScriptStarterTemplateTests.cs Adds E2E coverage for TypeScript Express/React starter creation + run/build.
tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs Updates dashboardUrl extraction (dev.localhost) and adds MCP tool-call helper.
tests/Aspire.Cli.EndToEnd.Tests/DashboardOtelTracesTests.cs Removes an older E2E test class (replaced by other coverage).
tests/Aspire.Cli.EndToEnd.Tests/AgentMcpLogsTests.cs Adds E2E coverage for aspire agent mcp structured logs (incl. isolated + dev.localhost).
src/Aspire.Hosting.Valkey/api/Aspire.Hosting.Valkey.cs API baseline updates for Valkey exports/interfaces.
src/Aspire.Hosting.Testing/api/Aspire.Hosting.Testing.cs API baseline updates for exported endpoint accessor.
src/Aspire.Hosting.SqlServer/api/Aspire.Hosting.SqlServer.cs API baseline updates for SQL Server hosting types/interfaces/exports.
src/Aspire.Hosting.Seq/api/Aspire.Hosting.Seq.cs API baseline updates for Seq hosting exports/interfaces.
src/Aspire.Hosting.Redis/api/Aspire.Hosting.Redis.cs API baseline updates for Redis hosting exports/interfaces.
src/Aspire.Hosting.RabbitMQ/api/Aspire.Hosting.RabbitMQ.cs API baseline updates for RabbitMQ hosting exports/interfaces.
src/Aspire.Hosting.Qdrant/api/Aspire.Hosting.Qdrant.cs API baseline updates for Qdrant hosting exports/interfaces.
src/Aspire.Hosting.Python/api/Aspire.Hosting.Python.cs API baseline updates for Python hosting exports.
src/Aspire.Hosting.PostgreSQL/api/Aspire.Hosting.PostgreSQL.cs API baseline updates for PostgreSQL hosting exports/interfaces.
src/Aspire.Hosting.Oracle/api/Aspire.Hosting.Oracle.cs API baseline updates for Oracle hosting exports/interfaces.
src/Aspire.Hosting.OpenAI/api/Aspire.Hosting.OpenAI.cs API baseline updates for OpenAI hosting exports/interfaces.
src/Aspire.Hosting.Nats/api/Aspire.Hosting.Nats.cs API baseline updates for NATS hosting exports/interfaces.
src/Aspire.Hosting.MySql/api/Aspire.Hosting.MySql.cs API baseline updates for MySQL hosting exports/interfaces.
src/Aspire.Hosting.MongoDB/api/Aspire.Hosting.MongoDB.cs API baseline updates for MongoDB hosting exports/interfaces.
src/Aspire.Hosting.Milvus/api/Aspire.Hosting.Milvus.cs API baseline updates for Milvus hosting exports/interfaces.
src/Aspire.Hosting.Maui/api/Aspire.Hosting.Maui.cs API baseline updates for MAUI hosting exports.
src/Aspire.Hosting.Keycloak/api/Aspire.Hosting.Keycloak.cs API baseline updates for Keycloak hosting exports.
src/Aspire.Hosting.Kafka/api/Aspire.Hosting.Kafka.cs API baseline updates for Kafka hosting exports/interfaces.
src/Aspire.Hosting.GitHub.Models/api/Aspire.Hosting.GitHub.Models.cs API baseline updates for GitHub Models hosting exports/interfaces.
src/Aspire.Hosting.Garnet/api/Aspire.Hosting.Garnet.cs API baseline updates for Garnet hosting exports/interfaces.
src/Aspire.Hosting.EntityFrameworkCore/api/Aspire.Hosting.EntityFrameworkCore.cs Adds/updates EF Core migration resource API baseline.
src/Aspire.Hosting.Docker/api/Aspire.Hosting.Docker.cs Adds privileged support to Docker compose model API baseline.
src/Aspire.Hosting.DevTunnels/api/Aspire.Hosting.DevTunnels.cs API baseline updates for dev tunnels exports.
src/Aspire.Hosting.Browsers/api/Aspire.Hosting.Browsers.cs Adds/updates browser logs APIs (experimental) baseline.
src/Aspire.Hosting.Azure.WebPubSub/api/Aspire.Hosting.Azure.WebPubSub.cs API baseline updates for WebPubSub (incl. private endpoint target signature).
src/Aspire.Hosting.Azure.Sql/api/Aspire.Hosting.Azure.Sql.cs API baseline updates for Azure SQL (incl. private endpoint target signature).
src/Aspire.Hosting.Azure.SignalR/api/Aspire.Hosting.Azure.SignalR.cs API baseline updates for Azure SignalR (private endpoint target signature).
src/Aspire.Hosting.Azure.Search/api/Aspire.Hosting.Azure.Search.cs API baseline updates for Azure Search (private endpoint target signature).
src/Aspire.Hosting.Azure.Redis/api/Aspire.Hosting.Azure.Redis.cs API baseline updates for Azure Redis (private endpoint target signature).
src/Aspire.Hosting.Azure.OperationalInsights/api/Aspire.Hosting.Azure.OperationalInsights.cs API baseline updates for Log Analytics workspace resource surface.
src/Aspire.Hosting.Azure.Kusto/api/Aspire.Hosting.Azure.Kusto.cs API baseline updates for Kusto (private endpoint target signature).
src/Aspire.Hosting.Azure.KeyVault/api/Aspire.Hosting.Azure.KeyVault.cs API baseline updates for KeyVault (private endpoint target signature).
src/Aspire.Hosting.Azure.FrontDoor/api/Aspire.Hosting.Azure.FrontDoor.cs Adds/updates Front Door resource API baseline.
src/Aspire.Hosting.Azure.ContainerRegistry/api/Aspire.Hosting.Azure.ContainerRegistry.cs API baseline updates for ACR + private endpoint target surface.
src/Aspire.Hosting.Azure.CognitiveServices/api/Aspire.Hosting.Azure.CognitiveServices.cs API baseline updates for Azure OpenAI resource surface.
src/Aspire.Hosting.Azure.AppService/api/Aspire.Hosting.Azure.AppService.cs API baseline updates for App Service env + new HTTPS-upgrade export.
src/Aspire.Hosting.Azure.ApplicationInsights/api/Aspire.Hosting.Azure.ApplicationInsights.cs API baseline updates for App Insights resource surface.
src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.cs API baseline updates for ACA env + domain config export annotation changes.
src/Aspire.Hosting.Azure.AppConfiguration/api/Aspire.Hosting.Azure.AppConfiguration.cs API baseline updates for App Configuration (private endpoint target signature).
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hant.xlf Localization updates for dashboard control strings (resource/timestamp/duration labels).
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.zh-Hans.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.tr.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ru.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pt-BR.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.pl.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ko.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.ja.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.it.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.fr.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.es.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.de.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/xlf/ControlsStrings.cs.xlf Localization updates for dashboard control strings.
src/Aspire.Dashboard/Resources/ControlsStrings.resx Replaces markup-containing strings with plain label strings.
src/Aspire.Dashboard/Resources/ControlsStrings.Designer.cs Regenerates designer for renamed resource keys.
src/Aspire.Dashboard/Otlp/Model/OtlpResource.cs Adds/adjusts telemetry bounding logic and metrics bookkeeping.
src/Aspire.Dashboard/Otlp/Model/OtlpInstrument.cs Adds limits on dimensions/known attribute values to bound telemetry growth.
src/Aspire.Dashboard/Otlp/Model/OtlpHelpers.cs Adds scope limit enforcement and updates scope-add logic.
src/Aspire.Dashboard/Model/INotificationService.cs Changes notification action callback signature to take IServiceProvider.
src/Aspire.Dashboard/Model/DashboardCommandExecutor.cs Updates notification action creation/invocation to avoid capturing scoped services.
src/Aspire.Dashboard/Configuration/DashboardOptions.cs Adds a configurable MaxResourceCount telemetry limit.
src/Aspire.Dashboard/Components/Dialogs/NotificationEntryComponent.razor.cs Injects IServiceProvider and passes it when invoking notification actions.
src/Aspire.Dashboard/Components/Controls/StructuredLogDetails.razor Removes MarkupString usage; formats via localized labels + <strong>.
src/Aspire.Dashboard/Components/Controls/SpanDetails.razor Removes MarkupString usage; formats via localized labels + <strong>.
src/Aspire.Dashboard/Components/App.razor Adds version meta tags and selects Blazor JS based on runtime major version.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hant.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.zh-Hans.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.tr.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ru.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pt-BR.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.pl.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ko.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.ja.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.it.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.fr.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.es.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.de.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/DestroyCommandStrings.cs.xlf Localization adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hant.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.zh-Hans.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.tr.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ru.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pt-BR.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.pl.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ko.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.ja.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.it.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.fr.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.es.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.de.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/xlf/ConsoleActivityLoggerStrings.cs.xlf Localization updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Resources/DestroyCommandStrings.resx Adds new destroy non-interactive validation string.
src/Aspire.Cli/Resources/DestroyCommandStrings.Designer.cs Regenerates designer for new destroy string.
src/Aspire.Cli/Resources/ConsoleActivityLoggerStrings.resx Updates pipeline failure hint to reference --pipeline-log-level.
src/Aspire.Cli/Mcp/Tools/McpToolHelpers.cs Normalizes *.localhost dashboard API base URLs for HTTP requests.
src/Aspire.Cli/Mcp/Tools/IDashboardInfoProvider.cs Preserves display URL while normalizing API base URL.
src/Aspire.Cli/Commands/TelemetryCommandHelpers.cs Normalizes dashboard URLs for API calls while preserving display URLs in errors/output.
src/Aspire.Cli/Commands/PublishCommand.cs Uses pipeline-specific log-level option when forwarding to AppHost.
src/Aspire.Cli/Commands/PipelineCommandBase.cs Renames pipeline option to --pipeline-log-level and updates parsing.
src/Aspire.Cli/Commands/DoCommand.cs Uses pipeline-specific log-level option when forwarding to AppHost.
src/Aspire.Cli/Commands/DestroyCommand.cs Uses pipeline-specific log-level option when forwarding to AppHost.
src/Aspire.Cli/Commands/DeployCommand.cs Uses pipeline-specific log-level option when forwarding to AppHost.

Copilot's findings

Files not reviewed (2)
  • src/Aspire.Cli/Resources/DestroyCommandStrings.Designer.cs: Language not supported
  • src/Aspire.Dashboard/Resources/ControlsStrings.Designer.cs: Language not supported
  • Files reviewed: 126/132 changed files
  • Comments generated: 3

Comment on lines 149 to 154
services.AddSingleton<IAppHostServerProjectFactory, AppHostServerProjectFactory>();
services.AddSingleton(options.AppHostServerSessionFactory);
services.AddSingleton<ILanguageDiscovery, DefaultLanguageDiscovery>();
services.AddSingleton(options.LanguageServiceFactory);
services.AddSingleton<TemplateNuGetConfigService>();

Comment on lines 780 to 783
await auto.TypeAsync(
$"DASHBOARD_URL=$(sed -n " +
"'s/.*\"dashboardUrl\"[[:space:]]*:[[:space:]]*\"\\(https\\?:\\/\\/localhost:[0-9]*\\).*/\\1/p' " +
"'s/.*\"dashboardUrl\"[[:space:]]*:[[:space:]]*\"\\(https\\?:\\/\\/[a-z.]*localhost:[0-9]*\\).*/\\1/p' " +
$"\"{jsonFile}\" | head -1)");
Comment on lines +22 to +27
var repoRoot = CliE2ETestHelpers.GetRepoRoot();
var strategy = CliInstallStrategy.Detect(output.WriteLine);
var workspace = TemporaryWorkspace.Create(output);

using var terminal = CliE2ETestHelpers.CreateDockerTestTerminal(repoRoot, strategy, output, mountDockerSocket: true, workspace: workspace);

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

Matched test failure patterns (50 tests)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.EnrichSqlServerTests.ShouldThrowIfDbContextIsNotRegistered — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.ConformanceTests.DbContextPoolingRegistersIDbContextPool — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.ConformanceTests_TypeSpecificConfig.DbContextPoolingRegistersIDbContextPool — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.ConformanceTests.DbContextCanBeAlwaysResolved — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.EnrichSqlServerTests.ShouldNotThrowIfDbContextIsRegistered — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.EnrichSqlServerTests.EnrichCanConfigureDbContextOptions — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.ConformanceTests_TypeSpecificConfig.DbContextCanBeAlwaysResolved — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.EnrichSqlServerTests.EnrichWithConflictingCommandTimeoutThrows — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.EnrichSqlServerTests.EnrichEnablesRetryByDefault — MCR container pull denied (rate limiting)
  • Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests.ConformanceTests.TracingEnablesTheRightActivitySource — MCR container pull denied (rate limiting)
  • ...and 40 more

@github-actions
Copy link
Copy Markdown
Contributor

CLI E2E Tests unknown — 95 passed, 0 failed, 5 unknown (commit 54edc3b)

View all recordings
Status Test Recording
AddPackageInteractiveWhileAppHostRunningDetached ▶️ View recording
AddPackageWhileAppHostRunningDetached ▶️ View recording
AgentCommands_AllHelpOutputs_AreCorrect ▶️ View recording
AgentInitCommand_DefaultSelection_InstallsDefaultSkills ▶️ View recording
AgentInitCommand_MigratesDeprecatedConfig ▶️ View recording
AgentMcpListStructuredLogsFromStarterAppCore ▶️ View recording
AllPublishMethodsBuildDockerImages ▶️ View recording
AspireAddPackageVersionToDirectoryPackagesProps ▶️ View recording
AspireInitSingleFileAppHostRunsViaDotnetRunAppHost ▶️ View recording
AspireInitWithExistingAppHostDirRecreatesMissingNuGetConfigAndPreservesFiles ▶️ View recording
AspireInitWithSolutionFileGeneratesAppHostThatBuildsAgainstChannelHive ▶️ View recording
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps ▶️ View recording
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrent ▶️ View recording
Banner_DisplayedOnFirstRun ▶️ View recording
Banner_DisplayedWithExplicitFlag ▶️ View recording
Banner_NotDisplayedWithNoLogoFlag ▶️ View recording
CertificatesClean_RemovesCertificates ▶️ View recording
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate ▶️ View recording
CertificatesTrust_WithUntrustedCert_TrustsCertificate ▶️ View recording
ConfigSetGet_CreatesNestedJsonFormat ▶️ View recording
CreateAndRunAspireStarterProject ▶️ View recording
CreateAndRunAspireStarterProjectWithBundle ▶️ View recording
CreateAndRunEmptyAppHostProject ▶️ View recording
CreateAndRunJavaEmptyAppHostProject ▶️ View recording
CreateAndRunJsReactProject ▶️ View recording
CreateAndRunPythonReactProject ▶️ View recording
CreateAndRunTypeScriptEmptyAppHostProject ▶️ View recording
CreateAndRunTypeScriptStarterProject ▶️ View recording
CreateJavaAppHostWithViteApp ▶️ View recording
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain ▶️ View recording
DashboardRunWithAgentMcpCore ▶️ View recording
DashboardRunWithOtelTracesReturnsNoTracesCore ▶️ View recording
DeployK8sBasicApiService ▶️ View recording
DeployK8sWithExternalHelmChart ▶️ View recording
DeployK8sWithGarnet ▶️ View recording
DeployK8sWithMongoDB ▶️ View recording
DeployK8sWithMySql ▶️ View recording
DeployK8sWithPostgres ▶️ View recording
DeployK8sWithRabbitMQ ▶️ View recording
DeployK8sWithRedis ▶️ View recording
DeployK8sWithSqlServer ▶️ View recording
DeployK8sWithValkey ▶️ View recording
DeployTypeScriptAppToKubernetes ▶️ View recording
DescribeCommandResolvesReplicaNames ▶️ View recording
DescribeCommandShowsRunningResources ▶️ View recording
DetachFormatJsonProducesValidJson ▶️ View recording
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance ▶️ View recording
DoListStepsShowsPipelineSteps ▶️ View recording
DocsCommand_RendersInteractiveMarkdownFromLocalSource ▶️ View recording
DoctorCommand_DetectsDeprecatedAgentConfig ▶️ View recording
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain ▶️ View recording
DoctorCommand_WithSslCertDir_ShowsTrusted ▶️ View recording
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted ▶️ View recording
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchain ▶️ View recording
GlobalMigration_HandlesCommentsAndTrailingCommas ▶️ View recording
GlobalMigration_HandlesMalformedLegacyJson ▶️ View recording
GlobalMigration_PreservesAllValueTypes ▶️ View recording
GlobalMigration_SkipsWhenNewConfigExists ▶️ View recording
GlobalSettings_MigratedFromLegacyFormat ▶️ View recording
InitTypeScriptAppHost_AugmentsExistingViteRepoAtRoot ▶️ View recording
InteractiveCSharpInitCreatesExpectedFiles ▶️ View recording
InvalidAppHostPathWithComments_IsHealedOnRun ▶️ View recording
JavaScriptHostingApisRunFromTypeScriptAppHost ▶️ View recording
LatestCliCanStartStableChannelAppHost ▶️ View recording
LatestCliCanStartStableChannelTypeScriptAppHost ▶️ View recording
LegacySettingsMigration_AdjustsRelativeAppHostPath ▶️ View recording
LogLevelTrace_ProducesTraceEntriesInCliLogFile ▶️ View recording
LogsCommandShowsResourceLogs ▶️ View recording
OtelLogsReturnsStructuredLogsFromStarterApp ▶️ View recording
OtelLogsReturnsStructuredLogsFromStarterAppIsolated ▶️ View recording
PsCommandListsRunningAppHost ▶️ View recording
PsFormatJsonOutputsOnlyJsonToStdout ▶️ View recording
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifacts ▶️ View recording
PublishWithConfigureEnvFileUpdatesEnvOutput ▶️ View recording
PublishWithDockerComposeServiceCallbackSucceeds ▶️ View recording
PublishWithoutOutputPathUsesAppHostDirectoryDefault ▶️ View recording
ResourceCommand_FailedExecution_DisplaysAppHostLogPathAndLogContainsEntries ▶️ View recording
ResourceCommand_FailsWhenInteractionServiceIsRequired ▶️ View recording
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutput ▶️ View recording
RestoreGeneratesSdkFiles ▶️ View recording
RestoreGeneratesSdkFiles_WithConfiguredToolchain ▶️ View recording
RestoreRefreshesGeneratedSdkAfterAddingIntegration ▶️ View recording
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes ▶️ View recording
RunFromParentDirectory_UsesExistingConfigNearAppHost ▶️ View recording
RunPublishFailureScenarioAsync ▶️ View recording
RunReportsSyntaxErrorsForDotNetAppHost ▶️ View recording
RunReportsSyntaxErrorsForTypeScriptAppHost ▶️ View recording
SecretCrudOnDotNetAppHost ▶️ View recording
SecretCrudOnTypeScriptAppHost ▶️ View recording
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels ▶️ View recording
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets ▶️ View recording
StartReportsSyntaxErrorsForDotNetAppHost ▶️ View recording
StartReportsSyntaxErrorsForTypeScriptAppHost ▶️ View recording
StopAllAppHostsFromAppHostDirectory ▶️ View recording
StopJavaPolyglotAppHostUsingApphostDirectory ▶️ View recording
StopNonInteractiveSingleAppHost ▶️ View recording
StopTypeScriptPolyglotAppHostUsingApphostDirectory ▶️ View recording
StopWithNoRunningAppHostExitsSuccessfully ▶️ View recording
UnAwaitedChainsCompileWithAutoResolvePromises ▶️ View recording
UpdateProjectChannelToStable_TypeScript_PicksUpStablePackages ▶️ View recording

📹 Recordings uploaded automatically from CI run #26193420935

@joperezr joperezr merged commit 177f368 into main May 21, 2026
606 of 609 checks passed
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.4 milestone May 21, 2026
@aspire-repo-bot
Copy link
Copy Markdown
Contributor

✅ No documentation update needed.

docs_required → already documented by name on release/13.4 of microsoft/aspire.dev.

This PR is a back-merge of the v13.3.4 release tag into main. All 9 triggered signals map to changes that were already documented as part of the v13.3 release cycle:

Triggered signal Identifier Already documented in
cli_option_added --pipeline-log-level reference/cli/commands/aspire-deploy.mdx line 85: **\--pipeline-log-level`**; aspire-destroy.mdxline 103;aspire-publish.mdx; aspire-do.mdx`
cli_command_file_changed DeployCommand.cs, DestroyCommand.cs --pipeline-log-level documented on both aspire-deploy and aspire-destroy command pages
cli_resource_strings_changed ConsoleActivityLoggerStrings.resx references --pipeline-log-level whats-new/aspire-13-3.mdx line 53: "--log-level to --pipeline-log-level, ..."; line 1247 migration table
pr_body_has_cli_flag_mention --yes aspire-destroy.mdx: "Use the --yes flag to skip the confirmation prompt in automated or non-interactive scenarios."
breaking_api_removal / new_public_type / public_api_surface_file_changed AzureAppConfigurationResource / IExpressionValue whats-new/aspire-13-3.mdx: "The value argument accepts any of: a plain string, a ReferenceExpression, an EndpointReference, a parameter builder, a connection string resource builder, or an IExpressionValue."
mcp_tool_file_changed McpToolHelpers.cs / IDashboardInfoProvider.cs Internal URL normalization fix for dev.localhost — no new MCP tool or user-facing option introduced
diff_scan_skipped_due_to_missing_patch Large API baseline files Conservative fallback; patch omitted for large api/*.cs files that carry v13.3 baseline regeneration already covered above

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants