Split Dapr, DAB, and LavinMQ integration docs#1376
Conversation
Create get-started, host, and connect suites with source-verified AppHost APIs, connection properties, polyglot clients, navigation, mappings, and redirects. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 239a58a9-4a99-4706-bd16-dfbe22da34ea
Use the Dapr endpoint hostname expected by the JavaScript SDK and document LavinMQ's fixed default host ports. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 239a58a9-4a99-4706-bd16-dfbe22da34ea
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 239a58a9-4a99-4706-bd16-dfbe22da34ea
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 239a58a9-4a99-4706-bd16-dfbe22da34ea
There was a problem hiding this comment.
Pull request overview
This PR restructures the Community Toolkit integration documentation for Dapr, Data API Builder (DAB), and LavinMQ by replacing each single, monolithic page with a consistent set of “get started / host / connect” pages, and updating navigation/mappings so the new routes are discoverable and old routes continue to resolve.
Changes:
- Adds new “get started”, “AppHost (host)”, and “connect” pages for Dapr, DAB, and LavinMQ, and removes the legacy single-page docs.
- Updates integration package-to-doc mappings and sidebar navigation entries to point at the new get-started routes.
- Extends ThemeImage rendering to use
fit="contain"(and updates the corresponding unit test expectation), helping keep theme-aware logos contained.
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/frontend/tests/unit/custom-components.vitest.test.ts | Updates ThemeImage render assertion to include the new fit=contain output. |
| src/frontend/src/data/integration-docs.json | Repoints Community Toolkit package mappings for Dapr/DAB/LavinMQ to the new get-started pages. |
| src/frontend/src/content/docs/integrations/messaging/lavinmq/lavinmq-host.mdx | New LavinMQ AppHost (hosting) reference page. |
| src/frontend/src/content/docs/integrations/messaging/lavinmq/lavinmq-get-started.mdx | New LavinMQ get-started landing page. |
| src/frontend/src/content/docs/integrations/messaging/lavinmq/lavinmq-connect.mdx | New LavinMQ consuming-app connection guidance and samples. |
| src/frontend/src/content/docs/integrations/messaging/lavinmq.mdx | Removes legacy single-page LavinMQ doc. |
| src/frontend/src/content/docs/integrations/frameworks/dapr/dapr-host.mdx | New Dapr AppHost (hosting) reference page. |
| src/frontend/src/content/docs/integrations/frameworks/dapr/dapr-get-started.mdx | New Dapr get-started landing page. |
| src/frontend/src/content/docs/integrations/frameworks/dapr/dapr-connect.mdx | New Dapr consuming-app connection guidance and samples. |
| src/frontend/src/content/docs/integrations/frameworks/dapr.mdx | Removes legacy single-page Dapr doc. |
| src/frontend/src/content/docs/integrations/devtools/dab/dab-host.mdx | New DAB AppHost (hosting) reference page. |
| src/frontend/src/content/docs/integrations/devtools/dab/dab-get-started.mdx | New DAB get-started landing page. |
| src/frontend/src/content/docs/integrations/devtools/dab/dab-connect.mdx | New DAB consuming-app connection guidance and service-discovery notes. |
| src/frontend/src/content/docs/integrations/devtools/dab.mdx | Removes legacy single-page DAB doc. |
| src/frontend/src/components/ThemeImage.astro | Uses fit="contain" for optimized theme images to keep assets contained. |
| src/frontend/config/sidebar/integrations.topics.ts | Replaces single sidebar entries for Dapr/DAB/LavinMQ with grouped get-started/host/connect nav items. |
| src/frontend/config/redirects.mjs | Adds redirects from legacy top-level integration routes to the new get-started pages. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Frontend HTML artifact readyThe latest frontend build uploaded the This comment updates automatically when a new frontend build artifact is uploaded. |
IEvangelist
left a comment
There was a problem hiding this comment.
🤖 Docs-accuracy review — PR #1376
Scope: Split the Dapr, Data API Builder, and LavinMQ Community Toolkit integration docs into consistent get-started / host / connect pages.
Phase A source of truth: CommunityToolkit/Aspire @ b9d40479805b74ea20b7dc57cb659d46e6f11c43 (the commit named in the PR body), with core-Aspire behavior cross-checked against microsoft/aspire main (docs/specs/connection-properties.md, ResourceBuilderExtensions.cs, tests/.../WithReferenceTests.cs).
Claims: ~45 non-narrative claims extracted across the 9 new pages — ~41 verified, 2 verified-with-nuance, 1 unverifiable, 1 contradicted.
Phase B (blind doc-tester): served the PR head locally and exercised all 9 routes + 3 legacy redirects + cross-links — 0 console errors/warnings; mermaid, tabs, twoslash, asides, and badges all render; redirects and internal links resolve. No critical rendering issues.
Important
Recommended verdict: REQUEST_CHANGES — one contradicted claim (DAB_HTTP) makes four of the DAB "connect" samples fail at runtime. Posting this as a comment because GitHub doesn't allow authors to request changes on their own PR; please treat the inline DAB_HTTP thread as blocking.
Phase A — Claim verification
🔴 Contradicted (must fix) — DAB_HTTP is never injected
dab-connect.mdx documents a DAB_HTTP environment variable ("Direct URL for the DAB HTTP endpoint") and the C#, TypeScript, Python, and Go "connect from your app" samples all read it. Source disagrees:
DataApiBuilderContainerResourceimplements onlyIResourceWithServiceDiscovery— notIResourceWithConnectionString, and it exposes noGetConnectionProperties(). The{RESOURCE}_{PROPERTY}env-var splat (e.g.POSTGRES_HOST) only happens for connection-property resources (microsoft/aspiredocs/specs/connection-properties.md;WithReferenceTests.csshowsRESOURCE_HOST/RESOURCE_PORT).- The string
DAB_HTTPappears nowhere in the CommunityToolkit source at the audited commit. - The integration's own consuming sample uses service discovery, not
DAB_HTTP:examples/data-api-builder/.../BlazorApp/Program.cs→client.BaseAddress = new("https+http://dab");
So services__dab__http__0 (the adjacent, ✅ correct row) is injected, but DAB_HTTP is not — the TS/Python/Go samples (whose only shown approach is DAB_HTTP) would read undefined/null and fail. See the inline thread for the specific fix. This is the single blocking issue.
🟡 Nuance / unverifiable
services__dab__http__0(dab-connect.mdx) — verified, but it's produced by Aspire's service-discovery injection forIResourceWithServiceDiscovery(format confirmed inWithReferenceTests.cs), not hard-coded by the integration. Correct as documented.aspire add lavinmq(lavinmq-host.mdx) — the short name isn't defined in the Community Toolkit source or this repo's package-mapping data (which uses full IDs). It likely resolves via the CLI's NuGet fuzzy match, but it's unverifiable from source and inconsistent with the Dapr/DAB host pages in this same PR, which use full package IDs. See inline note.- DAB REST route
/api/Product(dab-host.mdx/dab-connect.mdx) — depends on DAB's own config schema (external product), narrative/unverifiable, but consistent with the sample config shown.
✅ Verified (source-checked)
Dapr — 15/15 verified
AddDapr,AddDaprStateStore,AddDaprPubSub,AddDaprComponentAPIs and casing.DaprSidecarOptionsproperties:AppId,AppPort,AppProtocol,EnableApiLogging,ResourcesPaths.WithMetadataoverloads (withMetadataEndpoint/withMetadataParameter) andWithDaprComponents.- Env vars
DAPR_HTTP_PORT/DAPR_GRPC_PORT/DAPR_HTTP_ENDPOINT/DAPR_GRPC_ENDPOINTareTryAdd'd (DaprDistributedApplicationLifecycleHook.cs). - Sidecar naming
{app}-dapr+ hidden (IsHidden); Dapr runtime1.15.3, CLI1.15.0. - TypeScript exports and the skipped TS capability-dispatch test (
TypeScriptAppHostTests.cs).
Data API Builder — verified (except DAB_HTTP above)
- Package
CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder,AddDataAPIBuildercasing. - Default
dab-config.json+FileNotFoundExceptionwhen missing; imagemcr.microsoft.com/azure-databases/data-api-builder:1.6.77; port5000; OTLP;/health. - HTTPS constants present without an HTTPS endpoint; multi-config
/Appread-only mount;WithImage*customization. DataApiBuilderContainerResourceprops (PrimaryEndpoint,Host,Port,UriExpression); does not implementIResourceWithConnectionString(so noConnectionStrings__dab— correctly stated in the aside).
LavinMQ — 14 verified + LAVINMQ_* corroborated via core Aspire
- Image
docker.io/cloudamqp/lavinmq:2.1.0; ports5672/15672;guest/guest;amqpPort/managementPortparams. WithDataVolumeat/var/lib/lavinmq,WithDataBindMount,isReadOnly; endpoint properties; no VirtualHost; RabbitMQ-based health check;managementendpoint; URIamqp://{u}:{p}@{host}:{port}/.LavinMQContainerResourceimplementsIResourceWithConnectionStringwithGetConnectionProperties()→Host/Port/Username/Password/Uri. TheLAVINMQ_*env-var table is consistent with core Aspire's{RESOURCE}_{PROPERTY}splat (default.WithReferenceflags =All, verified inResourceBuilderExtensions.cs+WithReferenceTests.cs).
Phase B — doc-tester report (blind pass, ran before reading Phase A results)
Served the PR head at http://localhost:4323 and exercised every new/changed route as a new user.
| Check | Result |
|---|---|
9 new pages load (200, correct <title>) |
✅ |
| Console errors / warnings | ✅ 0 |
| Mermaid diagrams → SVG | ✅ |
| Expressive-code blocks (77) / twoslash errors | ✅ 0 errors |
| Tabs (5 groups) + asides (5 on dab-host) render | ✅ |
⭐ Community Toolkit badges |
✅ |
3 legacy redirects (/integrations/.../dapr, .../dab, .../lavinmq → *-get-started) |
✅ resolve |
| "See also" / cross-reference internal links | ✅ all 200 |
Anchor #use-endpoint-properties |
✅ resolves |
Out of scope / non-blocking: vanilla-cookieconsent.js ERR_ABORTED (Vite dep-optimization artifact, site-wide, pre-existing) and two lazy-loaded language-picker icons reporting naturalWidth 0 (assets exist; global component, pre-existing). Neither is introduced by this PR.
No critical issues and no warnings from the rendering pass. The only accuracy blocker is the DAB_HTTP claim above.
Use the DAB service-discovery endpoint in all consuming-language samples, document the full LavinMQ package ID, and update internal Dapr links after the route split. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 239a58a9-4a99-4706-bd16-dfbe22da34ea
Important
This PR is ready for review, but it should be rebased and merged after #1372, #1375, and #1374 because the series shares mapping, sidebar, and logo behavior.
Summary
Validation
[AspireExport]metadata, and TypeScript modules againstCommunityToolkit/Aspirecommitb9d40479805b74ea20b7dc57cb659d46e6f11c43.No local
pnpm buildwas run.