docs: fix inaccurate Customize Azure resources page - #946
docs: fix inaccurate Customize Azure resources page#946David Pine (IEvangelist) wants to merge 25 commits into
Conversation
5aee9a1 to
7e21b4b
Compare
There was a problem hiding this comment.
Pull request overview
Updates the “Customize Azure resources” documentation to correct several Aspire Azure API inaccuracies and improve guidance for custom Bicep workflows.
Changes:
- Corrects the custom Bicep template samples to use the public
AddBicepTemplateAPI and demonstrates consuming Bicep outputs viaGetOutput. - Replaces the fabricated private endpoint example with Aspire’s
AddPrivateEndpointbuilder pattern and clarifies how to inspect generated Bicep viaaspire publish/deploy. - Adds TypeScript twoslash allowlist entries for a known
withParameteroverload-emission issue in the generatedaspire.d.ts.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/frontend/src/content/docs/integrations/cloud/azure/customize-resources.mdx | Fixes incorrect APIs/examples and expands docs with output/parameter patterns and correct Bicep inspection steps. |
| src/frontend/tests/unit/twoslash-blocks-audit.ts | Adds allowlist entries for known twoslash type errors related to withParameter overload generation. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Rebased onto main, which replaced the twoslash "known type-bugs" allowlist with a zero-diagnostics policy (#1085). Dropped the now-obsolete allowlist entries this PR had added to twoslash-blocks-audit.ts. The new TypeScript samples call `withParameter(..., { value })` with string and ParameterResource values, which the generated `aspire.d.ts` previously rejected (ts2769) because it only encoded the trailing `EndpointReference` overload. Broaden the `withParameter` value type to match the real polyglot `[AspireUnion]` surface (string | string[] | ParameterResource | IResourceWithConnectionString | BicepOutputReference | ReferenceExpression | EndpointReference), via a generate-twoslash-types.ts override plus the regenerated types, so the samples compile cleanly under the new policy. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: bb383d2d-2eb5-4012-9848-7587001c7090
7e21b4b to
d74aba8
Compare
#1386) Incorporates deferred, non-blocking review nits left on merged community integration PRs: - #1372 ThemeImage: add focused render coverage asserting non-square artwork is contained via the getImage optimizer (fit=contain in data-light/data-dark) and that `fit` never leaks onto rendered <img> markup. ThemeImage.astro is unchanged; CSS object-fit behavior preserved. - #1372 docsPageExists: recognize .md/index.md alongside .mdx/index.mdx and add focused regression coverage (injectable existence check). - #1374 dev-tool accuracy: correct `aspire add flagd`->`communitytoolkit-flagd` and `aspire add mailpit`->`communitytoolkit-mailpit` (per the Aspire CLI friendly-name algorithm), and `AddOfrepProvider()`->`AddOfrepProvider(options => { ... })` (no parameterless overload exists). Aspire:GoFeatureFlag:Client config key retained (matches source DefaultConfigSectionName). - #1375 twoslash: convert the runnable TypeScript AppHost examples on the Ollama/KurrentDB/Meilisearch/RavenDB/SQLite/SurrealDB pages to canonical twoslash fences so CI type-checks them. - #1377 canonical links: repoint in-repo Java/Rust/PowerShell/Deno links from legacy host-only routes to their canonical *-get-started pages (en + ja), keeping redirects intact for external compatibility; add a regression test. No-change decisions (evidence in PR body): #1376 Dapr ACA caution is obsolete under declarative WithDaprComponents(); #1378 prose nits already landed. Copilot-Session: 5b575649-5a66-4553-86f6-2b252a1f01fb Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Frontend HTML artifact readyThe latest frontend build uploaded the This comment updates automatically when a new frontend build artifact is uploaded. |
* "architecture" documentations translated into Japanese * fixed link validation errors
* chore: Update integration data and GitHub stats (7/21/26) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Address integration data review feedback Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: aspire-repo-bot[bot] <aspire-repo-bot[bot]@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: David Pine <david.pine@microsoft.com>
* docs: adding k3s integration docs * fix: page rendering + include integration to frontend data * chore: c# interface method params order Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * chore: shorten seo title * fix: k3s integration docs — CLI command and C# sample - Fix installation command from `aspire add k3s` to `aspire add communitytoolkit-k3s` (both C# and TypeScript tabs). The CLI friendly name is `communitytoolkit-k3s`, not `k3s`. - Fix C# sample that won't compile: replace EndpointReferenceExpression with string literal "5432" in WithHelmValue call. The method parameter expects string, not EndpointReference. - Add other suggested improvements. Addresses review findings from PR comment. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: David Pine <david.pine@microsoft.com>
* Update RabbitMQ get-started guide * Remove MassTransit sample (not using RabbitMq)
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 75803994-3eea-47f7-ae25-92f4314a019b
…1364) * ci: add NuGet ecosystem to Dependabot configuration The repo has a .NET solution (Aspire.Dev.slnx) with NuGet packages across AppHost, StaticHost, tools, and test projects. Two NuGet security advisories (OpenTelemetry.Exporter.OpenTelemetryProtocol CVE-2026-40891 / CVE-2026-40182) were fixed manually but no automated NuGet scanning was configured. This adds weekly NuGet scanning via Dependabot so future vulnerabilities in NuGet packages are caught automatically. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * ci: limit NuGet Dependabot updates Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * ci: include test and tool NuGet packages Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Bumps Microsoft.AspNetCore.TestHost from 10.0.0 to 10.0.10 Bumps Microsoft.CodeAnalysis.CSharp.Workspaces from 5.0.0 to 5.6.0 Bumps Microsoft.NET.Test.Sdk from 17.14.1 to 18.8.1 Bumps OpenTelemetry.Exporter.OpenTelemetryProtocol from 1.15.3 to 1.17.0 Bumps OpenTelemetry.Extensions.Hosting from 1.15.0 to 1.17.0 Bumps OpenTelemetry.Instrumentation.AspNetCore from 1.15.0 to 1.17.0 Bumps OpenTelemetry.Instrumentation.Http from 1.15.0 to 1.17.0 Bumps OpenTelemetry.Instrumentation.Runtime from 1.15.0 to 1.17.0 Bumps System.CommandLine from 2.0.3 to 2.0.10 Bumps xunit.runner.visualstudio from 3.1.4 to 3.1.5 --- updated-dependencies: - dependency-name: Microsoft.AspNetCore.TestHost dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-selected - dependency-name: Microsoft.CodeAnalysis.CSharp.Workspaces dependency-version: 5.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-selected - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.8.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget-selected - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.8.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget-selected - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.8.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget-selected - dependency-name: OpenTelemetry.Exporter.OpenTelemetryProtocol dependency-version: 1.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-selected - dependency-name: OpenTelemetry.Extensions.Hosting dependency-version: 1.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-selected - dependency-name: OpenTelemetry.Instrumentation.AspNetCore dependency-version: 1.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-selected - dependency-name: OpenTelemetry.Instrumentation.Http dependency-version: 1.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-selected - dependency-name: OpenTelemetry.Instrumentation.Runtime dependency-version: 1.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-selected - dependency-name: System.CommandLine dependency-version: 2.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-selected - dependency-name: System.CommandLine dependency-version: 2.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-selected - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-selected - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-selected - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-selected ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Updated section headings and clarified usage instructions for the interaction service API.
…ations (#1392) * build(deps): bump the npm-all group across 1 directory with 32 updates Bumps the npm-all group with 32 updates in the /src/frontend directory: | Package | From | To | | --- | --- | --- | | [@astrojs/markdown-remark](https://github.com/withastro/astro/tree/HEAD/packages/markdown/remark) | `7.2.0` | `7.2.1` | | [@astrojs/mdx](https://github.com/withastro/astro/tree/HEAD/packages/integrations/mdx) | `7.0.0` | `7.0.3` | | [@astrojs/rss](https://github.com/withastro/astro/tree/HEAD/packages/astro-rss) | `4.0.18` | `4.0.19` | | [@astrojs/starlight](https://github.com/withastro/starlight/tree/HEAD/packages/starlight) | `0.41.1` | `0.41.3` | | [@catppuccin/starlight](https://github.com/catppuccin/starlight/tree/HEAD/packages/catppuccin-starlight) | `2.0.1` | `2.1.0` | | [@expressive-code/plugin-collapsible-sections](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/@expressive-code/plugin-collapsible-sections) | `0.44.0` | `0.44.1` | | [@expressive-code/plugin-line-numbers](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/@expressive-code/plugin-line-numbers) | `0.44.0` | `0.44.1` | | [@fontsource-variable/fira-code](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/fira-code) | `5.2.7` | `5.3.0` | | [@fontsource-variable/outfit](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/outfit) | `5.2.8` | `5.3.0` | | [@fontsource-variable/rubik](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/rubik) | `5.2.8` | `5.3.0` | | [@fontsource/poppins](https://github.com/fontsource/font-files/tree/HEAD/fonts/google/poppins) | `5.2.7` | `5.3.0` | | [asciinema-player](https://github.com/asciinema/asciinema-player) | `3.16.0` | `3.17.0` | | [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro) | `7.0.3` | `7.1.3` | | [astro-expressive-code](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/astro-expressive-code) | `0.44.0` | `0.44.1` | | [satori](https://github.com/vercel/satori) | `0.26.0` | `0.28.1` | | [satteri](https://github.com/bruits/satteri) | `0.9.4` | `0.9.5` | | [sharp](https://github.com/lovell/sharp) | `0.34.5` | `0.35.3` | | [starlight-github-alerts](https://github.com/HiDeoo/starlight-github-alerts/tree/HEAD/packages/starlight-github-alerts) | `0.3.0` | `0.4.0` | | [starlight-links-validator](https://github.com/HiDeoo/starlight-links-validator/tree/HEAD/packages/starlight-links-validator) | `0.25.1` | `0.25.2` | | [starlight-llms-txt](https://github.com/delucis/starlight-llms-txt/tree/HEAD/packages/starlight-llms-txt) | `0.10.0` | `0.11.0` | | [starlight-page-actions](https://github.com/dlcastillop/starlight-page-actions/tree/HEAD/packages/starlight-page-actions) | `0.6.2` | `0.7.0` | | [@iconify-json/material-icon-theme](https://github.com/iconify/icon-sets) | `1.2.68` | `1.2.69` | | [@types/hast](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/hast) | `3.0.4` | `3.0.5` | | [@unocss/astro](https://github.com/unocss/unocss/tree/HEAD/packages-integrations/astro) | `66.6.8` | `66.7.5` | | [astro-embed](https://github.com/delucis/astro-embed/tree/HEAD/packages/astro-embed) | `0.13.0` | `0.13.1` | | [eslint](https://github.com/eslint/eslint) | `10.6.0` | `10.7.0` | | [prettier](https://github.com/prettier/prettier) | `3.9.1` | `3.9.5` | | [tsx](https://github.com/privatenumber/tsx) | `4.22.4` | `4.23.1` | | [typescript](https://github.com/microsoft/TypeScript) | `6.0.3` | `7.0.2` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.62.0` | `8.65.0` | | [unocss](https://github.com/unocss/unocss/tree/HEAD/packages-presets/unocss) | `66.6.8` | `66.7.5` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` | Updates `@astrojs/markdown-remark` from 7.2.0 to 7.2.1 - [Release notes](https://github.com/withastro/astro/releases) - [Changelog](https://github.com/withastro/astro/blob/main/packages/markdown/remark/CHANGELOG.md) - [Commits](https://github.com/withastro/astro/commits/@astrojs/markdown-remark@7.2.1/packages/markdown/remark) Updates `@astrojs/mdx` from 7.0.0 to 7.0.3 - [Release notes](https://github.com/withastro/astro/releases) - [Changelog](https://github.com/withastro/astro/blob/main/packages/integrations/mdx/CHANGELOG.md) - [Commits](https://github.com/withastro/astro/commits/@astrojs/mdx@7.0.3/packages/integrations/mdx) Updates `@astrojs/rss` from 4.0.18 to 4.0.19 - [Release notes](https://github.com/withastro/astro/releases) - [Changelog](https://github.com/withastro/astro/blob/main/packages/astro-rss/CHANGELOG.md) - [Commits](https://github.com/withastro/astro/commits/@astrojs/rss@4.0.19/packages/astro-rss) Updates `@astrojs/starlight` from 0.41.1 to 0.41.3 - [Release notes](https://github.com/withastro/starlight/releases) - [Changelog](https://github.com/withastro/starlight/blob/main/packages/starlight/CHANGELOG.md) - [Commits](https://github.com/withastro/starlight/commits/@astrojs/starlight@0.41.3/packages/starlight) Updates `@catppuccin/starlight` from 2.0.1 to 2.1.0 - [Release notes](https://github.com/catppuccin/starlight/releases) - [Changelog](https://github.com/catppuccin/starlight/blob/main/packages/catppuccin-starlight/CHANGELOG.md) - [Commits](https://github.com/catppuccin/starlight/commits/v2.1.0/packages/catppuccin-starlight) Updates `@expressive-code/plugin-collapsible-sections` from 0.44.0 to 0.44.1 - [Release notes](https://github.com/expressive-code/expressive-code/releases) - [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/@expressive-code/plugin-collapsible-sections/CHANGELOG.md) - [Commits](https://github.com/expressive-code/expressive-code/commits/@expressive-code/plugin-collapsible-sections@0.44.1/packages/@expressive-code/plugin-collapsible-sections) Updates `@expressive-code/plugin-line-numbers` from 0.44.0 to 0.44.1 - [Release notes](https://github.com/expressive-code/expressive-code/releases) - [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/@expressive-code/plugin-line-numbers/CHANGELOG.md) - [Commits](https://github.com/expressive-code/expressive-code/commits/@expressive-code/plugin-line-numbers@0.44.1/packages/@expressive-code/plugin-line-numbers) Updates `@fontsource-variable/fira-code` from 5.2.7 to 5.3.0 - [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md) - [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/fira-code) Updates `@fontsource-variable/outfit` from 5.2.8 to 5.3.0 - [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md) - [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/outfit) Updates `@fontsource-variable/rubik` from 5.2.8 to 5.3.0 - [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md) - [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/rubik) Updates `@fontsource/poppins` from 5.2.7 to 5.3.0 - [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md) - [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/google/poppins) Updates `asciinema-player` from 3.16.0 to 3.17.0 - [Release notes](https://github.com/asciinema/asciinema-player/releases) - [Commits](asciinema/asciinema-player@v3.16.0...v3.17.0) Updates `astro` from 7.0.3 to 7.1.3 - [Release notes](https://github.com/withastro/astro/releases) - [Changelog](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md) - [Commits](https://github.com/withastro/astro/commits/astro@7.1.3/packages/astro) Updates `astro-expressive-code` from 0.44.0 to 0.44.1 - [Release notes](https://github.com/expressive-code/expressive-code/releases) - [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/astro-expressive-code/CHANGELOG.md) - [Commits](https://github.com/expressive-code/expressive-code/commits/astro-expressive-code@0.44.1/packages/astro-expressive-code) Updates `satori` from 0.26.0 to 0.28.1 - [Release notes](https://github.com/vercel/satori/releases) - [Commits](vercel/satori@0.26.0...0.28.1) Updates `satteri` from 0.9.4 to 0.9.5 - [Release notes](https://github.com/bruits/satteri/releases) - [Commits](bruits/satteri@satteri-v0.9.4...satteri-v0.9.5) Updates `sharp` from 0.34.5 to 0.35.3 - [Release notes](https://github.com/lovell/sharp/releases) - [Commits](lovell/sharp@v0.34.5...v0.35.3) Updates `starlight-github-alerts` from 0.3.0 to 0.4.0 - [Release notes](https://github.com/HiDeoo/starlight-github-alerts/releases) - [Changelog](https://github.com/HiDeoo/starlight-github-alerts/blob/main/packages/starlight-github-alerts/CHANGELOG.md) - [Commits](https://github.com/HiDeoo/starlight-github-alerts/commits/starlight-github-alerts@0.4.0/packages/starlight-github-alerts) Updates `starlight-links-validator` from 0.25.1 to 0.25.2 - [Release notes](https://github.com/HiDeoo/starlight-links-validator/releases) - [Changelog](https://github.com/HiDeoo/starlight-links-validator/blob/main/packages/starlight-links-validator/CHANGELOG.md) - [Commits](https://github.com/HiDeoo/starlight-links-validator/commits/starlight-links-validator@0.25.2/packages/starlight-links-validator) Updates `starlight-llms-txt` from 0.10.0 to 0.11.0 - [Release notes](https://github.com/delucis/starlight-llms-txt/releases) - [Changelog](https://github.com/delucis/starlight-llms-txt/blob/main/packages/starlight-llms-txt/CHANGELOG.md) - [Commits](https://github.com/delucis/starlight-llms-txt/commits/starlight-llms-txt@0.11.0/packages/starlight-llms-txt) Updates `starlight-page-actions` from 0.6.2 to 0.7.0 - [Release notes](https://github.com/dlcastillop/starlight-page-actions/releases) - [Commits](https://github.com/dlcastillop/starlight-page-actions/commits/v0.7.0/packages/starlight-page-actions) Updates `@iconify-json/material-icon-theme` from 1.2.68 to 1.2.69 - [Commits](https://github.com/iconify/icon-sets/commits) Updates `@types/hast` from 3.0.4 to 3.0.5 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/hast) Updates `@unocss/astro` from 66.6.8 to 66.7.5 - [Release notes](https://github.com/unocss/unocss/releases) - [Commits](https://github.com/unocss/unocss/commits/v66.7.5/packages-integrations/astro) Updates `astro-embed` from 0.13.0 to 0.13.1 - [Release notes](https://github.com/delucis/astro-embed/releases) - [Changelog](https://github.com/delucis/astro-embed/blob/main/packages/astro-embed/CHANGELOG.md) - [Commits](https://github.com/delucis/astro-embed/commits/astro-embed@0.13.1/packages/astro-embed) Updates `eslint` from 10.6.0 to 10.7.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v10.6.0...v10.7.0) Updates `prettier` from 3.9.1 to 3.9.5 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](prettier/prettier@3.9.1...3.9.5) Updates `tsx` from 4.22.4 to 4.23.1 - [Release notes](https://github.com/privatenumber/tsx/releases) - [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs) - [Commits](privatenumber/tsx@v4.22.4...v4.23.1) Updates `typescript` from 6.0.3 to 7.0.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Commits](https://github.com/microsoft/TypeScript/commits) Updates `typescript-eslint` from 8.62.0 to 8.65.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.65.0/packages/typescript-eslint) Updates `unocss` from 66.6.8 to 66.7.5 - [Release notes](https://github.com/unocss/unocss/releases) - [Commits](https://github.com/unocss/unocss/commits/v66.7.5/packages-presets/unocss) Updates `vitest` from 4.1.9 to 4.1.10 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/vitest) --- updated-dependencies: - dependency-name: "@astrojs/markdown-remark" dependency-version: 7.2.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: "@astrojs/mdx" dependency-version: 7.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: "@astrojs/rss" dependency-version: 4.0.19 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: "@astrojs/starlight" dependency-version: 0.41.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: "@catppuccin/starlight" dependency-version: 2.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: "@expressive-code/plugin-collapsible-sections" dependency-version: 0.44.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: "@expressive-code/plugin-line-numbers" dependency-version: 0.44.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: "@fontsource-variable/fira-code" dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: "@fontsource-variable/outfit" dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: "@fontsource-variable/rubik" dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: "@fontsource/poppins" dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: asciinema-player dependency-version: 3.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: astro dependency-version: 7.1.3 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: astro-expressive-code dependency-version: 0.44.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: satori dependency-version: 0.28.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: satteri dependency-version: 0.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: sharp dependency-version: 0.35.3 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: starlight-github-alerts dependency-version: 0.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: starlight-links-validator dependency-version: 0.25.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: starlight-llms-txt dependency-version: 0.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: starlight-page-actions dependency-version: 0.7.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: "@iconify-json/material-icon-theme" dependency-version: 1.2.69 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: "@types/hast" dependency-version: 3.0.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: "@unocss/astro" dependency-version: 66.7.5 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: astro-embed dependency-version: 0.13.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: eslint dependency-version: 10.7.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: prettier dependency-version: 3.9.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-all - dependency-name: tsx dependency-version: 4.23.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: typescript dependency-version: 7.0.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: npm-all - dependency-name: typescript-eslint dependency-version: 8.65.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: unocss dependency-version: 66.7.5 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-all - dependency-name: vitest dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-all ... Signed-off-by: dependabot[bot] <support@github.com> * fix: revert typescript 7.x to 6.x to restore twoslash/expressive-code compatibility TypeScript 7.0 ('Corsa') is a native Go rewrite that removes the programmatic JS API entirely. twoslash accesses ts.ModuleKind.Cjs which is undefined in TS7, causing ec.config.mjs -> expressive-code-twoslash -> twoslash to crash at build time with: 'The requested module expressive-code-twoslash does not provide an export named default' and related CJS/ESM resolution failures. Fix: - Revert typescript ^7.0.2 -> ^6.0.3 in package.json - Update pnpm-lock.yaml: swap integrity hash, version specifier, remove the @typescript/typescript-* platform-native binaries (TS7-only), and fix all peer-dep snapshot keys to reference typescript@6.0.3 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * fix(frontend): skip canonicalizing redirects while prerendering Astro 7.1 runs middleware while prerendering the .md/.json API and schema endpoints, so the trailing-slash redirects were baked into dist/ as redirect stubs that shadowed the real prerendered markdown/JSON and broke the api-markdown-routes and schema-routes E2E checks. Guard the redirects behind context.isPrerendered so they only apply to on-demand (SSR/dev) requests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b * fix(security): bump dompurify to 3.4.12 (GHSA-c2j3-45gr-mqc4) and tighten brace-expansion override - dompurify@<3.4.12: '>=3.4.12' — GHSA-c2j3-45gr-mqc4 (low): bypass in CUSTOM_ELEMENT_HANDLING, fixed in 3.4.12 - brace-expansion@<5.0.7: '>=5.0.7' — GHSA-3jxr-9vmj-r5cp (high): DoS via exponential-time expansion, 5.0.7 is the patched version - postcss@8.5.20 already satisfies GHSA-r28c-9q8g-f849 (<=8.5.17) via existing override; no change needed - GHSA-mh99-v99m-4gvg (brace-expansion <=5.0.7): no upstream fix available, documented as unfixable in canonical PR body Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b
* Redact connection-string passwords in generated package docs
PackageJsonGenerator copies package XML doc comments verbatim into the frontend
data JSON. Several packages document example connection strings containing a
literal placeholder password (e.g. SqlServer's GetConnectionString returns
"Server=host,port;User ID=sa;Password=password;TrustServerCertificate=true").
These are not real secrets, but the literal Password=<value> token trips 1ES /
CredScan push protection (SEC101/037 SqlLegacyCredentials, VS403654) when the
public repo is mirrored to the internal AzDO remote, blocking the deploy and
deploy-vnext-release branch syncs.
Add DocumentationSanitizer.RedactConnectionStringPasswords, applied to text,
inline-code and code-block doc nodes, which rewrites connection-string
Password=/Pwd= literals to <password>. C# default parameter values
(password = null) are left untouched because the match requires no whitespace
around '='. Regenerate the four affected data files accordingly.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
* Address PR review: markdown-safe placeholder, cover example nodes, nullable API
- Use "{password}" instead of "<password>". Angle brackets are dropped as raw
HTML when doc nodes render to Markdown (csharp-api-markdown.ts concatenates
text without escaping), which would hide the value in connection-string
examples. "{password}" is also the existing placeholder convention already
used across the generated data (e.g. mysql://{user}:{password}@{host}).
- Sanitize the <example> extraction paths in ExtractDocExample (plain-text
code, description text nodes, and example code) so connection-string
passwords there cannot re-trigger CredScan in future data refreshes.
- Make DocumentationSanitizer.RedactConnectionStringPasswords nullable-aware
(string? in/out) to match its behavior and drop the null-forgiving operator
in tests. Exclude '{'/'}' from the value class to keep redaction idempotent.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
* Use "Placeholder" redaction token per 1ES recommendation
The connection-string password sanitizer redacted values to `{password}`.
Switch the token to a bare `Placeholder`, which is the value 1ES
recommends for scrubbed credential examples in generated content.
Update the sanitizer unit-test expectations to match, and update the four
affected package data files. The pre-existing `{password}` doc template
tokens in those files (author-written placeholders, not sanitizer output)
are intentionally left unchanged.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
* fix(PackageJsonGenerator): tighten redaction regex and close doc gaps
Two hardening fixes to the connection-string password redaction added in
this PR.
F1 - the redaction regex over-consumed trailing delimiters. The value
character class only excluded ';', quotes, comma, whitespace, backslash,
and brace/angle markers. A value immediately followed by a markdown or
URI delimiter ('`', ')', ']', '&', '|') swallowed that delimiter into the
match, so an inline-code fence lost its closing backtick and a link label
lost its closing paren, corrupting the rendered doc. The class now also
stops at those delimiters. A trailing sentence period is preserved by
trimming it off the captured value in the replacement callback rather
than excluding '.' from the class, which would truncate legitimate dotted
values.
F4 - two documentation paths reached the generated JSON unsanitized. Enum
member descriptions (Description = ExtractSummary(f)) and <see href="...">
link labels were emitted verbatim, so a connection string in an enum
member's <summary> or a link label bypassed redaction. Both now run
through the sanitizer. This changes no committed data (no such values
exist in the current package set); the fix is preventive.
Also refreshes the sanitizer comment and XML docs to describe the
Placeholder token and the widened exclusion set.
Tests: added markdown/URI delimiter and trailing-period cases to the
sanitizer unit tests, and an end-to-end test asserting an enum member
whose summary contains a connection string is redacted in the generated
JSON. All 31 tests pass.
chore: sanitize placeholder connection strings in generated pkg JSON
**BYPASS_SECRET_SCANNING** — false-positive SEC101/037 placeholder in
generated pkgs/*.json, unblocking the internal mirror for historical
commit 6058fcf. Forward fix regenerates the affected files.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Ankit Jain <radical@gmail.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
* fix: Normalize terminology in sample updates Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7 * test: Preserve spacing in terminology updates Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7 * fix: Handle Markdown wrappers and word boundaries in terminology normalizer Address review feedback on #1397: - Require .NET to sit at a non-word boundary so tokens like ASP.NET Aspire and Microsoft.NET Aspire are left intact instead of corrupted into ASPAspire / MicrosoftAspire. - Consume Markdown emphasis/link openers (**, [) between the article and the term so 'a **.NET Aspire**' and 'a [.NET Aspire](url)' correct the article to 'an'. - Add regression tests for bold/link article correction and word-boundary cases. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e * refactor: Make terminology normalizer data-driven Replace the hardcoded replace-chain with a small TerminologyRule table so a new deprecated term is a single entry (pattern/replacement/optional article). Article correction, Markdown-wrapper tolerance, and word-boundary guarding are now applied generically per rule. Also add the 'dotnet aspire' -> 'Aspire' rule that was present in .github/forbidden-words.json but missing from the normalizer, and cover it with tests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e * fix: Bound terminology terms by alphanumeric edges and cover Markdown wrappers Replaces the per-rule mix of \\b\/\(?<!\w)\ boundaries with uniform alphanumeric edge guards applied centrally, so a rule core can never fuse into a longer token (e.g. \.NET AspireX\) and authors cannot forget a boundary. Underscore and inline-code wrappers now normalize correctly (\_.NET Aspire_\, \\.NET Aspire\\), and the generated-data invariant now covers the \dotnet aspire\ spelling. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e * fix: Skip code regions and leave C# untouched in terminology normalizer The normalizer ran a plain pass over raw Markdown and appHostCode, which could rewrite runnable sample commands (e.g. 'dotnet aspire run' -> 'Aspire run') inside fenced/inline code and corrupt compilable C#. Now fenced blocks and inline code are copied through verbatim, appHostCode is left untouched (it renders as C#, not prose), and the entry point is null-safe. Adds code-skip, mixed prose+code, idempotence, and null tests, and replaces the deprecated-term scan with an idempotence-based invariant. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e --------- Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7 Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* Switch cookie consent runtime to WCP API Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350 * Theme WCP consent UI, add scroll-lock, prune obsolete cookie tests Fully restyle the WCP cookie banner and preferences dialog to match the Aspire theme via the team-owned wcp-consent.css (our colors, spacing, WCAG AA contrast, and the brand icon). The dialog now re-themes live when the user toggles light/dark, and the underlying page is scroll-locked while the preferences dialog is open. Remove the last remnants of the old vanilla-cookieconsent integration: - delete config/cookie.config.ts and the old cookieconsent-custom.css - drop @jop-software/astro-cookieconsent + vanilla-cookieconsent deps - remove the 2 obsolete behavioral cookie e2e tests and their dead helpers; the WCP banner is geo-gated/CDN-loaded and can't be exercised in CI, so compliance is verified by the WCP scan instead - rework the integrations-gallery banner suppression to hide the WCP banner element instead of pre-seeding the removed cc_cookie shape Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350 * Hide "Manage cookies" buttons where consent isn't required WCP reports whether consent is required for the visitor's region. Where it is not (e.g. the US) there is nothing to manage, so hide the four "Manage cookies" buttons instead of leaving inert controls on the page. The WCP runtime sets a data-consent-not-required flag on <html> once it knows the region; a CSS rule hides .cookie-consent-btn when the flag is present. The flag is primed from localStorage before paint so returning visitors in non-required regions don't see the buttons flash in. Defaulting to visible keeps this failsafe: if WCP is slow or blocked we never hide a control a required region needs. display:none also makes the site tour auto-skip its cookie-preferences step, so no tour changes are needed. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350 * Keep header-order e2e test deterministic when consent isn't required The compact-header-order regression asserts the full set of header controls, including the "Manage cookies" button. That button is now region-gated: WCP hides it where consent isn't required, which is how most CI runner IPs resolve, so the test could see a shorter header and fail. Block the WCP CDN for this test so it always exercises the failsafe default (every control present), keeping the expected order stable regardless of the runner's geo. The site-tour e2e test needs no change; it advances until "Finish" without counting steps, so it tolerates the cookie step being skipped. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350 * Address PR review: drop dead consent global, harden WCP init Two fixes for the Copilot review comments on #1403, both in the WCP initializer in Head.astro: - Remove the toLegacyCategories / syncConsentState path that only ever wrote window.__aspireConsentCategories, a global nothing in the frontend (or anywhere in the repo) reads. This also drops the astro:page-load handler and getConsent() calls that existed solely to feed that dead global, removing a runtime side effect with no consumer. - Resolve the WCP init theme through toWcpThemeName instead of dereferencing wcp.themes.dark/light directly. If a future WCP payload omits or renames themes, the direct access threw, the throw was swallowed by the surrounding try/catch, and initialization stopped permanently with no retry. toWcpThemeName already falls back to a plain string, and init now reschedules itself on exceptions within the existing bounded window. Validated locally against the WCP CDN: consent still initializes (US -> consent not required, manage-cookies buttons hidden), the removed global is now undefined, and there are no console errors. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350 * Address review 4790741647: wire analytics, fix banner overlap + a11y Implements every point from adamint's review on #1403. Critical: - Analytics never loaded under WCP. The three analytics scripts still ship inert (type="text/plain" data-category="analytics") from the previous cookie library, but WCP is a consent-collection API and does not manage script tags, so nothing re-activated them. Head.astro now bridges the gap: on init it reads siteConsent.getConsent().Analytics and, when granted (default where consent isn't required, e.g. the US), promotes each inert script to an executable clone. onConsentChanged reloads, so a later grant re-applies via the same path. Verified locally: all three scripts flip from text/plain to active on the US default-grant page. Accessibility: - The geo-gated banner is a fixed top strip that painted over the fixed Starlight header (z-index 10), hiding nav/search (WCAG 2.4.11). A new ResizeObserver (trackBannerHeight) publishes the banner's live height as --wcp-banner-height, and CSS translates .page (the body-level wrapper that contains every fixed control) down by that amount only while the banner is in the DOM. It is a no-op with no banner (0px), so the US is unaffected. Verified: injecting a 60px banner shifts the header to top:60 uncovered. - Reject / Manage-cookies ghost buttons used a 30% border that failed WCAG 1.4.11 non-text contrast (1.90:1 light / 2.70:1 dark). Bumped to 55% (3.73:1 / 5.82:1) on the banner and the dialog reset button. Cleanups: - Guard openManageConsent so preventDefault only fires when WCP's dialog actually opened, not on every click. - Replace the dead `theme-changed` CustomEvent (WCP has no such listener) with the real re-theme hook, siteConsent.applyTheme(themeObject), driven by the existing data-theme observer. - Register onConsentChanged once via init's callback argument; drop the redundant siteConsent.onConsentChanged(...) call that double-registered it (WCP stores callbacks in a list, so it fired two reloads per change). - Refresh the Cookie Consent + screenshot sections of astro.instructions.md to describe WCP (geo-gated top strip, Accept/Reject/More info, MSCC cookie) instead of the removed jop-software library. - Drop the dead E2E_TESTS env (read nowhere) from frontend-build.yml and the two playwright configs, plus the stale cookie.config.ts comment. Tests: - Restore the consent regression coverage adamint flagged as deleted. New tests/e2e/cookie-consent.spec.ts stubs window.WcpConsent (blocking the real CDN) so it can assert the behavior that only exists at runtime: analytics scripts are promoted from inert to executable when Analytics consent is granted, stay inert when it is withheld, and every server-rendered manage-cookies control routes a click to siteConsent.manageConsent(). Green across the desktop, tablet, and mobile projects. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350 * Fix WCP analytics ordering and applyTheme arg (review 4797687282) adamint's CHANGES_REQUESTED (with JamesNK's two inline notes) caught two real bugs the e2e stub had masked. Both verified against the live library and fixed. 1. Analytics was dead on the default (US) path. activateAnalyticsScripts() rebuilds each inert script with document.createElement('script') but never reset `async`. Dynamically-created scripts default to async=true and the copied `defer` is a no-op for them, so the two tiny same-origin scripts (1ds.js, track.js) won the race against the ~140 KB 1DS SDK and each bailed silently (1ds.js returns without `oneDS`; track.js returns without `window.analytics.__initialized`). Set `next.async = false` so they execute in insertion (document) order. Since consent isn't required in the US, Analytics is auto-granted there, so this was most traffic, not an edge case. 2. applyTheme always threw. WCP v2's public `siteConsent.applyTheme(name)` takes a string theme KEY and looks it up in its internal map; we were passing `wcp.themes.dark/.light` (an object), so `this.themes[object]` was undefined -> "Theme not found error", swallowed by withSiteConsent's try/catch. resolveWcpTheme now returns the 'dark'|'light' string for both applyTheme and init, so the WCP-internal re-theme actually runs on toggle. (init's 5th theme arg is ignored by the current CDN build; our CSS overrides theme the visible surfaces regardless.) Tests: strengthen the stub so it can no longer hide either bug and add the missing coverage adamint flagged. - applyTheme now validates its argument (string key in the themes map) and throws otherwise, exactly like the live library; a permissive stub could not catch a wrong-argument regression. - New assertion: every promoted analytics script has async===false. - New test: toggling data-theme drives applyTheme with the string key. - New test: WCP's onConsentChanged (init's 4th arg, now captured by the stub) reloads the page — restores the accept/reject-persistence coverage lost with the old ui-regressions tests. Verified the strengthened guards fail when either fix is reverted, and pass with both applied: cookie-consent.spec.ts is 15/15 across desktop/tablet/mobile. Also: - Revert an unintended pnpm-lock transitive drift (satteri 0.9.3 -> 0.9.4) so the lockfile diff is only the removed cookie-consent packages. - Fix a stale CSS comment: the banner's third action is "More info", not "Manage cookies". Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350 --------- Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: f983d401-1730-48ef-a79a-8d398376fcd3
Dependabot alert #106: brace-expansion DoS (GHSA-mh99-v99m-4gvg, HIGH). - Widen the conditional override to brace-expansion@<5.0.8: '>=5.0.8' in pnpm-workspace.yaml. - Pin brace-expansion to 5.0.8 in pnpm-lock.yaml (now published to the feed; integrity sha512-JZyDyq3D4A...), fully clearing the alert. balanced-match dependency unchanged (4.0.4). Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
) * fix: normalize Aspire terminology in generated API reference data The Forbidden Words check fails on the bot's integration-data PRs (e.g. #1411) because the deprecated terms live in ingestion paths that #1397's normalizer never covered: - src/data/pkgs/*.json (C# API docs; kind:"text" prose nodes) - src/data/ts-modules/*.json (TS API docs; description/returns/remarks) - sample appHostCode (code comments; previously excluded) #1397 only normalized sample title/description/readme[Raw] and the integration package description, so regenerated API reference prose and sample AppHost comments kept reintroducing the deprecated terms verbatim from upstream XML/JSDoc docs. This extends normalization to those paths, reusing the single source of truth in aspire-terminology.ts (kept in sync with .github/forbidden-words.json): - aspire-terminology.ts: add normalizeAspireTerminologyInCode(), which rewrites deprecated terms in code comments only, preserving strings, char/template literals, and executable code so samples still compile. - normalize-generated-api-data.ts: format-preserving raw-text pass over the generated API JSON. Normalizes prose only (kind:"text" nodes and description/returns/remarks), leaving code/cref/langword nodes and all .NET-escaped bytes (CRLF, astral \u escapes) byte-for-byte identical. - update-ts-api.ts: normalize ts-modules before the twoslash bundle is derived, so aspire.d.ts hover tooltips are normalized too. - update-integration-data.ps1: normalize pkgs after the C# API generator. - update-samples.ts: normalize appHostCode comments. The committed data is already clean (a plain grep over-counts the plural "app hosts", which the boundary-anchored rule never matches), so this is a scripts+tests change with no data churn. Adds unit tests for both new normalizers. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d775be1b-bee3-432e-bbfc-7a4861f3bc05 * fix: preserve commands in code comments Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * fix: preserve nested interpolation strings Replace the regex comment tokenizer with a stateful scanner so nested C# interpolation strings and raw strings remain byte-for-byte unchanged while adjacent comments are normalized. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: a9940fd9-999f-4e50-9192-96c023b14792 * fix: normalize comments inside interpolation expressions Comments nested inside C# interpolation ({ }) and TypeScript template ${ } expressions previously bypassed terminology normalization: the scanner advanced past them while skipping the surrounding literal. Thread a comment-span accumulator through interpolation traversal so those executable-code comments are normalized while nested string, char, and raw literals stay byte-for-byte identical. Adds C# and TS regression cases, including a comment paired with a preserved nested string literal. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d775be1b-bee3-432e-bbfc-7a4861f3bc05 Copilot-Session: a9940fd9-999f-4e50-9192-96c023b14792
* chore: Update integration data and GitHub stats (8/4/26) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * fix: restore AppHost casing in generated API data Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com> --------- Co-authored-by: aspire-repo-bot[bot] <aspire-repo-bot[bot]@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
Add exact pnpm overrides for the 11 malicious releases identified by Snyk without changing the current dependency graph. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4a7187e8-18d4-4432-9c78-4ebb8c25d78e
Adds a code-quality pr-review skill (C#/TypeScript/Astro/HTML/CSS) focused on critical issues and test coverage, plus a README indexing all skills. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Redesign the landing page experience
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Landing page UX polish: carousel autoplay, AI sparkle, caret + footer
- DashboardCarousel: replace interval autoplay with a rAF progress engine;
add a bottom-left play/pause button + progress bar (stage presentation),
manual nav drops into paused manual mode, Play resumes from the current
slide. Homepage carousel now autoplays (autoplay={true}).
- HomeAgentBadge: swap the star for the AI sparkle (material-symbols
auto-awesome) with glow/twinkle; enlarge popover text.
- AppHostBuilder: left-align caret on blank lines; move typing-animation
checkbox to the bottom-left under the code box.
- Footer: map disclosure animate open/close with scroll adjustment.
- Update homepage e2e tests for the new autoplay + manual-pause behavior.
NOTE: DashboardCarousel play/pause button + progress bar CSS is not yet
added (renders unstyled). Remaining follow-ups tracked separately.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Style dashboard carousel playback controls + freeze progress on pause
- Add CSS for the bottom-left play/pause button (matching the model-story
toggle, dark/purple stage palette) and the under-image progress bar,
gated to the stage presentation via [data-playback='on'].
- Raise the in-stage button above the active slide (z-index 120) so a real
pointer click hits the button instead of the image/zoom target.
- Freeze the progress fill at its current fraction while paused instead of
resetting to 0, so Play resumes visually from where it stopped.
- Add en i18n keys landing.dashboardCarousel.play/.pause (other locales
fall back to English via tt()).
Verified live: autoplay advances, progress fills, play/pause toggles and
swaps icons, manual nav drops into paused manual mode, Play resumes; no
console errors; controls hidden on the coverflow (docs) presentation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Polish mobile radar, footer bottom row, and slow carousel
- HomeEnvironment: on mobile, lift the bottom-left database resource clear
of the pause control and tuck the floating nodes closer to the radar's
extending lines (verified across Local/Test/Production at 390px and 360px).
- Footer: stack the bottom row (copyright / "Made with love" / SHA) into a
single left-aligned column at <=52rem so the items align cleanly on
mobile/tablet and the SHA no longer collides with the scroll-to-top button.
- DashboardCarousel: slow autoplay cadence from 5.5s to 7s per slide.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Emulate dashboard, realistic terminal, and lightbox nav
Polish the landing page "one application model" (glue-work) section and the
dashboard carousel:
- Replace the static dashboard screenshot in the glue-work section with an
animated, emulated resources table that mirrors the real Aspire dashboard:
rows come online staggered (Starting -> Running), URLs fade in, and a live
"N of 4 resources running" counter tracks progress. Snaps to the final
running state on manual tab selection or reduced motion.
- Rewrite the model-story terminal to faithful `aspire run` output: build and
start status lines plus the AppHost / Dashboard / Logs summary grid with a
login-token dashboard URL. Long lines now wrap on narrow viewports instead of
clipping.
- Add prev/next navigation to the dashboard carousel's zoom lightbox. Arrow
buttons (and Left/Right keys) flip through every view without unzooming; the
carousel rests on the last-viewed slide when the lightbox closes. Buttons are
theme-aware and respect reduced motion.
- Vary a repetitive AI badge label and drop the redundant environment tab
underline animation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Enlarge AppHost code panel font to match other model-story tabs
The AppHost code snippet rendered at a much smaller font than the
Topology and Dashboard panels, making it hard to read. Bump the code
font/line-height to match the dashboard panel (clamp(0.74rem, 1.15vw,
0.86rem)), trim the padding, and grow the model-story stage height
(clamp(24rem, 37vw, 28rem)) so the 17-line TypeScript variant still
fits without clipping. Also enlarge the mobile code font accordingly.
Verified across 384-1440px in both themes: code font now matches the
dashboard exactly with no vertical clipping; Topology and Dashboard
tabs still look good with the extra room.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Clean up redesigned landing page: remove dead components, localize, a11y
Final cleanup pass on the landing-page redesign:
- Delete 7 unused legacy homepage components (FreeAndOpenSourceAside +
quotes data, IntegrationGrid, LanguagesSupported, LocalVsProdEnvironments,
SimpleCard, TestimonialCarousel) and drop their unit/e2e/prop-contract tests.
- Render the redesigned <HomePage /> from every locale index.mdx and switch the
Starlight hero to isHomepage() so the new hero shows on all locale homepages.
- Add a localized `home` i18n namespace to en.json and translate it into all
14 locales (115 strings each), preserving {{placeholders}} and <strong> markup.
- Add a localizedHref() helper for locale-aware internal links.
- Accessibility: switch the model-story code block to Expressive Code for WCAG AA
contrast in both themes, add Escape-dismiss to the agent-badge tooltip
(WCAG 1.4.13), and keep decorative regions fully out of the tab order.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Polish announcement banner styles
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Complete landing page redesign refinements
Finish the runtime story, responsive motion gating, dashboard media, accessible custom selects, localized shared controls, and regression coverage across the landing experience.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Fix homepage CI rendering
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Harden homepage E2E checks
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Relocate carousel playback control and glide slides
Move the stage playback button into the footer controls row so it sits bottom-left alongside the prev/next buttons, and remove the redundant visible slide description. Add a directional transform + opacity transition so views glide between slides instead of hard-cutting.
Update the homepage dashboard-tour e2e test to match: assert the playback button shares the controls row (left of prev/next), the slide description is gone, and the active slide animates.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address landing-page review: fix CustomSelect scroll close, freeze dashboard on pause, localize carousel play/pause
- CustomSelect: ignore scroll events originating inside the fixed listbox so scrolling the menu (wheel/touch or keyboard scrollIntoView) no longer dismisses it, keeping below-the-fold locales reachable while preserving close-on-page-scroll/resize.
- HomePage: clearDashTimers() in pause() so the emulated dashboard stops populating while the runtime story is paused.
- i18n: add translated dashboardCarousel.play/.pause to all 14 non-English locales.
- e2e: add regression test that scrolls inside the language listbox and pages to the last option, asserting the menu stays open.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Fix homepage testing link
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Refine landing page feedback
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 937c958a-8043-40ee-8c89-4395dc892a57
Adam Ratzman (adamint)
left a comment
There was a problem hiding this comment.
Two things need fixing before this merges: the existing TypeScript private-endpoint thread is still valid, and aspire deploy does not write Bicep to aspire-output — only the publish step does. I also left a smaller note on the undefined custom-sql.bicep sample.
I verified the generator is deterministic, the targeted twoslash tests pass, the two new snippets fail against the old declarations and compile against this head, and the built page renders without twoslash or browser errors.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
| const horizontalWhitespace = String.raw`[ \t]+`; | ||
|
|
||
| // A deprecated term only matches when it isn't fused to an adjacent alphanumeric | ||
| // character, so longer tokens like `ASP.NET Aspire` or `.NET AspireX` stay intact |
There was a problem hiding this comment.
Use "Aspire" instead of ".NET Aspire".
| // character, so longer tokens like `ASP.NET Aspire` or `.NET AspireX` stay intact | |
| // character, so longer tokens like `ASPAspire` or `AspireX` stay intact |
| const termEnd = String.raw`(?![A-Za-z0-9])`; | ||
|
|
||
| // Markdown emphasis/link openers can sit between an article and a term in raw | ||
| // README content (e.g. `a **.NET Aspire**`, `a [.NET Aspire](url)`, or |
There was a problem hiding this comment.
Use "Aspire" instead of ".NET Aspire".
| // README content (e.g. `a **.NET Aspire**`, `a [.NET Aspire](url)`, or | |
| // README content (e.g. `a **Aspire**`, `a [Aspire](url)`, or |
|
|
||
| // Markdown emphasis/link openers can sit between an article and a term in raw | ||
| // README content (e.g. `a **.NET Aspire**`, `a [.NET Aspire](url)`, or | ||
| // `a _.NET Aspire_`), so the article corrector consumes them to stay grammatical |
There was a problem hiding this comment.
Use "Aspire" instead of ".NET Aspire".
| // `a _.NET Aspire_`), so the article corrector consumes them to stay grammatical | |
| // `a _Aspire_`), so the article corrector consumes them to stay grammatical |
| const markdownOpeners = String.raw`[*\[_]*`; | ||
|
|
||
| // Fenced code blocks and inline code spans are copied through verbatim so sample | ||
| // commands like `dotnet aspire run` are never rewritten into an unrunnable |
There was a problem hiding this comment.
Use "Aspire" instead of "dotnet aspire".
| // commands like `dotnet aspire run` are never rewritten into an unrunnable | |
| // commands like `Aspire run` are never rewritten into an unrunnable |
| * Case-insensitive regex source matching the deprecated term core, without | ||
| * boundaries. Use `${horizontalWhitespace}` for internal spaces; alphanumeric | ||
| * boundaries are applied automatically so a rule can never corrupt a longer | ||
| * token like `ASP.NET Aspire` or `.NET AspireX`. |
There was a problem hiding this comment.
Use "Aspire" instead of ".NET Aspire".
| * token like `ASP.NET Aspire` or `.NET AspireX`. | |
| * token like `ASPAspire` or `AspireX`. |
| /** | ||
| * Indefinite article the replacement should take. Set this only when the | ||
| * replacement's leading sound differs from the term's, so a preceding `a`/`an` | ||
| * is corrected (e.g. `a .NET Aspire` -> `an Aspire`). |
There was a problem hiding this comment.
Use "Aspire" instead of ".NET Aspire".
| * is corrected (e.g. `a .NET Aspire` -> `an Aspire`). | |
| * is corrected (e.g. `a Aspire` -> `an Aspire`). |
| ['uppercase article', `A ${legacyDotnetAspireName} sample`, 'An Aspire sample'], | ||
| ['lowercase article', `Build a ${legacyDotnetAspireName} sample`, 'Build an Aspire sample'], | ||
| ['no article', `Deploy the ${legacyDotnetAspireName} app`, 'Deploy the Aspire app'], | ||
| ])('normalizes the "dotnet aspire" spelling (%s)', (_scenario, input, expected) => { |
There was a problem hiding this comment.
Use "Aspire" instead of "dotnet aspire".
| ])('normalizes the "dotnet aspire" spelling (%s)', (_scenario, input, expected) => { | |
| ])('normalizes the "Aspire" spelling (%s)', (_scenario, input, expected) => { |
| test('normalizes prose while preserving adjacent code', () => { | ||
| const input = `Build a ${legacyAspireName} app, then run \`${legacyDotnetAspireName} run\`.`; | ||
| expect(normalizeAspireTerminology(input)).toBe( | ||
| 'Build an Aspire app, then run `dotnet aspire run`.' |
There was a problem hiding this comment.
Use "Aspire" instead of "dotnet aspire".
| 'Build an Aspire app, then run `dotnet aspire run`.' | |
| 'Build an Aspire app, then run `Aspire run`.' |
Fixes #246
Problem
The page at https://aspire.dev/integrations/cloud/azure/customize-resources/ contains three concrete API inaccuracies that mislead readers building custom Bicep workflows. Verified each claim against the microsoft/aspire
mainsource tree and against the live page on aspire.dev (see Evidence below).Changes
All edits are scoped to
src/frontend/src/content/docs/integrations/cloud/azure/customize-resources.mdxplus one allowlist entry pair insrc/frontend/tests/unit/twoslash-blocks-audit.ts(see Twoslash note below).AddBicepTemplateinstead ofAddAzureBicepResourcein the C# Use custom Bicep files sample.AddAzureBicepResourceis not a public API; the real APIs areAddBicepTemplate(name, bicepFile)andAddBicepTemplateString(name, bicepContent). The TypeScript sample was already using the correctaddBicepTemplatename..WithReference(storage)on the bicep resource with.WithEnvironment("STORAGE_CONNECTION_STRING", storage.GetOutput("connectionString")).AzureBicepResourcedoes not implementIResourceWithConnectionString, so the original snippet did not compile. ShowingGetOutputhere also addresses one of the reporter's wishlist items (consuming outputs from a custom Bicep template).aspire run) does not write Bicep into the project — local provisioning compiles each module into aDirectory.CreateTempSubdirectory("aspire")location (seeAzureProvisioningResource.csandAzureBicepResource.cs). Updated the steps to useaspire publish(oraspire deploy) and to look in theaspire-outputfolder (the publish/deploy default perPublishCommandStrings.resx— "Defaults to the AppHost directory's 'aspire-output' folder if not specified"). Added anotecallout calling out the difference and atipcallout pointing to the Azure Portal Export template trick.SubnetReferenceexample in Add Azure resources to the infrastructure with the idiomatic Aspire pattern usingAzurePrivateEndpointExtensions.AddPrivateEndpoint(fromAspire.Hosting.Azure.Network). Added a TypeScript note that the high-level builders are C#-only today, plus a fallback paragraph pointing readers atConfigureInfrastructure+Azure.Provisioningfor advanced needs not covered by Aspire-native builders.AddParameter(name, secret: true),WithParameter(name, parameterResource), andGetOutput(name). Added a bulleted list of the supportedWithParametervalue types (ParameterResource,BicepOutputReference,ReferenceExpression,IResourceWithConnectionString,EndpointReference) and aLearnMorelink to theplayground/bicepsample for end-to-end scenarios — closes the wishlist items in the issue.tipaboutAddBicepTemplateString/addBicepTemplateStringfor inline Bicep snippets.playground/bicepsample link.Evidence
Confirmed the issue still reproduces on the live aspire.dev page today via Playwright + DOM probe:
Quoted before/after for each section:
Use custom Bicep files (C#):
Add Azure resources to the infrastructure (C#):
Inspect generated Bicep:
How I verified
microsoft/aspire.dev:mainandmicrosoft/aspire:main, then rebaseddapine/fix-customize-azure-resources-246onto the new tip so the PR diff is exactly two files.microsoft/aspireand the matching polyglot TypeScript usage intests/PolyglotAppHosts/to confirm the real API surface (signatures and call patterns).pnpm --dir src/frontend test:unit:twoslash-blocks— PASS (the twoKNOWN_TYPE_BUGSentries cleanly cover the generator's collapsed-overload bug).pnpm --dir src/frontend test:unit:llms-txt— PASS.pnpm --dir src/frontend lint— PASS for the two changed files (pre-existing repo-wide warnings unrelated to this branch).Twoslash note
The two new TypeScript twoslash blocks call
withParameter(name, { value })with astringand aParameterResource. The polyglot testtests/PolyglotAppHosts/Aspire.Hosting.Azure/TypeScript/apphost.tsuses this exact pattern, so the runtime API supports it. However, the currentaspire.d.tsgenerator only emits the lastwithParameteroverload ({ value?: EndpointReference }), so twoslash reportsts(2769) — No overload matches this call.Added twoKNOWN_TYPE_BUGSentries with a clear label so the regression gate stays precise; the entries fall out automatically once the generator emits all overloads (separate, pre-existing concern inscripts/generate-twoslash-types.ts).Out of scope
withParameteris emitted toaspire.d.ts. Worth a follow-up issue againstscripts/generate-twoslash-types.ts, but outside the scope of this docs fix.existingBicep keyword (one of the reporter's wishlist items) — theLearnMorehere points readers at theplayground/bicepsample, and a full guide can land as a follow-up.