Skip to content

Move main desktop performance measurements to SDK 12 and net12.0 - #5344

Draft
LoopedBard3 wants to merge 4 commits into
dotnet:mainfrom
LoopedBard3:loopedbard3-performance-net12-migration
Draft

LoopedBard3 wants to merge 4 commits into
dotnet:mainfrom
LoopedBard3:loopedbard3-performance-net12-migration

Conversation

@LoopedBard3

@LoopedBard3 LoopedBard3 commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

Summary

Move desktop main measurements to SDK12 and net12.0, rather than building net11 benchmarks with an installation containing only the .NET12 runtime.

  • Update the main channel, SDK pin, desktop pipeline default, supported microbenchmark frameworks, SDK/Blazor scenario selection, tooling test targets, and ResultsComparer recognition of net12.0 and nativeaot12.0.
  • Keep MAUI/mobile main-channel targets on net11 with SDK12 and existing MAUI/macios dependency branches. Android/iOS runtime jobs also default to net11; explicit framework overrides retain precedence. SDK version/commit metadata follows the SDK channel, not the target override.
  • Preserve versioned older channels. Add global.net11.json; older-only benchmarks_ci.py runs temporarily select the newest requested framework's versioned pin and restore the original root file even on failure.
  • Split net11/net12 library conditions: net11 explicitly retains11.0.0 dependencies; net12 uses main dependency properties, currently also11.0.0. Future main library updates cannot silently change net11 measurements.
  • Move the net12 WASM case after net11 and retain the requested historical --wasmRuntimeFlavor CoreCLR argument. No measurement lanes have been disabled or silently substituted.
  • Select the R2R-interpreter runtime from the actual benchmark target (r2r11_0 / r2r12_0), preserving its custom runtime pack, compiler path and disabled-runtime-code-generation setting.

No MAUI ACES pool changes are included. Based on freshly fetched upstream main bee760ce03eda6021a1466486e067c7c7e76a4ef. Review revisions: 6dbc9d542, 9c916affb, 9c0b441ad.

BDN prerequisite and review status

Still a draft, not a merge-ready all-framework migration. Following the user's incremental-update direction, the separate prerequisite is evaluating a global BDN641 update based on dotnet/performance#5279, with later BDN660 work kept separate. BDN641 already includes net12 CoreCLR support;649 is not a minimum requirement. Compatibility extraction and the required configuration-matched campaign remain pending. Keep this PR targeting main; no replacement or retargeting is intended.

The original implementation temporarily uses BDN649 for net12 because existing BDN595 restores/builds net12 but crashes before execution with GetRuntimeVersion not implemented for NotRecognized. That split and compatibility code remain only until extraction into the separate global update is established: version selection/propagation, async-LINQ dependency, AOT filter and tests, and TLS/URI typed argument sources. The typed sources fix actual BDN1507 errors (object[] yielded where SslProtocols/string is taken), without changing argument values or measured methods.

Open integration issues are not presented as fixed:

  • Mixed net11/net12 builds select the newer runner through aggregate framework properties. The global update should eliminate the per-TFM runner split rather than add more split-output machinery. A fresh parallel harness build also encountered a Reporting.dll output collision; serialized builds pass, but clean parallel build coverage must be rechecked after removing temporary property propagation.
  • Main Mono WASM jobs inherit net12, but a coherent supported framework/SDK/runtime artifact combination is not established. Setting only net11 does not prove compatibility with a main-runtime artifact's current SDK and packs. Latest660 explicitly rejects MonoCore/MonoWasm/MonoWasmAot >=12 and removed native MonoAotLLVM tooling; the staged641/prior-art path is being evaluated, not declared impossible or validated. Published649 also needs a compatibility bridge for the requested historical flavor argument. No lanes are disabled or runtimes substituted.

The R2R-interpreter target mismatch is fixed in 9c0b441ad: both OS paths use a framework-aware runtime moniker and retain the existing custom pack, Crossgen2 path and interpreter flag. The prerequisite owner verified candidate641's real R2RRuntime.Net12_0 parser/toolchain support. Full R2R payload execution remains unvalidated, not implied by argument-generation tests.

Historical framework-selection alternatives and the argument-source rationale are documented in the review follow-up. Addressed SDK-pin, SDK-metadata, library-condition and R2R-target threads are resolved; Mono/mixed-runner compatibility threads remain open.

Validation

Windows x64; pytest used this checkout's scripts directory on PYTHONPATH. The complete focused Python suite and serialized harness/Reporting tests were rerun on final review head 9c0b441ad; other results below are recorded across the incremental review revisions. The real net12 rerun used $sdk = (Resolve-Path tools\dotnet\x64-net12-review).Path, an isolated private SDK12 installation subsequently restored to normal tools\dotnet\x64. The net11 auto-acquisition control used the normal installation directory with no private SDK12 present there. Temporary test/control files were cleaned up.

Exact command Actual result
python -m pytest scripts\tests\test_channel_map.py scripts\tests\test_dotnet.py scripts\tests\test_run_performance_job.py scripts\tests\test_blazor_workload.py scripts\tests\test_wasm_coreclr_r2r.py -q 189 passed on final review head 9c0b441ad (44.12s), including SDK-pin restoration on success/failure, mixed-SDK metadata selection, mobile defaults, historical CoreCLR flavor arguments, future library-pin isolation and framework-aware R2R argument selection.
python -m pytest scripts\tests\test_channel_map.py -k 'microbenchmarks_select_intended_packages or next_library_pins' -q 7 passed after the package-only follow-up, including2 additional tests proving future main library pins do not change net11 measurements.
python -m pytest scripts\tests\test_run_performance_job.py -q 11 passed after the R2R follow-up, including4 Windows/Linux x net11/net12 cases preserving the exact interpreter pack/compiler/MSBuild arguments and an explicit missing-target error case.
dotnet test src\tools\ResultsComparer.Tests\ResultsComparer.Tests.csproj --configuration Release --framework net12.0 --nologo --verbosity minimal 24 passed, including nativeaot12 nested ZIP and tar.gz recognition.
dotnet test src\tests\harness\BenchmarkDotNet.Extensions.Tests\BenchmarkDotNet.Extensions.Tests.csproj --configuration Release --framework net12.0 -p:PERFLAB_TARGET_FRAMEWORKS=net12.0 --nologo --verbosity minimal Fresh final-head retry failed CS2012 before tests: concurrent writes to artifacts\obj\Reporting\Release\netstandard2.0\Reporting.dll. The serialized command below passes; this failure is not counted as a passing default parallel build.
dotnet test src\tests\harness\BenchmarkDotNet.Extensions.Tests\BenchmarkDotNet.Extensions.Tests.csproj --configuration Release --framework net12.0 -p:PERFLAB_TARGET_FRAMEWORKS=net12.0 -m:1 --nologo --verbosity minimal 56 passed on final review head, including real-data partition enumeration (2m44s).
dotnet test src\tools\Reporting\Reporting.Tests\Reporting.Tests.csproj --configuration Release --framework net12.0 -m:1 --nologo --verbosity minimal 13 passed on final review head.
python scripts\benchmarks_ci.py --frameworks net11.0 --dotnet-versions 11.0.100-rc.2.26504.105 --build-only --filter '*Perf_Guid.NewGuid*' Fresh automatic SDK11 acquisition, restore and build passed,0 warnings/errors, without supplying SDK12. The original root global.json SHA256 was unchanged afterward.
python scripts\benchmarks_ci.py --frameworks net11.0 --build-only --filter '*Perf_Guid.NewGuid*' SDK resolution selected downloaded 11.0.100, but restore failed NU1102: its net8 harness dependencies request Microsoft.NETCore.App.Ref / Microsoft.WindowsDesktop.App.Ref / Microsoft.AspNetCore.App.Ref 8.0.34, absent from configured feeds. The pinned RC2 control above passes. This is not reported as a successful default net11 restore.
python scripts\benchmarks_ci.py --frameworks net12.0 --dotnet-path $sdk --filter '*Perf_Guid.NewGuid*' --bdn-arguments '--job Dry' Restore, build and execution passed;1 benchmark actually executed. Host and benchmark process both reported runtime 12.0.0-alpha.1.26527.106, SDK 12.0.100-alpha.1.26527.106, BDN649. The repository-configured job ran, not a literal Dry job.
git diff --check Passed before all review commits and after the final 189-case run.

The successful real net12 rerun's installation contained only .NET12 runtimes, so it did not implicitly roll a net11 benchmark forward. This is execution evidence, not a performance comparison or a SAFE verdict on a global BDN update.

Remaining validation limits

  • Full MAUI workload acquisition, application builds, and execution on Android/iOS devices were not run. SDK/target separation, emitted metadata and dependency branch selection have focused regression coverage; the original real MAUI-style setup acquired SDK12 while targeting net11.
  • Actual WASM workload build/execution and R2R-interpreter execution were not run. Passing Python argument/WASM/CoreCLR/R2R tests does not establish new-parser, runtime-pack or all-lane execution compatibility.
  • The full Azure Pipelines/Helix matrix, CertHelper tests, Startup tests and the separate BDN workflow's complete campaign were not run by this session.
  • The net11 control was restored/built, not executed. The default SDK11 feed/reference-pack failure and parallel harness-build collision remain explicit.

Keep MAUI/mobile on net11 with SDK12 and preserve older channel runner versions. Add net12 framework, package, tooling and pipeline support with focused regression coverage.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 27, 2026 21:14

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.

🟡 Changes recommended

Unresolved SDK pinning and framework defaults break supported net11 and Mono WASM workflows, while SDK metadata and mixed-target runner selection remain incorrect.

4 open issues
What changed in this PR

Moves main-channel desktop performance measurements to SDK 12 and net12.0, with compatibility handling for older frameworks and mobile targets.

Changes:

  • Updates SDK pins, framework defaults, scenario coverage, and tooling test targets.
  • Adds a net12-specific BenchmarkDotNet runner, AOT filtering compatibility, and CoreCLR WASM selection.
  • Separates SDK acquisition from target selection and adds regression tests and documentation.
File Description
src/​tools/​ResultsComparer/​Data.cs Recognizes net12 result paths.
src/​tools/​ResultsComparer.Tests/​ResultsComparer.Tests.csproj Targets net12.
src/​tools/​ResultsComparer.Tests/​DataTests.cs Tests extraction across framework versions.
src/​tools/​Reporting/​Reporting.Tests/​Reporting.Tests.csproj Targets net12.
src/​tests/​harness/​BenchmarkDotNet.Extensions.Tests/​BenchmarkDotNet.Extensions.Tests.csproj Tests the net12 runner and benchmarks.
src/​tests/​harness/​BenchmarkDotNet.Extensions.Tests/​AotFilterTests.cs Tests runtime-specific AOT exclusions.
src/​scenarios/​build-common/​Blazor.PackageVersions.props Adds net12 Blazor package selection.
src/​scenarios/​build-common/​Blazor.Directory.Build.targets Advances the framework warning threshold.
src/​harness/​BenchmarkDotNet.Extensions/​BenchmarkDotNet.Extensions.csproj Adds conditional net12 runner dependencies.
src/​harness/​BenchmarkDotNet.Extensions/​AotFilterAttribute.cs Restores AOT exclusion support.
src/​benchmarks/​micro/​README.md Documents net12 execution and compatibility limits.
src/​benchmarks/​micro/​MicroBenchmarks.csproj Adds net12 support and runner selection.
src/​benchmarks/​micro/​libraries/​System.Runtime/​Perf.Uri.cs Strongly types URI argument sources.
src/​benchmarks/​micro/​libraries/​System.Net.Security/​SslStreamTests.Protocols.cs Strongly types TLS argument sources.
scripts/​tests/​test_channel_map.py Adds channel, framework, and package-selection tests.
scripts/​run_performance_job.py Adds independent target selection and mobile fallback.
scripts/​micro_benchmarks.py Selects net12 CoreCLR WASM and rejects Mono WASM.
scripts/​ci_setup.py Adds framework overrides and net11 SDK pin handling.
scripts/​channel_map.py Maps main to SDK/runtime 12.
global.net11.json Preserves the SDK 11 configuration.
global.json Pins the root SDK to version 12.
eng/​Versions.props Defines the net12-specific BenchmarkDotNet version.
eng/​pipelines/​templates/​runtime-perf-job.yml Changes the default framework to net12.
eng/​pipelines/​sdk-perf-jobs.yml Updates SDK installation and tooling test commands.
eng/​performance/​sdk_scenarios.proj Adds net12 to SDK scenarios.
docs/​scenarios-workflow.md Documents desktop and mobile target selection.

Review effort: Balanced

steps: []
variables: []
framework: net11.0 # Specify the appropriate framework when running release branches (ie net6.0 for release/6.0)
framework: net12.0 # Specify the appropriate framework when running release branches (ie net6.0 for release/6.0)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Fixed the Android/iOS part in 6dbc9d5: the runtime wrapper defaults those jobs to net11, keeps desktop/CoreCLR defaults at net12, and still gives an explicit framework override precedence.

The Mono WASM part remains open. Just setting net11 does not establish a coherent match with the SDK/runtime packs in a main-runtime artifact. The latest BDN660 source also explicitly rejects MonoCore/MonoWasm/MonoWasmAot targets >=12. The separate BDN work is evaluating the earlier implementation in #5279 and a staged-update path. I have not disabled any existing lanes or substituted a different measured runtime, and I am not treating passing Python argument tests as actual WASM execution evidence.

Comment thread global.json Resolved
Comment thread scripts/ci_setup.py Resolved
Comment on lines +40 to +41
<PropertyGroup Condition="'$(TargetFramework)' == 'net12.0' or $(TargetFrameworks.Contains('net12.0'))">
<BenchmarkDotNetVersion>$(BenchmarkDotNetNet12Version)</BenchmarkDotNetVersion>

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Agreed; the aggregate property can select the newer runner for the net11 inner build too. The requested separate global BDN update should remove this per-framework runner split altogether, including the version propagation/output-isolation problem, instead of adding more two-runner machinery here. Its owner has the exact extraction boundary and is evaluating compatibility with the historical Mono/WASM configurations. This remains unresolved until that prerequisite exists; the current mixed-target behavior is called out in the draft body.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 27, 2026 22:54
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@LoopedBard3

Copy link
Copy Markdown
Member Author

Follow-up on the two design questions, alongside 6dbc9d5/9c916affb:

run_performance_job alternatives: Earlier changes already separated SDK and target at the channel level: dotnet/performance#5299 set main to SDK12/TFM11, and dotnet/performance#5308 moved the SDK back to11 when that SDK could not target12 yet. The net10 migration and net11 follow-up preserved older global.netN.json configurations. The pipeline/script --framework parameter also predates this PR (dotnet/performance#4156); the missing piece was forwarding the requested target into ci_setup independently of SDK acquisition. Using that override lets desktop main measure12 while mobile main targets11 with SDK12, rather than moving all of main back to11 or adding a second main channel. The small main-mobile fallback keeps existing channel-only MAUI invocations working; explicit overrides and versioned channels still take precedence.

object[] versus typed sources: This was not a cosmetic type-inference rewrite. BDN649 reports BDN1507 for these single-argument sources: ArgumentsSource 'TlsProtocols' yields 'object[]' where 'System.Security.Authentication.SslProtocols' is taken, with the same error for URI string parameters. Returning IEnumerable<SslProtocols> / IEnumerable<string> satisfies that analyzer without changing the protocol/string values, benchmark methods, or benchmark names. These source changes belong with the separate global BDN compatibility update, together with the AOT filter and async-LINQ dependency, not as unrelated net12 cleanup. The extraction boundary is handed off; the original compatibility code remains temporarily until that prerequisite exists.

The net12 WASM case is now after net11 and still passes the requested historical --wasmRuntimeFlavor CoreCLR. NativeAOT12 result recognition and independent net11/net12 library conditions are included. Three addressed review threads are resolved; the Mono-WASM/cohort and mixed-runner threads remain open. No lanes were disabled, and the draft body records actual validation and the remaining integration limits.

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.

🟡 Changes recommended

The new net12.0 default prevents Mono WASM benchmarks from running and leaves the R2R interpreter lane using an incompatible net11 BenchmarkDotNet runner.

4 open issues
2 resolved since last review

Review effort: Balanced

Comment on lines +39 to +40
- ${{ else }}:
- net12.0

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This is the same unresolved Mono-WASM/cohort issue tracked in #5344 (comment). Android/iOS defaults are fixed, but I have not claimed the main Mono lane is fixed merely by generating net11 arguments against an unverified SDK/runtime pack cohort. The separate prerequisite is now evaluating a staged BDN641 update based on #5279. Per the review direction, no existing lanes are disabled or silently substituted while that supported path is established.

Copilot AI balanced review requested due to automatic review settings October 27, 2026 23:00
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

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.

🟡 Changes recommended

Critical net12/BDN649 compatibility gaps cause WASM argument parsing failures, prevent Mono AOT jobs from running, and make the R2R interpreter lane target net11 instead of net12.

6 open issues

Review effort: Balanced

Comment thread eng/Versions.props
<BenchmarkDotNetVersion>0.16.0-nightly.20260801.595</BenchmarkDotNetVersion>
<BenchmarkDotNetVersion Condition="'$(BenchmarkDotNetVersion)' == ''">0.16.0-nightly.20260801.595</BenchmarkDotNetVersion>
<!-- Keep older measurements on their existing runner; net12 requires the new runtime model. -->
<BenchmarkDotNetNet12Version>0.16.0-nightly.20261014.649</BenchmarkDotNetNet12Version>

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Agreed; this stays open with the separate global BDN prerequisite. Its first stage is now BDN641 plus the scoped native MonoAotLLVM compatibility implementation from #5279. The owner is porting the real runtime/generator/toolchain rather than renaming this lane to ordinary monoaot or dropping its compiler-mode/custom-pack inputs. I have not claimed the native Mono lane executes on the published runner as-is. The per-framework runner split and duplicate compatibility code here will be extracted once that prerequisite is established and validated.

elif framework == "net12.0":
if args.wasm_runtime_flavor != 'CoreCLR':
raise ArgumentTypeError('Mono WebAssembly is not supported on net12.0; use net11.0 or --wasm-runtime-flavor CoreCLR')
run_args += ['--runtimes', 'corewasm12.0']

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Agreed that the current published runner alone cannot execute this argument shape; it is an explicit prerequisite, not a passing WASM result. Keeping the public CoreCLR flavor argument is user-directed. The separate global BDN work is adding a shared harness argument bridge, called before Program forwards to BDN, that validates and consumes the historical option while preserving its runtime-selection meaning. It must not silently ignore the flavor or change the older configurations. This thread stays open until that bridge and the supported workload path are validated; the draft body records the current parser/execution limitation.

Copilot AI balanced review requested due to automatic review settings October 27, 2026 23:06

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.

🔵 Needs a closer look

The newer runner rejects unhandled legacy arguments in both native Mono-AOT and net12 CoreCLR WASM jobs, causing argument-parsing failures before benchmarks can run.

5 open issues
1 resolved since last review

Review effort: Balanced

@LoopedBard3

LoopedBard3 commented Oct 27, 2026 •

Copy link
Copy Markdown
Member Author

Local candidate integration is now checked against the exact global641 commit plus migration head 9c0b441ad. These results are for a local composition, not the current published PR head. No global BDN changes were pushed here; this draft still targets main at 9c0b441ad.

The composition removes the migration's595/649 split, runner property/reference propagation and duplicate compatibility, taking the prerequisite's typed async sources, LINQ10.0.9 and AOT/LLVM compatibility unchanged. The SDK-only delta is22files. Its saved patch was replayed against the candidate in an isolated Git index and reproduced the validated tree 23523f5718ed959ebc2785c57c574f0a3e137eaf exactly.

Windows x64, private SDK12.0.100-alpha.1.26527.106; $sdk = (Resolve-Path tools\dotnet\x64).Path, private SDK on PATH and scripts on PYTHONPATH:

Exact command Local composition result
python -m pytest scripts\tests\test_channel_map.py scripts\tests\test_dotnet.py scripts\tests\test_run_performance_job.py scripts\tests\test_blazor_workload.py scripts\tests\test_wasm_coreclr_r2r.py -q 190 passed. All frameworks select the same repository runner without hardcoded595/649 expectations; historical Mono/CoreCLR argument selection is covered.
python scripts\benchmarks_ci.py --frameworks net11.0 net12.0 --dotnet-path $sdk --build-only --filter '*Perf_Guid.NewGuid*' Both frameworks restored/built with global641: 0warnings/errors. Net11 was not executed or implicitly rolled forward.
dotnet clean src\tests\harness\BenchmarkDotNet.Extensions.Tests\BenchmarkDotNet.Extensions.Tests.csproj --configuration Release --framework net12.0 -p:PERFLAB_TARGET_FRAMEWORKS=net12.0 --nologo --verbosity quiet Passed, followed by the default-parallel test below.
dotnet test src\tests\harness\BenchmarkDotNet.Extensions.Tests\BenchmarkDotNet.Extensions.Tests.csproj --configuration Release --framework net12.0 -p:PERFLAB_TARGET_FRAMEWORKS=net12.0 --nologo --verbosity minimal 102 passed; clean parallel build passed without -m:1 or the previously observed Reporting.dll collision.
dotnet test src\tools\Reporting\Reporting.Tests\Reporting.Tests.csproj --configuration Release --framework net12.0 --nologo --verbosity minimal 13 passed.
dotnet test src\tools\ResultsComparer.Tests\ResultsComparer.Tests.csproj --configuration Release --framework net12.0 --nologo --verbosity minimal 24 passed.
python scripts\benchmarks_ci.py --frameworks net12.0 --dotnet-path $sdk --filter '*Perf_Guid.NewGuid*' --bdn-arguments '--job Dry' 1benchmark actually executed on BDN641, host/benchmark runtime12.0.0-alpha.1.26527.106, with only.NET12 runtimes installed. The repository-configured job ran, not a literal Dry job.

Real Program listing checks also accepted historical CoreCLR flavor and Mono12 arguments, while explicitly rejecting conflicting flavor/runtime inputs. Listing returns1 even for the no-runtime-option control because the existing empty-summary exit policy applies; this is parser evidence, not WASM execution. The local SDK patch removes the earlier649-era Python Mono12 rejection rather than preemptively gate the lane; actual matching private Mono12 SDK/runtime/workload-pack execution remains unproven.

Actual MonoAOT/LLVM, WASM, MAUI/device and R2R-interpreter workloads, and full paired/noise validation, remain outstanding. This is not a global SAFE verdict or merge approval. The separate BDN PR does not exist yet, so the published draft retains its explicit temporary overlap and unresolved prerequisite threads. After checking the composition I restored the published source and rebuilt its original net12 configuration successfully; the worktree is clean. The replayable SDK-only patch, exact validation manifest and logs are retained in the owning Copilot session.
Historical cold/custom-cache qualification: The e1 checks above used the existing package-cache state; cleaning build outputs did not isolate HOME's NuGet cache. The prerequisite owner reproduced a generated rebuild/publish mismatch: NuGetPackageRoot selected HOME's default package cache while restore/assets used RestorePackagesPath. Missing annotations/weaver imports left the generated child unwoven despite a woven host. Those original results remain valid, but are not cold/custom-cache Helix execution proof.

Root-fixed SDK12 follow-up: Locally recomposed against edf41b94, including its package-root alignment before Arcade imports. The same Python command above now passes 192 tests, including the two new package-root tests. The SDK-only patch is byte-identical across e1/edf and isolated-index replay reproduces the new composed tree d9e4bc54fdfc3c444e551690dbaa2af481276d76.

An isolated net12 CoreRun publish-path diagnostic driven by the .NET CLI host then completed with exit 0 and 4 actual workloads. Restore used a new private package cache; launch used a private fallback containing only junctions to that cache's non-BDN packages, with 0 BenchmarkDotNet packages. Removing exactly the two owned TFM-less DLLs after the woven host build forced generated recompilation rather than reusing a stale woven binary. Raw PE metadata confirms NoInlining flags 8 on both host and child, with distinct MVIDs a1cb3867-f782-47db-adf5-0a61a76738de and 90c7d8a0-b65d-47ad-8d77-af6c75dcb153; no no-workload error occurred. Logs, raw metadata, generated child and restore/build/publish binlogs are retained.

This closes the local SDK12 custom-root diagnostic gap for the edf composition only. It is not actual Mono execution or a global SAFE verdict. Actual Mono/WASM/device/cohort and paired/noise limitations above remain. Published source/index are restored cleanly; rebuilding the original published net12/BDN649 configuration passed with 0 warnings/errors. No global patch was pushed into this draft, no lanes were removed or measured runtimes substituted, and publication of the SDK-only layer still awaits the separately owned BDN prerequisite.

Rebased prerequisite follow-up (October 28): Fetched canonical main 8588cdaa6 and recomposed the SDK-only layer onto 4a7eb1f99. This includes upstream public-GA downlevel targeting-pack provisioning. Two import/test insertion conflicts were resolved by retaining both sets; the upstream provisioning function ASTs, target imports and inherited pool matrix are unchanged. The SDK delta remains 22 files, with no BDN reimplementation or migration-owned ACES changes. Saved patch replay reproduces tree a0ceba39247cb843233ed486327deb31d7ad8b45.

The same commands in the table above now pass 206 Python / 102 harness / 13 Reporting / 24 ResultsComparer tests, both net11/net12 builds with 0 warnings/errors, and 1 actual net12 Guid benchmark on BDN 0.16.0-nightly.20260923.641, SDK 12.0.100-alpha.1.26527.106, runtime 12.0.0-alpha.1.26527.106 (only .NET 12 runtimes installed). The updated isolated regression script also passed end-to-end without helper edits: 4 actual publish-path diagnostic workloads, exit 0, host/child flags 8/8, distinct MVIDs and 0 fallback BDN packages. This run additionally used private HTTP/plugin/scratch caches.

These are local SDK integration results, not actual Mono/WASM/device/cohort or paired/noise SAFE evidence. The separately owned campaign remains open. Published source/index are again restored cleanly at 9c0b441ad and the original published net12/BDN649 build passed with 0 warnings/errors. This draft is unchanged; SDK-only publication remains deferred pending the separate BDN prerequisite.

Enum compatibility follow-up: Recomposition onto eabc68fa applies the identical SDK-only patch without conflicts and reproduces tree a07dee599a1d9cc9bcd36220c51e42a3e76e5059. The prerequisite's two attribute casts are retained unchanged: existing Colors parameter types/generic specialization and values 6/42 are preserved, not replaced with DayOfWeek parameters.

The full net12 harness command above now passes 104 tests. Additional command python scripts\benchmarks_ci.py --frameworks net12.0 --dotnet-path $sdk --filter '*Perf_Enum.InterpolateIntoSpan_NonFlags*' '*Perf_Enum.InterpolateIntoStringBuilder_NonFlags*' --bdn-arguments '--job Dry' executed all 4 enum cases on BDN641/runtime 12.0.0-alpha.1.26527.106, without CS0266 or no-workload errors. The repository-configured job ran, not literal Dry. Prior 4a results remain historical, not rerun claims. Published source/index are restored cleanly and the original net12/BDN649 rebuild passed; no integration push or global SAFE claim.

WASM reference-gather follow-up: Exact 3c025ca8 composes without conflicts using the identical SDK-only patch; replay reproduces tree 32e0cfca7b26ea8b07d584face9a2f133d41917e. The prerequisite's guard, tests and final publish settings are retained unchanged. The same five-suite Python command above now passes 245 tests, including gather true/false, runtime-flavor, per-assembly/composite and final R2R/trimming/WebCIL contracts. The same net12 Guid command executes 1 actual CoreCLR benchmark on BDN641/runtime 12.0.0-alpha.1.26527.106. This is not actual WASM/V8 workload proof or a SAFE verdict; prior harness/cold-root results remain historical, and no global patch is pushed into this draft.

Published source/index are restored cleanly at 9c0b441ad; rebuilding the original published net12/BDN649 configuration passed with 0 warnings/errors. The replayable SDK-only patch and exact validation manifest/logs are preserved; SDK-only publication remains deferred to the separate BDN prerequisite.

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.

2 participants