Fix spec dashboard overview grouping for C# management emitter - #11709
Fix spec dashboard overview grouping for C# management emitter#11709Wei Hu (live1206) wants to merge 8 commits into
Conversation
|
No changes needing a change description found. |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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;
DashboardTableheader rendering is unchanged, so the table header may still fall back to the emitter package name whengeneratorMetadata.name/emitterDisplayNamesaren’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*-mgmtpackages or ensure the mgmt emitter is always mapped viaemitterDisplayNames).
// 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.generatorReportspergroupKey(to computefirstReportand then again to computedisplayName). This makes the grouping work O(n²) per summary and adds avoidable complexity. SincegroupKeyis 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];
|
You can try these changes here
|
There was a problem hiding this comment.
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 thefirstReportand the emitter name used to computedisplayName.
const firstReport = Object.entries(summary.generatorReports).find(
([emitterName, report]) =>
getEmitterOverviewKey(emitterName, report, emitterDisplayNames) === groupKey,
)?.[1];
There was a problem hiding this comment.
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
emitterDisplayNamesandgeneratorMetadata.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 removingemitterDisplayNamesand omittinggeneratorMetadata.nameso 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#",
There was a problem hiding this comment.
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 agroupKey. This is redundant work and makes the logic harder to follow. Consider extracting[firstEmitterName, firstReport]with a singlefind()and reuse those values when settingdisplayName.
const firstReport = Object.entries(summary.generatorReports).find(
([emitterName, report]) =>
getEmitterOverviewKey(emitterName, report, emitterDisplayNames) === groupKey,
)?.[1];
This reverts commit 4fb1f15.
There was a problem hiding this comment.
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
CoverageOverviewgrouping and adds an overview-only regression test.DashboardTable/GeneratorHeaderCellstill renderdisplayName ?? report?.generatorMetadata?.name ?? language, so without anemitterDisplayNamesentry 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", () => {
| expect(defaultTable!.manifest.scenarios[0].name).toBe("unique_scenario"); | ||
| }); | ||
|
|
||
| it("should group overview coverage by logical display name across emitter packages", () => { |
There was a problem hiding this comment.
a little confused here by what you are trying to achieve, why do we wantt o merge both emitters into a single one by displayName, this feels very nasty
There was a problem hiding this comment.
The thing is we have an coverage overview on the top of the dashboard, C# should contain the coverage data from 2 emitters, that's what the PR is trying to fix.
And there are separate tables for ARM and DPG, which should only use mgmt emitter and the dpg emitter.
There was a problem hiding this comment.
Check the current dashboard, there are 2 C# coverage in the coverage overview

There was a problem hiding this comment.
but this is still pretty nasty, each of the emitters don't support everything here which is what this portrayes.
Are you not doing the test at all for one of the emitters?
There was a problem hiding this comment.
That's the current situation for C#, we have 2 emitters:
- DPG uses https://github.com/Azure/azure-sdk-for-net/tree/main/eng/packages/http-client-csharp
- Mgmt uses https://github.com/Azure/azure-sdk-for-net/tree/main/eng/packages/http-client-csharp-mgmt
Their combination support everything, each single of them can't cover all the scenarios.
What is your suggestion for this fix?
There was a problem hiding this comment.
But here for example you don't test anything against the mgmt emitter, it has 1% support in arm category and I assume 0 in all the others?
The way the dashboard should be seen is what does an emitter support. If we group by something else it doesn't really reflect that.
I do understand though you do want a way to show the total coverage of all c# emitters for tracking, I'll think of something.
## Summary - map `@azure-typespec/http-client-csharp-mgmt` to the `C#` dashboard display name - ensure the Azure Management Plane table uses the same language label as the data-plane C# emitter - allow the display-name grouping from microsoft/typespec#11709 to aggregate both C# emitters into one overview card ## Validation - Verified the combined changes against live coverage data: the management-plane table header displays `C#`, the raw management emitter package name is absent, and the overview contains one aggregated C# card. Co-authored-by: live1206 <live1206@users.noreply.github.com>
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
C#display name and verifies the overview renders one combined C# card.