Skip to content

[efficiency-improver] Monthly Activity 2026-09 #11023

Description

@github-actions

Activity for September 2026

Suggested Actions for Maintainer

  • Review PR: "Hoist PathContainment prefix normalization out of Retry recovery loops" (draft, branch efficiency/retry-pathcontainment-hoist-normalization, ~20x faster/100% less alloc per call) - View open PRs

Energy Efficiency Backlog

Priority Focus Area Opportunity Estimated Impact
LOW Code-Level TestExecutionManager MethodLevel parallel array-per-test in setup One-time setup cost
LOW-MEDIUM Code-Level RuntimeRegistrationEmitter.EmitResolveMethodHelper/ResolveProperty (source generator): O(N×M) linear scan per test method at module-init One-time per-assembly startup cost, not a hot loop
LOW Code-Level VideoProduction.cs ProducePerTestVideosAsync O(tests×segments) overlap scan Runs once at end-of-run (cold path)
LOW Test Infra test/Utilities/Microsoft.Testing.TestInfrastructure: regex-on-error-retry, tiny-collection LINQ Cold/low-frequency, negligible scale
LOW Code-Level MSTestTelemetryDataCollector.SerializeCollection/SerializeDictionary: OrderBy on telemetry flush Once per session (cold path)
LOW Code-Level TestClassModelBuilder (source generator): Where/GroupBy/Select for duplicate-method detection Compile-time only, not a runtime hot path
LOW Code-Level src/Adapter/MSTest.TestAdapter: reflection-based GetRuntimeMethod lookup in TestMethodFilter (cold, once per discovery context) Negligible, cold path
LOW Code-Level WindowTest.WindowSetup (MSTest.Windows.UIAutomation): fixed 50ms poll interval for window discovery, no exponential backoff Bounded by 10s timeout, once per test class (cold path); no measurement story in this sandbox (Windows-only)
LOW Infrastructure CI output-byte-count health metric Needs maintainer discussion
LOW-MEDIUM Code-Level Executable-condition analyzer (#10634) recursive tree walk not memoized Gated behind narrow guards, not urgent; evaluate memoization feasibility before attempting

PathContainment.IsUnderDirectory's per-call Path.GetFullPath/TrimEnd/OS-platform recomputation inside Retry's artifact-recovery loops (up to 10,000 manifest records / per-artifact) — fixed this run (draft PR above, ~20x faster/100% less alloc per call, measured). TestCaseExtensions.ToUnitTestElementWithUpdatedSource's Traits double-enumeration and TestContextImplementation.SanitizeTestTempDirectoryName's uncached Path.GetInvalidFileNameChars() both fixed and merged (PRs #11452, #11554). Assert.HasCount/IsEmpty/ContainsSingle/CollectionAssert.AreEquivalent/AreNotEquivalent LINQ-Count()-fast-path family fully merged (incl. maintainer dedup PR #11363). src/Analyzers/MSTest.Analyzers/.CodeFixes exhaustively reviewed, no open items. AzureDevOpsResultIdStore min/max single-pass fix confirmed present in main. Microsoft.Testing.Extensions.Retry (hot path), src/TestFramework/TestFramework/Assertions (drift), CtrfReport/JUnitReport, HangDump, CrashDump, AzureFoundry, Microsoft.Testing.Platform/ServerMode JSON-RPC serializer, MtpServerProcess/ServerTestHost partials, the AzureDevOpsTestResultsPublisher.* partials, MSTest.Windows.UIAutomation, the OTel activity-context consumer dedup, Assert.That's IL-compile fast path, the split DotnetMuxerLocator* files, the new composable test-host orchestrator middleware pipeline, HotReload's base-request reuse, IPC deserialization hardening, and diagnostic-logging exposure were all freshly scanned — all already well-optimized except the one fix above. Most easily-reachable low-hanging fruit across the codebase now appears picked, but genuinely new code (like this run's Retry finding) can still surface real opportunities — fresh-code drift checks remain worthwhile even as folder-by-folder first passes wind down.

Repo continues to be actively self-optimized by maintainers/Copilot coding agent. A separate [perf-improver] agent (issue #10914) is also actively working this repo's performance backlog — worth cross-checking before implementing overlapping items (the 2026-09-26/27 Path.GetInvalid*Chars() caching fixes in two different files, by this agent and [perf-improver], both merged the same day — confirms both agents converge on real, low-risk opportunities).

Discovered Commands

Command Purpose
./build.sh Full restore + build (installs SDK to .dotnet/ first)
./build.sh -test Run unit tests
./build.sh -pack Build + produce NuGet packages
./build.sh -pack -test -integrationTest Full pipeline incl. acceptance tests
.dotnet/dotnet build <proj>.csproj -c Debug -f <tfm> Build a single project directly once SDK is bootstrapped
artifacts/bin/<Project>/Debug/<tfm>/<Assembly> (run directly) Run a built test-host binary — more reliable than dotnet test/dotnet run --project in this sandbox for filter flags
<host> --filter "FullyQualifiedName~Name" vstest-style substring filter that works reliably against a built MTP test host in this sandbox (--treenode-filter syntax proved finicky)
dotnet format whitespace TestFx.slnx --verify-no-changes --include <file> Format verification (needs explicit TestFx.slnx workspace arg)

Notes: repo-local SDK at .dotnet/dotnet (Arcade-provisioned, must bootstrap via ./build.sh first, ~5-6 min first time). Some internal classes are tracked by the PublicAPI analyzer via a separate InternalAPI/InternalAPI.Shipped.txt+.Unshipped.txt pair (distinct from PublicAPI/) for cross-assembly InternalsVisibleTo test usage — check for this folder before changing an internal method's signature. Files edited with a text-editing tool can lose their required UTF-8 BOM — always verify/restore the BOM on .cs files before running dotnet format. MSTestAdapter.PlatformServices.UnitTests/MSTestAdapter.UnitTests (net462;net48;net8.0;net9.0 multi-target) cannot be restored/run in this Linux sandbox (no .NET Framework SDK) — document as a Test Status gap rather than attempting a partial-TFM restore workaround (that workaround corrupts sibling projects' project.assets.json).

Run History

2026-09-30 22:15 UTC - Run

2026-09-27 21:43 UTC - Run

2026-09-26 21:42 UTC - Run

2026-09-25 (prior runs, condensed)

2026-09-24

2026-09-23

  • 🔍 Scanned HangDump/CrashDump/AzureFoundry — one plausible lead (CrashDumpSequenceLogger AutoFlush=true) declined as intentional crash-safety design, not an inefficiency.
  • 🧹 Fixed a recurrence of the "duplicate Monthly Activity sections" process bug in this issue.

2026-09-22

  • 📊 Measured-and-reverted: RetryArgumentsBuilder List<int>→HashSet<int> conversion — benchmarked as NOT a reliable win at real bounded size (~4-10 entries), reverted via git checkout.
  • 🔍 Drift-scanned Microsoft.Testing.Extensions.Retry, TestFramework/Assertions, CtrfReport/JUnitReport — 0 new findings.

(Older run history condensed into memory.md to keep this issue readable — see repo memory for full detail back to 2026-06.)

Warning

Firewall blocked 96 domains

The following domains were blocked by the firewall during workflow execution:

  • 0t3vsblobprodcus362.vsblob.vsassets.io
  • 11vvsblobprodcus336.vsblob.vsassets.io
  • 169.254.169.254
  • 1javsblobprodcus364.vsblob.vsassets.io
  • 1k9vsblobprodcus379.vsblob.vsassets.io
  • 1oavsblobprodcus350.vsblob.vsassets.io
  • 1p7vsblobprodcus324.vsblob.vsassets.io
  • 1s1vsblobprodcus386.vsblob.vsassets.io
  • 2kmvsblobprodcus39.vsblob.vsassets.io
  • 2zrvsblobprodcus388.vsblob.vsassets.io
  • 37bvsblobprodcus311.vsblob.vsassets.io
  • 37cvsblobprodcus359.vsblob.vsassets.io
  • 4m6vsblobprodcus384.vsblob.vsassets.io
  • 4myvsblobprodcus32.vsblob.vsassets.io
  • 4vyvsblobprodcus361.vsblob.vsassets.io
  • 4zjvsblobprodcus390.vsblob.vsassets.io
  • 51yvsblobprodcus36.vsblob.vsassets.io
  • 5dkvsblobprodcus355.vsblob.vsassets.io
  • 5rqvsblobprodcus385.vsblob.vsassets.io
  • 6s7vsblobprodcus313.vsblob.vsassets.io
  • 7devsblobprodcus323.vsblob.vsassets.io
  • 7k6vsblobprodcus337.vsblob.vsassets.io
  • 7tjvsblobprodcus341.vsblob.vsassets.io
  • 80zvsblobprodcus35.vsblob.vsassets.io
  • 8xbvsblobprodcus382.vsblob.vsassets.io
  • 96bvsblobprodcus338.vsblob.vsassets.io
  • ajhvsblobprodcus363.vsblob.vsassets.io
  • bcnvsblobprodcus378.vsblob.vsassets.io
  • builds.dotnet.microsoft.com
  • c50vsblobprodcus330.vsblob.vsassets.io
  • c78vsblobprodcus322.vsblob.vsassets.io
  • cflvsblobprodcus383.vsblob.vsassets.io
  • ci.dot.net
  • ckzvsblobprodcus347.vsblob.vsassets.io
  • d0svsblobprodcus381.vsblob.vsassets.io
  • data.nuget.org
  • dc.services.visualstudio.com
  • dlbvsblobprodcus316.vsblob.vsassets.io
  • e7bvsblobprodcus348.vsblob.vsassets.io
  • fdpvsblobprodcus345.vsblob.vsassets.io
  • frdvsblobprodcus327.vsblob.vsassets.io
  • gbsvsblobprodcus365.vsblob.vsassets.io
  • gervsblobprodcus329.vsblob.vsassets.io
  • h6tvsblobprodcus346.vsblob.vsassets.io
  • i1qvsblobprodcus353.vsblob.vsassets.io
  • imzvsblobprodcus368.vsblob.vsassets.io
  • jd4vsblobprodcus366.vsblob.vsassets.io
  • josvsblobprodcus372.vsblob.vsassets.io
  • jrqvsblobprodcus343.vsblob.vsassets.io
  • k0ivsblobprodcus356.vsblob.vsassets.io
  • k4kvsblobprodcus344.vsblob.vsassets.io
  • kgfvsblobprodcus314.vsblob.vsassets.io
  • kh4vsblobprodcus325.vsblob.vsassets.io
  • kijvsblobprodcus387.vsblob.vsassets.io
  • kmuvsblobprodcus389.vsblob.vsassets.io
  • kxqvsblobprodcus376.vsblob.vsassets.io
  • l49vsblobprodcus358.vsblob.vsassets.io
  • l7avsblobprodcus319.vsblob.vsassets.io
  • ljcvsblobprodcus317.vsblob.vsassets.io
  • lylvsblobprodcus31.vsblob.vsassets.io
  • m16vsblobprodcus374.vsblob.vsassets.io
  • m6xvsblobprodcus342.vsblob.vsassets.io
  • m8dvsblobprodcus37.vsblob.vsassets.io
  • mfjvsblobprodcus373.vsblob.vsassets.io
  • n3kvsblobprodcus335.vsblob.vsassets.io
  • nn8vsblobprodcus340.vsblob.vsassets.io
  • o3svsblobprodcus318.vsblob.vsassets.io
  • ofvvsblobprodcus315.vsblob.vsassets.io
  • p2ovsblobprodcus312.vsblob.vsassets.io
  • pc2vsblobprodcus360.vsblob.vsassets.io
  • pdfvsblobprodcus380.vsblob.vsassets.io
  • pe3vsblobprodcus354.vsblob.vsassets.io
  • pe4vsblobprodcus351.vsblob.vsassets.io
  • pkgs.dev.azure.com
  • pkvvsblobprodcus321.vsblob.vsassets.io
  • rcxvsblobprodcus328.vsblob.vsassets.io
  • s4uvsblobprodcus326.vsblob.vsassets.io
  • s8mvsblobprodcus38.vsblob.vsassets.io
  • se1vsblobprodcus349.vsblob.vsassets.io
  • southcentralus0.in.applicationinsights.azure.com
  • sqdvsblobprodcus333.vsblob.vsassets.io
  • st8vsblobprodcus339.vsblob.vsassets.io
  • tphvsblobprodcus375.vsblob.vsassets.io
  • u3hvsblobprodcus371.vsblob.vsassets.io
  • u6ovsblobprodcus377.vsblob.vsassets.io
  • ukkvsblobprodcus352.vsblob.vsassets.io
  • uy6vsblobprodcus34.vsblob.vsassets.io
  • v53vsblobprodcus320.vsblob.vsassets.io
  • vb4vsblobprodcus33.vsblob.vsassets.io
  • vwvvsblobprodcus334.vsblob.vsassets.io
  • westus0.in.applicationinsights.azure.com
  • x3yvsblobprodcus370.vsblob.vsassets.io
  • xupvsblobprodcus332.vsblob.vsassets.io
  • yluvsblobprodcus367.vsblob.vsassets.io
  • yttvsblobprodcus357.vsblob.vsassets.io
  • ytvvsblobprodcus310.vsblob.vsassets.io

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "0t3vsblobprodcus362.vsblob.vsassets.io"
    - "11vvsblobprodcus336.vsblob.vsassets.io"
    - "169.254.169.254"
    - "1javsblobprodcus364.vsblob.vsassets.io"
    - "1k9vsblobprodcus379.vsblob.vsassets.io"
    - "1oavsblobprodcus350.vsblob.vsassets.io"
    - "1p7vsblobprodcus324.vsblob.vsassets.io"
    - "1s1vsblobprodcus386.vsblob.vsassets.io"
    - "2kmvsblobprodcus39.vsblob.vsassets.io"
    - "2zrvsblobprodcus388.vsblob.vsassets.io"
    - "37bvsblobprodcus311.vsblob.vsassets.io"
    - "37cvsblobprodcus359.vsblob.vsassets.io"
    - "4m6vsblobprodcus384.vsblob.vsassets.io"
    - "4myvsblobprodcus32.vsblob.vsassets.io"
    - "4vyvsblobprodcus361.vsblob.vsassets.io"
    - "4zjvsblobprodcus390.vsblob.vsassets.io"
    - "51yvsblobprodcus36.vsblob.vsassets.io"
    - "5dkvsblobprodcus355.vsblob.vsassets.io"
    - "5rqvsblobprodcus385.vsblob.vsassets.io"
    - "6s7vsblobprodcus313.vsblob.vsassets.io"
    - "7devsblobprodcus323.vsblob.vsassets.io"
    - "7k6vsblobprodcus337.vsblob.vsassets.io"
    - "7tjvsblobprodcus341.vsblob.vsassets.io"
    - "80zvsblobprodcus35.vsblob.vsassets.io"
    - "8xbvsblobprodcus382.vsblob.vsassets.io"
    - "96bvsblobprodcus338.vsblob.vsassets.io"
    - "ajhvsblobprodcus363.vsblob.vsassets.io"
    - "bcnvsblobprodcus378.vsblob.vsassets.io"
    - "builds.dotnet.microsoft.com"
    - "c50vsblobprodcus330.vsblob.vsassets.io"
    - "c78vsblobprodcus322.vsblob.vsassets.io"
    - "cflvsblobprodcus383.vsblob.vsassets.io"
    - "ci.dot.net"
    - "ckzvsblobprodcus347.vsblob.vsassets.io"
    - "d0svsblobprodcus381.vsblob.vsassets.io"
    - "data.nuget.org"
    - "dc.services.visualstudio.com"
    - "dlbvsblobprodcus316.vsblob.vsassets.io"
    - "e7bvsblobprodcus348.vsblob.vsassets.io"
    - "fdpvsblobprodcus345.vsblob.vsassets.io"
    - "frdvsblobprodcus327.vsblob.vsassets.io"
    - "gbsvsblobprodcus365.vsblob.vsassets.io"
    - "gervsblobprodcus329.vsblob.vsassets.io"
    - "h6tvsblobprodcus346.vsblob.vsassets.io"
    - "i1qvsblobprodcus353.vsblob.vsassets.io"
    - "imzvsblobprodcus368.vsblob.vsassets.io"
    - "jd4vsblobprodcus366.vsblob.vsassets.io"
    - "josvsblobprodcus372.vsblob.vsassets.io"
    - "jrqvsblobprodcus343.vsblob.vsassets.io"
    - "k0ivsblobprodcus356.vsblob.vsassets.io"
    - "k4kvsblobprodcus344.vsblob.vsassets.io"
    - "kgfvsblobprodcus314.vsblob.vsassets.io"
    - "kh4vsblobprodcus325.vsblob.vsassets.io"
    - "kijvsblobprodcus387.vsblob.vsassets.io"
    - "kmuvsblobprodcus389.vsblob.vsassets.io"
    - "kxqvsblobprodcus376.vsblob.vsassets.io"
    - "l49vsblobprodcus358.vsblob.vsassets.io"
    - "l7avsblobprodcus319.vsblob.vsassets.io"
    - "ljcvsblobprodcus317.vsblob.vsassets.io"
    - "lylvsblobprodcus31.vsblob.vsassets.io"
    - "m16vsblobprodcus374.vsblob.vsassets.io"
    - "m6xvsblobprodcus342.vsblob.vsassets.io"
    - "m8dvsblobprodcus37.vsblob.vsassets.io"
    - "mfjvsblobprodcus373.vsblob.vsassets.io"
    - "n3kvsblobprodcus335.vsblob.vsassets.io"
    - "nn8vsblobprodcus340.vsblob.vsassets.io"
    - "o3svsblobprodcus318.vsblob.vsassets.io"
    - "ofvvsblobprodcus315.vsblob.vsassets.io"
    - "p2ovsblobprodcus312.vsblob.vsassets.io"
    - "pc2vsblobprodcus360.vsblob.vsassets.io"
    - "pdfvsblobprodcus380.vsblob.vsassets.io"
    - "pe3vsblobprodcus354.vsblob.vsassets.io"
    - "pe4vsblobprodcus351.vsblob.vsassets.io"
    - "pkgs.dev.azure.com"
    - "pkvvsblobprodcus321.vsblob.vsassets.io"
    - "rcxvsblobprodcus328.vsblob.vsassets.io"
    - "s4uvsblobprodcus326.vsblob.vsassets.io"
    - "s8mvsblobprodcus38.vsblob.vsassets.io"
    - "se1vsblobprodcus349.vsblob.vsassets.io"
    - "southcentralus0.in.applicationinsights.azure.com"
    - "sqdvsblobprodcus333.vsblob.vsassets.io"
    - "st8vsblobprodcus339.vsblob.vsassets.io"
    - "tphvsblobprodcus375.vsblob.vsassets.io"
    - "u3hvsblobprodcus371.vsblob.vsassets.io"
    - "u6ovsblobprodcus377.vsblob.vsassets.io"
    - "ukkvsblobprodcus352.vsblob.vsassets.io"
    - "uy6vsblobprodcus34.vsblob.vsassets.io"
    - "v53vsblobprodcus320.vsblob.vsassets.io"
    - "vb4vsblobprodcus33.vsblob.vsassets.io"
    - "vwvvsblobprodcus334.vsblob.vsassets.io"
    - "westus0.in.applicationinsights.azure.com"
    - "x3yvsblobprodcus370.vsblob.vsassets.io"
    - "xupvsblobprodcus332.vsblob.vsassets.io"
    - "yluvsblobprodcus367.vsblob.vsassets.io"
    - "yttvsblobprodcus357.vsblob.vsassets.io"
    - "ytvvsblobprodcus310.vsblob.vsassets.io"

See Network Configuration for more information.

🤖 Automated content by GitHub Copilot. Generated by the Efficiency Improver workflow. · copilot · auto · 386.4 AIC · ⌖ 20.3 AIC · ⊞ 21.3K · [◷]( · ◷)

Add this agentic workflow to your repo

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/efficiency-improver.md@main

Closing this out — September has ended. Final state: the one open PR tracked here (efficiency/retry-pathcontainment-hoist-normalization, #11671) merged 2026-10-01. 0 open [efficiency-improver] PRs remain. Continuing activity tracking in the new [efficiency-improver] Monthly Activity 2026-10 issue.

🤖 Automated content by GitHub Copilot. Generated by the Efficiency Improver workflow. · copilot · auto · 211.4 AIC · ⌖ 14.1 AIC · ⊞ 21.3K · [◷]( · ◷)

Add this agentic workflow to your repo

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/efficiency-improver.md@main

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/performanceRuntime / build performance / efficiency.type/automationCreated or maintained by an agentic workflow.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions