You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Azure DevOps renders uploaded test summaries as Markdown cards in the Extensions tab, but the current output is difficult to scan: cards use generated filenames, metrics are vertically expanded, and multi-module runs repeat large sections.
This change optimizes the supported Markdown experience:
uploads summaries with friendly card names using Distributedtask.Core.Summary
replaces vertical metric tables with compact status strips and smaller headings
adds clear pass/fail icons and reports nonzero exit codes without routine noise
renders a concise multi-module table with failures first and deterministic ordering
focuses detailed sections on failing classes, failed tests, coverage, and the globally slowest tests
avoids HTML-only collapsible elements that Azure DevOps does not reliably render
updates CLI help, package documentation, tests, and generated localization files
The Markdown and self-contained HTML report options remain independent and can be enabled together. HTML is still emitted as a report file; this change does not misuse or replace the native Code Coverage tab.
Before and after
Before
After
Validation included the focused Azure DevOps summary unit tests, the all-extensions help acceptance tests, and a repository build/pack.
Preserve literal special characters in CommonMark code spans and render complete module identities in failure and slow-test sections.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
When an authoritative exit code is present, this branch ignores both aggregate.FailedTests and aggregate.IsPartial. A valid summary with failed tests and an ignored exit code of 0 therefore gets a green heading while its status strip and module rows report failures; a truncated run can likewise appear successful. Include those run-level failure signals before consulting the exit verdict.
Require both module rows before comparing their positions
IndexOf returns -1 when a row is absent, so this ordering assertion still passes if the failed-module row disappears (-1 is before the passing row). Assert that both names were found before comparing their positions so the test detects either omission.
Final test-triage resolution — Azure Pipelines build 1599763
This is the final resolution for the completed build (analysis mode: full). Two Windows failures were found among 83 candidate results across all legs; everything else passed or was within normal duration variance.
1. CaptureShouldAttachBoundedContextForFailedTest (Windows Debug, .NET Framework 4.8 leg) — actionable, tracked as a new issue.
Root cause is deterministic: TestContextImplementation.AssertionFailureDiagnostics.Writer.CreateProcessArtifact only computes CpuPercentDuringTest when elapsed > TimeSpan.Zero. When the captured test finishes fast enough that the Stopwatch-measured elapsed time rounds to exactly zero, the field stays null and is dropped from the JSON payload (EmitDefaultValue = false), so the test's json.Should().Contain("\"cpuPercentDuringTest\"") assertion fails. The same signature (same message, "elapsedMilliseconds":0) also occurred on main build 20260916.21 on the net462 leg, confirming recurrence across builds/TFMs rather than a one-off. Filed as a new issue with the fix guidance (default CpuPercentDuringTest to 0 instead of null for zero-duration windows, or adjust the test contract).
2. Dispose_FromANotificationHandler_DoesNotSelfWaitOnTheReadLoop (Windows Release, net8.0 leg) — environmental one-off, no issue created.
Actual elapsed time was 6896 ms against a 4000 ms bound. Historical samples (4 builds, net8.0 Release leg) show durations of 14–402 ms with no prior failures, and this exact disposal-timing scenario was already hardened by #11074 (closed 2026-09-07). A single outlier against a machine/agent-load-sensitive bound on a loaded Windows Release job does not meet the recurrence or regression threshold for a new issue; no code change is indicated at this time. If this recurs on a future build with the same signature, it should be reopened/escalated.
No crash dumps or hangs were present (CrashDumps artifacts were empty on both Windows jobs); no slowness regressions met the historical threshold (0 of 81 slow candidates flagged).
🤖 Automated content by GitHub Copilot. Generated by the Pipeline Test Triage workflow. · copilot · auto · 197 AIC · ⌖ 7.3 AIC · ⊞ 9.4K
The module heading above this call is level 4, but AppendModuleDiagnostics now emits headings at exactly the supplied level, so “Top failing classes”, “Failure details”, and the next module all become sibling level-4 headings. With multiple failed modules, the document outline no longer associates diagnostics with their module, which makes screen-reader navigation ambiguous. Pass heading level 5 here and update the corresponding expectation.
Avoid repeating per-module slowest tests in the aggregate
This aggregate call still lets AppendModuleDiagnostics emit each failed module's SlowestTests, after which lines 152–175 render the global top 10 again. A run with many failing modules therefore repeats tests and can add up to ten local slow-test rows per module, contrary to the advertised globally-slowest-only summary. Add a control that disables the helper's slowest-test section for aggregate failure diagnostics while retaining it for direct per-module summaries.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
state/approvedProposal approved; ready for implementation.
3 participants
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Azure DevOps renders uploaded test summaries as Markdown cards in the Extensions tab, but the current output is difficult to scan: cards use generated filenames, metrics are vertically expanded, and multi-module runs repeat large sections.
This change optimizes the supported Markdown experience:
Distributedtask.Core.SummaryThe Markdown and self-contained HTML report options remain independent and can be enabled together. HTML is still emitted as a report file; this change does not misuse or replace the native Code Coverage tab.
Before and after
Before
After
Validation included the focused Azure DevOps summary unit tests, the all-extensions help acceptance tests, and a repository build/pack.