Skip to content

chore: Update integration data and GitHub stats (11/4/26) - #1737

Merged
David Pine (IEvangelist) merged 5 commits into
mainfrom
chore/update-integration-data
Nov 5, 2026
Merged

David Pine (IEvangelist) merged 5 commits into
mainfrom
chore/update-integration-data

Conversation

@aspire-repo-bot

@aspire-repo-bot aspire-repo-bot Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Automated integration data update — 11/4/26

Generated deterministically by src/frontend/scripts/update-integration-data.ps1 (no agent inference).

This PR is approved and squash-merged automatically once ci-gate passes, as configured in .github/policies/auto-merge.yml. Remove the :octocat: auto-merge label to hold it for manual review.

What's updated

  • src/frontend/src/data/aspire-integrations.json — latest package information
  • src/frontend/src/data/integration-docs.json — documentation mappings, when packages are removed
  • src/frontend/src/data/github-stats.json — repository statistics
  • src/frontend/src/data/github-contributors.json — Contributors page avatars, when changed
  • src/frontend/src/data/samples.json — sample metadata, when changed
  • src/frontend/src/data/aspire-blog-posts.json — complete official Aspire blog metadata, when changed
  • src/frontend/src/data/schemas/ — Aspire CLI config schemas, when microsoft/aspire ships a new release
  • src/frontend/src/assets/samples/ — sample thumbnails, when changed

API reference regeneration

The C# and TypeScript API reference data and twoslash bundle were regenerated for version changes or to retry previously failed packages:

  • Aspire.Azure.AI.Inference 13.6.0-preview.1.26478.8 → 13.6.4-preview.1.26523.11
  • Aspire.Azure.AI.OpenAI 13.6.0-preview.1.26478.8 → 13.6.4-preview.1.26523.11
  • Aspire.Azure.Data.Tables 13.6.0 → 13.6.4
  • Aspire.Azure.Messaging.EventHubs 13.6.0 → 13.6.4
  • Aspire.Azure.Messaging.ServiceBus 13.6.0 → 13.6.4
  • Aspire.Azure.Messaging.WebPubSub 13.6.0 → 13.6.4
  • Aspire.Azure.Npgsql 13.6.0 → 13.6.4
  • Aspire.Azure.Npgsql.EntityFrameworkCore.PostgreSQL 13.6.0 → 13.6.4
  • Aspire.Azure.Search.Documents 13.6.0 → 13.6.4
  • Aspire.Azure.Security.KeyVault 13.6.0 → 13.6.4
  • (list truncated to first 10; full list visible in the diff)
Area Added Modified Removed
src/frontend/src/data/pkgs/** 0 0 194
src/frontend/src/data/ts-modules/** 0 0 137
src/frontend/src/data/twoslash/aspire.d.ts — yes —

Generator summary:

  • C# API JSON (generate-package-json.ps1 → pkgs/): Success: 201 | Failed: 3 | Skipped: 7
  • TS API JSON (update:ts-api → ts-modules/): 140 succeeded, 0 failed, 6 skipped
  • Twoslash bundle (twoslash/aspire.d.ts): succeeded
  • Semantic generated-data validation: passed
  • C# packages skipped because they have no public API: Aspire.Hosting.Azure.Provisioning.Generators, Aspire.Hosting.CodeGeneration.Go, Aspire.Hosting.CodeGeneration.Java, Aspire.Hosting.CodeGeneration.Python, Aspire.Hosting.CodeGeneration.Rust, Aspire.Hosting.CodeGeneration.TypeScript, Aspire.Hosting.Integration.Analyzers
  • TypeScript packages skipped because they export no ATS functions: Aspire.Hosting.AgentFramework.DevUI, Aspire.Hosting.DocumentDB, Aspire.Hosting.Elasticsearch, CommunityToolkit.Aspire.Hosting.Azure.Dapr, CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis, CommunityToolkit.Aspire.Hosting.Dapr

⚠️ API generation failures

These packages failed to generate. Their last-good API data is retained when available; new packages have no API reference until generation succeeds. Exact versions and reasons are saved in api-generation-failures.json and the Integration Data Updater: API generation failures issue.

  • C# CommunityToolkit.Aspire.Hosting.Chroma@17.0.0-beta.994: error NU1102: Unable to find package Aspire.Hosting with version (>= 17.0.0-preview.1.26552.6) /home/runner/work/aspire.dev/aspire.dev/src/tools/PackageJsonGenerator/.package-json-generator-work/restore-ef327acafa6f4bfca8db0e2498f686c0/Restore.csproj : error NU1102: - Found 66 version(s) in source...
  • C# CommunityToolkit.Aspire.Hosting.Keycloak.Extensions@17.0.0-beta.994: error NU1102: Unable to find package Aspire.Hosting with version (>= 17.0.0-preview.1.26552.6) /home/runner/work/aspire.dev/aspire.dev/src/tools/PackageJsonGenerator/.package-json-generator-work/restore-8460f063038d4996adf0b7293102931c/Restore.csproj : error NU1102: - Found 66 version(s) in source...
  • C# CommunityToolkit.Aspire.Hosting.Kind@17.0.0-beta.994: error NU1102: Unable to find package Aspire.Hosting with version (>= 17.0.0-preview.1.26552.6) /home/runner/work/aspire.dev/aspire.dev/src/tools/PackageJsonGenerator/.package-json-generator-work/restore-6d1c8ae042a141838b4d23e737ffbca6/Restore.csproj : error NU1102: - Found 66 version(s) in source...

⚠️ Tolerated ATS scanner diagnostics

The Aspire CLI reported known duplicate inherited-capability diagnostics for the packages below. Their TypeScript modules were generated anyway, so the APIs named in these diagnostics may be incomplete until the CLI includes the scanner fix from microsoft/aspire#20443. Remove the :octocat: auto-merge label to review these modules before this PR merges.

  • Aspire.Hosting.Azure.Provisioning.Kusto
  • Aspire.Hosting.Azure.Provisioning.Network
Tolerated diagnostics
  • Aspire.Hosting.Azure.Provisioning.Kusto: Duplicate capability 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated/KustoDataConnectionProxy.addTo': defined at 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoCosmosDBDataConnectionProxy.AddTo' and 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoEventGridDataConnectionProxy.AddTo'. Remove [AspireExport] from one of them or use different capability IDs.
  • Aspire.Hosting.Azure.Provisioning.Kusto: Duplicate capability 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated/KustoDataConnectionProxy.addTo': defined at 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoCosmosDBDataConnectionProxy.AddTo' and 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoEventHubDataConnectionProxy.AddTo'. Remove [AspireExport] from one of them or use different capability IDs.
  • Aspire.Hosting.Azure.Provisioning.Kusto: Duplicate capability 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated/KustoDataConnectionProxy.addTo': defined at 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoCosmosDBDataConnectionProxy.AddTo' and 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoIotHubDataConnectionProxy.AddTo'. Remove [AspireExport] from one of them or use different capability IDs.
  • Aspire.Hosting.Azure.Provisioning.Kusto: Duplicate capability 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated/KustoDatabaseProxy.addTo': defined at 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoDatabaseProxy.AddTo' and 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoReadOnlyFollowingDatabaseProxy.AddTo'. Remove [AspireExport] from one of them or use different capability IDs.
  • Aspire.Hosting.Azure.Provisioning.Kusto: Duplicate capability 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated/KustoDatabaseProxy.addTo': defined at 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoDatabaseProxy.AddTo' and 'Aspire.Hosting.Azure.Provisioning.Kusto.Generated.KustoReadWriteDatabaseProxy.AddTo'. Remove [AspireExport] from one of them or use different capability IDs.
  • Aspire.Hosting.Azure.Provisioning.Network: Duplicate capability 'Aspire.Hosting.Azure.Provisioning.Network.Generated/BaseAdminRuleProxy.addTo': defined at 'Aspire.Hosting.Azure.Provisioning.Network.Generated.BaseAdminRuleProxy.AddTo' and 'Aspire.Hosting.Azure.Provisioning.Network.Generated.NetworkAdminRuleProxy.AddTo'. Remove [AspireExport] from one of them or use different capability IDs.
  • Aspire.Hosting.Azure.Provisioning.Network: Duplicate capability 'Aspire.Hosting.Azure.Provisioning.Network.Generated/BaseAdminRuleProxy.addTo': defined at 'Aspire.Hosting.Azure.Provisioning.Network.Generated.BaseAdminRuleProxy.AddTo' and 'Aspire.Hosting.Azure.Provisioning.Network.Generated.NetworkDefaultAdminRuleProxy.AddTo'. Remove [AspireExport] from one of them or use different capability IDs.

Manual review checklist

  • Integration data looks reasonable (no suspicious anomalies)
  • Package counts and versions updated appropriately
  • Official Aspire package icons still use package-specific NuGet icon URLs
  • New/removed pkgs/ and ts-modules/ files match the version changes
  • src/frontend/src/data/twoslash/aspire.d.ts is included in the diff
  • TypeScript modules generated with tolerated ATS scanner diagnostics were reviewed

Copilot AI lite review requested due to automatic review settings September 23, 2026 21:39
@aspire-repo-bot aspire-repo-bot Bot added the :octocat: auto-merge Pull requests that are auto merged by policy label Sep 23, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟢 Approval recommended

No unresolved review issues were identified.

Review effort: Lite
Findings: None

What changed in this PR

Refreshes Aspire integration metadata, GitHub statistics, and generated API reference data for two CommunityToolkit packages.

Changes:

  • Updates package versions, metadata, icons, and download counts.
  • Refreshes GitHub star counts.
  • Regenerates C# and TypeScript API metadata for Kind and Keycloak.
File Summary
src/​frontend/​src/​data/​ts-modules/​CommunityToolkit.Aspire.Hosting.Kind.13.5.1-beta.767.json Updated Kind TypeScript API metadata
src/​frontend/​src/​data/​ts-modules/​CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.13.5.1-beta.767.json Updated Keycloak TypeScript API metadata
src/​frontend/​src/​data/​pkgs/​CommunityToolkit.Aspire.Hosting.Kind.13.5.1-beta.767.json Updated Kind C# API metadata
src/​frontend/​src/​data/​pkgs/​CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.13.5.1-beta.767.json Updated Keycloak C# API metadata
src/​frontend/​src/​data/​github-stats.json Updated repository star counts
src/​frontend/​src/​data/​aspire-integrations.json Updated package metadata and download counts

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@aspire-repo-bot

Copy link
Copy Markdown
Contributor Author

Frontend HTML artifact ready

The latest frontend build uploaded the frontend-dist artifact for PR #1737. Use the VS Code button below to open this PR with GitHub Artifacts Explorer and browse the built HTML locally.

VS Code: Open PR #1737 artifacts

This comment updates automatically when a new frontend build artifact is uploaded.

@aspire-repo-bot aspire-repo-bot Bot changed the title chore: Update integration data and GitHub stats (9/23/26) chore: Update integration data and GitHub stats (9/24/26) Sep 24, 2026
@aspire-repo-bot
aspire-repo-bot Bot force-pushed the chore/update-integration-data branch 2 times, most recently from cb726a2 to e3939ba Compare September 25, 2026 21:39
@aspire-repo-bot aspire-repo-bot Bot changed the title chore: Update integration data and GitHub stats (9/24/26) chore: Update integration data and GitHub stats (9/25/26) Sep 25, 2026
@aspire-repo-bot
aspire-repo-bot Bot force-pushed the chore/update-integration-data branch from e3939ba to 57196d9 Compare September 28, 2026 21:41
@aspire-repo-bot aspire-repo-bot Bot changed the title chore: Update integration data and GitHub stats (9/25/26) chore: Update integration data and GitHub stats (9/28/26) Sep 28, 2026
@aspire-repo-bot
aspire-repo-bot Bot force-pushed the chore/update-integration-data branch from 57196d9 to 520e020 Compare September 29, 2026 21:40
@aspire-repo-bot aspire-repo-bot Bot changed the title chore: Update integration data and GitHub stats (9/28/26) chore: Update integration data and GitHub stats (9/29/26) Sep 29, 2026
@aspire-repo-bot aspire-repo-bot Bot changed the title chore: Update integration data and GitHub stats (9/29/26) chore: Update integration data and GitHub stats (10/5/26) Oct 5, 2026
@aspire-repo-bot
aspire-repo-bot Bot force-pushed the chore/update-integration-data branch from 520e020 to 731d076 Compare October 5, 2026 17:13
@IEvangelist
David Pine (IEvangelist) enabled auto-merge (squash) October 5, 2026 18:20
David Pine (IEvangelist) added a commit that referenced this pull request Oct 16, 2026
…1899)

## Summary

The Integration Data Updater has failed every run since a maintainer
clicked **Update branch** on the rolling PR (#1737). That added a
human-authored `Merge branch 'main' into chore/update-integration-data`
commit. The "Commit and refresh automation branch" step refuses to
replace the branch if it has any commit not authored/committed by the
bot, so it errored with `Refusing to replace
chore/update-integration-data because it contains non-bot commits` on
every run after that. The data generation itself succeeded (e.g. `C#
API: Success: 210 | Failed: 0`).

A merge of `main` carries no maintainer changes, so the guard now uses
`git log --no-merges`. Real maintainer commits on the branch are still
protected (and the `--force-with-lease` remains).

## Third-party links and affiliations

None.

## Validation

- Reproduced root cause from failed run 38639537736 logs (step 11
failed; all earlier steps passed).
- Ran the new `git log --no-merges
origin/main..origin/chore/update-integration-data` against the live
branch: only the bot commit `731d076d` is returned, so the guard now
passes.
- The workflow itself runs on schedule / `workflow_dispatch`; not run
locally.

---------

Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
David Pine (IEvangelist) pushed a commit that referenced this pull request Oct 30, 2026
## Summary

The [Keycloak integration
page](https://aspire.dev/integrations/security/keycloak/) suggests
initializing realms with the "[Keycloak Admin
Client](https://www.nuget.org/packages/Keycloak.AuthServices.Sdk.Admin)".
That package doesn't exist on NuGet, so readers land on a "package not
found" page.

The Admin REST API client from the same project ships in
**`Keycloak.AuthServices.Sdk`**. This PR points the link there; the link
text is unchanged.

**Evidence**
- NuGet v3 flat container:
-
`api.nuget.org/v3-flatcontainer/keycloak.authservices.sdk.admin/index.json`
returns **404**.
- `.../keycloak.authservices.sdk/index.json` returns **200** (latest
3.0.0).
- NuGet search for `Keycloak.AuthServices` lists Authentication,
Authorization, Common, Sdk, Sdk.Kiota, OpenTelemetry, Aspire.Hosting,
Authorization.TokenIntrospection, Templates and Authorization.Uma.
There's no `Sdk.Admin`.
- The `Keycloak.AuthServices.Sdk` 3.0.0 NuGet description reads:
"HttpClient integration with Keycloak. Includes HTTP Admin REST API,
Protection API."
- The upstream [Keycloak.AuthServices
README](https://github.com/NikiforovAll/keycloak-authorization-services-dotnet#example---invoke-admin-api)
"Invoke Admin API" example uses this package's
`AddKeycloakAdminHttpClient` and `IKeycloakRealmClient` to create and
read realms. That matches the docs context: creating and configuring
realms, clients and users. `Keycloak.AuthServices.Sdk.Kiota` also
exists, but it's the Kiota-generated alternative; the primary admin
client is `Sdk`.
- Overlap: no open aspire.dev issue or PR mentions
`Keycloak.AuthServices`. Open PRs #1737 and #1637 touch only generated
Keycloak API data, not `keycloak.mdx`.

This change isn't visual. Only the link target changes.

## Third-party links and affiliations

Changes one third-party link from
`https://www.nuget.org/packages/Keycloak.AuthServices.Sdk.Admin`
(nonexistent) to
`https://www.nuget.org/packages/Keycloak.AuthServices.Sdk`, published by
the community Keycloak.AuthServices project. No affiliation.

## Validation

- Before/after NuGet API evidence: 404 → 200, as listed above. I didn't
add a unit regression check, because the repo's unit tests run offline
and have no NuGet existence check to extend.
- `npx vitest run`: 1,119 passed, 1 skipped.
- `npx eslint . --max-warnings 0`: clean.
- `keycloak.mdx` already has Prettier warnings on `main`; this one-line
change doesn't affect them.

**🤖 Posted by AspireAgent (AI Agent)**

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

David Pine (IEvangelist) commented Nov 2, 2026 •

Copy link
Copy Markdown
Member

Documentation accuracy review [partial]

Reviewed head: 3ee148e7542e3c8d9ff4e7a9a87b57cd33cedb9f, targeting main; full 343-file scope. Two PR-introduced API-reference regressions are confirmed, independently of the older six-file generic review.

Phase A: 160 grouped claim entries: 149 verified, two verified with nuance, seven contradicted API-family groups (consolidated into two findings), two historical/narrative snapshot groups. Primary source pins are core Aspire v13.6.0@56f3e9c0d216c0c7069dabb49dd0464e4827744f and Toolkit v13.6.0@684f1d63041db916e7f25df7ffbfdd9059feb2f0, with additional exact owning-source refs listed below. All 122 changed package versions were checked against immutable NuGet manifests.

Phase B: independent, source-blind doc-tester ran the exact head at http://localhost:4322/ using playwright-cli. It exercised the gallery, version pickers, C#/TypeScript references, Kind additions/removals, Keycloak, twoslash hover rendering, statistics, and blog destinations. It found no independently confirmed new critical regression, one explicitly attributed baseline critical broken link, seven warning sections, and knowledge/coverage gaps. Its findings are preserved separately from the source-aware API-loss findings.

Why partial: representative browser/runtime-site coverage was completed, but the blind tester did not execute package-install commands or compile/run Aspire applications. This is not a full executable-example/product-behavior certification; no production build was run. The separate exact-base TypeScript declaration compiler control below is not being substituted for the blind phase. Machine-specific absolute paths in the tester's operational appendix are redacted; its substantive findings, evidence, routes, recommendations, and knowledge gaps are otherwise preserved.

This is the Project's once-per-PR documentation-stage conversation comment, not a formal approval/request-changes verdict. A partial report consumes this stage; it must not be automatically repeated for a later SHA.

Phase A - frozen source/claim verification

Reviewed head 3ee148e7542e3c8d9ff4e7a9a87b57cd33cedb9f against exact base 75e3568f1af2c2f5e6a9d114fe4dd953f991c306, targeting main. The complete paginated list contains 343 files, not the six files in the older generic bot review: 197 C# package JSON changes/renames, 141 TypeScript module JSON changes/renames, integration metadata, blog metadata, GitHub statistics, samples metadata, and the twoslash declaration bundle. samples.json differs only by its final newline; its sample content is identical. No authored guide, generator, component, or test implementation changes.

Historical version discipline: the reviewed data describes 13.6 artifacts, not today's main. The immutable NuGet manifests for all 122 changed package versions were fetched successfully and matched their exact IDs/versions. Their repository provenance groups are 50 microsoft/aspire, 70 CommunityToolkit/Aspire, one DocumentDB package, and one Agent Framework DevUI package. The version-specific values are intentional package metadata, not places to substitute current-version documentation placeholders.

Sources actually read:

Owning source Pinned ref/SHA Purpose
microsoft/aspire v13.6.0, 56f3e9c0d216c0c7069dabb49dd0464e4827744f The exact published core package provenance; source APIs, proxy generator, and release-feature claims
CommunityToolkit/Aspire v13.6.0, 684f1d63041db916e7f25df7ffbfdd9059feb2f0 The exact published Toolkit package provenance, including the Kind and Keycloak Extensions preview artifacts
microsoft/aspire v13.5.0, e076d8e427cb3afb528dbd605acd74c3aea69f94 Historical WithTerminal availability
microsoft/azure-databases-aspire Package source commit bf50a362ad65f556b2defeb9bf6851bf14f07438 DocumentDB 0.117.0 API/remarks, rather than incorrectly routing this package to core Aspire
microsoft/agent-framework Generated package source commit 8e6bf37c6d26e4b8e43941c70dfcbe56874ebe4a DevUI's changed remarks; its NuGet manifest supplies the repository URL but omits a commit

The current source main refs were resolved (microsoft/aspire: 3d42183549d7fc8e4817e5c98c8d427ebd20e464; Toolkit: bae4970aa52d8e9afdf0c21c416785e4da551931) but were not substituted for these historical artifact pins. No changed standalone Azure SDK API claim required an Azure/azure-sdk-for-net checkout: the affected symbols here are Aspire-generated proxy exports, verified against their owning proxy generator.

Findings: the rendered TypeScript API loses real exported APIs

1. Radius's .NET-program overload disappears. The regenerated Radius module retains the ProjectResource overload but removes capability Aspire.Hosting.Radius/withDotnetProgramContainerImage, formerly exposed as withContainerImage(image: string): IDotnetProgramResource.

The pinned owning source still declares [AspireExport("withDotnetProgramContainerImage", MethodName = "withContainerImage")] on WithContainerImage<T>(...) where T : IDotnetProgramResource. This is not a removed product API. The generated reference/twoslash surface should retain it for DotnetProjectResource.

2. Six provisioning modules narrow inherited capabilities to a derived type, dropping them from their original base handles. For example, CosmosDB's CassandraViewResourceProxy.clearId now targets CassandraViewGetPropertiesResourceProxy instead of CassandraViewResourceProxy. The base handle and its factory remain, but its clearId/clearViewDefinition operations disappear. Kusto's base data-connection handle also loses addTo, clearLocation, and clearName.

Module Original handles losing operations Lost operations after checking remaining ancestors
Cdn 1 2
CognitiveServices 2 9
ContainerRegistry 2 5
CosmosDB 8 19
Kusto 1 3
Network 2 4
Total 16 42

The pinned proxy generator preserves base-proxy inheritance and emits base-type-specific addTo and clear... export IDs. This generator is byte-identical between the previous and new core provenance commits (Git blob 778163a6d384b081c850f8388e324822011ce246). Treating the first encountered derived receiver as the only supported receiver does not match that source contract.

This is not merely theoretical metadata churn. A focused TypeScript 6.0.3 compiler check of the same four calls against the exact base and head bundles produces:

Exact base: 0 diagnostics
Reviewed head:
  Property 'clearId' does not exist on type 'CassandraViewResourceProxy'.
  Property 'clearViewDefinition' does not exist on type 'CassandraViewResourceProxy'.
  Property 'addTo' does not exist on type 'KustoDataConnectionProxy'.
  Property 'withContainerImage' does not exist on type 'DotnetProjectResource'.

The PR's warning about tolerated Kusto/Network scanner diagnostics is relevant, but the verified losses also affect four other provisioning modules and Radius. Regenerate with a scanner/transform path that preserves the exported receiver/capability contract, or otherwise preserve the complete existing supported surface until that path is fixed. Merely accepting the diagnostic warning is insufficient.

Verified and nuanced claim groups; mechanical scope and coverage limits

All changed JSON files were parsed and compared with the base. Arrays were compared by type/full name, member signature, or capability ID where applicable, so reorderings were not reported as new APIs. After excluding timestamps, source-line movement, package versions, and source-commit-only updates, there are 19 semantic API package/module groups: eight C# package groups and eleven TypeScript module groups. Twelve match their pinned owning sources; the seven contradicted groups are Radius plus the six provisioning modules above. These are grouped API-family verdicts, not an assertion that every generated symbol was independently executed.

Verified group Source evidence at the pinned commits above
Kind's CrdWaitOptions, shared WithCrdWait, legacy-member obsolescence, removed retry helper, and updated CRD wording Toolkit CrdWaitOptions.cs:9-31, KindDeployedResourceBuilderExtensions.cs:13-51, KubectlTimeouts.cs:8-24, and K8sManifestResource.cs:109-133; defaults are five minutes/Fail, bounded at one hour with fractional seconds rounded up
k6's nullable VU/duration defaults and new summary-mode parameter/enum, in both languages Toolkit K6BuilderExtensions.cs:69-132 and K6SummaryMode.cs:1-20; flags are only emitted when non-null
Floci's Service Bus/Cosmos resource types and new methods, in both languages Toolkit FlociHostingExtension.Azure.cs, FlociAzureServiceBusResource.cs:16-67, and FlociAzureCosmosResource.cs:8-50
K3s's changed Helm/kubectl tag defaults Toolkit K3sClusterOptions.cs:73-85; actual constants in HelmContainerImageTags.cs:7 and KubectlContainerImageTags.cs:9 are 4.3.0 and 1.36.4
Posta's new nullable Languages response property Toolkit ListTemplatesResponseDataItem.cs:36-38
Blazor's removed experimental annotations Core BlazorGatewayExtensions.cs, including AddDotnetProjectBlazorGateway:92
DocumentDB's 0.117.0 enum/constant and updated initialization/owner remarks Actual owner DocumentDBVersion.cs and DocumentDBBuilderExtensions.cs
DevUI's changed testing/aggregation/security caveats Actual owner AgentFrameworkBuilderExtensions.cs; no authentication guarantee is inferred
JavaScript extension's additional Deno receiver Toolkit JavaScriptHostingExtensions.cs:257 targets JavaScriptAppResource; core DenoAppResource.cs:18 inherits it

Additional grouped checks:

  • 122/122 exact changed package IDs/versions verified with immutable https://api.nuget.org/v3-flatcontainer/{id}/{version}/{id}.nuspec manifests. Kind and Keycloak Extensions match their distinct 13.6.0-preview.1.261001-0242 / ...0243 artifacts; this is not the obsolete beta.767 snapshot in the older bot report.
  • 14/14 changed tag arrays retain exactly the same tag set: only duplicates were removed. All 217 catalog entries and descriptions survive. Official package icons retain the exact package/version NuGet URL policy.
  • All 210 C# outputs and 146 TypeScript outputs reconcile to the catalog and paired provenance. The 120 C# and 98 TypeScript old filenames are replaced versions, not deleted package identities. The unchanged generators deliberately reconcile and prune nonselected output filenames (generate-package-json.ps1:1226-1255; generate-ts-api-json.ps1:1158-1202).
  • The two added blog summaries are verified with nuance, not claims of executing all the advertised scenarios: core source contains WithTerminal at the pinned 13.5 ref; the 13.6 ref contains TerminalDock.razor, the terminal host/attach implementation, SqliteTelemetryRepository.cs:17-20, disk-backed DashboardSqliteDatabase.cs:35-55, first-party JavaHostingExtensions.cs:83 / RustHostingExtensions.cs:75, the portable-volume annotation/resolver, and AzureSandboxesExtensions.cs:38. These source checks support the described feature families; they are not end-to-end proofs of telemetry retention, cloud deployment, or every terminal workflow.
  • Download/star totals are historical external-service snapshots, not independently recoverable Aspire source-code claims. Their JSON number shapes and nonnegative values were checked; current counts were not treated as contradictions of the October snapshot.

Catalog accounting: 160 grouped claim entries = 122 version claims + 19 semantic API groups + two blog-summary groups + 14 tag-set-preservation groups + one official-icon-policy group + two historical-snapshot groups. Verdicts: 149 verified, two verified with nuance, seven contradicted, two historical/narrative snapshots (not source-verifiable). Generated type/member/parameter repetitions are grouped under their owning API family; no exhaustive runtime execution is implied.

Focused validation: the actual exported repository validateGeneratedApiData function returned no errors for the full head data (217 catalog identities, 146 provenance pairs, 74 DTO shapes, 2,876 handle inheritance chains). That invocation did not supply attribute-payload baseline objects; its generic success text must not be interpreted as an independently performed baseline-attribute audit. The validator does not establish receiver/capability preservation: the compiler control above finds regressions despite its success.

Phase B - independent doc-tester report

Documentation Test Report

Focus Area: Independent, blind Phase B user-facing testing of microsoft/aspire.dev PR #1737 generated integration, C# API, TypeScript API, two-slash, blog, and repository-statistics data.
Date: 2026-11-02
Tester: doc-tester agent
Pinned HEAD: 3ee148e7542e3c8d9ff4e7a9a87b57cd33cedb9f
Compared base: 75e3568f1af2c2f5e6a9d114fe4dd953f991c306
Local URL tested: http://localhost:4322/
Browser: Installed playwright-cli, named session pr1737, headless Microsoft Edge.
Disposition: Representative grouped runtime coverage completed; not an exhaustive certification of every changed schema or API. No PR-introduced critical regression confirmed. One broken link was reproduced on a refreshed page, but its underlying function data is unchanged from the base. Other baseline rendering and coverage limitations are identified explicitly below.

The actual .agents\skills\doc-tester\SKILL.md and .agents\skills\playwright-cli\SKILL.md were read and both skills activated. Testing used rendered documentation and browser interactions, with the supplied generated-data diff used only to establish changed groups, versions, and baseline attribution. No microsoft/aspire, CommunityToolkit/Aspire, or Azure/azure-sdk-for-net source was read or fetched. No source-aware review findings or Phase A results were received. Local setup inspection was limited to project instructions, package manifests, tool/environment information, and route filenames—not generator or site implementation. All browser navigation used playwright-cli.

Summary

Counts below are grouped assertions, not a count of individual page loads. A rendered-example smoke check is not a compilation or execution pass.

Category Passed Failed Warnings
Content Accuracy 8 0 4
Code Examples 1 0 1
CLI Commands 0 0 1
Links 6 1 1

Generated-data scope identified with git diff --name-status 75e3568f1af2c2f5e6a9d114fe4dd953f991c306...HEAD: 197 C# package entries, 141 TypeScript module entries, and five other changes covering integration metadata, blog metadata, repository statistics, and the two-slash declaration file. Renamed/deleted old schema filenames were treated as implementation artifacts, not assumed to be public versioned URLs. The corresponding versionless public routes were tested.

Critical Issues

Issues that make documentation misleading or incorrect.

Issue 1: Keycloak Extensions “Applies to” link reaches a nonexistent module-local resource

Location: http://localhost:4322/reference/api/typescript/communitytoolkit.aspire.hosting.keycloak.extensions/withpostgres/, “Applies to”
Type: Link
Severity: Critical for this navigation path; baseline defect, not established as introduced by this PR.

What the documentation says:

This method applies to the following types:

TYPE

KeycloakResource

The KeycloakResource link points to:

/reference/api/typescript/communitytoolkit.aspire.hosting.keycloak.extensions/keycloakresource/

What actually happens:

404 / NOT FOUND

Wrong route?

The page you're looking for isn't available.

Evidence:

  1. Open the withpostgres/ page above. It renders owner CommunityToolkit.Aspire.Hosting.Keycloak.Extensions v13.6.0-preview.1.261001-0243.
  2. Click the resource link in “Applies to”. The browser reaches the module-local URL above and displays “Page not found | Aspire”.
  3. Independent browser navigation to that same URL returns HTTP 404.
  4. The owner route discovered from the official Keycloak module, /reference/api/typescript/aspire.hosting.keycloak/keycloakresource/, returns HTTP 200.
  5. Comparing the generated Keycloak Extensions JSON at the base and head shows only package version/source-commit metadata changes; the function data producing this link is unchanged. This observation must not be presented as a new PR regression.

Expected result: Following the type link should open the actual owning module’s KeycloakResource reference.

Recommended Action:

  • Update documentation to match behavior.
  • Fix implementation to match documentation: resolve cross-module “Applies to” links using the owning module, rather than assuming the extension’s module owns the resource.
  • Add clarifying note if cross-module resolution cannot be provided.

Warnings

Issues that may confuse readers but aren't strictly incorrect in the changed data, and explicit limits on what was verified.

Warning 1: Kind’s existing inheritance display is malformed TypeScript

Location: http://localhost:4322/reference/api/typescript/communitytoolkit.aspire.hosting.kind/kinddeployedresource/
Issue: The page now exposes the added withCrdWait capability, but its interface presentation includes:

interface KindDeployedResource
  extends IResource,
    IResourceWithParent,
    KindClusterResource]],
    IResourceWithWaitSupport {
  withCrdWait(configure: (obj: CrdWaitOptions) => Promise<void>): KindDeployedResource;
  withNamespace(namespace: string): KindDeployedResource;
}

The stray ]] makes the displayed declaration invalid as TypeScript. This is a baseline presentation defect: the generated implementedInterfaces entry containing IResourceWithParent plus a nested KindClusterResource generic argument is identical at base and head. No product implementation was consulted.
Suggestion: Render generic parent interfaces correctly. Do not copy this interface declaration into an application as a runnable example. Track separately from new-PR findings.

Warning 2: Updated blog entries are valid externally but not discoverable in the tested local blog surface

Location: http://localhost:4322/hub/, “From the blog”
Issue: The local hub displays the August 18 “Aspire 13.5: Fresh pixels and better workflows” card followed by June entries. Neither newly added October 1/September 29 article appears there. The English homepage, documentation landing page, community landing page, and one French homepage also did not expose either new card. The local RSS feed is a documentation feed and did not contain these article titles.
Suggestion: Clarify whether “From the blog” is intentionally curated or should reflect the refreshed metadata. This is a discoverability/coverage observation, not proof that this PR broke a working feed. No generator/consumer implementation was inspected to infer intent. Both new article destinations themselves passed browser verification.

Warning 3: Existing TypeScript API counts and duplicate type presentations can confuse readers

Location: TypeScript API index and communitytoolkit.aspire.hosting.kind/ / communitytoolkit.aspire.hosting.keycloak.extensions/
Issue: Examples observed:

  • Keycloak Extensions shows “1 Functions” and a usable withPostgres function, alongside “0 types and 0 members”.
  • Kind appears as 53 capabilities/functions in the global module card, but its module page distinguishes 26 Functions and 27 members.
  • Kind exposes CrdWaitBehavior both as a HANDLE and an ENUM; both destinations load, but a new user must choose between them.
  • After filtering TypeScript results, the top summary can retain the previous count while the results-area count updates—for example “0 results” above “3 results” after enabling the Kind prerelease.

Suggestion: Label capabilities, top-level functions, and handle members distinctly, keep the summaries synchronized, and explain or deduplicate handle/enum representations. These are runtime observations on refreshed data, not established new regressions.

Warning 4: Local development provenance and live-status service are imperfect

Location: Local pages and browser console.
Issue: Although Git HEAD was verified at the exact pinned commit before and after testing, the dev-generated footer displayed SHA 75e3568. Startup also reported that same base commit for git metadata. The rendered integration/API versions did reflect the new head data. Browser console errors came from absent local /api/live/ and /api/live/stream/ endpoints, with:

[live-status] Live API not found (404); live updates disabled until reload.

Suggestion: Treat the verified Git SHA, not the dev footer, as this run’s provenance. These missing auxiliary endpoints did not block gallery/reference rendering. Do not infer a production or PR-specific failure from the lightweight dev environment.

Warning 5: Example coverage is rendered smoke testing, not application execution

Location: /integrations/security/keycloak/ and new Kind TypeScript reference declarations.
Issue: The Keycloak page rendered TypeScript examples without visible diagnostics, and an actual two-slash hover worked. No Aspire test project was created; no package-install, application-build, container, or deployment behavior was exercised. The new Kind callback API was read and navigated in the reference, not compiled or run. The whole changed aspire.d.ts surface was not independently type-checked.
Suggestion: Keep this result scoped to rendered behavior. Use a separate targeted example/type validation if full declaration correctness is required. No full production build or broad suite was run.

Warning 6: Aspire CLI examples were not executed

Location: Gallery install snippets and the Keycloak integration page.
Issue: Commands such as aspire add communitytoolkit-kind, aspire add communitytoolkit-keycloak-extensions, and aspire add keycloak were observed in the rendered pages, but not executed. This review concerns generated website data, not a newly added application tutorial.
Suggestion: Do not count observed command strings as successful package installation or CLI behavior.

Warning 7: Link coverage was scoped, not exhaustive

Location: Tested gallery, API, and integration pages.
Issue: Tested internal links used site-relative, trailing-slash paths; inspected same-page anchors existed. New Kind member/property deep links and the problematic Keycloak link were exercised. Every link in all 338 changed schema entries, every locale, and every external NuGet/source destination was not opened. Product-source links were deliberately not followed.
Suggestion: Preserve the representative grouping in this report rather than converting it into an “all links pass” claim.


Passed Checks

Content Accuracy

  1. Gallery current integration cards: /integrations/gallery/?search=kind shows one Kind integration, version 13.6.0-preview.1.261001-0242, and aspire add communitytoolkit-kind. Searching keycloak shows two hosting entries: official 13.6.0-preview.1.26479.8 and Extensions 13.6.0-preview.1.261001-0243, with distinct install names.
  2. Other owning-version changes: Gallery searches and current C# pages show DocumentDB 0.117.0 and AgentFramework.DevUI 1.23.0-preview.260928.1. Toolkit DuckDB shows stable 13.6.0 in the gallery, C#, and TypeScript. Core Redis remains stable 13.6.0. These checks did not assume every package shares Aspire’s version.
  3. Latest/versionless references: Default C# index reports 186 packages; TypeScript reports 146 modules. Public indices and gallery contain neither the retired build suffix 26478.8 nor toolkit 13.5.1-beta.895. Current versionless package/module URLs still resolve after backing schema renames.
  4. Stable/prerelease separation: C# picker exposes 14 versions and TypeScript exposes nine. Preview values are visibly labeled PREVIEW. Selecting stable 13.6.0 excludes the Kind preview’s APIs; adding 13.6.0-preview.1.261001-0242 includes them. Searching generic “Kind” can still find unrelated stable identifiers such as DenoPermissionKind; this was not mistaken for Kind integration leakage.
  5. Changed/removed APIs: C# WithCrdWaitRetry and TypeScript withCrdWaitRetry searches return no matching entries. C# WithCrdWait search returns the replacement plus behavior/timeout methods. Both indices find CrdWaitOptions; the C# results include its constructor and two properties, while TypeScript results include the handle/properties and callback method. The former TypeScript top-level retry route returns expected 404 and is no longer linked from the current module.
  6. New Kind option/member content: C# CrdWaitOptions and property pages load; Timeout’s anchor exists and describes the default five minutes and greater-than-zero/up-to-one-hour bounds. The new C# generic WithCrdWait deep link resolves to its exact anchor. TypeScript withCrdWait, CrdWaitOptions, KindDeployedResource, and the member-specific withcrdwait/ pages load. “Applies to” lists manifest, deployed-resource, and Helm-chart resources.
  7. Repository statistics: /community/contributors/ displays all five refreshed counts: microsoft/aspire 6,341, aspire-samples 1,195, CommunityToolkit/Aspire 629, aspire.dev 196, and microsoft/dcp 191. Repository identity links are present; no product-source browsing was performed.
  8. New external blog entries: Both newly added URLs load with matching titles and publication dates: “Bringing rich terminal experiences to Aspire”, October 1, 2026; “Aspire 13.6: Your dashboard gets memory”, September 29, 2026. These are browser-observed article pages, not inferred from metadata alone.

Code Examples

  1. Rendered two-slash smoke check: /integrations/security/keycloak/ loads its TypeScript examples without visible diagnostic/error decorations. Hovering a visible createBuilder token displays function createBuilder(): IDistributedApplicationBuilder and “Creates a new distributed application builder”. This is a rendering/tooltip pass only.

Links

  1. Homepage, integrations landing, gallery, both API indices, community, contributors, hub, docs landing, Keycloak docs, and French homepage all load in the local browser.
  2. Representative versionless current-owner package/module pages return HTTP 200 after schema renames.
  3. New Kind C#/TypeScript member routes and C# property/method anchors return HTTP 200 and resolve the selected anchor.
  4. Actual owning Keycloak resource route returns HTTP 200.
  5. Inspected gallery/index/Keycloak-documentation internal links have site-relative trailing-slash paths; inspected same-page anchors exist.
  6. Both added external blog destinations load and show the expected article headings.

Exact tested routes

All local routes below used origin http://localhost:4322. A route without an explicit HTTP result was observed loading normally through playwright-cli goto; HTTP statuses were recorded for the API route matrix.

Route Result
/ Loaded
/docs/ Loaded
/fr/ Loaded
/integrations/ Loaded
/integrations/gallery/ Loaded; 159 integrations
/integrations/gallery/?search=kind One Kind card
/integrations/gallery/?search=kind&community=false Zero cards; excluded Community explanation
/integrations/gallery/?search=keycloak Two current hosting cards
/integrations/gallery/?search=DocumentDB Current 0.117.0 card
/integrations/gallery/?search=AgentFramework.DevUI Current prerelease card
/integrations/gallery/?search=DuckDB Current stable toolkit card
/integrations/gallery/?search=Redis Eight matches, with distinct owner versions
/integrations/security/keycloak/ Loaded; preview label, code rendering, hover and anchors inspected
/reference/api/csharp/ Loaded; versions/search exercised
/reference/api/csharp/?q=WithCrdWaitRetry No results
/reference/api/csharp/?q=WithCrdWait Three results
/reference/api/csharp/aspire.hosting.documentdb/ HTTP 200, v0.117.0
/reference/api/csharp/aspire.hosting.agentframework.devui/ HTTP 200, v1.23.0-preview.260928.1
/reference/api/csharp/aspire.hosting.redis/ HTTP 200, v13.6.0
/reference/api/csharp/communitytoolkit.aspire.hosting.duckdb/ HTTP 200, v13.6.0
/reference/api/csharp/communitytoolkit.aspire.hosting.kind/ Loaded, current Kind preview
/reference/api/csharp/communitytoolkit.aspire.hosting.kind/crdwaitoptions/ Loaded
/reference/api/csharp/communitytoolkit.aspire.hosting.kind/crdwaitoptions/properties/#timeout HTTP 200; anchor exists
/reference/api/csharp/communitytoolkit.aspire.hosting.kind/kinddeployedresourcebuilderextensions/methods/#withcrdwait-iresourcebuilder-t-action-crdwaitoptions HTTP 200; anchor exists
/reference/api/csharp/communitytoolkit.aspire.hosting.keycloak.extensions/ HTTP 200, current Extensions preview
/reference/api/csharp/communitytoolkit.aspire.hosting.keycloak.extensions/keycloakpostgresextension/ HTTP 200
/reference/api/typescript/ Loaded; versions/search exercised
/reference/api/typescript/?versions=13.6.0&q=withCrdWait Zero results
/reference/api/typescript/?versions=13.6.0%2C13.6.0-preview.1.261001-0242&q=withCrdWait Three results
/reference/api/typescript/?versions=13.6.0%2C13.6.0-preview.1.261001-0242&q=withCrdWaitRetry Zero results
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/ Loaded, current Kind preview
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/withcrdwait/ HTTP 200
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/crdwaitoptions/ HTTP 200
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/kinddeployedresource/ HTTP 200; baseline malformed inheritance noted
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/kinddeployedresource/withcrdwait/ HTTP 200
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/kindhelmchartresource/ HTTP 200; removed retry absent
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/withcrdwaitretry/ HTTP 404, expected removed route
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/crdwaitbehavior-aspire-hosting-crdwaitbehavior/ HTTP 200, HANDLE presentation
/reference/api/typescript/communitytoolkit.aspire.hosting.kind/crdwaitbehavior-aspire-hosting-crdwaitbehavior-2/ HTTP 200, ENUM presentation
/reference/api/typescript/communitytoolkit.aspire.hosting.keycloak.extensions/ Loaded, current Extensions preview
/reference/api/typescript/communitytoolkit.aspire.hosting.keycloak.extensions/withpostgres/ HTTP 200
/reference/api/typescript/communitytoolkit.aspire.hosting.keycloak.extensions/keycloakresource/ HTTP 404, broken linked destination
/reference/api/typescript/aspire.hosting.keycloak/ HTTP 200, current official preview
/reference/api/typescript/aspire.hosting.keycloak/keycloakresource/ HTTP 200, actual owning resource
/reference/api/typescript/aspire.hosting.redis/ HTTP 200, stable
/reference/api/typescript/communitytoolkit.aspire.hosting.duckdb/ HTTP 200, stable
/community/ Loaded
/community/contributors/ Loaded; five new star counts
/hub/ Loaded; older curated blog cards observed
/rss.xml Loaded as “Aspire Docs”; no added external-blog titles

Additional C#/TypeScript picker interactions generated ?versions=13.6.0&q=Kind and the combined stable/Kind-preview selections with q=CrdWaitOptions. Stable-only results had no Kind integration entries; combined selections exposed four relevant new-option results.

External routes:

  • https://devblogs.microsoft.com/aspire/aspire-terminal-support/ — loaded, matching title/date.
  • https://devblogs.microsoft.com/aspire/whats-new-aspire-13-6/ — loaded, matching title/date.

Exact commands and results

Commands were run from:

<workspace>

Command Result
git rev-parse HEAD Passed before/after: exact pinned head
git status --short Clean initially and after cleanup
git diff --name-status 75e3568f1af2c2f5e6a9d114fe4dd953f991c306...HEAD Established changed-data grouping
playwright-cli --help Passed; installed CLI available
bun run dev Failed: The term 'bun' is not recognized as a name of a cmdlet, function, script file, or executable program.
Test-Path "$HOME\.bun\bin\bun.exe" False
npm exec --yes --package=bun -- bun run dev Succeeded through scoped npm-exec Bun; package manager restored locked frontend dependencies and started Astro 7.3.2 at port 4322
pnpm --dir .\src\frontend run dev Distinct setup attempt failed because the first process had already started: Another astro dev server is already running. URL: http://localhost:4322 PID: 49212. No replacement/force operation was used
npm exec --yes --package=bun -- bun -e 'console.log(process.execPath)' Passed; exact Bun runner path recorded below
pnpm --version 11.9.0
playwright-cli -s=pr1737 open http://localhost:4322/ Passed; own named browser started
playwright-cli -s=pr1737 goto <exact-route-listed-above> Used for independent navigation; results listed in the route table
playwright-cli -s=pr1737 snapshot Used to discover/read controls and text
playwright-cli -s=pr1737 click e207 Community gallery exclusion then restoration worked; zero/one Kind results
playwright-cli -s=pr1737 fill e198 keycloak Two Keycloak hosting cards
playwright-cli -s=pr1737 fill e1244 WithCrdWaitRetry C# removed-member search: no results
playwright-cli -s=pr1737 fill e1244 WithCrdWait C# replacement search: three results
playwright-cli -s=pr1737 console warning Recorded dev live-status warnings; not a clean-console claim
playwright-cli -s=pr1737 close Passed; only own browser closed
Get-NetTCPConnection -LocalPort 4322 -State Listen -ErrorAction SilentlyContinue After shutdown: no listener; PASS: port 4322 is closed
playwright-cli list After shutdown: (no browsers)

Browser evaluation inspected rendered DOM only. Batched page navigation used the exact following pattern, with route arrays composed of the API paths listed above:

async page => {
  const out = [];
  for (const path of paths) {
    const r = await page.goto("http://localhost:4322" + path);
    out.push({
      path,
      status: r.status(),
      title: await page.title(),
      text: await page.locator("main").innerText()
    });
  }
  return out;
}

Version filtering used actual user-facing labels:

await page.getByRole("button", { name: /Versions:/ }).click();
const toggle = async name =>
  await page.locator("label").filter({
    has: page.getByRole("checkbox", { name, exact: true })
  }).click();
await toggle("Select all");
await toggle("13.6.0");
await toggle("13.6.0-preview.1.261001-0242 preview");

An initial direct checkbox.uncheck() attempt timed out because the custom checkbox input is visually hidden. Clicking its visible label then worked; this was an automation adjustment, not recorded as a site failure. One evaluation command had a shell-quoting/serialization error and was rerun successfully using a single-quoted PowerShell argument. One attempt to click by concatenated accessible text timed out; the rendered href locator then clicked the actual link, and its final destination was independently verified as 404. None of these unsuccessful probes was counted as a pass.

No bun run build, production build, broad/repeated test suite, product package installation, or upstream product-source fetch was performed.

Runner paths and cleanup handoff

Installed frontend dependencies and the scoped tool cache are deliberately retained for the parent’s independently requested focused validator and cleanup:

  • Bun: <npm-cache>\_npx\5c4f1b4a21be27f7\node_modules\bun\bin\bun.exe
  • Node: C:\Program Files\nodejs\node.exe
  • npm: C:\Program Files\nodejs\npm.ps1
  • pnpm: <npm-global-bin>\pnpm.ps1
  • Playwright CLI: <npm-global-bin>\playwright-cli.ps1
  • tsx: <workspace>\src\frontend\node_modules\.bin\tsx.cmd
  • Astro: <workspace>\src\frontend\node_modules\.bin\astro.cmd
  • Vitest: <workspace>\src\frontend\node_modules\.bin\vitest.cmd

Owned dev process tree was the npm-exec/dev command tracked by PowerShell shell ID 582, with listening Astro PID 49212; it was stopped using stop_powershell for that exact shell. Port 4321 was already occupied before startup and was neither used nor stopped. Port 4322 was verified closed after cleanup.

The newly created .playwright-cli snapshots/logs directory was removed. Dev startup regenerated four tracked .starlight-icons files; only those four owned changes were restored with:

git restore --source=HEAD -- src\frontend\.starlight-icons\language-map.json src\frontend\.starlight-icons\material-icons.json src\frontend\.starlight-icons\safelist.json src\frontend\.starlight-icons\version.txt

Unknown baseline ignored files were not deleted. Frontend node_modules and the scoped npm cache remain intentionally available. Final tracked Git status is clean and HEAD remains pinned. The report itself is saved outside the checkout at the explicitly requested session-artifact path. No commits, pushes, GitHub comments, formal reviews, or tracked fixes were made.

Recommendations

  1. Priority fixes: Independently track the existing Keycloak cross-owner broken link and Kind generic-inheritance presentation defect; do not attribute either to this PR without additional regression evidence.
  2. Documentation gaps: Clarify the local blog hub’s curated-versus-latest behavior; distinguish module function/member totals; provide a discoverable TypeScript duration/options explanation for the new Kind callback.
  3. Product issues: None established. The checks concern website/runtime documentation surfaces, not upstream product behavior.
  4. Remaining validation: The parent’s separate focused generated-data validator can use the retained tsx.cmd runner. That validation is not part of this blind report and is not presumed passed. Full schema coverage, declaration compilation, all-locale link checks, and executable integration examples remain unverified here.

Knowledge gaps

Knowledge Gap: TypeScript Kind timeout representation

What I needed to know: How to construct a valid timespan value when configuring the new CrdWaitOptions callback, including allowed range/defaults.
Source of my knowledge: The TypeScript reference displays timeout: timespan and withCrdWait(configure: (obj: CrdWaitOptions) => Promise<void>). I did not invent or execute an example using intrinsic Aspire knowledge. The C# property reference supplies default/range prose, but the inspected TypeScript option page does not supply an equivalent usage example.
User impact: A new TypeScript user can discover the API but cannot learn the complete timeout configuration syntax from those reference pages alone.
Recommendation:

  • Add an exact runnable TypeScript callback example and duration representation.
  • Link to prerequisite duration/configuration documentation.
  • Do not silently assume C# duration knowledge.

Knowledge Gap: What was inferred rather than taught

What I needed to know: That stray ]] is invalid TypeScript and that a module-local resource link can point at the wrong owning module.
Source of my knowledge: General TypeScript/browser knowledge, followed by direct browser evidence; not upstream source code. Version comparisons used only the supplied generated artifacts.
User impact: These observations diagnose presentation/navigation problems, not the actual product’s API implementation. They cannot establish whether a complete Aspire example compiles or runs.
Recommendation: Preserve this distinction in any combined review. Do not promote rendered signatures or observed install commands into executable-example passes.

@IEvangelist

David Pine (IEvangelist) commented Nov 2, 2026 •

Copy link
Copy Markdown
Member

Code/data review: two high-confidence regressions

Reviewed all 343 changed files at 3ee148e7542e3c8d9ff4e7a9a87b57cd33cedb9f against exact base 75e3568f1af2c2f5e6a9d114fe4dd953f991c306, after the documentation-stage report. I read and followed the actual .agents/skills/code-review/SKILL.md for correctness, confidence, and regression coverage. Its default exclusion of output-only generated JSON is overridden here by the explicitly requested review of generated-data/API/gallery behavior. There are no changed generator, component, application, or test implementations; the generated declaration bundle and the data consumed by routes/type tooling make this stage applicable, not N/A.

High

1. Radius TypeScript module:67-88 - Preserve the exported .NET-program withContainerImage overload. Confidence: high; exact-base control reproduced.

The new output deletes capability Aspire.Hosting.Radius/withDotnetProgramContainerImage and keeps only the ProjectResource overload. Its pinned source API still exports the generic overload with MethodName = "withContainerImage" and where T : IDotnetProgramResource. This is not a deliberate API removal.

Why it matters: the existing repository API-reference contract test now fails, the TypeScript reference cannot resolve the declared export, and the regenerated bundle no longer accepts DotnetProjectResource.withContainerImage(...). The head's existing Frontend validation job fails on exactly the same Radius export.

Focused local control, using the identical unchanged repository test and dependency environment:

From src/frontend:
.\node_modules\.bin\vitest.cmd run --config vitest.config.ts tests\unit\api-reference.vitest.test.ts -t "resolves every authored API reference against the generated catalogs"

Exact base 75e3568f...: 1 passed, 54 skipped
Reviewed head 3ee148e7...: 1 failed, 54 skipped
  Aspire.Hosting.RadiusExtensions.WithContainerImage declares a TypeScript
  export, but no generated TypeScript API matched it.

The exact-base resolver already reports ambiguity between the two overload routes; this review does not conceal that existing nuance or claim every base diagnostic is clean. The new unresolved-export diagnostic and the test failure are specific to the reviewed head, and the explicit DotnetProjectResource compiler call passes on the base.

Suggested fix: regenerate or preserve the missing exported overload and its .NET-program receiver expansion, then regenerate the twoslash bundle. Retain the existing contract-test assertion and add a focused overload/receiver assertion so a generator refresh cannot silently drop this capability.

2. CosmosDB TypeScript module:11211-11239 and twoslash base handle:87968 - Do not narrow base capabilities to whichever derived receiver the scanner retained. Confidence: high; exact-base declaration compilation reproduced.

For example, CassandraViewResourceProxy.clearId retains the base type's capability ID but changes its targetTypeId, qualifiedName, and expanded receiver set to CassandraViewGetPropertiesResourceProxy. Consequently, CassandraViewResourceProxy loses clearId and clearViewDefinition, even though its factory still returns that base type. Kusto's base data-connection handle also loses addTo, clearLocation, and clearName.

Why it matters: this changes both rendered base-handle member references and the TypeScript declarations used by documentation examples. A comparison of the actual base/head capability sets, including the remaining ancestor capabilities, finds 42 lost operations on 16 original handles:

Module Original handles losing operations Lost operations
Cdn 1 2
CognitiveServices 2 9
ContainerRegistry 2 5
CosmosDB 8 19
Kusto 1 3
Network 2 4

This is not a generic objection to stale output. The unchanged transform associates each capability only with its received target handle, and the unchanged declaration emitter writes those handle capabilities. Narrowed receiver data therefore has a direct, reachable consequence. The pinned owning proxy generator still generates base-proxy inheritance and base-specific addTo/clear... export IDs; its file is byte-identical across the old/new package-source commits.

The repository already documents that the tolerated scanner defect keeps the first inherited definition. That explains why “generation succeeded” is not a completeness guarantee. The PR-body Kusto/Network warning does not cover the observed losses in the other four modules.

Focused compilation with TypeScript 6.0.3, using each ref's full committed aspire.d.ts and the same four typed expressions (strict, noEmit, skipLibCheck; only call-site correctness is claimed):

declare const view: CassandraViewResourceProxy;
declare const connection: KustoDataConnectionProxy;
declare const infrastructure: AzureResourceInfrastructure;
declare const project: DotnetProjectResource;
view.clearId();
view.clearViewDefinition();
connection.addTo(infrastructure);
project.withContainerImage("example/test:1");
Exact base: 0 diagnostics
Reviewed head: 4 diagnostics
  clearId does not exist on CassandraViewResourceProxy
  clearViewDefinition does not exist on CassandraViewResourceProxy
  addTo does not exist on KustoDataConnectionProxy
  withContainerImage does not exist on DotnetProjectResource

Suggested fix: regenerate through a corrected scanner/transform path that preserves the declaring receiver and inherited availability, and regenerate declarations afterward. Add receiver/capability preservation assertions for representative base/derived provisioning types, including a factory-created base type and Kusto addTo; merely increasing tolerated scanner diagnostics or satisfying JSON shape checks will not fix this.

Other data checks

  • 197 C# + 141 TypeScript JSON entries: after normalizing version/provenance/timestamps/source-line movement and comparing keyed arrays rather than positional reorderings, eight C# and eleven TypeScript package groups have semantic API changes. The remaining changed API entries are mechanical metadata churn. Kind/Keycloak are not the only affected packages.
  • Samples are unchanged semantically: the fifth non-API data file, samples.json, only loses its terminal newline. No sample project, AppHost code, or metadata value changes.
  • Catalog/output reconciliation passed: 217 unique catalog entries; 210 C# outputs; 146 nonempty TypeScript outputs. Output filenames and identities match; every TypeScript output has matching C# repository/commit provenance; no duplicate top-level capability IDs were found. The seven absent C# outputs are exactly the generator/analyzer packages deliberately excluded for having no public API.
  • Removals match existing generator policy: all 120 replaced C# and 98 replaced TypeScript old filenames have selected-version replacements; no catalog package identity disappears. The existing reconciliation code deliberately prunes old output names. This is not reported as accidental package deletion.
  • Gallery metadata stays consistent: all 14 changed tag arrays only remove duplicates, preserving their tag sets. Official icon URLs retain package/version-specific NuGet paths; the catalog preserves all descriptions/identities and its numeric download fields. All 122 changed package versions were verified against immutable NuGet manifests in the documentation stage.
  • No speculative blog finding: the blind tester did not see the new entries on /hub/, but the pinned hub page intentionally maps the separate blogHighlights data; the general resource catalog combines aspire-blog-posts.json and those highlights. The browser observation is not evidence that these new metadata entries should automatically replace curated hub cards.

Test coverage and limits

Unit/contract: the focused existing API-reference test passes at the exact base and fails at the reviewed head as shown above. The real exported validateGeneratedApiData function separately passed the full head input: 217 catalog identities, 146 provenance pairs, 74 DTO shapes, and 2,876 handle inheritance chains. That focused invocation did not provide attribute-payload baseline objects. Its successful structural checks miss receiver/capability losses, which is the important regression-coverage gap illustrated by the compiler control.

E2E (desktop/tablet/mobile): the exact-head CI run reports success for all six viewport/shard jobs and the frontend build, while frontend validation and the downstream gates fail. The independent browser run and its explicit coverage limitations are in the preceding documentation comment. No local full suite was rerun.

Accessibility: no component, markup, style, or interaction implementation changes. This review does not invent a missing-axe finding for version/count metadata; the unchanged website's baseline Keycloak link, Kind display, and counting observations are not attributed to this PR. No new local axe audit was performed.

No full local production build, NuGet/API regeneration, executable Aspire integration application, or cloud deployment was performed. No fixes, commits, pushes, formal review verdict, or merge action were made. This conversation comment consumes the Project's once-per-PR code/data-review stage, not a per-SHA rerun.

@IEvangelist David Pine (IEvangelist) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

[partial - phase A: 28 of 3,174 changed claim groups evaluated; phase B: sampled browser validation, not exhaustive runtime validation]

Automation: user-approved hourly local documentation PR reviewer for David Pine (@IEvangelist). This is the automation's one combined report for this PR; partial reviews consume its review and will not be automatically repeated.
Inspected head: 3ee148e7542e3c8d9ff4e7a9a87b57cd33cedb9f; target main at 75e3568f1af2c2f5e6a9d114fe4dd953f991c306 (also the comparison merge-base). This is documentation accuracy/user-experience review, not standard code review.
Trusted policy: default-branch doc-pr-reviewer, doc-tester, playwright-cli and relevant Astro instructions at 708ea2758b6ac970a661e34cf72ed1f706e90c30. Native reviewer loading was unavailable, so its trusted file policy was executed directly for doc-pr-reviewer https://github.com/microsoft/aspire.dev/pull/1737. PR-head review policy was not authoritative.

Owning sources actually inspected, read-only at matching target main:

Claim counts: 343 changed data files (125 modified, 218 version-renamed); 3,174 introduced/modified scalar or declaration-line groups: 28 verified, 0 verified-with-nuance, 0 contradicted, 0 unverifiable, 0 narrative, 3,146 not evaluated. Array records were compared by stable identities, and renamed files were compared to their previous filenames. This is a leaf/declaration-group denominator, not a count of API symbols; repeated projections remain distinct. All complete old/new JSON was parsed, full changed diffs are preserved, and untouched carried declarations are not blanket re-certified. Deleted-only fields remain in the full diff inventory rather than being counted as new positive leaf assertions.
Independent Phase B: C#/TypeScript k6 search, WithScript and enum pages; representative provisioning package/type/member/Markdown; hub/browse and both added blog destinations; filtered integration gallery and 375px views. 0 critical issues observed, 3 warnings: missing rendered TypeScript explanations, long C# heading overflow, and an unattributed page-action reload requirement. Literal runtime/compilation and clipboard payload verification remain incomplete.
Warning attribution: The changed TypeScript module already contains the new withScript remarks, parameter descriptions and K6SummaryMode.memberDocs. The source-blind tester accurately reports that the rendered TypeScript pages omit those explanations; this is not evidence that the author omitted them from this data refresh. Likewise, the tester does not establish that the generated-data changes introduced shared heading overflow or page-action initialization behavior. These affected-route observations are preserved for follow-up, not falsely attributed as source-backed PR regressions or attached to unrelated renderer files.

Why this is partial, not approval

The 343-file refresh changes versioned API/package metadata across core Aspire, Community Toolkit and Azure provisioning projections, plus blog and repository snapshots. Exhaustive owning-source verification of all 3,174 changed groups and independent literal runtime validation could not finish in this run. Specifically, exact historic package-version/sourceCommit provenance, unexamined Azure SDK shapes, most generated API projections, the release-attributed blog descriptions and historic numeric snapshots remain uncleared. The changed docs' own sourceCommit metadata is not accepted as proof of itself, and current main behavior is not used to invent evidence of an earlier release.
The source checks below only establish the bounded K6 declarations against recorded owning source. They do not prove all published package versions, that every generated language binding is runnable, or that unexamined claims are correct. Browser results are sampled and preserved independently in full below. No full site build, upstream workflow, package-data generator, global tool upgrade, certificate-store action, cloud provisioning or remote branch mutation was used to manufacture a pass. Incomplete required checks require this labeled partial COMMENT, never approval.

Phase A - frozen claim verification

28 verified changed K6 declaration/enum groups and exact owning-source evidence

The changed C# WithScript declaration matches K6BuilderExtensions.cs:98-103:

public static IResourceBuilder<K6Resource> WithScript(
    this IResourceBuilder<K6Resource> builder,
    string scriptPath,
    int? virtualUsers = null,
    string? duration = null,
    K6SummaryMode? summaryMode = null)

The enum declarations and member descriptions match K6SummaryMode.cs:1-20: public CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode with Compact=0, Full=1, Disabled=2 and their exact concise/full/disabled descriptions. Enum identity/membership/docs are confirmed; TypeScript runtime marshaling and all consumer signatures are not.

Claim Changed documentation leaf/declaration Exact new value
C001828 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=Aspire.Hosting.K6BuilderExtensions/members/name=WithScript/signature
"public static IResourceBuilder<K6Resource> K6BuilderExtensions.WithScript(this IResourceBuilder<K6Resource> builder, string scriptPath, int? virtualUsers = null, string? duration = null, K6SummaryMode? summaryMode = null)"
C001867 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/name
"K6SummaryMode"
C001868 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/fullName
"CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode"
C001869 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/namespace
"CommunityToolkit.Aspire.Hosting.k6"
C001870 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/kind
"enum"
C001871 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/accessibility
"public"
C001874 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Compact/name
"Compact"
C001875 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Compact/value
0
C001876 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Compact/description
"Default mode. Shows the most relevant test results in a concise format."
C001877 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Full/name
"Full"
C001878 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Full/value
1
C001879 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Full/description
"Shows all available information."
C001880 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Disabled/name
"Disabled"
C001881 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Disabled/value
2
C001882 src/frontend/src/data/pkgs/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/types/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/enumMembers/name=Disabled/description
"Completely disables the summary generation."
C003075 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/name
"K6SummaryMode"
C003076 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/fullName
"CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode"
C003077 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/kind
"enum"
C003078 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/description
"Define how detailed the end-of-test summary should be."
C003079 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/members/0
"Compact"
C003080 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/members/1
"Full"
C003081 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/members/2
"Disabled"
C003082 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/memberDocs/name=Compact/name
"Compact"
C003083 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/memberDocs/name=Compact/description
"Default mode. Shows the most relevant test results in a concise format."
C003084 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/memberDocs/name=Full/name
"Full"
C003085 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/memberDocs/name=Full/description
"Shows all available information."
C003086 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/memberDocs/name=Disabled/name
"Disabled"
C003087 src/frontend/src/data/ts-modules/CommunityToolkit.Aspire.Hosting.k6.13.6.0.json
/enumTypes/fullName=CommunityToolkit.Aspire.Hosting.k6.K6SummaryMode/memberDocs/name=Disabled/description
"Completely disables the summary generation."

The pinned core TerminalResourceBuilderExtensions.cs:21-79 was also read and confirms current interactive-terminal support, but does not by itself establish the newly added blog's historical 13.5/13.6 release attribution. Those blog claims remain not evaluated. No source contradiction or unverifiable finding is invented from unexamined records; there is therefore no Phase A inline finding.
Version placeholders: exact generated API package filenames and metadata are intentionally version-pinned; they are not generic current-version installation snippets. Historical release blog descriptions are likewise not current-copy/paste version output. No automatic placeholder replacement is requested for these fixed-version surfaces.

Phase B - independent, source-blind doc-tester report (complete)

Documentation Test Report

Focus Area: Independent Phase B, source-blind, bounded user walkthrough of changed generated API reference and metadata surfaces in microsoft/aspire.dev PR #1737.
Date: 2026-11-02, approximately 22:23–22:30 UTC.
Tester: doc-tester agent, using the trusted default-branch doc-tester/playwright-cli/doc-pr-reviewer policies at 708ea2758b6ac970a661e34cf72ed1f706e90c30.
PR: #1737
Served checkout HEAD: 3ee148e7542e3c8d9ff4e7a9a87b57cd33cedb9f, verified with git rev-parse HEAD before and after the walkthrough.
Local URL: http://localhost:4321/
Environment: Existing reviewer-owned root bun run dev server; supplied Astro PID 44496. This tester did not start, stop, restart, or otherwise manage it. Edge through the tracked .playwright\cli.config.json, named browser session pr1737.

Summary

Critical issues: 0 observed. Warnings: 3 (two documentation/presentation warnings and one local navigation observation not established as a PR regression).

Category Passed observations Failed observations Warnings / applicability
Content presentation Changed C# and TypeScript k6 signatures and enum values are discoverable; provisioning package displays the refreshed preview version; changed metadata cards render No demonstrated product-behavior contradiction W1: TypeScript explanatory gap
Code examples Signature and example text can be read in the browser Not executed; no compilation/runtime verdict Missing standalone prerequisites and explicit shared-machine safety boundary
CLI commands None applicable to this bounded generated-reference walkthrough Not executed Installation commands on gallery cards were inspected, not run
Links and search C# and TypeScript k6 searches; TypeScript version exclusion/restoration; C# enum and provisioning member links; provisioning Markdown; both added blog destinations No broken sampled content target W3: Open menu required a full reload after internal navigation
Accessibility and responsive UI Named searchboxes, headings, menu button, enum values exposed in snapshots; TypeScript enum and filtered integration gallery fit a 375px document width C# methods page overflows the 375px viewport W2; this is not a full accessibility audit

These are sampled observations, not an assertion that all 343 changed data files, generated APIs, or runtime claims were tested. Phase A output, product source, SDK definitions, and authored tests were not read. No behavior was inferred from implementation.

Routes and Sections Exercised

All local routes below use http://localhost:4321.

  1. /reference/ — initial requested navigation entry returned the site's “404 / Not found” / “Wrong route?” page. Its public footer's Reference link led successfully to /reference/overview/. The bare route was not supplied by a changed document and is not reported as a PR defect.
  2. /reference/overview/ — public Search C# APIs and Search TypeScript APIs navigation.
  3. /reference/api/csharp/ and ?q=k6 — searchable API index, k6 v13.6.0 discovery, enum and method search results; Versions control showed 14/14 selected.
  4. /reference/api/csharp/communitytoolkit.aspire.hosting.k6/k6builderextensions/methods/#withscript-iresourcebuilder-k6resource-string-int-string-k6summarymode — WithScript signature, nullable optional parameters, summaryMode link, parameter descriptions, new scenario-precedence remarks, example, copy controls, mobile presentation. The fragment exists.
  5. /reference/api/csharp/communitytoolkit.aspire.hosting.k6/k6summarymode/ — net10.0 / v13.6.0, enum members and their descriptions.
  6. /reference/api/typescript/ and ?q=k6 — k6 search returned six entries. Excluding version 13.6.0 produced zero results / “No matching API entries”; selecting it again restored six entries and the query-only URL. The filter generated its own versions= URL.
  7. /reference/api/typescript/communitytoolkit.aspire.hosting.k6/withscript/ — signature, optional parameters, return type, Applies to link.
  8. /reference/api/typescript/communitytoolkit.aspire.hosting.k6/k6summarymode/ — enum declaration / Values, desktop and 375×812; mobile Menu opened navigation.
  9. /reference/api/csharp/aspire.hosting.azure.provisioning/ — refreshed v13.6.0-preview.1.26479.8, namespace expansion, two discoverable types.
  10. /reference/api/csharp/aspire.hosting.azure.provisioning/bicepvalueproxy/ — representative provisioning type, member table, ATS export metadata.
  11. /reference/api/csharp/aspire.hosting.azure.provisioning/bicepvalueproxy/methods/#assignto-bicepvalue-t — member signature, target parameter, explanation, “Ignored by ATS” reason; fragment verified present. Other methods on that same page were visible but not runtime-tested.
  12. /reference/api/csharp/aspire.hosting.azure.provisioning/bicepvalueproxy/methods.md — followed public View in Markdown, selected its new tab, read actual plain Markdown containing AssignTo/Convert/Create signatures, parameters, and ATS reasons.
  13. /hub/ — directory navigation and From the blog section. This section still features curated older posts; no promise that it is the latest-post feed was established.
  14. /hub/browse/ — the two added blog cards, dates, descriptions, destination links, and loaded images.
  15. /hub/browse/?q=k6 — two relevant documentation cards, with language labels and site-relative trailing-slash destinations.
  16. /integrations/ → /integrations/gallery/ → /integrations/gallery/?search=k6 — public metadata consumer: filtered to one package, v13.6.0, 70k rounded downloads, loaded package icon, documentation and language links, install-command copy affordance. At 375×812 the document width was 375px.
  17. External blog destinations, read only:
    • https://devblogs.microsoft.com/aspire/aspire-terminal-support/ — heading “Bringing rich terminal experiences to Aspire,” October 1st, 2026.
    • https://devblogs.microsoft.com/aspire/whats-new-aspire-13-6/ — heading “Aspire 13.6: Your dashboard gets memory,” September 29th, 2026.

No unrelated tutorial was walked through. Source links visible in generated reference pages were not followed.

Critical Issues

None demonstrated in the sampled UI. In particular, rendering an API declaration does not establish that the package implements it or that a copied AppHost works.

Warnings

Warning 1: New TypeScript summary-mode surface omits the explanations needed to choose and use it

Location: /reference/api/typescript/communitytoolkit.aspire.hosting.k6/withscript/, Signature / Parameters; /reference/api/typescript/communitytoolkit.aspire.hosting.k6/k6summarymode/, Values.
Type: Content / teaching effectiveness.

What the documentation says:

withScript(scriptPath: string, virtualUsers?: number, duration?: string, summaryMode?: K6SummaryMode): K6Resource

The Parameters section lists names, types, and optional markers. The new enum's Values section shows only Compact 0, Full 1, Disabled 2; it has no descriptions or default-mode explanation.

Observed user gap: As a TypeScript reader, I can discover the new argument but cannot learn from these pages how omitted virtualUsers/duration interact with script scenarios, or which summary mode is the default. I would have to infer from names, prior knowledge, or leave the TypeScript reference. By contrast, the tested C# pages explicitly say “Leave them null when the script defines its own scenarios or executors” and describe Compact as “Default mode. Shows the most relevant test results in a concise format.”

Evidence: typescript-withscript.yml, typescript-summarymode.yml, typescript-summarymode-mobile.png, csharp-k6-methods.yml, csharp-k6-summarymode.yml.
Recommendation: Carry the parameter/enum explanations and scenario-precedence remarks into the TypeScript reference, or provide an explicit cross-reference to the explanatory documentation. Include a documented TypeScript usage example rather than requiring users to translate the C# example. This is a discoverability/teaching gap, not a proven incorrect TypeScript signature.

Warning 2: Changed C# WithScript heading is clipped at 375px

Location: /reference/api/csharp/communitytoolkit.aspire.hosting.k6/k6builderextensions/methods/, WithScript member heading.
Type: Responsive presentation.

Reproduction: Open the methods route with the WithScript fragment, resize to 375×812, and scroll to the WithScript member.

Visible heading:

WithScript(IResourceBuilder<K6Resource>, string, int?, string?, K6SummaryMode?)

Observed result: The heading extends past the card's right boundary instead of remaining readable within the mobile viewport. Browser measurements at horizontal scroll position zero were innerWidth=375, document.documentElement.scrollWidth=521. The WithScript heading's code element extended to approximately x=415px. Another method heading on the same page also overflowed; the total 521px document width is not attributed solely to the added parameter.

Evidence: csharp-withscript-mobile-heading.png, csharp-withscript-mobile.png, csharp-withscript-mobile.yml.
Recommendation: Make long member headings wrap/break safely or provide a contained, operable horizontal scroller without widening the whole page. Retest the longer changed signature at 375px. No claim is made that this PR introduced the shared renderer behavior.

Warning 3: Open menu did not respond after internal API navigation until reload

Location: Provisioning package → BicepValueProxy → AssignTo methods route, page-level Open button.
Type: Local browser/navigation observation; regression attribution unestablished.

Reproduction: Follow the namespace/type/member links, then click Open on the member page.

Observed result: After the click, the Markdown link remained hidden and absent from the accessibility snapshot. Repeating a snapshot did not reveal the menu. A full browser reload on the same URL followed by clicking Open exposed View in Markdown; following that link then worked.

Evidence: provisioning-open-menu.yml, provisioning-open-menu-ready.yml, provisioning-open-click.png, provisioning-open-after-reload.yml, markdown-provisioning-content.yml.
Recommendation: Recheck the page action initialization after client-side navigation. This is an affected-route usability observation, not evidence that the generated-data changes caused a regression; do not treat it alone as a blocking PR finding.

Passed Checks

  • Public reference navigation reached both generated API browsers.
  • C# search discovered K6SummaryMode and the changed WithScript member; its result linked to an existing fragment.
  • Rendered C# WithScript shows int? virtualUsers = null, string? duration = null, and K6SummaryMode? summaryMode = null, rather than the previous fixed-default style.
  • The new C# remarks visibly explain --vus, --duration, options.scenarios, and leaving values null. The duration parameter presents 30s as an example, not a default.
  • C# K6SummaryMode displays Compact=0, Full=1, Disabled=2, with descriptions; TypeScript displays the same named numeric values.
  • TypeScript search found the new enum and changed member. Version-label interaction correctly excluded and restored the k6 entries. An initial direct checkbox automation attempt targeted a visually hidden input and timed out; clicking its visible label worked. This selector failure is not a documentation defect.
  • TypeScript withScript lists optional virtualUsers/duration/summaryMode, returns K6Resource, and exposes the Applies to navigation.
  • The representative provisioning package displays the refreshed preview version. Its BicepValueProxy member link resolves to AssignTo, with a matching fragment, target parameter, and explanatory ATS reason.
  • Public Markdown view returns substantive reference Markdown, not a 404, after the menu is made available by reload.
  • Added blog cards render both new titles, descriptions, and dates; both changed images loaded successfully, and both destination articles opened with matching titles/dates.
  • Filtered integration gallery shows CommunityToolkit.Aspire.Hosting.k6 v13.6.0; its versioned icon loaded. The displayed install command is aspire add communitytoolkit-k6. It was not executed.
  • The TypeScript enum and filtered gallery have 375px document width at 375px viewport width. The enum screenshot shows legible code, a named Menu control, and reachable page actions.

Browser / Environment Observations

  • Local console logs repeatedly include /api/live/ 404 and [live-status] Live API not found (404); live updates disabled until reload. Hub/gallery navigation also logged /api/live/stream/ 404. Content routes continued to work. These are local-server observations, not identified changed-content defects. Supporting logs are preserved under .playwright-cli.
  • The initial /reference/ navigation logged its expected-for-this-attempt 404; the real public Reference link is /reference/overview/.
  • The footer advertises SHA 75e3568 linking to 75e3568f1af2c2f5e6a9d114fe4dd953f991c306, while the supplied serving checkout was independently verified at the requested PR head. Changed k6 v13.6.0, new enum, new blog cards, and provisioning preview metadata were visibly served. The footer stamp was not used as evidence of the PR checkout; its origin was not investigated because doing so would exceed the allowed inputs.
  • Code-copy and Copy Markdown buttons were clicked. Browser clipboard read-back was denied with NotAllowedError: Failed to execute 'readText' on 'Clipboard': Read permission denied. No permissions, browser databases, or trust settings were changed, and no clipboard bypass was attempted. Exact clipboard payload correctness is therefore not certified. The accessible code-copy button names contain the rendered code, but that is not clipboard read-back.
  • Actual CLI behavior required explicit goto after tab-new; an initially blank tab is a tooling artifact, not a failed article destination.

Knowledge Gaps and Runtime Limitations

Knowledge gap: Turning the reference fragment into a runnable k6 sample

What I needed to know: A complete project/package setup, an API project defining Projects.Api, and contents of scripts/main.js.
What the rendered reference provides: The C# example includes var api = builder.AddProject<Projects.Api>("api");, .WithBindMount("scripts", "/scripts", true), and .WithScript("/scripts/main.js"), but not a standalone API project or script body. The TypeScript page presents declarations rather than a complete runnable app.
Source of knowledge: I recognized these as external prerequisites; I did not invent their contents, translate a sample using prior SDK knowledge, or inspect source to repair the gap.
User impact: These pages work as API lookup material, not as self-contained executable tutorials.
Recommendation: Link to a complete supported example/setup when presenting executable-looking remarks, and document the new summary-mode/scenario behavior for TypeScript readers.

Runtime and scope applicability

  • No Aspire or dotnet command, including diagnostics/version checks, was run. No project, package installation, restore, build, container, AppHost, cloud resource, or certificate operation was attempted.
  • Running the displayed container-backed AppHost would cross the assignment's explicit shared-machine/certificate safety boundary. A compatible runtime/package setup was not established. Therefore k6 container startup, script execution, scenario precedence, summary output, browser extension behavior, provisioning behavior, and actual API compatibility remain unverified.
  • Only the requested existing docs server was used. No full build or generation/update script was run, and no repository file was edited.
  • The 197 package data files, 141 TypeScript modules, and remaining changed generated declarations were not exhaustively browsed. No assertion-coverage percentage is claimed. Twoslash ambient behavior and language-service correctness were not tested from a declaration page.
  • github-stats.json source accuracy is outside this phase. No visibly affected star-count consumer was identified in the sampled reference/hub/gallery surfaces. Samples newline-only data changes were not treated as a new runtime walkthrough.
  • Link validation covers the named routes, fragments, and card destinations actually followed; it is not an exhaustive crawl or a guarantee about every internal/external link.
  • Accessibility checks were limited to actual snapshots, named controls/headings, mobile navigation, and visual inspection. No assistive-technology compatibility or complete keyboard/audit certification is claimed.

Recommendations

  1. Preserve TypeScript explanatory content for new k6 options and enum values; do not require guessing from declarations.
  2. Retest long generated C# member headings on 375px screens.
  3. Independently reproduce page-action initialization after internal navigation, distinguishing existing local-renderer behavior from this PR's data refresh.
  4. In an explicitly approved isolated runtime environment, follow a complete documented k6 sample literally to verify default/scenario/summary behavior. This report does not substitute for that runtime test or Phase A claim verification.
  5. Preserve this independent report verbatim when combining phases; do not convert the sampled UI successes into exhaustive generated-API verification.

Evidence and Cleanup

All tester-created snapshots, screenshots, and browser console logs are in this report's directory or its .playwright-cli child directory. Named evidence files above are relative to this directory.

Only browser session pr1737 was closed, which closed this tester's tabs. The CLI's post-close delete-data returned “Browser 'pr1737' is not open”; the known, tester-created browser-profile directory was then removed directly after browser closure. No test workspaces were created. Report, snapshots, screenshots, and console logs are intentionally preserved for the parent.

The reviewer-owned docs server and checkout remain running/unchanged for the parent. No source checkout, primary E:\GitHub copy, shared Aspire state, browser trust store, or other app session was touched. No GitHub review/comment/claim/push/merge or cross-session message was made.

Copy link
Copy Markdown
Member

docs-pr-reviewer report — [partial — phase A: key claims evaluated; phase B: not run (docs site was not served in this automated run)]

Recommendation: needs human

Source used: n/a — generated data (cites microsoft/aspire#20443, which is CLOSED/unmerged)
PR status: non-draft, merge conflicts with base, bot-authored, opened 2026-09-23 — STALE (~41 days); >300 files (generated pkgs/ts-modules data).

Phase A — claims

  • ❓ Auto-generated integration data/stats refresh (10/5/26) is superseded by newer regenerations; the cited source PR is closed. Recommend closing/regenerating rather than rebasing; a maintainer should decide.

Phase B — doc-tester

Not run; rendering of the changed pages is not browser-checked.

🤖 Posted by aspire.dev - squad (AI Agent)

David Pine (IEvangelist) added a commit that referenced this pull request Nov 4, 2026
## Summary

Fixes #1960.

The Integration Data Updater has failed since #1895 because
`generate-package-json.ps1` reads optional `apiReference` metadata
directly under `Set-StrictMode -Version Latest`. The catalog omits the
property for 209 of 210 entries, so generation aborts before processing
packages.

- Check property existence before reading `apiReference`.
- Keep omitted and explicit `true` entries; exclude explicit `false`.
- Add an executable PowerShell regression test that evaluates the
production predicate against omitted/false/true fixtures and the real
catalog.
- Run that regression in the Tools Tests workflow.

Failure evidence: [first affected
run](https://github.com/microsoft/aspire.dev/actions/runs/38809447050),
[latest inspected
failure](https://github.com/microsoft/aspire.dev/actions/runs/40403823946/job/121856319285).
Related prior repairs: #1813 and #1899; stale rolling updater PR: #1737.

## Validation

- PowerShell regression test: passed; real catalog result was `209
included, 1 excluded`.
- `PackageJsonGenerator.Tests`: 41/41 passed.
- `AtsJsonGenerator.Tests`: 37/37 passed.
- `update-integrations.vitest.test.ts`: 50/50 passed.
- PowerShell parser for `update-integration-data.ps1`: 0 errors.
- `actionlint .github/workflows/tools-tests.yml`: passed.
- `git diff --check`: passed.

## Limitations

A complete updater `workflow_dispatch` was not run because `main` still
contains the failing predicate; running it before this fix lands would
reproduce the known failure and cannot validate the branch change. The
PR's Tools Tests exercise the exact production predicate, and the next
post-merge manual/scheduled updater run should provide end-to-end
confirmation.

**🤖 Posted by Repository agent (AI Agent)**

---------

Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@aspire-repo-bot
aspire-repo-bot Bot force-pushed the chore/update-integration-data branch from 3ee148e to 35db3f2 Compare November 4, 2026 13:22
@aspire-repo-bot aspire-repo-bot Bot changed the title chore: Update integration data and GitHub stats (10/5/26) chore: Update integration data and GitHub stats (11/4/26) Nov 4, 2026
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@aspire-repo-bot
aspire-repo-bot Bot force-pushed the chore/update-integration-data branch from 9e43215 to 7201aca Compare November 4, 2026 21:22
Resolve the latest Aspire.Hosting API data dynamically and allow known
prerelease-only/experimental APIs missing from regenerated data.

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 App <223556219+Copilot@users.noreply.github.com>
The updater preferred stable 9.7.2 over the newer 13.6.2-beta.959 that
the docs target. Add a prerelease-preferred package list and restore the
beta data.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

:octocat: auto-merge Pull requests that are auto merged by policy

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants