Skip to content

Fix spec dashboard overview grouping for C# management emitter - #11709

Open
Wei Hu (live1206) wants to merge 7 commits into
microsoft:mainfrom
live1206:fix/spec-dashboard-coverage-overview-csharp
Open

Fix spec dashboard overview grouping for C# management emitter#11709
Wei Hu (live1206) wants to merge 7 commits into
microsoft:mainfrom
live1206:fix/spec-dashboard-coverage-overview-csharp

Conversation

@live1206

@live1206 Wei Hu (live1206) commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes #11699

Group coverage overview entries by their configured display name rather than by raw emitter package name. This allows data-plane and management-plane emitters configured with the same language label to contribute to one overview card without counting a scenario more than once within a summary.

The explicit management C# display-name mapping is added by Azure/typespec-azure#5291.

Validation

  • Added a regression test that configures both C# emitter packages with the C# display name and verifies the overview renders one combined C# card.
  • Verified the combined changes against live dashboard coverage data; the overview renders one C# card with aggregated coverage.

@github-actions

Copy link
Copy Markdown
Contributor

No changes needing a change description found.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the spec dashboard’s coverage overview to aggregate coverage by a logical emitter “display name” (e.g., grouping data-plane and management-plane C# emitters together) and adds a regression test intended to prevent the C# management emitter from appearing as a separate language card.

Changes:

  • Group overview cards by a logical key derived from the emitter display name rather than the raw emitter package name.
  • Track/display a grouped display name per overview entry.
  • Add a regression test for the C# management/data-plane grouping scenario.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
packages/spec-dashboard/src/components/coverage-overview.tsx Changes overview aggregation from per-emitter-package to per-display-name grouping.
packages/spec-dashboard/src/apis.test.ts Adds a regression test rendering CoverageOverview to validate grouping behavior.

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

Comment thread packages/spec-dashboard/src/components/coverage-overview.tsx
Comment thread packages/spec-dashboard/src/apis.test.ts
Comment thread packages/spec-dashboard/src/components/coverage-overview.tsx
Copilot AI review requested due to automatic review settings August 18, 2026 06:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (2)

packages/spec-dashboard/src/components/coverage-overview.tsx:72

  • The PR description (and linked issue) also calls out the management-plane table header showing a raw package name. This change only affects the overview grouping; DashboardTable header rendering is unchanged, so the table header may still fall back to the emitter package name when generatorMetadata.name/emitterDisplayNames aren’t available. Either update the PR description to scope it to the overview-only fix, or include a table-header fix (e.g., derive a friendly name for *-mgmt packages or ensure the mgmt emitter is always mapped via emitterDisplayNames).
    // Aggregate scenarios per logical emitter language across all summaries.
    // This keeps emitters that share the same display name (for example C# data-plane
    // and management-plane emitters) grouped into a single overview card.

packages/spec-dashboard/src/components/coverage-overview.tsx:134

  • The overview aggregation does two linear scans over summary.generatorReports per groupKey (to compute firstReport and then again to compute displayName). This makes the grouping work O(n²) per summary and adds avoidable complexity. Since groupKey is already the resolved display name, you can initialize the entry without re-scanning the reports.
          const firstReport = Object.entries(summary.generatorReports).find(
            ([emitterName, report]) =>
              getEmitterOverviewKey(emitterName, report, emitterDisplayNames) === groupKey,
          )?.[1];

@azure-sdk-automation

azure-sdk-automation Bot commented Aug 18, 2026

Copy link
Copy Markdown

You can try these changes here

🛝 Playground 🌐 Website 🛝 VSCode Extension

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

packages/spec-dashboard/src/components/coverage-overview.tsx:133

  • Inside the if (!emitterMap.has(groupKey)) block, Object.entries(summary.generatorReports).find(...) is executed twice with the same predicate. This adds unnecessary work and makes the code harder to follow; hoist the result into a single variable and reuse it for both the firstReport and the emitter name used to compute displayName.
          const firstReport = Object.entries(summary.generatorReports).find(
            ([emitterName, report]) =>
              getEmitterOverviewKey(emitterName, report, emitterDisplayNames) === groupKey,
          )?.[1];

Copilot AI review requested due to automatic review settings August 24, 2026 05:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

Suppressed comments (1)

packages/spec-dashboard/src/apis.test.ts:269

  • This regression test currently provides both emitterDisplayNames and generatorMetadata.name, so it doesn't cover the failure mode reported in #11699 where the management emitter can fall back to the raw package name (missing metadata and no friendly-name mapping). Consider removing emitterDisplayNames and omitting generatorMetadata.name so the test verifies the default display-name derivation + grouping behavior end-to-end.
  const html = renderToStaticMarkup(
    createElement(CoverageOverview, {
      coverageSummaries,
      emitterDisplayNames: {
        "@azure-typespec/http-client-csharp": "C#",

Comment thread packages/spec-dashboard/src/components/coverage-overview.tsx
Comment thread packages/spec-dashboard/src/apis.test.ts
Copilot AI review requested due to automatic review settings August 25, 2026 01:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

Suppressed comments (1)

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

packages/spec-dashboard/src/components/coverage-overview.tsx:111

  • This block scans Object.entries(summary.generatorReports) twice with the same predicate to discover the first emitter for a groupKey. This is redundant work and makes the logic harder to follow. Consider extracting [firstEmitterName, firstReport] with a single find() and reuse those values when setting displayName.
          const firstReport = Object.entries(summary.generatorReports).find(
            ([emitterName, report]) =>
              getEmitterOverviewKey(emitterName, report, emitterDisplayNames) === groupKey,
          )?.[1];

Copilot AI review requested due to automatic review settings August 25, 2026 01:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

Suppressed comments (1)

packages/spec-dashboard/src/apis.test.ts:231

  • The PR description/linked issue state this change also fixes the management-plane table header showing a raw package name, but this PR only changes CoverageOverview grouping and adds an overview-only regression test. DashboardTable/GeneratorHeaderCell still render displayName ?? report?.generatorMetadata?.name ?? language, so without an emitterDisplayNames entry for @azure-typespec/http-client-csharp-mgmt (or a code change there) the header can still fall back to the package name.
it("should group overview coverage by logical display name across emitter packages", () => {

Comment thread packages/spec-dashboard/src/components/coverage-overview.tsx
Copilot AI review requested due to automatic review settings August 25, 2026 01:58

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

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.

[Bug]: Management emitter leaks into Coverage Overview and lacks a C# table header

3 participants