Skip to content

Enable Native AOT dashboard with Fluent UI v5 - #19565

Merged
James Newton-King (JamesNK) merged 20 commits into
mainfrom
jamesnk/fluent-v5-native-aot
Sep 22, 2026
Merged

James Newton-King (JamesNK) merged 20 commits into
mainfrom
jamesnk/fluent-v5-native-aot

Conversation

@JamesNK

@JamesNK James Newton-King (JamesNK) commented Aug 21, 2026 •

Copy link
Copy Markdown
Member

Fixes #1719

Description

Enables the Aspire Dashboard to publish and run as a standalone Native AOT executable, with the Fluent UI and runtime changes needed to support it. The Dashboard becomes a dedicated bundle component containing its executable and static assets, rather than running through the aspire-managed dashboard subcommand.

Existing aspire dashboard run, AppHost startup, and CLI profile-capture workflows select the appropriate Dashboard automatically. No new user-facing command-line options are required.

Dashboard runtime and UI

  • Update Fluent UI integration across grids, dialogs, filters, notifications, charts, resource details, log viewing, and telemetry pages. Add delegate-based in-memory sorting and paging, explicit grid refresh behavior, and loading content without relying on expression compilation.
  • Use generated JSON metadata for Blazor circuits, HTTP APIs, browser storage, resource graphs, telemetry import/export, and Dashboard telemetry. Replace anonymous or reflection-dependent payloads with explicit serializable types where needed.
  • Enable Dapper AOT generation and adapt SQLite resource and telemetry queries, parameters, caching, and result mapping for native execution.
  • Update configuration and authentication option binding, certificate loading, version discovery, and icon lookup for trimming and Native AOT. Preserve required components, icon types, and manifest resources.
  • Replace MVC's status-code attribute with a local ISkipStatusCodePagesMetadata implementation so API and OTLP error responses remain unchanged without retaining unrelated MVC helpers. The workaround is linked to dotnet/aspnetcore#69217.
  • Keep detailed first-party trimming/AOT diagnostics enabled. Group known dependency warnings by assembly and scope justified first-party suppressions to their owners. A framework substitution-XML warning remains a documented global exception; this does not make all dependencies warning-free.

Packaging and process lifecycle

  • Publish, package, sign, download, and assemble the native Dashboard and its static assets for supported platforms. Update bundle documentation, layout tooling, playground configuration, and build inputs accordingly.
  • Update CLI, hosting, SDK bundle resolution, and profile capture to discover and launch the dedicated Dashboard. Preserve compatible legacy layouts and managed fallback for older AppHosts, while rejecting incomplete native Dashboard layouts.
  • Validate the requested build configuration and required Dashboard assets during layout creation so stale or incomplete publishes are not silently packaged.
  • Give the Dashboard its own bundle-version lease to protect its executable and assets during CLI updates. Retain parent-process shutdown handling and explicitly set its content root to the executable directory, independently of the caller's working directory.
  • Remove Dashboard hosting from the managed command entry point and update startup diagnostics and localized CLI messages for the native layout.

Build and test infrastructure

  • Update target frameworks and framework dependencies for the Dashboard and affected tests/benchmarks, add the Dapper AOT dependency, and update package-source configuration. The branch currently includes repository-local Dapper packages.
  • Extend native archive CI with startup/static-asset smoke checks and a Windows browser interactivity test, with explicit outerloop opt-in. Cross-compiled targets are executed only where the runner supports them; the Windows ARM runner is updated for the required native linker.
  • Update conditional test selection, archive handling, and CLI end-to-end helpers for the new bundle layout, including compatibility smoke coverage and improved failure diagnostics.
  • Add or update tests for bundle discovery and validation, AppHost launch compatibility, profiling, configuration/security option binding, JSON serialization, browser storage, resource graphs, grids, log viewing, and API/OTLP status-code behavior.

Compatibility and remaining work

File-based resource-service client certificates now use X509CertificateLoader.LoadPkcs12FromFile and accept only PKCS#12/PFX files. As documented in the Dashboard README, configurations using other certificate containers must export the certificate and private key as PKCS#12/PFX or use the certificate-store option.

Native AOT support currently uses experimental Blazor/Fluent UI APIs and documented upstream workarounds. This PR remains a draft with follow-up work expected.

Validation

  • Native Windows x64 publishes have passed in Debug and Release with warnings treated as errors under the scoped-warning configuration. Windows ARM64 cross-publishing was also exercised during development; the ARM64 executable was not run locally.
  • The native browser test passed from an unrelated temporary working directory, covering UI loading, interactive settings, browser errors, and bundle-lease cleanup.
  • An isolated Native AOT audit using the production icon resolver passed all 14,650 icon constructions, plus cache, casing, default, fallback, and missing-name checks.
  • Focused HTTP, gRPC, and telemetry API regression tests passed, confirming unauthorized responses are not replaced with HTML status pages. Component, CLI compatibility, and workflow-selection tests were also exercised during development.
  • These are development validation results, not a claim that the full cross-platform matrix was rerun locally for the latest head. Cross-platform coverage is provided by the PR workflows.

Screenshots / Recordings

No screenshots or recordings are included.

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

Copilot AI balanced review requested due to automatic review settings August 21, 2026 10:49
@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 -- 19565

Or

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

Copilot AI 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

Migrates the Dashboard to Fluent UI v5 and .NET 11 Native AOT, including native bundle discovery, packaging, launch paths, and compatibility fallbacks.

Changes:

  • Migrates Dashboard components, styling, serialization, and tests to Fluent UI v5.
  • Packages and launches a standalone Native AOT Dashboard across supported platforms.
  • Updates CI, signing, dependencies, localization, and bundle tooling.

Reviewed changes

Copilot reviewed 287 out of 289 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
.github/actions/select-tests/action.yml Installs required runtime.
.github/workflows/build-cli-native-archives.yml Tests native Dashboard archives.
.github/workflows/tests.yml Updates ARM build runner.
Directory.Build.props Updates Dashboard TFM path.
Directory.Packages.props Updates Fluent UI dependencies.
NuGet.config Adds approved .NET 11 feed.
THIRD-PARTY-NOTICES.TXT Adds IMask notice.
benchmarks/Aspire.Dashboard.Benchmarks/Aspire.Dashboard.Benchmarks.csproj Targets .NET 11.
docs/specs/bundle.md Documents native Dashboard layout.
eng/Bundle.proj Publishes native Dashboard.
eng/Signing.props Signs Dashboard executables.
eng/Versions.props Defines .NET 11 versions.
eng/clipack/Common.projitems Packages native bundle payload.
eng/dashboardpack/Common.projitems Packages Dashboard artifacts.
eng/dashboardpack/Sdk.targets Exposes Dashboard executable path.
eng/pipelines/azure-pipelines.yml Carries Dashboard artifacts.
eng/pipelines/templates/build_sign_native.yml Builds and signs Dashboard.
eng/scripts/download-native-archives.ps1 Downloads Dashboard artifacts.
eng/scripts/test-native-dashboard.ps1 Smoke-tests native Dashboard.
global.json Selects .NET 11 SDK.
playground/Directory.Build.targets Updates playground Dashboard path.
src/Aspire.Cli/Bundles/BundleService.cs Handles Dashboard bundle component.
src/Aspire.Cli/Commands/DashboardRunCommand.cs Launches native Dashboard.
src/Aspire.Cli/Layout/LayoutConfiguration.cs Resolves Dashboard executable.
src/Aspire.Cli/Layout/LayoutDiscovery.cs Discovers Dashboard bundle.
src/Aspire.Cli/Profiling/ProfileCaptureService.cs Profiles native Dashboard.
src/Aspire.Cli/Projects/DotNetAppHostProject.cs Passes bundle paths.
src/Aspire.Cli/Projects/DotNetBasedAppHostServerProject.cs Passes Dashboard environment.
src/Aspire.Cli/Projects/PrebuiltAppHostServer.cs Configures native Dashboard.
src/Aspire.Cli/Resources/DashboardCommandStrings.resx Updates launch messages.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.cs.xlf Updates Czech localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.de.xlf Updates German localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.es.xlf Updates Spanish localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.fr.xlf Updates French localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.it.xlf Updates Italian localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.ja.xlf Updates Japanese localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.ko.xlf Updates Korean localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.pl.xlf Updates Polish localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.pt-BR.xlf Updates Portuguese localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.ru.xlf Updates Russian localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.tr.xlf Updates Turkish localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.zh-Hans.xlf Updates Chinese localization.
src/Aspire.Cli/Resources/xlf/DashboardCommandStrings.zh-Hant.xlf Updates Chinese localization.
src/Aspire.Dashboard/Api/TelemetryApiService.cs Uses generated serialization.
src/Aspire.Dashboard/Aspire.Dashboard.csproj Enables .NET 11 AOT.
src/Aspire.Dashboard/BlazorAssets.targets Manages Blazor static assets.
src/Aspire.Dashboard/Components/App.razor Updates Fluent bootstrap.
src/Aspire.Dashboard/Components/BlazorScript.razor Selects Blazor script.
src/Aspire.Dashboard/Components/Controls/AspireMenu.razor Migrates menu rendering.
src/Aspire.Dashboard/Components/Controls/AspireMenu.razor.cs Implements v5 menu lifecycle.
src/Aspire.Dashboard/Components/Controls/AspireMenuButton.razor Migrates menu button.
src/Aspire.Dashboard/Components/Controls/AspireMenuButton.razor.cs Updates menu state handling.
src/Aspire.Dashboard/Components/Controls/Chart/ChartContainer.razor Migrates chart controls.
src/Aspire.Dashboard/Components/Controls/Chart/ChartContainer.razor.cs Updates chart interactions.
src/Aspire.Dashboard/Components/Controls/Chart/ChartFilterPopover.razor Migrates filter popover.
src/Aspire.Dashboard/Components/Controls/Chart/ChartFilterTags.razor Migrates filter tags.
src/Aspire.Dashboard/Components/Controls/Chart/ChartFilterTags.razor.cs Updates tag behavior.
src/Aspire.Dashboard/Components/Controls/Chart/ChartFilters.razor Migrates chart filters.
src/Aspire.Dashboard/Components/Controls/Chart/MetricTable.razor Migrates metric grid.
src/Aspire.Dashboard/Components/Controls/Chart/MetricTable.razor.cs Updates metric grid logic.
src/Aspire.Dashboard/Components/Controls/ClearSignalsButton.razor Migrates clear menu.
src/Aspire.Dashboard/Components/Controls/DashboardMessageBar.razor Uses Fluent message bars.
src/Aspire.Dashboard/Components/Controls/DashboardMessageBar.razor.css Styles message bars.
src/Aspire.Dashboard/Components/Controls/DetailView.razor Migrates detail layout.
src/Aspire.Dashboard/Components/Controls/ExceptionDetails.razor Migrates exception display.
src/Aspire.Dashboard/Components/Controls/FluentIconSwitch.razor Updates switch icons.
src/Aspire.Dashboard/Components/Controls/Grid/AspireFluentDataGrid.cs Adapts Fluent data grid.
src/Aspire.Dashboard/Components/Controls/Grid/AspirePropertyColumn.cs Adapts property columns.
src/Aspire.Dashboard/Components/Controls/Grid/AspireTemplateColumn.cs Adapts template columns.
src/Aspire.Dashboard/Components/Controls/GridValue.razor Migrates grid values.
src/Aspire.Dashboard/Components/Controls/IconCheckbox.razor.cs Updates checkbox behavior.
src/Aspire.Dashboard/Components/Controls/InteractionInputField.razor Migrates interaction inputs.
src/Aspire.Dashboard/Components/Controls/InteractionInputField.razor.cs Updates input logic.
src/Aspire.Dashboard/Components/Controls/LogLevelSelect.razor Migrates log selector.
src/Aspire.Dashboard/Components/Controls/LogViewer.razor.css Updates log styling.
src/Aspire.Dashboard/Components/Controls/PauseIncomingDataSwitch.razor Migrates pause switch.
src/Aspire.Dashboard/Components/Controls/PropertyGrid.razor Migrates property grid.
src/Aspire.Dashboard/Components/Controls/PropertyGrid.razor.cs Updates property grid logic.
src/Aspire.Dashboard/Components/Controls/PropertyValues/IconValue.razor Updates icon values.
src/Aspire.Dashboard/Components/Controls/PropertyValues/ResourceNameButtonValue.razor Updates resource links.
src/Aspire.Dashboard/Components/Controls/PropertyValues/SpanIdButtonValue.razor Updates span links.
src/Aspire.Dashboard/Components/Controls/PropertyValues/SpanKindValue.razor Updates span-kind display.
src/Aspire.Dashboard/Components/Controls/PropertyValues/TraceIdButtonValue.razor Updates trace links.
src/Aspire.Dashboard/Components/Controls/ResourceActions.razor Migrates resource actions.
src/Aspire.Dashboard/Components/Controls/ResourceActions.razor.css Styles resource actions.
src/Aspire.Dashboard/Components/Controls/ResourceDetails.razor Migrates resource details.
src/Aspire.Dashboard/Components/Controls/ResourceDetails.razor.cs Updates resource details logic.
src/Aspire.Dashboard/Components/Controls/ResourceDetails.razor.css Styles resource details.
src/Aspire.Dashboard/Components/Controls/ResourceSelect.razor Migrates resource selector.
src/Aspire.Dashboard/Components/Controls/ResourceSelect.razor.cs Updates selector behavior.
src/Aspire.Dashboard/Components/Controls/ResourceSelectOptionTemplate.razor Updates selector options.
src/Aspire.Dashboard/Components/Controls/SpanActions.razor Migrates span actions.
src/Aspire.Dashboard/Components/Controls/SpanDetails.razor Migrates span details.
src/Aspire.Dashboard/Components/Controls/SpanDetails.razor.cs Updates span details logic.
src/Aspire.Dashboard/Components/Controls/SpanDetails.razor.css Styles span details.
src/Aspire.Dashboard/Components/Controls/SpanTypeSelect.razor Migrates span selector.
src/Aspire.Dashboard/Components/Controls/StructuredLogActions.razor Migrates log actions.
src/Aspire.Dashboard/Components/Controls/StructuredLogDetails.razor Migrates log details.
src/Aspire.Dashboard/Components/Controls/StructuredLogDetails.razor.css Styles log details.
src/Aspire.Dashboard/Components/Controls/SummaryDetailsView.razor Migrates splitter layout.
src/Aspire.Dashboard/Components/Controls/SummaryDetailsView.razor.cs Handles v5 splitter sizing.
src/Aspire.Dashboard/Components/Controls/SummaryDetailsView.razor.css Styles splitter layout.
src/Aspire.Dashboard/Components/Controls/TraceActions.razor Migrates trace actions.
src/Aspire.Dashboard/Components/Controls/TreeGenAISelector.razor Migrates GenAI tree.
src/Aspire.Dashboard/Components/Controls/TreeGenAISelector.razor.cs Updates GenAI selection.
src/Aspire.Dashboard/Components/Controls/TreeMetricSelector.razor Migrates metric tree.
src/Aspire.Dashboard/Components/Controls/TreeMetricSelector.razor.cs Updates metric selection.
src/Aspire.Dashboard/Components/Controls/UserProfile.razor Migrates profile menu.
src/Aspire.Dashboard/Components/DashboardComponentActivator.cs Adds AOT-safe activation.
src/Aspire.Dashboard/Components/Dialogs/AIAgentsDialog.razor Migrates agents dialog.
src/Aspire.Dashboard/Components/Dialogs/AIAgentsDialog.razor.cs Updates agents dialog logic.
src/Aspire.Dashboard/Components/Dialogs/ExemplarsDialog.razor Migrates exemplars dialog.
src/Aspire.Dashboard/Components/Dialogs/FilterDialog.razor Migrates filter dialog.
src/Aspire.Dashboard/Components/Dialogs/FilterDialog.razor.cs Updates filter dialog logic.
src/Aspire.Dashboard/Components/Dialogs/GenAIVisualizerDialog.razor Migrates GenAI dialog.
src/Aspire.Dashboard/Components/Dialogs/GenAIVisualizerDialog.razor.cs Updates GenAI dialog logic.
src/Aspire.Dashboard/Components/Dialogs/HelpDialog.razor Migrates help dialog.
src/Aspire.Dashboard/Components/Dialogs/InteractionMessageBoxDialog.razor Migrates message dialog.
src/Aspire.Dashboard/Components/Dialogs/InteractionsInputDialog.razor Migrates input dialog.
src/Aspire.Dashboard/Components/Dialogs/InteractionsInputDialog.razor.cs Updates input dialog logic.
src/Aspire.Dashboard/Components/Dialogs/InteractionsInputDialog.razor.css Styles input dialog.
src/Aspire.Dashboard/Components/Dialogs/InteractionsProgressDialog.razor Migrates progress dialog.
src/Aspire.Dashboard/Components/Dialogs/InteractionsProgressDialog.razor.cs Updates progress dialog logic.
src/Aspire.Dashboard/Components/Dialogs/ManageDataDialog.razor Migrates data dialog.
src/Aspire.Dashboard/Components/Dialogs/ManageDataDialog.razor.cs Updates data dialog logic.
src/Aspire.Dashboard/Components/Dialogs/NotificationEntryComponent.razor Migrates notifications.
src/Aspire.Dashboard/Components/Dialogs/NotificationEntryComponent.razor.cs Updates notification actions.
src/Aspire.Dashboard/Components/Dialogs/NotificationsDialog.razor Migrates notification center.
src/Aspire.Dashboard/Components/Dialogs/NotificationsDialog.razor.cs Updates notification state.
src/Aspire.Dashboard/Components/Dialogs/SettingsDialog.razor Migrates settings dialog.
src/Aspire.Dashboard/Components/Dialogs/SettingsDialog.razor.cs Updates settings dialog logic.
src/Aspire.Dashboard/Components/Dialogs/TextVisualizerDialog.razor Migrates text dialog.
src/Aspire.Dashboard/Components/Dialogs/TextVisualizerDialog.razor.cs Updates text dialog logic.
src/Aspire.Dashboard/Components/Dialogs/TextVisualizerDialog.razor.css Styles text dialog.
src/Aspire.Dashboard/Components/Interactions/InteractionsProvider.cs Updates dialog orchestration.
src/Aspire.Dashboard/Components/Layout/AspirePageContentLayout.razor Migrates page layout.
src/Aspire.Dashboard/Components/Layout/AspirePageContentLayout.razor.cs Updates responsive layout.
src/Aspire.Dashboard/Components/Layout/AspirePageContentLayout.razor.css Styles page layout.
src/Aspire.Dashboard/Components/Layout/DesktopToolbarDivider.razor Migrates toolbar divider.
src/Aspire.Dashboard/Components/Layout/MainLayout.razor Migrates main layout.
src/Aspire.Dashboard/Components/Layout/MainLayout.razor.cs Updates main layout logic.
src/Aspire.Dashboard/Components/Layout/MainLayout.razor.css Styles main layout.
src/Aspire.Dashboard/Components/Layout/MobileNavMenu.razor Migrates mobile navigation.
src/Aspire.Dashboard/Components/Layout/NotificationsHeaderButton.razor Migrates notification button.
src/Aspire.Dashboard/Components/Layout/ReconnectModal.razor Migrates reconnect modal.
src/Aspire.Dashboard/Components/Layout/ToolbarPanel.razor Migrates toolbar overflow.
src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor Migrates console page.
src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor.cs Updates console interactions.
src/Aspire.Dashboard/Components/Pages/Login.razor Migrates login controls.
src/Aspire.Dashboard/Components/Pages/Login.razor.cs Updates login behavior.
src/Aspire.Dashboard/Components/Pages/Metrics.razor Migrates metrics page.
src/Aspire.Dashboard/Components/Pages/Metrics.razor.css Styles metrics page.
src/Aspire.Dashboard/Components/Pages/Resources.razor Migrates resources page.
src/Aspire.Dashboard/Components/Pages/Resources.razor.cs Updates resource interactions.
src/Aspire.Dashboard/Components/Pages/Resources.razor.css Styles resources page.
src/Aspire.Dashboard/Components/Pages/StructuredLogs.razor Migrates logs page.
src/Aspire.Dashboard/Components/Pages/StructuredLogs.razor.cs Updates logs interactions.
src/Aspire.Dashboard/Components/Pages/StructuredLogs.razor.css Styles logs page.
src/Aspire.Dashboard/Components/Pages/TraceDetail.razor Migrates trace details.
src/Aspire.Dashboard/Components/Pages/TraceDetail.razor.cs Updates trace behavior.
src/Aspire.Dashboard/Components/Pages/TraceDetail.razor.css Styles trace details.
src/Aspire.Dashboard/Components/Pages/Traces.razor Migrates traces page.
src/Aspire.Dashboard/Components/Pages/Traces.razor.cs Updates traces interactions.
src/Aspire.Dashboard/Components/Pages/Traces.razor.css Styles traces page.
src/Aspire.Dashboard/Components/Resize/GridColumnManager.razor.cs Updates resize handling.
src/Aspire.Dashboard/Components/ResourcesGridColumns/LogMessageColumnDisplay.razor Updates log column.
src/Aspire.Dashboard/Components/ResourcesGridColumns/ResourceNameDisplay.razor Updates resource column.
src/Aspire.Dashboard/Components/ResourcesGridColumns/UnreadLogErrorsBadge.razor Updates error badge.
src/Aspire.Dashboard/Components/ResourcesGridColumns/UrlsColumnDisplay.razor Updates URL column.
src/Aspire.Dashboard/Components/ResourcesGridColumns/UrlsColumnDisplay.razor.cs Updates URL actions.
src/Aspire.Dashboard/Configuration/DashboardOptions.cs Adds generated binding support.
src/Aspire.Dashboard/DashboardWebApplication.cs Configures AOT-safe Dashboard.
src/Aspire.Dashboard/Extensions/ComponentExtensions.cs Updates component helpers.
src/Aspire.Dashboard/Model/BrowserStorage/LocalBrowserStorage.cs Uses generated JSON metadata.
src/Aspire.Dashboard/Model/DashboardCommandExecutor.cs Updates Fluent notifications.
src/Aspire.Dashboard/Model/DashboardDialogParameters.cs Adapts dialog parameters.
src/Aspire.Dashboard/Model/DashboardDialogService.cs Adapts Fluent dialogs.
src/Aspire.Dashboard/Model/DashboardMessageBarService.cs Adds message-bar lifecycle.
src/Aspire.Dashboard/Model/GenAI/GenAIMessages.cs Updates generated serialization.
src/Aspire.Dashboard/Model/INotificationService.cs Updates notification intent.
src/Aspire.Dashboard/Model/Interaction/InputViewModel.cs Updates input binding.
src/Aspire.Dashboard/Model/Interaction/InteractionMessageBoxContent.cs Updates dialog content.
src/Aspire.Dashboard/Model/MenuButtonItem.cs Updates menu model.
src/Aspire.Dashboard/Model/ResourceStateViewModel.cs Updates Fluent colors.
src/Aspire.Dashboard/Model/Serialization/ResourceJsonSerializerContext.cs Expands JSON metadata.
src/Aspire.Dashboard/Model/TelemetryExportService.cs Uses generated export serialization.
src/Aspire.Dashboard/Model/TelemetryImportService.cs Uses generated import serialization.
src/Aspire.Dashboard/Model/ThemeManager.cs Updates theme integration.
src/Aspire.Dashboard/Model/TraceLinkHelpers.cs Updates trace links.
src/Aspire.Dashboard/Otlp/Http/OtlpHttpEndpointsBuilder.cs Uses generated endpoint metadata.
src/Aspire.Dashboard/Otlp/Storage/TelemetryRepository.cs Updates telemetry serialization.
src/Aspire.Dashboard/Program.cs Starts standalone Dashboard.
src/Aspire.Dashboard/Serialization/DashboardJsonSerializerContext.cs Defines AOT JSON metadata.
src/Aspire.Dashboard/ServiceClient/DashboardClient.cs Adds AOT-safe TLS binding.
src/Aspire.Dashboard/Telemetry/DashboardTelemetryJsonSerializerContext.cs Defines telemetry metadata.
src/Aspire.Dashboard/Telemetry/DashboardTelemetrySender.cs Uses generated telemetry JSON.
src/Aspire.Dashboard/Telemetry/DashboardTelemetryService.cs Updates telemetry parsing.
src/Aspire.Dashboard/Telemetry/VisualStudioTelemetryTypes.cs Updates serialized types.
src/Aspire.Dashboard/Utils/DashboardUIHelpers.cs Updates Fluent UI helpers.
src/Aspire.Dashboard/wwwroot/css/app.css Updates global styles.
src/Aspire.Dashboard/wwwroot/css/layout.css Adds responsive layout styles.
src/Aspire.Dashboard/wwwroot/css/markdown.css Updates markdown styles.
src/Aspire.Dashboard/wwwroot/css/tokens.css Defines Fluent tokens.
src/Aspire.Dashboard/wwwroot/js/README.md Documents vendored scripts.
src/Aspire.Dashboard/wwwroot/js/app-resourcegraph.js Updates graph integration.
src/Aspire.Dashboard/wwwroot/js/app-theme.js Updates theme integration.
src/Aspire.Dashboard/wwwroot/js/app.js Updates Dashboard JS.
src/Aspire.Dashboard/wwwroot/js/fluent-ui-blazor-v5-bootstrap.js Bootstraps Fluent v5.
src/Aspire.Dashboard/wwwroot/js/imask-7.6.1.min.js Vendors IMask.
src/Aspire.Hosting.Tasks/ResolveAspireCliBundle.cs Resolves native Dashboard.
src/Aspire.Hosting/Dashboard/DashboardEventHandlers.cs Launches native Dashboard.
src/Aspire.Hosting/Dcp/DcpOptions.cs Configures Dashboard and terminal paths.
src/Aspire.Managed/Aspire.Managed.csproj Removes embedded Dashboard command.
src/Aspire.Managed/Program.cs Updates managed dispatch.
src/Shared/BundleDiscovery.cs Shares Dashboard discovery constants.
src/Shared/IConfigurationExtensions.cs Adds generated binding helpers.
src/Shared/Otlp/Serialization/OtlpJsonSerializerContext.cs Adds serializer option contexts.
tests/Aspire.Cli.Tests/BundleServiceIntegrationTests.cs Tests Dashboard bundle extraction.
tests/Aspire.Cli.Tests/Commands/DashboardRunCommandTests.cs Tests native launch.
tests/Aspire.Cli.Tests/Layout/LayoutConfigurationTests.cs Tests Dashboard resolution.
tests/Aspire.Cli.Tests/Layout/LayoutDiscoveryReparsePointTests.cs Tests bundle discovery.
tests/Aspire.Cli.Tests/Layout/LayoutProcessRunnerTests.cs Updates layout tests.
tests/Aspire.Cli.Tests/ProfileCaptureOptionsTests.cs Updates profile options.
tests/Aspire.Cli.Tests/ProfileCaptureServiceTests.cs Tests native profiling.
tests/Aspire.Cli.Tests/Projects/PrebuiltAppHostServerTests.cs Tests path propagation.
tests/Aspire.Dashboard.Components.Tests/Aspire.Dashboard.Components.Tests.csproj Updates Fluent test dependencies.
tests/Aspire.Dashboard.Components.Tests/Controls/AspireMenuButtonTests.cs Tests menu button behavior.
tests/Aspire.Dashboard.Components.Tests/Controls/AspireMenuTests.cs Tests menu lifecycle.
tests/Aspire.Dashboard.Components.Tests/Controls/GenAIVisualizerDialogTests.cs Updates GenAI dialog tests.
tests/Aspire.Dashboard.Components.Tests/Controls/ResourceDetailsTests.cs Updates details tests.
tests/Aspire.Dashboard.Components.Tests/Controls/ResourceSelectTests.cs Updates selector tests.
tests/Aspire.Dashboard.Components.Tests/Controls/StructuredLogDetailsTests.cs Updates log details tests.
tests/Aspire.Dashboard.Components.Tests/Controls/TextVisualizerDialogTests.cs Updates text dialog tests.
tests/Aspire.Dashboard.Components.Tests/Controls/UrlsColumnDisplayTests.cs Updates URL tests.
tests/Aspire.Dashboard.Components.Tests/DashboardMessageBarServiceTests.cs Tests message-bar lifecycle.
tests/Aspire.Dashboard.Components.Tests/Dialogs/FilterDialogTests.cs Updates filter tests.
tests/Aspire.Dashboard.Components.Tests/Dialogs/InteractionsInputDialogTests.cs Updates input dialog tests.
tests/Aspire.Dashboard.Components.Tests/Dialogs/ManageDataDialogTests.cs Updates data dialog tests.
tests/Aspire.Dashboard.Components.Tests/Interactions/InteractionsProviderTests.cs Updates interaction tests.
tests/Aspire.Dashboard.Components.Tests/Layout/MainLayoutTests.cs Updates layout tests.
tests/Aspire.Dashboard.Components.Tests/Layout/MobileNavMenuTests.cs Updates mobile navigation tests.
tests/Aspire.Dashboard.Components.Tests/Model/DashboardDialogServiceTests.cs Tests dialog adapter.
tests/Aspire.Dashboard.Components.Tests/Pages/ConsoleLogsTerminalTests.cs Updates terminal tests.
tests/Aspire.Dashboard.Components.Tests/Pages/ConsoleLogsTests.cs Updates console tests.
tests/Aspire.Dashboard.Components.Tests/Pages/LoginTests.cs Updates login tests.
tests/Aspire.Dashboard.Components.Tests/Pages/MetricsTests.cs Updates metrics tests.
tests/Aspire.Dashboard.Components.Tests/Pages/ResourcesTests.cs Updates resources tests.
tests/Aspire.Dashboard.Components.Tests/Pages/StructuredLogsTests.cs Updates logs tests.
tests/Aspire.Dashboard.Components.Tests/Pages/TraceDetailsTests.cs Updates trace detail tests.
tests/Aspire.Dashboard.Components.Tests/Shared/DashboardComponentActivatorTests.cs Tests custom activation.
tests/Aspire.Dashboard.Components.Tests/Shared/DashboardPageTestContext.cs Updates test context.
tests/Aspire.Dashboard.Components.Tests/Shared/FluentUISetupHelpers.cs Mocks Fluent v5 JS.
tests/Aspire.Dashboard.Components.Tests/Shared/TestMessageService.cs Updates message fake.
tests/Aspire.Dashboard.Tests/Aspire.Dashboard.Tests.csproj Targets .NET 11.
tests/Aspire.Dashboard.Tests/BlazorAssetsTests.cs Tests static assets.
tests/Aspire.Dashboard.Tests/DashboardJsonSerializerContextTests.cs Tests generated metadata.
tests/Aspire.Dashboard.Tests/Integration/FrontendBrowserTokenAuthTests.cs Updates auth tests.
tests/Aspire.Dashboard.Tests/Integration/Playwright/AccessibilityTests.cs Updates accessibility tests.
tests/Aspire.Dashboard.Tests/Integration/Playwright/AppBarTests.cs Updates app-bar tests.
tests/Aspire.Dashboard.Tests/Integration/Playwright/AspireMenuButtonFocusTests.cs Tests menu focus.
tests/Aspire.Dashboard.Tests/Integration/Playwright/AspireMenuLayoutTests.cs Tests menu layout.
tests/Aspire.Dashboard.Tests/Integration/Playwright/DashboardInteractionsTests.cs Tests Dashboard interactions.
tests/Aspire.Dashboard.Tests/Integration/Playwright/DesktopNavMenuTests.cs Updates desktop navigation tests.
tests/Aspire.Dashboard.Tests/Integration/Playwright/NativeAotDashboardTests.cs Tests native interactivity.
tests/Aspire.Dashboard.Tests/Integration/Playwright/ResourceSelectInteractionTests.cs Tests selector interactions.
tests/Aspire.Dashboard.Tests/Integration/Playwright/ResourcesTests.cs Updates resource UI tests.
tests/Aspire.Dashboard.Tests/Integration/Playwright/StructuredLogsLayoutTests.cs Tests logs layout.
tests/Aspire.Dashboard.Tests/Integration/Playwright/TracesLayoutTests.cs Tests traces layout.
tests/Aspire.Dashboard.Tests/Integration/ResponseCompressionTests.cs Updates asset compression tests.
tests/Aspire.Dashboard.Tests/Integration/StartupTests.cs Updates startup tests.
tests/Aspire.Dashboard.Tests/Integration/TelemetryApiTests.cs Updates telemetry API tests.
tests/Aspire.Dashboard.Tests/Model/DashboardCommandExecutorTests.cs Updates notification tests.
tests/Aspire.Dashboard.Tests/Model/InputViewModelTests.cs Updates input tests.
tests/Aspire.Dashboard.Tests/Model/ResourceStateViewModelTests.cs Updates color expectations.
tests/Aspire.Dashboard.Tests/SecurityOptionsBindingTests.cs Tests AOT option binding.
tests/Aspire.Dashboard.Tests/Telemetry/DashboardTelemetryServiceTests.cs Updates telemetry tests.
tests/Aspire.Dashboard.Tests/TelemetryApiServiceTests.cs Tests Unicode streaming.
tests/Aspire.Hosting.Sdk.Tests.FakeCommand/Program.cs Creates fake Dashboard bundle.
tests/Aspire.Hosting.Sdk.Tests/AppHostSdkTargetsTests.cs Tests SDK Dashboard metadata.
tests/Aspire.Hosting.Tests/Dashboard/DashboardEventHandlersTests.cs Tests native launch behavior.
tests/Aspire.Hosting.Tests/Dashboard/DashboardResourceTests.cs Updates Dashboard resource tests.
tests/Aspire.Hosting.Tests/MSBuildTests.cs Updates bundle MSBuild tests.
tests/Infrastructure.Tests/PowerShellScripts/DownloadNativeArchivesTests.cs Tests artifact downloads.
tests/Infrastructure.Tests/TestTriggerMap/SelectTestsWorkflowTests.cs Tests CI selection changes.
tests/Shared/Telemetry/TelemetryTestHelpers.cs Uses modern certificate loader.
tests/Shared/TestCertificateLoader.cs Uses modern certificate loader.
tests/Shared/TestDialogService.cs Updates dialog fake.
tools/CreateLayout/Program.cs Assembles native Dashboard bundle.
tools/CreateLayout/README.md Documents bundle layout.

Comment thread .github/actions/select-tests/action.yml Outdated
Comment thread tools/CreateLayout/Program.cs
Comment thread tools/CreateLayout/README.md Outdated
Comment thread tools/CreateLayout/README.md Outdated
Comment thread src/Aspire.Dashboard/Components/Pages/Login.razor Outdated
Copilot AI review requested due to automatic review settings August 21, 2026 21:59

Copilot AI 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 287 out of 289 changed files in this pull request and generated 4 comments.

Suppressed comments (1)

src/Aspire.Dashboard/Components/Pages/Login.razor:49

  • Appearance is a Fluent component parameter, but this is now a native HTML anchor, so Razor emits an inert appearance="ButtonAppearance.Subtle" attribute. The existing stylesheet also still targets fluent-anchor, which means this link loses the intended subtle Fluent styling and sizing. Please give the native anchor an explicit class and update the scoped CSS, or use the supported v5 Fluent link component.

Comment thread src/Aspire.Dashboard/Components/Controls/UserProfile.razor Outdated
Comment thread src/Aspire.Cli/Layout/LayoutConfiguration.cs Outdated
Comment thread src/Aspire.Hosting.Tasks/ResolveAspireCliBundle.cs
Comment thread tools/CreateLayout/Program.cs
@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Copilot AI review requested due to automatic review settings August 21, 2026 22:26
@github-actions

This comment has been minimized.

Copilot AI 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 287 out of 289 changed files in this pull request and generated 1 comment.

Suppressed comments (3)

Previously missed (1) — in code that hasn't changed since the last review.

src/Aspire.Cli/Projects/PrebuiltAppHostServer.cs:1499

  • ASPIRE_DASHBOARD_PATH is an override, but this unconditionally replaces an inherited value with the bundle path. A prebuilt AppHost launched with a custom Dashboard therefore ignores that override, unlike the terminal-host handling immediately below and the regular DotNetAppHostProject path. Guard this default with HasEnvironmentOverride.
        var dashboardPath = _layout.GetDashboardPath();
        if (dashboardPath is not null)
        {
            startInfo.Environment[BundleDiscovery.DashboardPathEnvVar] = dashboardPath;
        }

src/Aspire.Dashboard/Components/Controls/UserProfile.razor:8

  • The replacement <details> menu has no matching styles. UserProfile.razor.css still targets .fluent-profile-menu, fluent-anchored-region, and .fluent-persona, so opening this control now renders browser-default disclosure content in normal header flow instead of an anchored profile popover. Update the markup and isolated CSS together to preserve the profile menu layout.
    src/Aspire.Dashboard/Components/Pages/Login.razor:49
  • Appearance is a Fluent component parameter and has no effect on a native <a> element. The existing .token-help-container fluent-anchor CSS selector also no longer matches, so this action loses its intended Fluent styling. Use a supported Fluent v5 anchor or add an explicit class and corresponding anchor styles.

Comment thread src/Aspire.Cli/Layout/LayoutDiscovery.cs
@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

This comment has been minimized.

Copilot AI 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 284 out of 286 changed files in this pull request and generated 6 comments.

Comment thread src/Aspire.Dashboard/wwwroot/js/app.js
Comment thread src/Aspire.Dashboard/Components/Dialogs/GenAIVisualizerDialog.razor Outdated
Comment thread src/Aspire.Dashboard/Components/Dialogs/NotificationEntryComponent.razor.cs Outdated
Comment thread tests/Aspire.Dashboard.Components.Tests/Pages/TraceDetailsTests.cs
Comment thread Directory.Packages.props Outdated
Comment thread src/Aspire.Dashboard/Components/Layout/MainLayout.razor
@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Copilot AI review requested due to automatic review settings August 23, 2026 09:14
Add a routed-component preservation guard to catch pages missing Native AOT dependencies.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: c32fdd1f-1378-4d53-b8b5-e83187e28730
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d410b000-8f6c-43f7-9811-364fb03fee69
Co-authored-by: Ankit Jain <radical@gmail.com>
@github-actions

This comment has been minimized.

Copilot AI 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 review overview

🔵 Needs a closer look

The 212-file cross-platform runtime, packaging, UI, and compatibility change requires final human review despite its extensive focused coverage.

Review effort: Balanced
Findings: None

Resolved since last review (1)

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@mitchdenny

Copy link
Copy Markdown
Member

Posting the native interop investigation for comparison with the fix James is working on. I have stopped my implementation work and have not committed or pushed anything. These findings apply to the downloaded artifact for 63fae8212802c2bf0f58c1d58bb2b085b1741881, not to any subsequent author changes.

Two distinct failures

Keyboard shortcuts: ShortcutManager.OnGlobalKeyDown(AspireKeyboardShortcut) receives a numeric enum argument from JavaScript. The generated DashboardJsonSerializerContext is missing AspireKeyboardShortcut, so native execution falls back to reflection and throws:

EnumConverter<Aspire.Dashboard.Model.AspireKeyboardShortcut>
is missing native code or metadata

Adding [JsonSerializable(typeof(AspireKeyboardShortcut))] to the existing context addresses argument deserialization. This affects shortcuts generally, not just backtick.

Dock resizing: pointer events and the callback itself are working. The initial SetHeightAsync(320, 900) executes and updates the accessible maximum height, but its JavaScript promise never resolves or rejects. The resize coalescer correctly permits only one request in flight, so subsequent drag/keyboard changes cannot be sent. This explains why there is no “Failed to resize the terminal dock” console error: neither catch nor finally runs.

The underlying problem is broader than the dock:

  1. JS interop executes on the renderer dispatcher, so this callback's InvokeAsync(Action) returns Task.CompletedTask.
  2. Its runtime type is Task<System.Threading.Tasks.VoidTaskResult>, despite its declared return type being Task. Suspended async Task methods also have a task type derived from that generic instantiation.
  3. DotNetDispatcher.EndInvokeDotNetAfterTask calls TaskGenericsUtil.GetTaskResult, which inspects the runtime type and dynamically creates TaskResultGetter<VoidTaskResult>.
  4. That closed generic has no native code/metadata. The exception occurs in a discarded continuation, so no EndInvokeDotNet reply is sent.

A small independently published native repro captured the otherwise-unobserved exception after GC. Task.CompletedTask, genuinely asynchronous Task, and single-task Task.WhenAll reproduced it; synchronous void and a genuinely nongeneric TaskCompletionSource.Task were successful controls. On this runtime, single-task WhenAll returns the original task, so it is not a reliable workaround.

Why fixing just the resize callback is insufficient

I temporarily made the purely synchronous resize callback return void. Dragging then worked, and adding the enum metadata made backtick close the dock. Those visible effects were not proof of successful interop completion.

Instrumenting DotNetObject.invokeMethodAsync showed:

  • The synchronous resize calls fulfilled.
  • OnGlobalKeyDown(400) still remained pending after closing the dock.
  • Ordinary Blazor DispatchEventAsync click calls also remained pending after their UI effects.

There are 14 application [JSInvokable] methods returning Task in this baseline, covering shortcuts, mobile navigation, detached-window coordination, resource selection/context menus, viewport changes, resource-service reconnection, chart navigation, and terminal state updates. That count excludes framework/FluentUI callbacks. I have removed the experimental individual callback changes; they are not a complete remedy.

Shared workaround that passed the native repro

The bounded workaround I tested is an RdXmlFile containing these two closed generic roots:

<Directives>
  <Application>
    <Assembly Name="Microsoft.JSInterop">
      <Type Name="Microsoft.JSInterop.Infrastructure.TaskGenericsUtil+TaskResultGetter`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib]]" Dynamic="Required All" />
    </Assembly>
    <Assembly Name="System.Text.Json">
      <Type Name="System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib]]" Dynamic="Required All" />
    </Assembly>
  </Application>
</Directives>

The project includes it with <RdXmlFile Include="rd.xml" />.

Rooting only the JSInterop getter advances the failure to the JSON converter: JSInterop then tries to serialize the internal VoidTaskResult. Both roots were needed in my repro.

With both roots, I republished the dashboard with the original SetHeightAsync and all other callbacks unchanged. The actual native browser scenarios passed, including explicit fulfillment of every recorded interop promise—not just visible UI updates—for drag/keyboard resizing, repeated updates, bounds, backtick, settings, and ordinary event dispatch. The two-root workaround plus the enum registration requires three production files, with no JavaScript/component changes or SDK/feed changes.

Validation and limitations

  • Downloaded artifact: Actions run 35693095435, native macOS arm64 executable. Embedded runtime metadata identifies Native AOT, 11.0.0-rc.1.26425.128, source commit 3551975be08744f0418857c5bed8ab1545c5dd47.
  • Isolated local publishes used SDK 11.0.100-rc.1.26425.128 with roll-forward disabled; the minimal repro's ILCompiler packages were 11.0.0-rc.1.26425.128. This reproduces on the PR's RC1 toolchain, without adopting dailies.
  • 15/15 targeted cases passed against the shared-root experimental native publish: 13 serialization cases and two native browser configurations, standalone and connected to an empty resource-service fixture.
  • The strengthened browser completion assertions fail in both configurations without the shared roots, even after visible interactions appear fixed. Existing focused dock component/initialization tests also passed, 75/75.
  • Local publish commands emitted a missing-full-Xcode diagnostic and returned nonzero, but did generate and publish Mach-O executables that were independently launched and exercised. This is native runtime evidence, not a claim of a clean macOS publish.
  • Do not rely solely on the dashboard's (AOT) label for reproduction: PublishAot=true can disable dynamic-code support during an ordinary managed build, which also triggers that label.

This is an interim compatibility workaround, not a framework-wide correctness fix. It relies on private framework names and must be revalidated when upgrading. It preserves the current {} serialization of VoidTaskResult (null for genuinely nongeneric task/void controls).

I also checked a faulted async callback: it sends a failure reply rather than hanging, but EndInvokeDotNetAfterTask then falls through into result extraction and produces a secondary unobserved exception. The roots do not fix that separate control-flow issue.

The preferred upstream approach is to handle declared nongeneric Task/ValueTask without reflecting over or serializing VoidTaskResult, ensure result-processing failures are returned to JavaScript, and stop after sending an error response. The same problematic paths are still present in the inspected ASP.NET Core main revision:

No upstream issue has been filed by this investigation. The most important check for the author's fix is successful/rejected promise settlement, especially ordinary clicks and shortcuts: a functioning-looking page can still hide this failure.

@github-actions

This comment has been minimized.

Copilot AI 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 review overview

🔵 Needs a closer look

The broad experimental runtime and packaging change needs human sign-off, and Dashboard lease metadata currently persists an arbitrary command-line argument.

Review effort: Balanced
Findings: None

Previously missed (1)

In code that hasn't changed since last review

Medium severity Avoid persisting sensitive pass-through arguments in bundle lease files

src/​Aspire.Dashboard/​Program.cs:13

The dedicated executable no longer has a leading dashboard subcommand, so the first argument is now an arbitrary configuration switch. This value is serialized into the bundle lease file, and pass-through switches can contain the browser token or API key; after an abnormal exit that metadata can remain on disk. Use a fixed non-sensitive command name instead of persisting args[0].

Comment thread src/Aspire.Dashboard/Aspire.Dashboard.csproj
@github-actions

This comment has been minimized.

Copilot AI 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 review overview

🔵 Needs a closer look

It is an explicitly incomplete cross-platform runtime and packaging migration, and the changed CI routing currently misses a runtime-only CLI Dashboard consumer.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)

Comment thread eng/github-ci/test-trigger-map.yml
@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Copilot AI 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 review overview

🔵 Needs a closer look

It is an explicitly incomplete draft spanning runtime, UI, persistence, packaging, signing, and six-platform CI behavior.

Review effort: Balanced
Findings: None

Resolved since last review (1)

@github-actions

Copy link
Copy Markdown
Contributor

Tests selector

Selects the full PR test matrix + all PR-gated jobs (ALL) — a rule matching '.github/actions/select-tests/action.yml' selects ALL


Selection computed for commit 4118868.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Pull request created: #1714

Generated by PR Documentation Check · copilot · auto · 120.6 AIC · ⌖ 29.3 AIC · ⊞ 18.7K

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

📝 Documentation has been drafted in microsoft/aspire.dev#1714 targeting release/13.6.

PR #19565 ("Enable Native AOT dashboard with Fluent UI v5") is a very large (219-file) change enabling the Aspire Dashboard to run as a standalone Native AOT executable. Most of the churn is internal (Fluent UI/Blazor updates, AOT/trimming work, packaging/bundling, CI). Of the 6 triggered signals, most turned out to be internal implementation detail with no docs-relevant surface change on inspection:

  • dashboard_user_facing_page_changed — Razor page edits (Login, Metrics, Resources, StructuredLogs, TraceDetail, Traces) are Fluent UI v5 migration/rendering changes only; no new user-facing behavior, options, or workflow.
  • new_public_type — ValueDirectionChange enum and PlotlyTraceData record are internal chart/telemetry types, not public API surface consumers interact with.
  • target_framework_changed — Aspire.Dashboard.csproj moved to net11.0/PublishAot=true; an internal packaging detail, not something users configure.
  • dashboard_api_endpoint_changed — TelemetryApiService.cs change is only a JSON serializer-context refactor (AOT-safe serialization), not a wire/API contract change.
  • cli_command_file_changed / cli_resource_strings_changed — DashboardRunCommand.cs and DashboardCommandStrings.resx were touched only to rename an internal managedPath variable/local method parameter and update one error-message string (removes the internal "aspire-managed" binary name reference). No new CLI options, flags, or behavior changes for users.

The one concrete, user-facing, documented-surface change I found is in src/Aspire.Dashboard/README.md: file-based resource-service client certificates now use X509CertificateLoader.LoadPkcs12FromFile and only accept PKCS#12/PFX files (no longer DER/PEM, PKCS#7, Windows serialized certs, or Authenticode-signed files). This directly affects the Dashboard:ResourceServiceClient:ClientCertificate:FilePath option already documented on aspire.dev.

Docs change made:

  • `src/frontend/src/content/docs/dashboard/co

(summary truncated)

Note

This draft PR needs human review before merging.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Aspire dashboard + AOT

7 participants