Skip to content

Add the config-driven AppHost language foundation - #1634

Open
David Pine (IEvangelist) wants to merge 16 commits into
mainfrom
ievangelist-create-foundation-pr
Open

Add the config-driven AppHost language foundation#1634
David Pine (IEvangelist) wants to merge 16 commits into
mainfrom
ievangelist-create-foundation-pr

Conversation

@IEvangelist

Copy link
Copy Markdown
Member

Summary

This is stack 1/5 of the polyglot AppHost documentation work. It adds:

  • a central one-bit AppHost language registry
  • registry-backed tabs, selectors, pivots, state, and Markdown filtering
  • canonical six-language onboarding and architecture documentation
  • real six-language runtime fixtures, terminal casts, and dashboard screenshots
  • AppHost documentation authoring guidance
  • sample catalog support
  • the AppHost builder and home model story
  • registry-gated project-page HTML and Markdown publication

Python, Go, Java, and Rust remain disabled in this stage. The next PR adds integration parity.

Validation

  • git diff --check upstream/main...HEAD
  • clean working tree after applying the validated commit stack

No local production build was run.

@aspire-repo-bot aspire-repo-bot Bot 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.

Automated wording suggestions from the forbidden-words check. Apply the suggestions to resolve them.

Comment thread src/frontend/tests/e2e/pivot-selector.spec.ts Outdated
Comment thread src/frontend/tests/unit/update-samples.vitest.test.ts Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The new languageConfig override in aspire-version-placeholders-integration.mjs is not consistently applied to AppHostTabs Markdown rendering, which can yield incorrect output when the registry is customized.

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

Pull request overview

Adds a config-driven foundation for polyglot AppHost documentation by centralizing the AppHost language registry, using it to drive UI components (tabs/selectors/pivots), and gating documentation/fixtures/tests based on enabled languages.

Changes:

  • Introduces apphost-languages.json as the central AppHost language registry and wires new UI components (AppHostTabs, language selector/pivots, evidence).
  • Gates unpublished/disabled AppHost language project pages at build/load time and removes disabled page-action Markdown copies post-build.
  • Adds runtime fixtures (source, terminal casts, dashboard screenshots) plus unit/e2e/contract tests to keep docs + UI synchronized with the registry.
File summaries
File Description
src/frontend/tests/unit/aspire-version-placeholders.vitest.test.ts Adds coverage for removing disabled AppHost Markdown copies via language registry.
src/frontend/tests/unit/apphost-language-fixtures.vitest.test.ts Verifies fixtures/casts/images exist and are sanitized for each registry language.
src/frontend/tests/unit/apphost-language-docs-loader.vitest.test.ts Tests registry-driven docs loader gating behavior and store filtering.
src/frontend/tests/typecheck/component-props.contracts.ts Adds prop contract coverage for new AppHost components.
src/frontend/tests/fixtures/apphost-languages/typescript/apphost.mts Adds TypeScript AppHost runtime fixture.
src/frontend/tests/fixtures/apphost-languages/service.mjs Adds shared Node HTTP executable used by language fixtures.
src/frontend/tests/fixtures/apphost-languages/scenario.json Adds scenario metadata for recording/verification workflows.
src/frontend/tests/fixtures/apphost-languages/rust/apphost.rs Adds Rust AppHost runtime fixture (external service fallback).
src/frontend/tests/fixtures/apphost-languages/python/apphost.py Adds Python AppHost runtime fixture.
src/frontend/tests/fixtures/apphost-languages/java/AppHost.java Adds Java AppHost runtime fixture.
src/frontend/tests/fixtures/apphost-languages/go/apphost.go Adds Go AppHost runtime fixture.
src/frontend/tests/fixtures/apphost-languages/csharp/apphost.cs Adds C# AppHost runtime fixture.
src/frontend/tests/e2e/pivot-selector.spec.ts Expands e2e coverage for fallback/unknown language persistence and disabled pivots/media.
src/frontend/tests/e2e/integrations-gallery.spec.ts Updates integrations gallery assertions to reflect registry-driven language links.
src/frontend/tests/e2e/homepage.spec.ts Makes homepage model-story assertions registry-driven; updates expected AppHost filename casing.
src/frontend/tests/e2e/custom-components.spec.ts Updates AppHost builder component tests to be registry-driven and adds keyboard-nav coverage.
src/frontend/src/styles/site.css Adds styling for AppHostTabs limitations and experimental tab badges.
src/frontend/src/data/apphost-languages.json Introduces the central AppHost language registry (enabled/experimental/aliases/etc.).
src/frontend/src/content/docs/integrations/overview.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/messaging/lavinmq/lavinmq-connect.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/frameworks/rust/rust-get-started.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/frameworks/powershell/powershell-get-started.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/frameworks/perl/perl-get-started.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/frameworks/nodejs-extensions.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/frameworks/java/java-get-started.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/frameworks/deno/deno-get-started.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/dotnet/blazor-hosting.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/dotnet/blazor-connect.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/devtools/sql-projects/sql-projects-get-started.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/devtools/k6/k6-get-started.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/devtools/flagd/flagd-host.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/devtools/flagd/flagd-connect.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/devtools/browser-logs.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/databases/mysql/mysql-extensions.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/databases/mongodb/mongodb-extensions.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/custom-integrations/secure-communication.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/custom-integrations/hosting-integrations.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/user-assigned-identity.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/role-assignments.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/local-provisioning.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/azure-log-analytics.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/azure-front-door.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/azure-default-credential.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-get-started.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-inference/azure-ai-inference-host.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/caching/redis-output/redis-output-host.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/caching/redis-extensions.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/integrations/caching/redis-distributed/redis-distributed-host.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/get-started/resource-mcp-servers.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/get-started/aspire-mcp-server.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/fundamentals/service-discovery.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/fundamentals/http-commands.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/fundamentals/health-checks.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/fundamentals/container-networking.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/pipelines.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/kubernetes-ingress.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/kubernetes-ingress-aks.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/kubernetes-gateway-aks.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/environments.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/deploy-with-aspire.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/custom-deployments.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/azure/azure-developer-cli.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/deployment/app-lifecycle.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/dashboard/enable-browser-telemetry/blazor-webassembly.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/community/contributor-guide.mdx Updates authoring guidance to use AppHostTabs + registry-driven parity rules.
src/frontend/src/content/docs/architecture/resource-hierarchies.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/app-host/with-terminal.mdx Converts AppHost snippets to AppHostTabs.
src/frontend/src/content/docs/app-host/rust-apphost.mdx Adds Rust AppHost project-structure page (gated by registry).
src/frontend/src/content/docs/app-host/python-apphost.mdx Adds Python AppHost project-structure page (gated by registry).
src/frontend/src/content/docs/app-host/java-apphost.mdx Adds Java AppHost project-structure page (gated by registry).
src/frontend/src/content/docs/app-host/hot-reload-and-watch.mdx Converts AppHost sections to AppHostTabs.
src/frontend/src/content/docs/app-host/go-apphost.mdx Adds Go AppHost project-structure page (gated by registry).
src/frontend/src/content/docs/app-host/configuration.mdx Switches pivot UI to new AppHost language selector/pivot components.
src/frontend/src/content.config.ts Wraps docs loader with registry-gated loader (appHostLanguageDocsLoader).
src/frontend/src/components/SimpleAppHostCode.astro Switches snippet rendering to AppHostTabs.
src/frontend/src/components/SampleDetail.astro Gates sample AppHost pills/code by enabled languages; adds glyph/color support.
src/frontend/src/components/SampleCard.astro Gates sample AppHost pills by enabled languages; adds glyph/color support.
src/frontend/src/components/PivotSelector.astro Updates aspire-lang syncing via apphost-language-select event and registry order/badges.
src/frontend/src/components/IntegrationCard.astro Makes integration language links registry-driven and adds polyglot icons.
src/frontend/src/components/AppHostTabs.astro Adds new registry-driven AppHost tab component with limitation rendering.
src/frontend/src/components/AppHostLanguageSelector.astro Adds registry-driven PivotSelector wrapper for AppHost language selection.
src/frontend/src/components/AppHostLanguagePivot.astro Adds registry-gated Pivot wrapper to hide disabled languages.
src/frontend/src/components/AppHostLanguageEvidence.astro Adds evidence component that embeds casts + dashboard screenshots by language.
src/frontend/scripts/record-apphost-language-scenario.sh Adds Linux recording script to generate verified casts.
src/frontend/scripts/playwright-dashboard.config.json Adds Playwright config for capturing dashboard screenshots.
src/frontend/scripts/capture-apphost-language-dashboard.ps1 Adds PowerShell script to capture dashboard screenshots via playwright-cli.
src/frontend/scripts/capture-apphost-language-dashboard-wsl.ps1 Adds WSL-based PowerShell script to capture dashboard screenshots.
src/frontend/public/casts/apphost-typescript.cast Adds verified TypeScript cast recording.
src/frontend/public/casts/apphost-csharp.cast Adds verified C# cast recording.
src/frontend/public/casts/apphost-python.cast Adds verified Python cast recording.
src/frontend/public/casts/apphost-go.cast Adds verified Go cast recording.
src/frontend/public/casts/apphost-java.cast Adds verified Java cast recording.
src/frontend/public/casts/apphost-rust.cast Adds verified Rust cast recording (external service fallback).
src/frontend/eslint.config.mjs Disables type-checked linting for TypeScript AppHost fixture .mts files.
src/frontend/config/sidebar/docs.topics.ts Makes AppHost project page sidebar entries registry-driven.
src/frontend/config/aspire-version-placeholders-integration.mjs Adds registry-based Markdown copy filtering + AppHostTabs rendering.
src/frontend/config/apphost-language-docs-loader.mjs Adds registry-gated docs loader wrapper for suppressing disabled project pages.
.github/agents/community-toolkit-integration-doc-writer.agent.md Updates agent guidance to use AppHostTabs + registry parity approach.
.agents/skills/whatsnew/references/writing-guidelines.md Updates What’s New writing guidance to use AppHostTabs parity model.
.agents/skills/whatsnew/references/whats-new-template.mdx Updates template guidance to use AppHostTabs.
.agents/skills/whatsnew/references/05-polish.md Updates polish checklist to require AppHostTabs parity/limitations.
.agents/skills/whatsnew/references/03-critique.md Updates critique checklist to require AppHostTabs parity.
.agents/skills/whatsnew/references/02-research.md Updates research guidance to use registry-backed AppHostTabs.
Review details

Suppressed comments (2)

src/frontend/config/aspire-version-placeholders-integration.mjs:53

  • replaceAspireVersionPlaceholdersInDirectory accepts a languageConfig override, but downstream processing uses a module-level default. Set the active config for this invocation before processing the Markdown copies so rendered AppHostTabs reflect the same registry used for gating pages.
    src/frontend/config/aspire-version-placeholders-integration.mjs:104
  • processMarkdownCopy renders AppHostTabs using the imported default appHostLanguageConfig, which ignores the languageConfig override passed into replaceAspireVersionPlaceholdersInDirectory. This can produce Markdown copies with the wrong set/order of language tabs when the registry is customized.
  • Files reviewed: 105/237 changed files
  • Comments generated: 1
  • Review effort level: Lite

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

Comment thread src/frontend/config/aspire-version-placeholders-integration.mjs Outdated
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Frontend HTML artifact ready

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

VS Code: Open PR #1634 artifacts

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

@IEvangelist
David Pine (IEvangelist) added this pull request to stack #1639 September 9, 2026 20:02
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Document six-language onboarding, architecture, integration authoring, and gated project structures for TypeScript, C#, Python, Go, Java, and Rust.

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>
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>
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>
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>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@IEvangelist
David Pine (IEvangelist) force-pushed the ievangelist-create-foundation-pr branch from bc1245f to 69e3c6b Compare September 10, 2026 13:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants