Skip to content

Enable Native AOT dashboard with Fluent UI v5 - #19565

Draft
James Newton-King (JamesNK) wants to merge 15 commits into
mainfrom
jamesnk/fluent-v5-native-aot
Draft

Enable Native AOT dashboard with Fluent UI v5#19565
James Newton-King (JamesNK) wants to merge 15 commits into
mainfrom
jamesnk/fluent-v5-native-aot

Conversation

@JamesNK

Copy link
Copy Markdown
Member

Description

Migrates the Aspire Dashboard to Fluent UI Blazor v5 and enables it to publish and run as a Native AOT executable on .NET 11. This keeps the Dashboard on the current Fluent component model while allowing Aspire distributions to carry a platform-native Dashboard instead of launching the framework-dependent aspire-managed Dashboard command.

The Dashboard is packaged as a dedicated cross-platform bundle component with its static assets, discovered by the CLI and hosting layers, and launched directly. Build, signing, archive download, profiling, and CI paths are updated for the supported runtime identifiers, with fallback support for legacy bundles.

The runtime changes replace reflection-dependent configuration, serialization, and component activation paths with Native AOT-compatible implementations. The Fluent UI migration updates dialogs, notifications, menus, grids, tabs, trees, selectors, inputs, splitters, test infrastructure, and responsive Dashboard layouts. Fluent UI Core is pinned to the latest documented daily build, 5.0.0-preview.26232.1, while Icons remains on its newest available v5 build.

User-facing usage

Existing workflows such as aspire dashboard run and AppHost startup automatically resolve and launch the bundled native Dashboard executable. No new command-line options are required. Dashboard users retain the existing Resources, Console Logs, Structured Logs, Traces, and Metrics workflows on the Fluent UI v5 component model.

Screenshots / Recordings

This PR includes UI changes. Please add screenshots or screen recordings so reviewers can evaluate the visual changes without running locally.

  • For before/after comparisons, place them side-by-side or label them clearly.
  • For interactive changes (animations, transitions, new flows), prefer a short screen recording (GIF or video).
  • If you cannot capture visuals now, note what scenario to test and mark this section as TODO.

Validation

  • Restored and built Aspire.Dashboard using the documented Fluent UI daily feed.
  • Ran Aspire.Dashboard.Components.Tests: 224 passed, 0 failed, 0 skipped.
  • Published the Dashboard as a self-contained Native AOT win-x64 executable.
  • Ran eng/scripts/test-native-dashboard.ps1 successfully against the published executable.
  • CI includes cross-platform Native AOT Dashboard smoke coverage and Windows x64 Playwright interactivity coverage.

Fixes # (issue)

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

🟡 Changes recommended

Native AOT is enabled while direct reflection-based JsonSerializer.Deserialize<T> paths remain in DashboardRunStore, which can fail when reading run metadata.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 155/158 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

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

🔵 Needs a closer look

Legacy profiling launch and Native AOT browser-storage serialization have concrete runtime failures.

Review details

Suppressed comments (2)

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

src/Aspire.Cli/Profiling/ProfileCaptureService.cs:89

  • ASPIRE_DASHBOARD_PATH still accepts a legacy aspire-managed executable, but this argument list no longer supplies its required dashboard subcommand. Profiling with a legacy bundle will invoke aspire-managed --... and fail command parsing. Prepend dashboard when BundleDiscovery.IsAspireManagedBinary(dashboardPath) is true, matching DashboardEventHandlers.
        var dashboardArgs = new List<string>
        {
            $"--{KnownAspNetCoreConfigNames.Urls}={options.DashboardUrl}",
            $"--{KnownConfigNames.DashboardOtlpGrpcEndpointUrl}={options.OtlpGrpcUrl}",
            $"--{KnownConfigNames.DashboardOtlpHttpEndpointUrl}={options.OtlpHttpUrl}",
            $"--{KnownConfigNames.DashboardUnsecuredAllowAnonymous}=true",
            $"--{KnownConfigNames.DashboardApiEnabled}=true"

src/Aspire.Dashboard/Serialization/DashboardJsonSerializerContext.cs:37

  • LocalBrowserStorage now requires generated metadata for every stored TValue, but SummaryDetailsView.SaveSizeToStorage passes Math.Round(float, 3), whose inferred type is double. In Native AOT, resizing a remembered splitter will fail at GetTypeInfo(typeof(double)) instead of persisting its size. Register double metadata (or keep the stored value typed as float).
  • Files reviewed: 157/160 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

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

🟡 Changes recommended

Removing the 10,000-item virtualization overrides restores the 100-item default and can make content inaccessible in large Dashboard views.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 146/149 changed files
  • Comments generated: 7
  • Review effort level: Balanced

Comment thread src/Aspire.Dashboard/Components/Controls/Chart/MetricTable.razor
Comment thread src/Aspire.Dashboard/Components/Controls/LogViewer.razor.cs
Comment thread src/Aspire.Dashboard/Components/Controls/TextVisualizer.razor.cs
Comment thread src/Aspire.Dashboard/Components/Pages/Resources.razor.cs
Comment thread src/Aspire.Dashboard/Components/Pages/StructuredLogs.razor.cs
Comment thread src/Aspire.Dashboard/Components/Pages/TraceDetail.razor.cs
Comment thread src/Aspire.Dashboard/Components/Pages/Traces.razor.cs
@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

Advisory workflow impact (4)

  • Aspire.Deployment.EndToEnd.Tests (deployment workflow-only)
  • Aspire.EndToEnd.Tests (outerloop-only)
  • Aspire.Oracle.EntityFrameworkCore.Tests (outerloop-only)
  • deployment-e2e (schedule/dispatch-only)

Selection computed for commit 0413c26.

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.

🔵 Needs a closer look

Profiling no longer honors the documented legacy ASPIRE_MANAGED_PATH override or its required dashboard dispatch argument.

Review details

Suppressed comments (1)

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

src/Aspire.Cli/Profiling/ProfileCaptureService.cs:173

  • This drops the documented ASPIRE_MANAGED_PATH override from the self-profile collector path. Existing profiling setups that point this variable at a legacy/custom aspire-managed binary now ignore the override and fall back to bundle/repo discovery; if support is restored, dashboardArgs must also prepend the legacy dashboard dispatch argument when that binary is selected. Preserve the compatibility path (the repository still documents this override in docs/specs/bundle.md:1016).
  • Files reviewed: 146/149 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

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.

4 participants