diff --git a/.bazelignore b/.bazelignore new file mode 100644 index 0000000000..c4e2cfdb2f --- /dev/null +++ b/.bazelignore @@ -0,0 +1,4 @@ +.dotnet +.packages +artifacts +packages diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 0000000000..9e29df640d --- /dev/null +++ b/.bazelrc @@ -0,0 +1,11 @@ +startup --windows_enable_symlinks +common --enable_bzlmod +common --enable_runfiles +common --incompatible_strict_action_env +build --@rules_dotnet//dotnet:target_framework=net10.0 +# Preserve SDK-style transitive ProjectReference/PackageReference compilation. +build --@rules_dotnet//dotnet/settings:strict_deps=false +build --verbose_failures +test --test_output=errors + +try-import %workspace%/.bazelrc.local diff --git a/.bazelversion b/.bazelversion new file mode 100644 index 0000000000..44931da266 --- /dev/null +++ b/.bazelversion @@ -0,0 +1 @@ +9.1.1 diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml new file mode 100644 index 0000000000..946f02d59b --- /dev/null +++ b/.github/workflows/bazel.yml @@ -0,0 +1,63 @@ +name: Experimental Bazel build + +on: + pull_request: + paths: + - '.bazel*' + - 'BUILD.bazel' + - 'MODULE.bazel*' + - 'Directory.Packages.props' + - 'eng/bazel.ps1' + - 'eng/bazel/**' + - 'eng/Versions.props' + - '.editorconfig' + - 'src/**' + - 'test/**' + - 'samples/public/mstest-runner/Simple1/**' + - 'samples/public/TestingPlatformExamples/TestingPlatformExplorer/**' + - '.github/workflows/bazel.yml' + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: bazel-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + baseline: + name: Native Bazel matrix (${{ matrix.os }}) + strategy: + fail-fast: false + matrix: + os: [windows-latest, ubuntu-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 30 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - name: Build, test, and validate native consumers + shell: pwsh + run: .\eng\bazel\validate.ps1 + - name: Validate native packages and self-contained runtimes + shell: pwsh + run: .\eng\bazel\validate-packages.ps1 + - name: Preserve native build evidence + if: always() + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 + with: + name: bazel-${{ matrix.os }} + path: | + artifacts/bazel-validation/ + artifacts/bazel-package-validation/**/*.log + artifacts/bazel-package-validation/**/*.json + artifacts/bazel-package-validation/**/*.binlog + artifacts/bazel-package-validation/**/*.trx + artifacts/bazel-package-validation/**/feed/*.nupkg + if-no-files-found: warn + - name: Stop the worktree's Bazel server + if: always() + shell: pwsh + run: .\eng\bazel.ps1 shutdown diff --git a/.gitignore b/.gitignore index 2c13d6cc2d..dfafde2105 100644 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,10 @@ ehthumbs.db /.dotnet/ /TestAssets/ +# Bazel output symlinks/junctions and local overrides +/bazel-*/ +/.bazelrc.local + # Lean build artifacts .lake/ diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000000..4251bd8993 --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,290 @@ +load("@rules_dotnet//dotnet:defs.bzl", "csharp_binary") +load("//eng/bazel:analyzer-packages.bzl", "analyzer_packages") +load("//eng/bazel:analyzer-tests.bzl", "analyzer_unit_tests") +load("//eng/bazel:analyzers.bzl", "analyzer_libraries") +load("//eng/bazel:compatibility-tests.bzl", "compatibility_reference_tests") +load("//eng/bazel:compatibility.bzl", "compatibility_libraries") +load("//eng/bazel:defs.bzl", "testfx_binary", "testfx_matrix", "testfx_test") +load("//eng/bazel:extension-tests.bzl", "extension_unit_tests") +load("//eng/bazel:extensions.bzl", "extension_libraries") +load("//eng/bazel:extra-tests.bzl", "extra_unit_tests") +load("//eng/bazel:mstest-packages.bzl", "native_mstest_packages") +load("//eng/bazel:mstest.bzl", "mstest_libraries") +load("//eng/bazel:packages.bzl", "native_packages") +load("//eng/bazel:platform.bzl", "platform_libraries") +load("//eng/bazel:reference-alias-tests.bzl", "reference_alias_tests") +load("//eng/bazel:sdk-packages.bzl", "sdk_packages") +load("//eng/bazel:server-client.bzl", "server_client_library") +load("//eng/bazel:samples.bzl", "portable_samples") +load("//eng/bazel:tests.bzl", "unit_tests") +load("//eng/bazel:windows.bzl", "windows_libraries") +load("//eng/bazel/windows:asset_selection_tests.bzl", "windows_asset_selection_tests") +load("//eng/bazel/windows:targeting_tests.bzl", "windows_targeting_test") + +package(default_visibility = ["//visibility:public"]) + +exports_files(["LICENSE"]) + +platform_libraries() + +mstest_libraries() + +extension_libraries() + +analyzer_libraries() + +analyzer_packages() + +server_client_library() + +compatibility_libraries() + +compatibility_reference_tests() + +unit_tests() + +extra_unit_tests() + +extension_unit_tests() + +analyzer_unit_tests() + +native_packages() + +portable_samples() + +reference_alias_tests() + +native_mstest_packages() + +sdk_packages() + +windows_libraries() + +windows_asset_selection_tests() + +windows_targeting_test( + name = "windows_targeting_test", + size = "small", +) + +filegroup( + name = "managed", + srcs = [ + ":adapter", + ":ai", + ":analyzers", + ":assert_generator", + ":azdo_report", + ":azure_foundry", + ":codefixes", + ":configuration", + ":crashdump", + ":ctrf", + ":framework", + ":framework_extensions", + ":github_report", + ":globalconfigs_generator", + ":hangdump", + ":hosting", + ":hotreload", + ":html", + ":junit", + ":logging", + ":msbuild_extension", + ":mstest_generator", + ":mstest_hosting", + ":opentelemetry", + ":packaged_app", + ":platform", + ":platform_msbuild", + ":platform_services", + ":retry", + ":server_client", + ":telemetry", + ":trx", + ":trx_abstractions", + ":video", + ":vstest_bridge", + ], +) + +testfx_matrix( + name = "managed_all", + target = ":managed", +) + +# Short executable labels avoid Windows' doubled runfiles batch-file paths. +# The other explorer cases intentionally demonstrate failures and skips. +csharp_binary( + name = "explorer_released", + srcs = ["//samples/public/TestingPlatformExamples/TestingPlatformExplorer:sources"], + out = "TestingPlatformExplorer", + appsetting_files = ["//samples/public/TestingPlatformExamples/TestingPlatformExplorer:TestingPlatformExplorer.testingplatformconfig.json"], + generate_documentation_file = False, + langversion = "preview", + nullable = "enable", + target_frameworks = ["net10.0"], + deps = [ + "@paket.main//microsoft.testing.extensions.trxreport", + "@paket.main//microsoft.testing.extensions.trxreport.abstractions", + "@paket.main//microsoft.testing.platform", + ], +) + +csharp_binary( + name = "explorer", + srcs = ["//samples/public/TestingPlatformExamples/TestingPlatformExplorer:sources"], + out = "TestingPlatformExplorer", + appsetting_files = ["//samples/public/TestingPlatformExamples/TestingPlatformExplorer:TestingPlatformExplorer.testingplatformconfig.json"], + generate_documentation_file = False, + langversion = "preview", + nullable = "enable", + target_frameworks = ["net10.0"], + deps = [ + ":platform", + ":trx", + ":trx_abstractions", + ], +) + +testfx_test( + name = "explorer_test", + size = "small", + args = [ + "--filter-uid", + "TestingPlatformExplorer.UnitTests.SomeTests.TestMethod1", + ], + binary = ":explorer", +) + +testfx_test( + name = "explorer_released_test", + size = "small", + args = [ + "--filter-uid", + "TestingPlatformExplorer.UnitTests.SomeTests.TestMethod1", + ], + binary = ":explorer_released", +) + +testfx_binary( + name = "simple1", + defines = ["TESTFX_REPORTS"], + generate_documentation_file = False, + linked_srcs = ["//eng/bazel:TestMain.cs"], + polyfills = False, + project = "samples/public/mstest-runner/Simple1", + deps = [ + ":adapter", + ":ctrf", + ":framework", + ":framework_extensions", + ":html", + ":junit", + ":trx", + ], +) + +testfx_test( + name = "simple1_test", + size = "small", + args = [ + "--minimum-expected-tests", + "1", + ], + binary = ":simple1", +) + +testfx_binary( + name = "framework_tests_app", + assembly_name = "Microsoft.VisualStudio.TestPlatform.TestFramework.UnitTests", + defines = ["TESTFX_INTERNAL_TESTS"], + exclude = ["test/UnitTests/TestFramework.UnitTests/Program.cs"], + generate_documentation_file = False, + linked_srcs = [ + "//eng/bazel:TestMain.cs", + "test/Utilities/DiagnosticAssertionObserver.cs", + ], + project = "test/UnitTests/TestFramework.UnitTests", + deps = [ + ":assert_generator", + ":framework", + ":framework_extensions", + ":internal_test_framework", + ":trx", + "@paket.source//awesomeassertions", + "@paket.source//moq", + "@paket.generator//microsoft.codeanalysis.csharp", + ], +) + +testfx_test( + name = "framework_tests", + size = "medium", + args = [ + "--minimum-expected-tests", + "1", + ], + binary = ":framework_tests_app", +) + +testfx_test( + name = "explorer_failure_probe", + size = "small", + args = [ + "--filter-uid", + "TestingPlatformExplorer.UnitTests.SomeTests.TestMethod2", + ], + binary = ":explorer", + tags = ["manual"], +) + +_PORTABLE_BASELINE_TESTS = [ + ":adapter_tests", + ":build_tools_tests", + ":explorer_released_test", + ":explorer_test", + ":framework_tests", + ":simple1_test", +] + +_PORTABLE_CONTRACT_TESTS = [ + ":protocol_contract_tests", + ":source_generation_tests", + ":vstest_bridge_tests", +] + +test_suite( + name = "baseline_tests", + tests = _PORTABLE_BASELINE_TESTS + [":platform_services_tests"], +) + +test_suite( + name = "portable_tests", + tests = [":baseline_tests"] + _PORTABLE_CONTRACT_TESTS, +) + +test_suite( + name = "portable_non_windows_tests", + tests = _PORTABLE_BASELINE_TESTS + _PORTABLE_CONTRACT_TESTS, +) + +test_suite( + name = "all_unit_tests", + tests = [ + ":adapter_tests", + ":analyzer_tests", + ":extension_tests", + ":framework_tests", + ":msbuild_tests", + ":platform_services_tests", + ":platform_tests", + ":protocol_contract_tests", + ":self_real_tests", + ":server_client_tests", + ":source_generation_tests", + ":terminal_contract_tests", + ":vstest_bridge_tests", + ], +) diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 0000000000..21514d1ad1 --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,81 @@ +module(name = "testfx") + +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "rules_dotnet", version = "0.0.0") +archive_override( + module_name = "rules_dotnet", + integrity = "sha256-oY8nQGMi4sCTuvtO3Cr3Djw5vaxu8ggOHSJEoX3rN/s=", + patch_strip = 1, + patches = [ + "//eng/bazel/patches:testfx-compatibility.patch", + "//eng/bazel/patches:windows-targeting.patch", + "//eng/bazel/patches:compatibility-package-references.patch", + "//eng/bazel/patches:reference-aliases.patch", + "//eng/bazel/patches:public-signing.patch", + "//eng/bazel/patches:testfx-tests-paket-integrity.patch", + "//eng/bazel/patches:testfx-source-pathmap.patch", + ], + strip_prefix = "rules_dotnet-add5c92b30888a70aa951de1744a770b8f8ef436", + urls = ["https://github.com/bazel-contrib/rules_dotnet/archive/add5c92b30888a70aa951de1744a770b8f8ef436.zip"], +) + +dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet") +dotnet.toolchain(dotnet_version = "11.0.100-rc.3.26522.148") +use_repo(dotnet, "dotnet_toolchains") + +register_toolchains("@dotnet_toolchains//:all") + +http_file = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") + +http_file( + name = "testfx_public_key", + downloaded_file_path = "MSFT.snk", + sha256 = "933598639cbaa1de502f80d2fd1db78f13c8d7bb64a5fdc1bc73ac0b5ce4f5ca", + urls = ["https://raw.githubusercontent.com/dotnet/arcade/4163bf82769cbb7f0a6e1e02f85090d30b53e988/src/Microsoft.DotNet.Arcade.Sdk/tools/snk/MSFT.snk"], +) + +# Opt-in exact global.json compiler and execution runtime; the published SDK above +# still owns target/RID packs. No fabricated release metadata or SDK substitution. +# Select with --extra_toolchains=@dotnet_engineering_toolchains//:all. +engineering = use_extension("//eng/bazel:engineering-sdk.bzl", "engineering_sdk") +use_repo(engineering, "dotnet_engineering_toolchains") + +# Bootstrap the resolver without requiring dotnet tool restore or a machine SDK. +nuget_archive = use_repo_rule("@rules_dotnet//dotnet:defs.bzl", "nuget_archive") + +nuget_archive( + name = "paket_cli", + id = "paket", + sha512 = "sha512-i6fCViUL3/f8FaHPMknsee2UL67PGMmYKKalq6qNd2k6CG4DbzFtG6bSGlAWkFRx4/92U/NRNgxEYFPSasVWsQ==", + sources = ["https://api.nuget.org/v3/index.json"], + version = "11.0.1", +) + +paket = use_extension("@rules_dotnet//dotnet:paket.bzl", "paket") +paket.parse( + dependencies = "//eng/bazel:paket.dependencies", + lock = "//eng/bazel:paket.lock", +) +use_repo(paket, "paket.analyzers", "paket.generator", "paket.main", "paket.source") + +paket.parse( + dependencies = "//eng/bazel/compatibility:paket.dependencies", + groups = [ + "compatibility", + "compatibility_extensions", + "compatibility_hosting", + "compatibility_mstest", + ], + lock = "//eng/bazel/compatibility:paket.lock", +) +use_repo(paket, "paket.compatibility", "paket.compatibility_extensions", "paket.compatibility_hosting", "paket.compatibility_mstest") + +paket.parse( + dependencies = "//eng/bazel/tests-support:paket.dependencies", + integrity_file = "//eng/bazel/tests-support:package-integrity.json", + lock = "//eng/bazel/tests-support:paket.lock", + repo_prefix = "testsupport.", +) +use_repo(paket, "testsupport.analyzers", "testsupport.benchmarks", "testsupport.main") + +include("//eng/bazel/windows:windows.MODULE.bazel") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock new file mode 100644 index 0000000000..e9aaf56412 --- /dev/null +++ b/MODULE.bazel.lock @@ -0,0 +1,1199 @@ +{ + "lockFileVersion": 26, + "registryFileHashes": { + "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", + "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", + "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589", + "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", + "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", + "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/MODULE.bazel": "73939767a4686cd9a520d16af5ab440071ed75cec1a876bf2fcfaf1f71987a16", + "https://bcr.bazel.build/modules/abseil-cpp/20250127.1/MODULE.bazel": "c4a89e7ceb9bf1e25cf84a9f830ff6b817b72874088bf5141b314726e46a57c1", + "https://bcr.bazel.build/modules/abseil-cpp/20250512.1/MODULE.bazel": "d209fdb6f36ffaf61c509fcc81b19e81b411a999a934a032e10cd009a0226215", + "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/MODULE.bazel": "51f2312901470cdab0dbdf3b88c40cd21c62a7ed58a3de45b365ddc5b11bcab2", + "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/source.json": "cea3901d7e299da7320700abbaafe57a65d039f10d0d7ea601c4a66938ea4b0c", + "https://bcr.bazel.build/modules/apple_support/1.11.1/MODULE.bazel": "1843d7cd8a58369a444fc6000e7304425fba600ff641592161d9f15b179fb896", + "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85", + "https://bcr.bazel.build/modules/apple_support/1.21.0/MODULE.bazel": "ac1824ed5edf17dee2fdd4927ada30c9f8c3b520be1b5fd02a5da15bc10bff3e", + "https://bcr.bazel.build/modules/apple_support/1.21.1/MODULE.bazel": "5809fa3efab15d1f3c3c635af6974044bac8a4919c62238cce06acee8a8c11f1", + "https://bcr.bazel.build/modules/apple_support/1.24.2/MODULE.bazel": "0e62471818affb9f0b26f128831d5c40b074d32e6dda5a0d3852847215a41ca4", + "https://bcr.bazel.build/modules/apple_support/1.24.2/source.json": "2c22c9827093250406c5568da6c54e6fdf0ef06238def3d99c71b12feb057a8d", + "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", + "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101", + "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", + "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", + "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", + "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", + "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", + "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", + "https://bcr.bazel.build/modules/bazel_features/1.23.0/MODULE.bazel": "fd1ac84bc4e97a5a0816b7fd7d4d4f6d837b0047cf4cbd81652d616af3a6591a", + "https://bcr.bazel.build/modules/bazel_features/1.27.0/MODULE.bazel": "621eeee06c4458a9121d1f104efb80f39d34deff4984e778359c60eaf1a8cb65", + "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d", + "https://bcr.bazel.build/modules/bazel_features/1.3.0/MODULE.bazel": "cdcafe83ec318cda34e02948e81d790aab8df7a929cec6f6969f13a489ccecd9", + "https://bcr.bazel.build/modules/bazel_features/1.30.0/MODULE.bazel": "a14b62d05969a293b80257e72e597c2da7f717e1e69fa8b339703ed6731bec87", + "https://bcr.bazel.build/modules/bazel_features/1.33.0/MODULE.bazel": "8b8dc9d2a4c88609409c3191165bccec0e4cb044cd7a72ccbe826583303459f6", + "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", + "https://bcr.bazel.build/modules/bazel_features/1.42.1/MODULE.bazel": "275a59b5406ff18c01739860aa70ad7ccb3cfb474579411decca11c93b951080", + "https://bcr.bazel.build/modules/bazel_features/1.47.0/MODULE.bazel": "e34df3cb35b1684cfa69923a61ae3803595babd3942cd306a488d51400886b30", + "https://bcr.bazel.build/modules/bazel_features/1.47.0/source.json": "4ba0b5138327f2d73352a51547a4e49a0a828ef400e046b15334d8905bf6b7ff", + "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b", + "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", + "https://bcr.bazel.build/modules/bazel_lib/3.0.0/MODULE.bazel": "22b70b80ac89ad3f3772526cd9feee2fa412c2b01933fea7ed13238a448d370d", + "https://bcr.bazel.build/modules/bazel_lib/3.0.0/source.json": "895f21909c6fba01d7c17914bb6c8e135982275a1b18cdaa4e62272217ef1751", + "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", + "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", + "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686", + "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", + "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", + "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d", + "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651", + "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138", + "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", + "https://bcr.bazel.build/modules/bazel_skylib/1.8.0/MODULE.bazel": "2fb3fb53675f6adfc1ca5bfbd5cfb655ae350fba4706d924a8ec7e3ba945671c", + "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/MODULE.bazel": "88ade7293becda963e0e3ea33e7d54d3425127e0a326e0d17da085a5f1f03ff6", + "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/MODULE.bazel": "69ad6927098316848b34a9142bcc975e018ba27f08c4ff403f50c1b6e646ca67", + "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/source.json": "34a3c8bcf233b835eb74be9d628899bb32999d3e0eadef1947a0a562a2b16ffb", + "https://bcr.bazel.build/modules/buildozer/8.5.1/MODULE.bazel": "a35d9561b3fc5b18797c330793e99e3b834a473d5fbd3d7d7634aafc9bdb6f8f", + "https://bcr.bazel.build/modules/buildozer/8.5.1/source.json": "e3386e6ff4529f2442800dee47ad28d3e6487f36a1f75ae39ae56c70f0cd2fbd", + "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", + "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", + "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", + "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", + "https://bcr.bazel.build/modules/googletest/1.15.2/MODULE.bazel": "6de1edc1d26cafb0ea1a6ab3f4d4192d91a312fd2d360b63adaa213cd00b2108", + "https://bcr.bazel.build/modules/googletest/1.17.0/MODULE.bazel": "dbec758171594a705933a29fcf69293d2468c49ec1f2ebca65c36f504d72df46", + "https://bcr.bazel.build/modules/googletest/1.17.0/source.json": "38e4454b25fc30f15439c0378e57909ab1fd0a443158aa35aec685da727cd713", + "https://bcr.bazel.build/modules/icu/78.2.bcr.2/MODULE.bazel": "4517d874eb0125e075b28aed61e22b434e2c47602a5356a5e2045038d66ef460", + "https://bcr.bazel.build/modules/icu/78.2.bcr.2/source.json": "fad8fbd03bbfe02245d6b4183b9ce23e76f9c1670ffa6e3878dd089b4bccd9c9", + "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", + "https://bcr.bazel.build/modules/jsoncpp/1.9.6/MODULE.bazel": "2f8d20d3b7d54143213c4dfc3d98225c42de7d666011528dc8fe91591e2e17b0", + "https://bcr.bazel.build/modules/jsoncpp/1.9.6/source.json": "a04756d367a2126c3541682864ecec52f92cdee80a35735a3cb249ce015ca000", + "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", + "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/MODULE.bazel": "6f7b417dcc794d9add9e556673ad25cb3ba835224290f4f848f8e2db1e1fca74", + "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/source.json": "f448c6e8963fdfa7eb831457df83ad63d3d6355018f6574fb017e8169deb43a9", + "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", + "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", + "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", + "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", + "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", + "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", + "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", + "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", + "https://bcr.bazel.build/modules/platforms/1.0.0/MODULE.bazel": "f05feb42b48f1b3c225e4ccf351f367be0371411a803198ec34a389fb22aa580", + "https://bcr.bazel.build/modules/platforms/1.0.0/source.json": "f4ff1fd412e0246fd38c82328eb209130ead81d62dcd5a9e40910f867f733d96", + "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", + "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", + "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", + "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", + "https://bcr.bazel.build/modules/protobuf/29.1/MODULE.bazel": "557c3457560ff49e122ed76c0bc3397a64af9574691cb8201b4e46d4ab2ecb95", + "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", + "https://bcr.bazel.build/modules/protobuf/32.1/MODULE.bazel": "89cd2866a9cb07fee9ff74c41ceace11554f32e0d849de4e23ac55515cfada4d", + "https://bcr.bazel.build/modules/protobuf/33.4/MODULE.bazel": "114775b816b38b6d0ca620450d6b02550c60ceedfdc8d9a229833b34a223dc42", + "https://bcr.bazel.build/modules/protobuf/33.4/source.json": "555f8686b4c7d6b5ba731fbea13bf656b4bfd9a7ff629c1d9d3f6e1d6155de79", + "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", + "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34", + "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/source.json": "6900fdc8a9e95866b8c0d4ad4aba4d4236317b5c1cd04c502df3f0d33afed680", + "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", + "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/MODULE.bazel": "b4963dda9b31080be1905ef085ecd7dd6cd47c05c79b9cdf83ade83ab2ab271a", + "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/source.json": "2ff292be6ef3340325ce8a045ecc326e92cbfab47c7cbab4bd85d28971b97ac4", + "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa", + "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", + "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", + "https://bcr.bazel.build/modules/rules_apple/3.16.0/MODULE.bazel": "0d1caf0b8375942ce98ea944be754a18874041e4e0459401d925577624d3a54a", + "https://bcr.bazel.build/modules/rules_apple/4.1.0/MODULE.bazel": "76e10fd4a48038d3fc7c5dc6e63b7063bbf5304a2e3bd42edda6ec660eebea68", + "https://bcr.bazel.build/modules/rules_apple/4.1.0/source.json": "8ee81e1708756f81b343a5eb2b2f0b953f1d25c4ab3d4a68dc02754872e80715", + "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", + "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", + "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", + "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", + "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87", + "https://bcr.bazel.build/modules/rules_cc/0.0.17/MODULE.bazel": "2ae1d8f4238ec67d7185d8861cb0a2cdf4bc608697c331b95bf990e69b62e64a", + "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", + "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", + "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", + "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", + "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513", + "https://bcr.bazel.build/modules/rules_cc/0.1.2/MODULE.bazel": "557ddc3a96858ec0d465a87c0a931054d7dcfd6583af2c7ed3baf494407fd8d0", + "https://bcr.bazel.build/modules/rules_cc/0.1.5/MODULE.bazel": "88dfc9361e8b5ae1008ac38f7cdfd45ad738e4fa676a3ad67d19204f045a1fd8", + "https://bcr.bazel.build/modules/rules_cc/0.2.0/MODULE.bazel": "b5c17f90458caae90d2ccd114c81970062946f49f355610ed89bebf954f5783c", + "https://bcr.bazel.build/modules/rules_cc/0.2.13/MODULE.bazel": "eecdd666eda6be16a8d9dc15e44b5c75133405e820f620a234acc4b1fdc5aa37", + "https://bcr.bazel.build/modules/rules_cc/0.2.17/MODULE.bazel": "1849602c86cb60da8613d2de887f9566a6d354a6df6d7009f9d04a14402f9a84", + "https://bcr.bazel.build/modules/rules_cc/0.2.19/MODULE.bazel": "d5e0f05b63273281a16654eb6b1a8742a75ec153ac8b4f0419949d6e401e46f0", + "https://bcr.bazel.build/modules/rules_cc/0.2.19/source.json": "1ef48cdbd7aa6238015189b582d3d74ef0cbea3cb3e2cb259d782463f570c14a", + "https://bcr.bazel.build/modules/rules_cc/0.2.8/MODULE.bazel": "f1df20f0bf22c28192a794f29b501ee2018fa37a3862a1a2132ae2940a23a642", + "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", + "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", + "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", + "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", + "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", + "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", + "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", + "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", + "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", + "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017", + "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939", + "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2", + "https://bcr.bazel.build/modules/rules_java/9.1.0/MODULE.bazel": "ee63f27e36a3fada80342869361182f120a9819c74320e8e65b1e04ba0cd7a9d", + "https://bcr.bazel.build/modules/rules_java/9.1.0/source.json": "da589573c1dee2c9ac4a568b301269a2e8191110ff0345c1a959fa7ea6c4dfd6", + "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", + "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", + "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", + "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", + "https://bcr.bazel.build/modules/rules_jvm_external/6.7/MODULE.bazel": "e717beabc4d091ecb2c803c2d341b88590e9116b8bf7947915eeb33aab4f96dd", + "https://bcr.bazel.build/modules/rules_jvm_external/6.7/source.json": "5426f412d0a7fc6b611643376c7e4a82dec991491b9ce5cb1cfdd25fe2e92be4", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", + "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", + "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", + "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", + "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", + "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", + "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", + "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", + "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483", + "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", + "https://bcr.bazel.build/modules/rules_proto/7.1.0/MODULE.bazel": "002d62d9108f75bb807cd56245d45648f38275cb3a99dcd45dfb864c5d74cb96", + "https://bcr.bazel.build/modules/rules_proto/7.1.0/source.json": "39f89066c12c24097854e8f57ab8558929f9c8d474d34b2c00ac04630ad8940e", + "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", + "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", + "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", + "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", + "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", + "https://bcr.bazel.build/modules/rules_python/0.33.2/MODULE.bazel": "3e036c4ad8d804a4dad897d333d8dce200d943df4827cb849840055be8d2e937", + "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", + "https://bcr.bazel.build/modules/rules_python/1.3.0/MODULE.bazel": "8361d57eafb67c09b75bf4bbe6be360e1b8f4f18118ab48037f2bd50aa2ccb13", + "https://bcr.bazel.build/modules/rules_python/1.4.1/MODULE.bazel": "8991ad45bdc25018301d6b7e1d3626afc3c8af8aaf4bc04f23d0b99c938b73a6", + "https://bcr.bazel.build/modules/rules_python/1.6.0/MODULE.bazel": "7e04ad8f8d5bea40451cf80b1bd8262552aa73f841415d20db96b7241bd027d8", + "https://bcr.bazel.build/modules/rules_python/1.7.0/MODULE.bazel": "d01f995ecd137abf30238ad9ce97f8fc3ac57289c8b24bd0bf53324d937a14f8", + "https://bcr.bazel.build/modules/rules_python/1.7.0/source.json": "028a084b65dcf8f4dc4f82f8778dbe65df133f234b316828a82e060d81bdce32", + "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", + "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592", + "https://bcr.bazel.build/modules/rules_shell/0.5.0/MODULE.bazel": "8c8447370594d45539f66858b602b0bb2cb2d3401a4ebb9ad25830c59c0f366d", + "https://bcr.bazel.build/modules/rules_shell/0.6.1/MODULE.bazel": "72e76b0eea4e81611ef5452aa82b3da34caca0c8b7b5c0c9584338aa93bae26b", + "https://bcr.bazel.build/modules/rules_shell/0.6.1/source.json": "20ec05cd5e592055e214b2da8ccb283c7f2a421ea0dc2acbf1aa792e11c03d0c", + "https://bcr.bazel.build/modules/rules_swift/1.16.0/MODULE.bazel": "4a09f199545a60d09895e8281362b1ff3bb08bbde69c6fc87aff5b92fcc916ca", + "https://bcr.bazel.build/modules/rules_swift/2.1.1/MODULE.bazel": "494900a80f944fc7aa61500c2073d9729dff0b764f0e89b824eb746959bc1046", + "https://bcr.bazel.build/modules/rules_swift/2.4.0/MODULE.bazel": "1639617eb1ede28d774d967a738b4a68b0accb40650beadb57c21846beab5efd", + "https://bcr.bazel.build/modules/rules_swift/3.1.2/MODULE.bazel": "72c8f5cf9d26427cee6c76c8e3853eb46ce6b0412a081b2b6db6e8ad56267400", + "https://bcr.bazel.build/modules/rules_swift/3.1.2/source.json": "e85761f3098a6faf40b8187695e3de6d97944e98abd0d8ce579cb2daf6319a66", + "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", + "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", + "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", + "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", + "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/MODULE.bazel": "5e463fbfba7b1701d957555ed45097d7f984211330106ccd1352c6e0af0dcf91", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.2/MODULE.bazel": "75aab2373a4bbe2a1260b9bf2a1ebbdbf872d3bd36f80bff058dccd82e89422f", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.2/source.json": "5fba48bbe0ba48761f9e9f75f92876cafb5d07c0ce059cc7a8027416de94a05b", + "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/MODULE.bazel": "eec517b5bbe5492629466e11dae908d043364302283de25581e3eb944326c4ca", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/source.json": "22bc55c47af97246cfc093d0acf683a7869377de362b5d1c552c2c2e16b7a806", + "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" + }, + "selectedYankedVersions": {}, + "moduleExtensions": { + "@@pybind11_bazel+//:internal_configure.bzl%internal_configure_extension": { + "general": { + "bzlTransitiveDigest": "b+RP7Sgl8KN0VHamrgTqzGLuYPcQ/Mo4ptNkkHUIIlA=", + "usagesDigest": "D1r3lfzMuUBFxgG8V6o0bQTLMk3GkaGOaPzw53wrwyw=", + "recordedInputs": [ + "REPO_MAPPING:pybind11_bazel+,bazel_tools bazel_tools", + "FILE:@@pybind11_bazel+//MODULE.bazel e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34" + ], + "generatedRepoSpecs": { + "pybind11": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file": "@@pybind11_bazel+//:pybind11-BUILD.bazel", + "strip_prefix": "pybind11-2.12.0", + "urls": [ + "https://github.com/pybind/pybind11/archive/v2.12.0.zip" + ] + } + } + } + } + }, + "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { + "general": { + "bzlTransitiveDigest": "Ga4z8lQy1YQ5rAMy+dOl0dqcCEBnYNCXku8x3YQmDZI=", + "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", + "recordedInputs": [ + "REPO_MAPPING:rules_kotlin+,bazel_tools bazel_tools" + ], + "generatedRepoSpecs": { + "com_github_jetbrains_kotlin_git": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository", + "attributes": { + "urls": [ + "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" + ], + "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" + } + }, + "com_github_jetbrains_kotlin": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_capabilities_repository", + "attributes": { + "git_repository_name": "com_github_jetbrains_kotlin_git", + "compiler_version": "1.9.23" + } + }, + "com_github_google_ksp": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:ksp.bzl%ksp_compiler_plugin_repository", + "attributes": { + "urls": [ + "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" + ], + "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", + "strip_version": "1.9.23-1.0.20" + } + }, + "com_github_pinterest_ktlint": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", + "urls": [ + "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" + ], + "executable": true + } + }, + "rules_android": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", + "strip_prefix": "rules_android-0.1.1", + "urls": [ + "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + ] + } + } + } + } + }, + "@@rules_python+//python/extensions:config.bzl%config": { + "general": { + "bzlTransitiveDigest": "iibnRYgg8LpcfmH7EAnVwYePC3jsVaJ6Id8XxUjSZps=", + "usagesDigest": "ZVSXMAGpD+xzVNPuvF1IoLBkty7TROO0+akMapt1pAg=", + "recordedInputs": [ + "REPO_MAPPING:rules_python+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_python+,pypi__build rules_python++config+pypi__build", + "REPO_MAPPING:rules_python+,pypi__click rules_python++config+pypi__click", + "REPO_MAPPING:rules_python+,pypi__colorama rules_python++config+pypi__colorama", + "REPO_MAPPING:rules_python+,pypi__importlib_metadata rules_python++config+pypi__importlib_metadata", + "REPO_MAPPING:rules_python+,pypi__installer rules_python++config+pypi__installer", + "REPO_MAPPING:rules_python+,pypi__more_itertools rules_python++config+pypi__more_itertools", + "REPO_MAPPING:rules_python+,pypi__packaging rules_python++config+pypi__packaging", + "REPO_MAPPING:rules_python+,pypi__pep517 rules_python++config+pypi__pep517", + "REPO_MAPPING:rules_python+,pypi__pip rules_python++config+pypi__pip", + "REPO_MAPPING:rules_python+,pypi__pip_tools rules_python++config+pypi__pip_tools", + "REPO_MAPPING:rules_python+,pypi__pyproject_hooks rules_python++config+pypi__pyproject_hooks", + "REPO_MAPPING:rules_python+,pypi__setuptools rules_python++config+pypi__setuptools", + "REPO_MAPPING:rules_python+,pypi__tomli rules_python++config+pypi__tomli", + "REPO_MAPPING:rules_python+,pypi__wheel rules_python++config+pypi__wheel", + "REPO_MAPPING:rules_python+,pypi__zipp rules_python++config+pypi__zipp" + ], + "generatedRepoSpecs": { + "rules_python_internal": { + "repoRuleId": "@@rules_python+//python/private:internal_config_repo.bzl%internal_config_repo", + "attributes": { + "transition_setting_generators": {}, + "transition_settings": [] + } + }, + "pypi__build": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/e2/03/f3c8ba0a6b6e30d7d18c40faab90807c9bb5e9a1e3b2fe2008af624a9c97/build-1.2.1-py3-none-any.whl", + "sha256": "75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__click": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", + "sha256": "ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__colorama": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", + "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__importlib_metadata": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/2d/0a/679461c511447ffaf176567d5c496d1de27cbe34a87df6677d7171b2fbd4/importlib_metadata-7.1.0-py3-none-any.whl", + "sha256": "30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__installer": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl", + "sha256": "05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__more_itertools": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/50/e2/8e10e465ee3987bb7c9ab69efb91d867d93959095f4807db102d07995d94/more_itertools-10.2.0-py3-none-any.whl", + "sha256": "686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__packaging": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/49/df/1fceb2f8900f8639e278b056416d49134fb8d84c5942ffaa01ad34782422/packaging-24.0-py3-none-any.whl", + "sha256": "2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__pep517": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/25/6e/ca4a5434eb0e502210f591b97537d322546e4833dcb4d470a48c375c5540/pep517-0.13.1-py3-none-any.whl", + "sha256": "31b206f67165b3536dd577c5c3f1518e8fbaf38cbc57efff8369a392feff1721", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__pip": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/8a/6a/19e9fe04fca059ccf770861c7d5721ab4c2aebc539889e97c7977528a53b/pip-24.0-py3-none-any.whl", + "sha256": "ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__pip_tools": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/0d/dc/38f4ce065e92c66f058ea7a368a9c5de4e702272b479c0992059f7693941/pip_tools-7.4.1-py3-none-any.whl", + "sha256": "4c690e5fbae2f21e87843e89c26191f0d9454f362d8acdbd695716493ec8b3a9", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__pyproject_hooks": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/ae/f3/431b9d5fe7d14af7a32340792ef43b8a714e7726f1d7b69cc4e8e7a3f1d7/pyproject_hooks-1.1.0-py3-none-any.whl", + "sha256": "7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__setuptools": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/90/99/158ad0609729111163fc1f674a5a42f2605371a4cf036d0441070e2f7455/setuptools-78.1.1-py3-none-any.whl", + "sha256": "c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__tomli": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", + "sha256": "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__wheel": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/7d/cd/d7460c9a869b16c3dd4e1e403cce337df165368c71d6af229a74699622ce/wheel-0.43.0-py3-none-any.whl", + "sha256": "55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + }, + "pypi__zipp": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/da/55/a03fd7240714916507e1fcf7ae355bd9d9ed2e6db492595f1a67f61681be/zipp-3.18.2-py3-none-any.whl", + "sha256": "dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" + } + } + } + } + }, + "@@rules_python+//python/uv:uv.bzl%uv": { + "general": { + "bzlTransitiveDigest": "ijW9KS7qsIY+yBVvJ+Nr1mzwQox09j13DnE3iIwaeTM=", + "usagesDigest": "H8dQoNZcoqP+Mu0tHZTi4KHATzvNkM5ePuEqoQdklIU=", + "recordedInputs": [ + "REPO_MAPPING:rules_python+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_python+,platforms platforms" + ], + "generatedRepoSpecs": { + "uv": { + "repoRuleId": "@@rules_python+//python/uv/private:uv_toolchains_repo.bzl%uv_toolchains_repo", + "attributes": { + "toolchain_type": "'@@rules_python+//python/uv:uv_toolchain_type'", + "toolchain_names": [ + "none" + ], + "toolchain_implementations": { + "none": "'@@rules_python+//python:none'" + }, + "toolchain_compatible_with": { + "none": [ + "@platforms//:incompatible" + ] + }, + "toolchain_target_settings": {} + } + } + } + } + } + }, + "facts": { + "@@rules_dotnet+//dotnet:extensions.bzl%dotnet": { + "dotnet-sdk/v1:10.0.401": { + "archives": { + "aarch64-apple-darwin": { + "integrity": "sha512-afZOsA3ARTmHVcRAsVIiXVRDAaNFoUahboalagxSt8lLLDMVIOl227gh8Y0xkwqvvSW7hZYeNRfgZlQUzgy8/w==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.401/dotnet-sdk-10.0.401-osx-arm64.tar.gz" + }, + "arm64-pc-windows-msvc": { + "integrity": "sha512-gnLqq28GrWWLGXbhnYi+7Sh6YB+Wi3HVwmt10QWHzwh2ZcWZ0uE2qREAL5Vcl/WaqGklgbv2uOevX4JgTIECVg==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.401/dotnet-sdk-10.0.401-win-arm64.zip" + }, + "arm64-unknown-linux-gnu": { + "integrity": "sha512-WKznPO1rQ2B1Rommhr37ijF/TabLi7QW28fQup9H5D48CfXrHxoc+qy9EN+VWNpIgr8qXhldarVqAsH592EC7Q==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.401/dotnet-sdk-10.0.401-linux-arm64.tar.gz" + }, + "x86_64-apple-darwin": { + "integrity": "sha512-M0AbSi2oVU4zBttgcuqFadn8xghQnCceCqSznnzEMto2MfFOfh4kRdZ9clUNGM5EqLvSOCp1aGetLtq2scljwA==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.401/dotnet-sdk-10.0.401-osx-x64.tar.gz" + }, + "x86_64-pc-windows-msvc": { + "integrity": "sha512-JLZwrT2SO/z0ffbDsDQVI5i0L228OI4Q14Ou4c+15YF9OZ/ArioSz6gipV5h00gwzLFcUO9u/uQ3q4dLt8eUMA==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.401/dotnet-sdk-10.0.401-win-x64.zip" + }, + "x86_64-unknown-linux-gnu": { + "integrity": "sha512-Uci5ma+ejdmZjJ7cWUThmpB4iGIGis04aU4JiIkFTOjCPU8MXMz6Fr8YfQRFYjWeXuaan4rQu+kTupAxH7ziWw==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.401/dotnet-sdk-10.0.401-linux-x64.tar.gz" + } + }, + "csharp_version": "14.0", + "fsharp_version": "10.0", + "release_date": "2026-09-08", + "runtime_version": "10.0.12" + }, + "dotnet-sdk/v1:11.0.100-rc.3.26522.148": { + "archives": { + "aarch64-apple-darwin": { + "integrity": "sha512-sG4QNAKSh2Lzd+VPiCSbdW/QkSGys9gNlGUoFe9J1fLkeSL+/AVV+VStmxo3uohoCJbga8dGtXkQvlo0LBsnTg==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/11.0.100-rc.3.26522.148/dotnet-sdk-11.0.100-rc.3.26522.148-osx-arm64.tar.gz" + }, + "arm64-pc-windows-msvc": { + "integrity": "sha512-FdJX28uhkLVDMax1T6NbHyLZmaQ0YDpnEta0FoaNHRAEg6Lb42LVcGY8yPFqYAp+VAyidUGDf/OagYdpUdC/Cw==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/11.0.100-rc.3.26522.148/dotnet-sdk-11.0.100-rc.3.26522.148-win-arm64.zip" + }, + "arm64-unknown-linux-gnu": { + "integrity": "sha512-6HiMuhh3kqZL3FST2kwpBmBw85lrDXiZ1PSs4vdvfxASF+iINFIjlKoA4wbxyVBvr3T1zSN5++4xSwCsjzS7Ww==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/11.0.100-rc.3.26522.148/dotnet-sdk-11.0.100-rc.3.26522.148-linux-arm64.tar.gz" + }, + "x86_64-apple-darwin": { + "integrity": "sha512-Z12otEn0c+VNwNEEZTaCoG/33S82iqbM+40fv2DChKGsM1Fx5y+exrTZR2zWWoUXnJYFfqwwDRBwtIAsufG3CQ==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/11.0.100-rc.3.26522.148/dotnet-sdk-11.0.100-rc.3.26522.148-osx-x64.tar.gz" + }, + "x86_64-pc-windows-msvc": { + "integrity": "sha512-2uCgRQ2StTFQNNsTQlms/+nsAEPZPc7U+yqbhwBSDoepkAXWhFrYBxb0qPMN8krlNjynyb45F5e09TFw6bLAiA==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/11.0.100-rc.3.26522.148/dotnet-sdk-11.0.100-rc.3.26522.148-win-x64.zip" + }, + "x86_64-unknown-linux-gnu": { + "integrity": "sha512-d+9gNiLwYyzln8YxhxydDsDHQCOZg3xlnq1bb8fqiY9/ZKJjLs3I0zMOYIMHQWo2v/kKTRAXkhBIlnYWe5uA2g==", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/11.0.100-rc.3.26522.148/dotnet-sdk-11.0.100-rc.3.26522.148-linux-x64.tar.gz" + } + }, + "csharp_version": "15.0", + "fsharp_version": "11.0", + "release_date": "2026-10-25", + "runtime_version": "11.0.0-rc.3.26522.148" + }, + "pack-band/v1:10.0.401/net10.0": "10.0.12", + "pack-band/v1:10.0.401/net6.0": "6.0.36", + "pack-band/v1:10.0.401/net7.0": "7.0.20", + "pack-band/v1:10.0.401/net8.0": "8.0.31", + "pack-band/v1:10.0.401/net9.0": "9.0.20", + "pack-band/v1:11.0.100-rc.3.26522.148/net10.0": "10.0.14", + "pack-band/v1:11.0.100-rc.3.26522.148/net11.0": "11.0.0-rc.3.26522.148", + "pack-band/v1:11.0.100-rc.3.26522.148/net6.0": "6.0.36", + "pack-band/v1:11.0.100-rc.3.26522.148/net7.0": "7.0.20", + "pack-band/v1:11.0.100-rc.3.26522.148/net8.0": "8.0.33", + "pack-band/v1:11.0.100-rc.3.26522.148/net9.0": "9.0.22", + "sha512/v1:microsoft.aspnetcore.app.internal.assets/10.0.14": "sha512-PzuvrER0jsiaaQejCMxdu9e+ROpi9aTrGQMLr0JQpNizYm55QzXNvBo+9r3+O5JNn5CyP847pWS9ScU5eig6qQ==", + "sha512/v1:microsoft.aspnetcore.app.ref/10.0.12": "sha512-9mmNHtEqsLyn7N6HFgBnMzavxii2O+lwCHLPiWPw3YjeNjEkmY2iHecaM5SCF0ywuSJy/5cUMm+yIcXkajC2Iw==", + "sha512/v1:microsoft.aspnetcore.app.ref/10.0.14": "sha512-eUqw1tTYl50akv8nNFnUZvyHXsjlx6xd3uMN4V1pNou9b1vFq2+XcWUGvOlU2/sgzuKHtrEFiEQzxyFEpTmEnQ==", + "sha512/v1:microsoft.aspnetcore.app.ref/11.0.0-rc.3.26522.148": "sha512-kHY1S4k2aoUnjJJOvyxSBywlDV0WgHr+CBA2EwqF4hqjd6Ye40NSobIz6OB0auvK5j3ofbDQ9yXT4NgGulw7sA==", + "sha512/v1:microsoft.aspnetcore.app.ref/3.0.1": "sha512-WlsoQyUrygTLB389vvp/ORtgQlVq8l2fhFxA9kQ9L2QiMqNgVqycOUZkauc26Knf2uJ34XtrDj2q6zM8lNnRwQ==", + "sha512/v1:microsoft.aspnetcore.app.ref/3.1.10": "sha512-yojrAwINItqiOp1XYc50AakRLEnJTOLSgCHdWMECI09NB+25i2eL/gaVcGfC/1986bsGGa/Afd85tcpFsuUnSQ==", + "sha512/v1:microsoft.aspnetcore.app.ref/5.0.0": "sha512-WUXyfm24FMcGI+nADe0wJqBnQcGmtqrjhbJN+W2M9RZOc4TtUJDmmvpQabHwRWYQNoLjTJn/825gs5UKksOMog==", + "sha512/v1:microsoft.aspnetcore.app.ref/6.0.36": "sha512-7hUCPQ2cFc920o+IO1kkTolILrJ1ozLiH1ppUQVFxSQ94z2A8t41KCxUOYxEHwoaDqKWJ0LKjDMSGuU113DVzA==", + "sha512/v1:microsoft.aspnetcore.app.ref/7.0.20": "sha512-ySX6TZFi1eSJj3c3JIroCLzHbZkLmr+fgeQ78AUYsOUhjKKw7qliqRoMKx9Uqc/qMMkyRpSBcwfJ7X7vWYbPeQ==", + "sha512/v1:microsoft.aspnetcore.app.ref/8.0.31": "sha512-2fPzTtGH1eqTOA3T2AJTTKprm8kNgwpdmuIMDaMPwmvZUdB/kdBMOe7IS74YzWVjhPpHNX2gG5klxG+Fyf//YA==", + "sha512/v1:microsoft.aspnetcore.app.ref/8.0.33": "sha512-l4Au1RN1mRlq9VZOyEVygQfuBgRwtlliXjQYapMlshSDSeJzfwmQbUG2JQpqJ+L02eTpwiwqGe9wygulIzRXHg==", + "sha512/v1:microsoft.aspnetcore.app.ref/9.0.20": "sha512-F8RZaC5ENrYhkFhGlQNVGulN07PasAi7fKwng//l2vfbON3sjeMHvF6uJ5PFNc6wNyzAJ/OELMwUiuo5RAK50Q==", + "sha512/v1:microsoft.aspnetcore.app.ref/9.0.22": "sha512-snWs0fwNH6lifDVwb+7eOygmNWfeKuCO0zkSQdX9+qRjO8ELSwJsf2VJx5O6EOfwEDjJEQQTswM2Xf7uoacQ/g==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/10.0.14": "sha512-OtOLEwDfeIWJNsF3EPUOEx6YWrN/bSjPvB1mYzXrvjBY1w4ioShlM2f+7Wzmk+pTWICqyr7B5Yz5h2NawMCI7g==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/11.0.0-rc.3.26522.148": "sha512-cC1gQAK6ZK6sMtIjt42AINLQ3xRf1d6MzDuD9XtCK5eqcPf2GirBglZfB93DWNd96M2kuKrJPYxTcy1MGnhuRA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/3.0.3": "sha512-NXATfeNJ2b3/SslsI/LbXIp1AaXM6yoKnEJQA2SW7LawfU+evBzoqgbcXap2AGRt1W+9VjavqaJCER+ilxnq9A==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/3.1.32": "sha512-Cgzc3B2gBawYYV1g1FVEVg0k9hotwGL3SPZ4ptGegs0Q6lOoIrLB7j+Vb99pTBmVs3NQs5IJeVzIaTvJ+g0Orw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/5.0.17": "sha512-qOm4eEGPVMVd+z+CGo2C5l2Qss7hoWREpLILBhbAzS0B3Lb1pMyX7prz9R0l6WUuyeKoKRff2hIWfI69vsURhg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/6.0.36": "sha512-lAAx+xfzVq7nByfQlRKcVTRElpBk6Q2RF7ulx600kH0mk1Dy0J5/0IxEkwi+K5pEgjjCrGs37Uhc82mVwF8iUQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/7.0.20": "sha512-7alEgdaS+JmhsfvgZWcOGEOWfL20TFShwkbpbRtiyXjXzMV6JHVER8s3n+tV+Bep85ME+FRwZh21YK+Nx33aZg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/8.0.33": "sha512-X0a/xbHzTrmjrkXkLWMB58jSVqpmzyzO5xslMWQ9WPxBMgKIR0Fhl2Ydd1mqBlgmtfPTUv47GFS3Y5Z5DCL+lg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-arm64/9.0.22": "sha512-BeW+hxuZIHCVQ2J/PB+r10G1eWOgVG288M4CHaIqybonhmrAfBOeZacLeh9YUoz9On4RVvBeTS3QrQlrwY099w==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/10.0.14": "sha512-qdJXw8GqXjSeY1JzOnND7NqS6EIJ3ENeIgxUJ6Pfd0+zNGigZQjrZOWAS1CJQosZYDX0qDg0/hCFQGyE+QEX3g==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/11.0.0-rc.3.26522.148": "sha512-ac4xfv7Kf9NGTEP5SH2uBIFNAO1jIOHR8/8ORiZCmTq6UPN9GVuBeBljMIyTiD6Jhcm1jQjKcbPP0WSaIVTzBQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/3.0.3": "sha512-MAWauBKz6sv6j/PXjSR0ow50GwZh8QlAY2vRlyN/MpcYhr5xf2UBt+P7g03MjGHCFImy3xBmt7gMvoDsen/gRQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/3.1.32": "sha512-J0LbOrvRX/QJC+XSPM/v4v4b/wDJc8UKY9k8aR7mOYk6MfzkSuwc5Jz9yJzl9LCYuDb3hWYuYTZA+o8OqnZNZg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/5.0.17": "sha512-HGXmMdpWSkhLkskxer6nrd7HVqGgpiGcxTOFpJgsucBEuiy6LXHFPQ9micU4WiAuosV52Qc8sVBmnhGeCcwNTg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/6.0.36": "sha512-9jbPtXNsHUDyCWC11sWWyv6ao9aLRvdKpM57sxvhjWeOiLt93QwAagV8uDQ+1ymXkL9IfautWREGntn6KaW62w==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/7.0.20": "sha512-/Ht9KgYt/xsW8cgzCbvFjsjGElx24r55BVGsrQSA6VLJMRvrZLwU6lLFuY1x0CfF5ALs0Uva/jCxTtt+zggaYA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/8.0.33": "sha512-Ch8fwTklgR97H1mmbPYWiWV+is8hNJ6iMTK1pWn0CH2x7md8rh1qy6udkE+R7xcJ7BVPaYkuml6OJ0TV/n8Zmg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-arm64/9.0.22": "sha512-kuiOtQ+OO4+M60Yw6GXvmdUGIEkZE8lEpUC/rArFcY/mxmLk7M7fitCkbPc9PYlnXwJubrGq0cu5jOGwkrGjQw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/10.0.14": "sha512-00rrk0lrVjPzOoBdZmaRwhA44K8+Fi+2DIcXsZNa+H6LvCM9tuQi0pdcVTFnmyUuILt245xo+U036NXtwt0chQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/11.0.0-rc.3.26522.148": "sha512-qHmkfgkszvM1KnswykllIu/gZ2XClVyXbEgG9LwvMTNzscF7fsk33G7DVmMmq4zr2aB7ebOIE0QBbYZ9pkOPRA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/3.0.3": "sha512-jJYE+eZjILELbummWUpew6J2X0m/42fHn/rSTlgrKx4xy4NFm2jbmkpVmLq8B2jZpVum0gEpHj1aTFRfl+OgoQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/3.1.32": "sha512-CiDKX16Vbv4fy7I3HyPm7OKyhz6v61idhaDEr1kW0R+ZGCsV2vTNC864OzbovBL0Pmfb/qYQK7Ly4k5FsiVfHw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/5.0.17": "sha512-ZQsaMSvv1ygkbU1O5Ns4wlwu4BSGG/5fVSn82wozqCyEISmDNCQyh33iQgadLNefEQWhHUsdcFYb3OAYdfFSoQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/6.0.36": "sha512-dWFq/5WE7bNe+fYJrpzWihcBkNGM4cR4bRv23bYxmzdTV2pngiDXu1XBwUWpDgCNeL8eP0BgFOQ4Ra9NNXaLpw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/7.0.20": "sha512-wh25bBNZosflPj2pcbIMB/fttuSFCvWn4N8XmDYd6XA91RpRk4GkZx505PmC+kpfU2FgM0N4zWgqnjcrifp6Ng==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/8.0.33": "sha512-TOgXs5YzBo0QTHA6dR3i7qV5YZPxB0DJ7TkZD0bFreNeb7JFPOtW3TtPkn5V+XbNlg5wg7vcufGbQAEsLgubiA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-musl-x64/9.0.22": "sha512-n/MKVYqHMTZ7REqQwZ/Rbww40D5AJt/tluLFxtpRwIKL/2lEgheMiQx+7GsA4prnrQx5j8WfuQadio7CNeVNRg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/10.0.14": "sha512-Cp+0XHjY+V7Ac2boAkKymKHAAvmpitw231tj4LufSuSlKTeMTRBQvjkKXR1ahkY/x+eCJQu3TDIGNmOgElkU0A==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/11.0.0-rc.3.26522.148": "sha512-zpnQ46AGuJPn1JhrB12I/IKB+wX3DJ6kTnebnHHcCOcAM2qZMYd4YvqX6LsTCOgVDI0jkFeq1cbyIJPOQ7Hezw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/3.0.3": "sha512-RD9dLMTl9G8p6eUkLLgFcU+deW+CFO6uJ0+5R1gS7piUQEPTuSDjVtO/NCGaWPC5rdgyGp82D79cmD5lW2yT8A==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/3.1.32": "sha512-pc/0skPzojvKnMMgUueo8aHwmdfF7oLrcmbtScSDi3eT6MejvwzzBVp63lgcsGM+OVLyojf79iBAicd/b7ykCw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/5.0.17": "sha512-mDNoNuUVQf6fYNqgupRzjgbLPuqaj1dbTc01tY3g34TW6ARLtpnTPS8ur4ayMoNnlsQLpoy+Zi7ob0K1dNIZ0w==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/6.0.36": "sha512-c/rCzvHPIQ7Es9YECSisSXAS67S+T5BWp8AgwSGxwpEgr7z3mShbhKNsMtWE+F6kxncIwzyCFAvdKKV5zuGoOw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/7.0.20": "sha512-DC+IasSvYfnFkrcT3gnq08t0iVKmIPmxEFrvITw3qdwH9Y5kz9ZEI4xgcQBIbrzUcE+z/5rwWVhATcxNHgaAWw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/8.0.33": "sha512-KnoyKzoQwuCBY9WNnj/Wsxn+7UlpLabt9/j7REZs0LnxZG5HsX8vqY1jZuEH4byZZhTA1cBLy01IgnFlTRDgrQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.linux-x64/9.0.22": "sha512-smR1cG2Bx1FXZ7Vs2zTi/9er5R8gfFK1jGNFcMQ1tVduPZ4KDpGv1ppcflyw65XkKE27EsBjsfXjmzK+FJMB+g==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-arm64/10.0.14": "sha512-SrQC9AOp1y3wumvs0zlnP/v3mBxiJtx80fmuIi5BjfLwMfTsM0QS1TwQNoekMjIczddtRnwIJgQkx6TpsQkoPQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-arm64/11.0.0-rc.3.26522.148": "sha512-ZU3vLwDWu3XxdqRDzfW+mwEz9derWGlUBBVXJS96hqQleOfrtSv7iwU/YQPm+ChMBaAEk8wI3vqsLh0o3KKDIg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-arm64/6.0.36": "sha512-bBaPwnTViUOUer+qW9IB5Gzrv6Ha47od8DMiCho/6GtFjUi8NeDtj8/HFjApo3JZWBzBAW3xkK1MD5QFthDJCw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-arm64/7.0.20": "sha512-PnxpVZP/vcYJrJFxyAafetPeEcG+jzyT7LnKkWPPDLK7geSktcfefPYsZ96AIMhs8MUeOXYUrQd3luOZUo2tJw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-arm64/8.0.33": "sha512-l8UatlgZ3cJkRYZYmJwTBT7dQ/erf9cbFpry6XP7IXA9+wNmgGhzzNihlUqIxtd2DTSMJj5cyowtW0fwyG6r4Q==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-arm64/9.0.22": "sha512-dEut2adIRs9oJuVZYtOk5yiDS3fuLHXJCxQ9u8MesFzFhuNh7rbxM4AQTzcFoFnEvpQwqBxV3JmqgrSM7rwsog==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/10.0.14": "sha512-zrBKxeWyrIBuxESzTvusPYG49Pl7J2ajUmxqd6MNuhj07d2QYH/kp8bSjci/10dYQ30+tEOgoVYkuMkNqEEYMg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/11.0.0-rc.3.26522.148": "sha512-DITNWyCDW+O2Yyju6qCtTGfn8XFvp98ARpoVODhdeQIxBzePrMICZDDYHvxSmJIg173pBtKw3/CIxKyyeRGpDA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/3.0.3": "sha512-HotMqTD/tTUSzdoDlFa0a42eZHdBJgAPm/EBHCsvX+Vxh93LBf6P/6CFsMhpuuly7lh3YcMhYuT/GucAtxd8zQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/3.1.32": "sha512-X7T+RFwnoDyFBe9+HzSqJ6MdqMEKrZBAZBDYhxhiKuR2St191gUJgbd7Ok9QpOHwrCaoYV9hysljG38k0VWLxw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/5.0.17": "sha512-CpsTwPpyC8vNhPLdruZhxe+ffDASsDsvFjLGQ6vvcRwCYGpzJoQ7z78jWHhfcXbh2rKUq67ve4LWiIlEF58kCg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/6.0.36": "sha512-YJRtVo8VZ/K6qwuyGHlGrPfqVhBZAZ4fk6+tLNZPREZM3l3EjjcrjWat2QL2WZF71aFioZVQScTzKEMfIjOZlQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/7.0.20": "sha512-MJkvhC9b1UXuA2C546UKTJ+wIV5z7QQk+lsXLe8R6g9BjVvN/NUItu9H3hylGkL5Yf/oBLmlPYVUjYuy3x5/1Q==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/8.0.33": "sha512-CQi6LfZtySQ4dE3t0kTwfSbF9hUvtPmUKeSDZTe8mCGuaaFai/Xy6xfniDDvGWpw0gWOJ60dnNqCaPtNdr3TRw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.osx-x64/9.0.22": "sha512-ypeRB1duSXYVpikYamGrs73yTOfbE6HiEqXgTJSTNKvfYJQ0DOfNdGH41xGDwDaAX3v/CTYQvpdWNZrFWFtw4A==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-arm64/10.0.14": "sha512-mSR4ZA6Ntw2QBkqPFp4s+k79RRdg0Z/P0u2eGIbZtfmnbQLPWFqj7FGjE7XVdLOLeHRXRMsDDeI6XhZsTx64MQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-arm64/11.0.0-rc.3.26522.148": "sha512-qQTjzb/ZyzlRySjDBEoLmrTS0elPLns6OPTgFdkTWAyhrHVOnKhUaL88NkTg5agX7Yc5ODMent/YsTHnaBmMWw==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-arm64/3.1.32": "sha512-ME5y8L40XafMwpsTay6peXu4CtvWU+5onUnItr6YzPRJPJYvcd9h1pvBGeBbjuv7IV1Zt07zcuLBE+S40HlRXQ==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-arm64/5.0.17": "sha512-dZajijsKrJJhOwts64gw4UMap0BwCW2+jyKVwkMPG6KypOosIoEn1Gg+XAWdo3GhBrqYvQ5XkPM1r63GglOqtA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-arm64/6.0.36": "sha512-oqI1Ilt03mR/4Y4VDNMeYkr5hP3YafBi0h6piSLMXPTCaOgkMHsU6xSpJW5CMTwOCEwREfMZxr22g/meL0uJmg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-arm64/7.0.20": "sha512-tt3EyI0qpyqwaFqtbG9+4BP7sukzjjheZ9/Cb/uO+CXxcep/LrKJW/Wc/wBKmkkIY/NnhJQ+Kwdjs6xcHVVO+w==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-arm64/8.0.33": "sha512-liKdcvHBwYbyZkYoVC+QYouEXLJLGf7RVfn2A41ueS0zEjzBDZwZfE7yWOYgQd53NDpyFyMeILexNyYrscsG3Q==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-arm64/9.0.22": "sha512-BO97ZPiwqp2xrMYhJwgT88E9rukvV7uMuhYeHn+JXuK3bgy/mOOQyMVczkm3+Y3uDIHMYiPCEJKXhlZzXtdO7w==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/10.0.14": "sha512-1k8096BmENepiqExfgA3ndME94v7RqMqTqLrNMyN+FpqD7WD6jKL9tYrYWi4WKNCAgvRMFVlAidzA3s/FDmIQg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/11.0.0-rc.3.26522.148": "sha512-3JVwYpcAIbcUr7nfH51QMiWKKvgq5jhngac7NJmLzY4agJaQcJy7QxT0yEaQxJNbn1D4Fjy1tS46FMDfO5hryA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/3.0.3": "sha512-Y/So/PcccsoBY9QQuDIJLQamNKgBELmGWpZmdIyoXP80+TUqddM7r+BW51HZYheOmoKTh4YBECK7TUNVXCJZiA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/3.1.32": "sha512-8M5j6phvShGe10B27UVVXdKvMRyJ1Xp2iKBpdgB1UlrCTB5oGoIgQeK82j2iNwE+n+R0mL1CbTYrnib/mRFsdA==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/5.0.17": "sha512-jIZjwj5feyF7p95M0hosArKnBMajc2Zy86UIg6YUcR0mJkcbPpbS+ReLn8hY6Hkml4uJcQZs9ssQOPyJ97AN8w==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/6.0.36": "sha512-XS0rzgotxL8fojceQ7zeYlmVRqSqRuP3SMJymXpIS45R8dnlpEooDfjjWRMAvyWkscmAmXQRI4f/UItGsTND5g==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/7.0.20": "sha512-H9YZkbflMTqW04B9XpumTZwyNaFgtNnBxCTzM93XYNFPZbE6nbhuCUz7c2bdF9M3cZJzbm/4ITWFqBLoTMrqbg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/8.0.33": "sha512-I6kPPL9caRk0HmE7T46DX/kOsUKD9IehbI4v1EPtH+0H6Al9Rjld68Qz85fXlGUcQlGoOIl/MkmIxsd4FjGUBg==", + "sha512/v1:microsoft.aspnetcore.app.runtime.win-x64/9.0.22": "sha512-Uwy/+GShRRWYzRvmo3NbapANyo5CC6NJWeTZsRCuQbsrRx15eSKZkT42O8arRSHaAvrYDA/uBnv3JRdnhsLRCQ==", + "sha512/v1:microsoft.aspnetcore.app/2.1.34": "sha512-SIOjTfqVrxUu6Ov6YTO2Szq4qZ/FWjX0O4pFPz+bV6BVC5PJCEfkSrGE26rxuGENVMCuU6nNehDrpa/7rqhk6Q==", + "sha512/v1:microsoft.aspnetcore.app/2.2.8": "sha512-tN5tV4OSYlw2Rw2AJVV2K2irF6ijReRgm0sQMuwVyR1+D8d6rgiZggGs/6QCut9mo8xtcH12g9RJmbpQwDJbnA==", + "sha512/v1:microsoft.aspnetcore.components.webassembly.devserver/10.0.14": "sha512-ySxdyD26qxLn1tKh2hfHeTaOi5ksvIax/wMTw2HqavB0R5lW9XVc1h78X4aGnAaDS8XmoD25UA3r0nQJmliqhg==", + "sha512/v1:microsoft.aspnetcore.components.webassembly.devserver/11.0.0-rc.3.26522.148": "sha512-sOGcS0+DtDmJL13/BWIR0+IvfqlaveSNs7I+Ux/hrjSyppff400sP+W5mUknGYbwn0bSpempo8+r0SyhUMWyig==", + "sha512/v1:microsoft.net.illink.tasks/10.0.14": "sha512-YgO/Gkx7Ebb/0FIjQoNRdqn2e1IuzCZaiT3KzPkIIbTvQ17QRGfYNGBCDwkcMOtx2JOzWn0Kwqnuh6SdbSfZqw==", + "sha512/v1:microsoft.net.illink.tasks/11.0.0-rc.3.26522.148": "sha512-nD0mSN9zKliWuQDKeL+sdOHVd8Y2H9cmknQRxcqFqvjJb0JycVD0xzG1/E1oiUkcqPThrODglG+Y590ouH4C2g==", + "sha512/v1:microsoft.net.sdk.webassembly.pack/10.0.14": "sha512-5k/K6981Uzk0JnXIwy7c2ziDO6oQZ3wRrjtJBXMkdLmLKrXEE6KmCwTrbwKFA/Cy58fC/GcxrGvwgM6m7I8Vtg==", + "sha512/v1:microsoft.net.sdk.webassembly.pack/11.0.0-rc.3.26522.148": "sha512-vxmUYYjQy6/Qon4PRfDhEDG2QWaEyTs+5Bg+d99t+OlLVRfOwID3/kuoET7GTsY2A8sp4gD/Bb7xRU4CiLQcZA==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-arm64/10.0.14": "sha512-u6q0tjYatAugSxoDrAG6vYVcuC7Nd96s5WXLHCo7AGBk4T43kQAZFa3YIpDc/oGbO4VEvzRvaaQOkxtBOpFNQQ==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-arm64/11.0.0-rc.3.26522.148": "sha512-k1GHIvP+SbCMKjQheo5byLtBbKDYXg3jIXIuNSwmz0JGZ26w+XWPrZXZC/FVC7K9x93hu5qU82a5ZqCswRRfCw==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-arm64/6.0.36": "sha512-xdAL8+k9u+N9DzTzeALpng5956ntAzSS+/dYsXmAowVuxdlMlbiOmfDyh0V67YB87qqE08y0wBzdq+Hw3yUkaw==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-arm64/7.0.20": "sha512-hR6BQ19osMSIzMMaBC/XF9VU4yKhjjAwEp9nEBwNmOrAQfkVRwG5Td+gLhRiOMW0pY5/GjXLlwziiFQ2ksZqaQ==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-arm64/8.0.33": "sha512-e2RWU9+/I6kaSxD0eJB59GxD9uhu87NXJhSHBUJtH9NxDM5YJHzcy8pMQyX34bOJYL1IxLPdvmzZTvBO4LLoyA==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-arm64/9.0.22": "sha512-jRXhhZXIJPMYii57gfT26so6CYbvd7SKtqfCT0lO4v/SRBXJ5Uy+KXun7sYl+EEsjcnbzUtM2g4ye773EIm/ug==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-x64/10.0.14": "sha512-EtXOHonxkJL6n0wkN2eQqrI7O4P19VF8HHGfT86XMZaEUgXYg6UftnJ/iXa3re3tE7sSOIF4x/Kg6hoaA4E02A==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-x64/11.0.0-rc.3.26522.148": "sha512-Rhrw9lnZ4O//ZXPI2C8jHIDrHg5Yd4e5Zww9o/ot9rHIF2qE9Hf/+0bYucIEPAq7kDfv/OWkZo94VzC6tHbT0g==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-x64/5.0.17": "sha512-rsOw83co6NSeSxjofxTLardV3TxSy5us+Gs1lpIXHYVhk9Dj8XaNBHLzSgiy0CFpjvuTUiWiXNs8+ymr9SPsQg==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-x64/6.0.36": "sha512-Iyu9ynAcIOoiBMLm0j/9nSl0PWQGNW/ba+87hmu90vH/8Dx02waeAcFJj+jN5xNZ4NesUCLiYt1xDyh+QeQyaw==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-x64/7.0.20": "sha512-Ydi2yUhYl//LrXMYWtr4YKxwbz/M+qNI4VJG1zgLRBBu2ZLvHULKOMMtiUJYYHV692jbkENGGFUUu3E6JiCrYQ==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-x64/8.0.33": "sha512-oxxlKm277tLRewZxmdCxaxCEMNB/F83AG/bDPucvfuGjZCCEXbXYAagbpdUvdcIpXA8eiRTxVDUnGHbt501cVA==", + "sha512/v1:microsoft.netcore.app.crossgen2.linux-x64/9.0.22": "sha512-5onPGniG4frJJ9SbWj4xdlC5qJwQ4f/MZ+w3YurkZRS5JGVWd425wBYDog41O/SR65xPFNufhnm9F6pNsmdgbA==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-arm64/10.0.14": "sha512-DE88Kvw59+B6XKWhQLwhHOolbYEkNB/HjTtkTcspk834de60iBWnz2D6Zwvck93GHUxTFrGx8PSbL1m/VYl+eA==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-arm64/11.0.0-rc.3.26522.148": "sha512-xwgs0SV+QKBDlgEiJeqMmTxlNSQ5KyLELd2MNtGEDl9MawtSb+KFvyZlVy7f6ROCG1B5NUDXz7FZ+LKPLgSnUA==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-arm64/6.0.36": "sha512-7NLa+YPCk3zh+LGMla5Ffl2Sslis5MvHG0Ngjq1jVXHqIMukzM0FgWkhTDC5NaGM/foQOL9poMm0+v+I9ozTuA==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-arm64/7.0.20": "sha512-Qzruh84k89DwZQaHiIrK5WqRD+ScoNGbX0xvG1d5OPO0fnJod/nmPhdYo/9AXobTpY9WYpfEVTcGGMjGncwfMg==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-arm64/8.0.33": "sha512-cFNes6IcxNFRLcNYM5Z4bPMpzvlEpp9t477Bn8cPI2QigCXVK0AgbuAMpsdLrbo8P/dG71q6l0ZVh4M02MXkAQ==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-arm64/9.0.22": "sha512-fueQEw0gNeeuyuurvWBF0m2iPG4XVIDIyE4WIPDnNVXU16mEv68TAyhsfCe1qEPt+bgAfkzA8BFFYsBebeKpHA==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-x64/10.0.14": "sha512-soeEvzKNynSs76bFNBtgWWPg3/2ZW3t7TUyAUEYk5+PNlsj3/hJyJHGHoCGryV4Bs0wFYSsFVj5+TZa2C+jTcg==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-x64/11.0.0-rc.3.26522.148": "sha512-YXk9Ri0JG4pvCi426q8MvF+NTE8CLsLT3pQ9iY50ZLzsWf3dFOwo5wkXqb72NDhyz90zO5R5SMUHfzLNEzm4aw==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-x64/6.0.36": "sha512-fmv0OenPlfWVvYHaH8Lbe9ReSJB/X1pdxgyVqS1d8LSrRVtuCrL7Q2Xc+SqTzBCwQUSK+3kFQoS/jyVeddTyPA==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-x64/7.0.20": "sha512-H2xNMKpVvdUDRDGnEecDq84wPWhhjL+ls4W6QUOGwp6hoSMDOIXqUMPKm7gYlO4O0VCy93DYXx5aRXf9tVMVlA==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-x64/8.0.33": "sha512-KyuC0oi5UAcFOJV1eibi5gDarSXRrSTCgRjAerdvpm/j2gpN+4wUmjisWc7jsWtvzPdia8htiunfHv1dEcJ8RA==", + "sha512/v1:microsoft.netcore.app.crossgen2.osx-x64/9.0.22": "sha512-7eXqKT9PPd7rApRhr9XE7hXHJF8uY4L0RkVLX5rT6P+i52tsk8iS+Wy8Q75xEu+o3KLt1KO6m3tf2v0JG7Wzlg==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-arm64/10.0.14": "sha512-Fr7IdXYFqRCfi0DUs/oo/Q3YgCI9UX8/l/NHoWW0B+rKABfvuozBtkpCTvjabF9RoAb7Vd9vCxBag7dT8KAhDg==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-arm64/11.0.0-rc.3.26522.148": "sha512-Wdta1pwcF1+xxCVedkklZejw66RzWfM+Hl7aGaQnpr78Lc0K94nmsyBTc+1UzbywvFBbKUF/yjDCDkcUK8SlYA==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-arm64/6.0.36": "sha512-igD8pT3ADrTJnXem+aFYUvjYUVPY57YnSpeAtwbqkika0VOWMriD29pFqMFV7tM6fEiQOerRV0aE9eIhLiM+dw==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-arm64/7.0.20": "sha512-jbKk+MEWwNJ4l/ueJ8xoc/WOAnYawTohaMuRI67dMMldbsFMjtjNJXBqANioRgEJ/6648fiysvgat39io0KlBQ==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-arm64/8.0.33": "sha512-S2hs6cZR+iJw7li3S9fE4Au2RznFV6Z3YRFhx9+3DXMTQE5ilEX56Zq7VjGnzwZa6SASZBifxyIYwkb/OUwAZQ==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-arm64/9.0.22": "sha512-Oo3iIBwU9U7urD3+4crcYEMe8DVH0yfOCWMzWXK31zOzCk2euTo9yJqCpYCNgbdit7NNlEcZ7TH5mILQEKZJiw==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-x64/10.0.14": "sha512-OobOegSVcgAm0CHzDql/CdB6otcE35qsvoC/LmBrUzHmizLrV1c8SsvHa338fqipTEX0GE88Tsr1l61BBjlR8A==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-x64/11.0.0-rc.3.26522.148": "sha512-mrrdJRzFud1vKPZBJI+kG/bTDcJCDXSOIw11VB+MVybM0WKdlPAC4/WSw8lbWpnL20nDlPXlzO3SisQiQljUAg==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-x64/5.0.17": "sha512-VU7wgMafigPcp5fRCGwmMKAPIcyw6EkZr2Zbznx478TmvAQIOq0YZaxu0bNKPzMKJDmaH6RyQGT7xDFsSCPyvg==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-x64/6.0.36": "sha512-LnFU9J+ymzkZnTt3Q5/zDTH3q3dNhe+HP/OT24m7Zz8q2UURRF6KRYYhpdaxVyq+P+6y2Bg+2xJedfK+LHWwMQ==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-x64/7.0.20": "sha512-3xM+swE86Z5Adp4LM+CeadMROSgoCdQ3i+aiiwKv5JwXESeN/1cFQgIJjuXtZAmSeaop3eu64Om1+poD2YtWbA==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-x64/8.0.33": "sha512-eF8yZrV2orNaTWp6XCyKL0LHeDMOxtZio8D5pgrA5DCQX2U7CrqWKFkW/F+mLRQ3j+TgHuWhhEm88kAxe1FmtA==", + "sha512/v1:microsoft.netcore.app.crossgen2.win-x64/9.0.22": "sha512-hUzOhkENoBftDkgx5ZESlm3OcsQClFJ0uRq3PdtCFTI+wbv+vhy+F3isl9/Gjc+SurRAkPtzZlpzLCZzxhDeOg==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/10.0.14": "sha512-MU2CWnkhpol8sJXzZ9IqxVQLjHy9cqHQahlI91BH9mbCoV6uRpN6q0Mj5pJLN9qT+LyAhrMhpari229D8QG5hQ==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/11.0.0-rc.3.26522.148": "sha512-YSHwW+Jm58mM1K4LkvW+F6bjrFMs7vPuzJy5RA2Y7YmSVQmHqU/t46S5pRxpf1ierlf9PuosUbH9d/9FhuQ8bg==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/3.0.3": "sha512-6T+r7FjmaJOcWw8dIs0pi3KNo3sU/Ggk25rhsY5SYLS6dtap1k0fVkJHeZxXeXGckunScQ/XgKAYDPQ1iETXvg==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/3.1.32": "sha512-kH1+TFUJTQOoUBrEFwHYNryf28OO4JF3xcOTbUN/8WGS3NW29oCqyR88RYKEOly7QThmGua/PNd8IpjC10vRaA==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/5.0.17": "sha512-/ytwOp85R5T/NTSmBL51+GlytssrC2Ov7CgZPJIWj/9u8pPI6unO1UZ219MrDZttGUWP1pHm7kJ7XaKbifjHlg==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/6.0.36": "sha512-OlDeI3Y7Po0mhbfmb2zVCxaKXhPUIFGBIqRlbv5vnC7OQohief/31EPBNC0RCaEaayRjTv7P3CckkX403Y8Ncw==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/7.0.20": "sha512-a+SvJNNVQMGWbTKKmDRS4Dc83WzP4REEk2doI3UjEMkFdsLbEm2Lep3vCUpb7mkkFvjYPMiFqNiNG6OGTuVaVA==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/8.0.33": "sha512-PCwuxnYKU5LQInYonBrl4FWHxEqGwOSvgVBnJ/cWWQawgbvNIJRqCN3iU/P5HHPpaA8bGs2yNicFKe1RO1Hp9g==", + "sha512/v1:microsoft.netcore.app.host.linux-arm64/9.0.22": "sha512-l8U2r5WY4iV408rLv6JT64hf3cug9t/4HQHdUyKsOGI5blC9TZjRFWBDEO/tIqYBJYfFTc/XO+v5VFfB7xSiQg==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/10.0.14": "sha512-XS4LNBTTYXNneWjJjgfWhEGnSYAYz3TiQg12UZQWCQV7ms+AZ9HbONX/O2UZqyHAOXRM5LpIaRQ9X/dtft1HSQ==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/11.0.0-rc.3.26522.148": "sha512-VheCWZGqZf8D6MEpzEd/7aITjnz/xlVoJ42Tk7ZQxMYo5ff004DFwyV0EdXaB6lpYj0wu7ArGZVqaeLOl/O4+Q==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/3.0.3": "sha512-rwJyEcl3wwxCI0hyIOw7tHsCfA5v2NpZVa3GZSFa7/nJmtyZlTfWyuYAXxdnFzxSwU2DNYL3kYy59/4+9EF4hA==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/3.1.32": "sha512-8MAEJqAVpNSU/w0qKZFHvdweNdcIht3g0Of3gTEVqyR0R2ovNHCenSSfo5kAS8hfVZ1oxiEdTNdHrKmwq3vvRA==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/5.0.17": "sha512-H9co6YngYniZfzz8XER87mkQ03h2R1eR8NYKNZL1jEVnFQYHvPRZqN6pEhIhGVx+RiKhKDEGdHORFVZDVhTFbw==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/6.0.36": "sha512-8BXWNjvA7BkhZD2dGx00Rfz7+FvjprTUnJKp3uLze83Wet0D/CcMn/22NSMq0JcG+DxulQgyQ8U88QadyQagMQ==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/7.0.20": "sha512-bCcmlaXLBmlScQ/HXkkLf1DYQtOjqet/dI8y2sNx1hu89BwEQc28inzi24PZ9GjYo3KyKvy7U17aldK8b2uYAw==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/8.0.33": "sha512-kx8AD5O2Dipxrl6zF8lxgTw5imxRd0Arslkjt9UCDOlNdBI8YTkL3dignN+C/rDdHEKn0LGke4biodFQuzVb/w==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-arm64/9.0.22": "sha512-at526lJ7iNoi4XU5UlrzOaYDTYxO4lPEnByN1AT8u3NfRP+tNGZ8keWznn2gyHSVsj1fU4oiyTyCmaeAFxCANQ==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/10.0.14": "sha512-KyWzrh2Glb5W90Y7pwgm9hNctD2MHTUXxEuACHlhKWZoaf7T9rJL7/IRobRpz9vaybwWtGyfC8Hc2cIifTR9zg==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/11.0.0-rc.3.26522.148": "sha512-7vvVqG713zOxhtN+fMkayPUrbh6pueYPfRxziGcVs4GUY1wS367JoKbvfCHHGAiFDurHxUzVdYvo5WamK+S33Q==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/3.0.3": "sha512-Fymy5EH69k06lZLcAzuvskwmmcyeZZmQwRrh0R13kAgPy1cH9rVfy77b1IDzkXxKNO7B4ANHdC80sfAiT8Wlmg==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/3.1.32": "sha512-uglFvmuXerWDbNZuwx7ZJvvblKrMgMYcCr6r+un62yfkhx4OjjyuaAdFjSo40qpalR5QUMlqM+5xBERcw4+GOQ==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/5.0.17": "sha512-LY6e3dnNfEkk7mrDOxx0JY63sioI2xskstHwC1O2StNJ6QjVWE5i3xDPJl6s1DidACTvZvm16XDPqnR/cITNLg==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/6.0.36": "sha512-V/yoD7xpW/R1jW3DDBLl7q7KCiSspzT4rCRgkMNf6CBFDEf1HzeoeHprpNbBz7NNMYKOWlG28Fm4uZ84LGX9MQ==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/7.0.20": "sha512-9k+5qHlL2/uiC5/crfn+Shv/93FV1E9oLFFK6nAs+/tUXL0olwsqpyEMUAdKdAoCgiTv50GnBjX/7jlp9bMmlg==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/8.0.33": "sha512-Ni9nBRpG1rZ9fKUUIfV4ep88EW4GhHrJqRqV9QLfAo89czduIFdtPVO7gy8ocx7qDr9kFLylZ4SwpDZq7lf5jA==", + "sha512/v1:microsoft.netcore.app.host.linux-musl-x64/9.0.22": "sha512-QSo/qjGM0D5mNhhTkjXrs0FyD4C692YSBhH7AU2Ly61LqM3/Z55A7QWNJg17nKPQkIPdW5on0XDKBXBdFzqWTA==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/10.0.14": "sha512-LqyCvEWkMshyGeeZ1y1KraQ6czMsISLmMB5VKDT4addsZysxjlMC7WbCryVokdAO7juS8htBOZ3+KaDY5FQ6FA==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/11.0.0-rc.3.26522.148": "sha512-JAsf6hU75ApUzFSHZweMY42Ww99EdEYnrXjoGLjaPUZvBnffYlmo0I2eytznYY0b1MJNGLRnojBXUlj3BWeQbA==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/3.0.3": "sha512-GUhjsX3RrvzfRmGH7ol6VvVOVc8DQagZgolXuBNR0W9H/w3fGeCK32ZxZjQ1HS1qzZ1tloQPRjz1ba1MPqlkDA==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/3.1.32": "sha512-4eu4PWwNn8v1ddv6+fAZZ3DVazO/uAtfRalMVQWBVzilB0LZZoJ9PLuMiSyHn0AY+ARCqHJofWSHxSiWfC1yyw==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/5.0.17": "sha512-3x4x8sACczUaRusJAfZ8uG+lGxDSeeqb0d6PekygzgT44lQhaXKKof8yji3X4xH1JqHnprv1faChuZkD54OYNg==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/6.0.36": "sha512-WRPkqMdz5pLsZTxXah0LgKwrGwDVc1jLxov4XKyqeCW1uAtPCTgf7UEAkFaFZufxmW8d+B0UbAD2u4PBCKYkJA==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/7.0.20": "sha512-abPlEkse/tu8w/F9YPG7fzIP+NbtfhfBrkTjCgnRUnL+HXRkn7ysrUQJ63zWlhVYWilzwTAmUlnjqBsZ+Psnzg==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/8.0.33": "sha512-Lmfpn4KWKEoWz6dUXymtwcJqiT5VZ0dpCvGYgySjb17mPjVNfkbXavguOCVPb/+HYVBIHsB0skvzqzW9wvNt8g==", + "sha512/v1:microsoft.netcore.app.host.linux-x64/9.0.22": "sha512-720YrHLOMQjv38WjJ+ZKb0lz0WBDvfGz5UZbxwyl/5gppuEx+YSuXq94GYrvYU3PMxBPl7ivJzqDpITp8nAg5Q==", + "sha512/v1:microsoft.netcore.app.host.osx-arm64/10.0.14": "sha512-seOrLS1kMyoJvCa1fWEmjYCiVGB+Qv6C6j4YndDtHrIb49wMEfH7I2JnMV5bUuPMTRJz7F6GyEmFSAShy93Eag==", + "sha512/v1:microsoft.netcore.app.host.osx-arm64/11.0.0-rc.3.26522.148": "sha512-9WvTu8/kWPU1EB5pkExMBQamgiWadZC6IExalB5xtHAK+NqLokV+r3tf8dhPvx6JtZ77sS/rTqlAOWmW620ucQ==", + "sha512/v1:microsoft.netcore.app.host.osx-arm64/6.0.36": "sha512-TRU5D6v6pHYNgtnGe9nH7XQnhKE/FdBcxvhWUkS8rcm7ZEYP2RYiOBXQvamgKqH3Tx04+i+2y/HurX0IlMaF0Q==", + "sha512/v1:microsoft.netcore.app.host.osx-arm64/7.0.20": "sha512-zskULQ4seV5+Aqj/hG1VQ5RKqGcjZi7T1ceCUHbfAJOxcVQOOcSzxGxy7+Ys2wQnhQsIjWYNIji58c5tnv/6vA==", + "sha512/v1:microsoft.netcore.app.host.osx-arm64/8.0.33": "sha512-8/8jqecDMCHdpxQwL+ibuKXLvqJxhXXH1dez8w5ggnRE7BwyCa8da9nAA3srOs4XnmH2AO2pWhrWfZfyE2V2cQ==", + "sha512/v1:microsoft.netcore.app.host.osx-arm64/9.0.22": "sha512-0vYrC2lHICNPs4TtsXcJbSLkkY9ALPUmdmlmSUUvlrPCNXw7VUWTBDAy+5ScsEvM1VTxgh2LrGlXJY34mOEPxg==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/10.0.14": "sha512-YDHtb/zQKor+wQJpL4QyH/iBdAgXz/mpb6QMHU7dh6d6uKWHSrvmrtWu7twDJJA9D+JtNjUS31OopD1UehBeWQ==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/11.0.0-rc.3.26522.148": "sha512-c/w426svLaDDIHh8LRKiXjyO5gbI/UQZ4eon1gi23lMLKoWSBxnUa5nBiS7lf5kaUOFsF4u4nwZOp+e4TiCRxw==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/3.0.3": "sha512-eIA7DY8jtGGCw+89OfgbRy05orLvoI4YKNkX3fGioKJRnzjLvg1QcbcfqVTHeXxo1hTP8qJBrNPJi54Tl3V0kw==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/3.1.32": "sha512-vV19A5M60cxvdRM3ZabhPjI6lz2svjXtbyD3n0lRz0FzxvztP4Vvf0nH1FXzwDVm/ydNL7UN3tlj62XjdNfKjQ==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/5.0.17": "sha512-cW3IvuCZC4ULbzsA4A3FznaUTFNXOJNCUDfFn9eN/t6tjJZe70tI4WAc51GApa3wC/B7Sy/S7yRsH+m5fDnjzA==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/6.0.36": "sha512-XylVsSjl1387Mz1g23ZUtPWGz/u1YBX2fd2Fldv2B6WteiIIdoLzHOmP+JeBR67WtVSUcEMrTT4NWj7xOr02Ww==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/7.0.20": "sha512-aQuov94b4ppO3l5CVG0z+VDCFVNHeklnwLS7XT/AbvSyBJ6+9BFqoSWg2uZz0MGjRl0tSA9eK9A6bkoVkPi1bQ==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/8.0.33": "sha512-vsQu/xBJdmrel3uJ+v0/CjR4C278BtTtcoy/oZ4SSRVcUpmw0rLiYrJxcZO2mLKJX1JM6nf9e4UZFNTRuFTNAg==", + "sha512/v1:microsoft.netcore.app.host.osx-x64/9.0.22": "sha512-wx+jnNBdS+wP73Mz8UlYnxaClg/InZt3P75YvoGq52S+OzkEl3GNHCZxfNpZE4PTt6SajJyh/E60+S0dRPNT2g==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/10.0.14": "sha512-sFXQ5snIEdwGEn8umr0TxoLXIa2ubuQZFSzRogkLW/XQmVOLb2hwdmDPl7wBQYc0rb4Qo2eUEVsjD5elJFQx9g==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/11.0.0-rc.3.26522.148": "sha512-wWAndt6bxPny6JrsyKgl12f7Yzd5hf35JAaOSNeMLTE3vtbmIYuWW0gg7CAdH1P/uBNr78AD6pwAEsRcwTNOtg==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/3.0.3": "sha512-h4tRZdiosNe48JJU91uw7WBga3AkT6dOvJSBgqnAaYIXZ1Hbc/z2NZ79D3JsKyXIdcQaqW1k0eI2ticzeqtjMA==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/3.1.32": "sha512-DswXqix50wAEPlovKVJ1VbPx+tYwXtwdh6zkpzGkq+Qn27Axs2iNUXdKffBjZsDBjeGavb7AEWYMrBz98a/5uA==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/5.0.17": "sha512-ibTt4do4+2H3pShc5cvk/u3SG5zeiXMwi3HvTRNMKfnjd+UIjf4w364tXNoEADHrWokdUOX37k5icLvqCIqqNA==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/6.0.36": "sha512-isiVFlAPxOJDR3pbWTrdfoy7ZbLTmg4YHgg1Vzzo0S3M35mSUU4Ere286J0lrA5s/jAe6JhBSmuvCUELIfvegw==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/7.0.20": "sha512-15hmpDKa0ap3bWF4rvM01Dy+Zn09h2h2MgeOj609P5iNZlsh7Eu8J7mQDdband/jPFZXWCV9CM4GYGPFEtKTIg==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/8.0.33": "sha512-ALIQQN1oeZQWU9+SHk5Yc9zjcA9KTUTA6OyWMimEim2RWTsoxUk+YFqjbOCUHMHt7I3BXW/g+glsgqWS168JgQ==", + "sha512/v1:microsoft.netcore.app.host.win-arm64/9.0.22": "sha512-omJvacxI/OAG7jbQSq+WUk7Y8fCm2wiFW7ahwT0ry8YyrAujP/PgawGtkZCCT/dWmPASetoGogUu2H5yRc2s9g==", + "sha512/v1:microsoft.netcore.app.host.win-x64/10.0.14": "sha512-Kn602fS/n6hsgpCW8HzykOu31D/oNrxhETNlgoou5yj7Zvvw9KWX3GnG7hevtm9R3VKdP1kPEfQ0Y3eo83YafQ==", + "sha512/v1:microsoft.netcore.app.host.win-x64/11.0.0-rc.3.26522.148": "sha512-7qtt2uhEEMNl78raGZLhQqGzNIoQKaL4M6URoH6w7UcP1NPj0CH/FhDEBzmIquUZ5tHejliuJS3cjK25ZgwAiw==", + "sha512/v1:microsoft.netcore.app.host.win-x64/3.0.3": "sha512-5U3jATWwbKMwTseDUE9zqDgbTwVkARyuEd6kk9eJ2RQWCQUhc4xweDWaOQ+gjO1RfEiSFhN0ZI4LSvZJWX2cow==", + "sha512/v1:microsoft.netcore.app.host.win-x64/3.1.32": "sha512-p9nogZAnicSfXmfpDCBlNJbszywmLhbV6/IbcK4qB4gb+9AF46OOnSVzMc2BVZmPsLfkQtSFVlG/chdttCqD9A==", + "sha512/v1:microsoft.netcore.app.host.win-x64/5.0.17": "sha512-GjnT+8oke0YvrrbD2VlIcBmJ8HyqB0/zOpnNJ+f0dc0RzAQ/lSxCC7avT0Ly86as+zK5vU9TatXP++5VqspCZQ==", + "sha512/v1:microsoft.netcore.app.host.win-x64/6.0.36": "sha512-Qpsf4A+J0o0VZk/CQ7zvIvUIv6x+g3l2SVko2K33GcMaBj44CTT9giuHIRkTkcc2mQ5t9cFZLMeWiUuBRxoPBg==", + "sha512/v1:microsoft.netcore.app.host.win-x64/7.0.20": "sha512-j7IIiyW2m2BNTt0MgcmhX3f4rl3F98mnStnY+13nlMzr+YC7ewI9khfIXv+bzUA3R2lyz7KghSZx9SaQGPuRbQ==", + "sha512/v1:microsoft.netcore.app.host.win-x64/8.0.33": "sha512-bYAkgv8g2GYhHg2u1GP1t2bFix6iDccWH/twjmjh89Bl+4auwlEhuzx9CFP3ae5EFhAsC7GXclZSuUUrom1/gQ==", + "sha512/v1:microsoft.netcore.app.host.win-x64/9.0.22": "sha512-6Jlci1/fOarVqkn9dK/ESaz0e9gg+1PYpk//ojRMJdbL9eaT4RZQLz1IALloKc+WjLYIdED/Uj4CXMtEMyDHoQ==", + "sha512/v1:microsoft.netcore.app.ref/10.0.12": "sha512-uN98mMdrujRLQdIBUdx55aTcdktf24k4RP39uJW+BSR9MctOk0Urpmi+svP2Kj8w7YsSQuBregxTsREl/Gm6KA==", + "sha512/v1:microsoft.netcore.app.ref/10.0.14": "sha512-8xmkl8ngucEaOgvjRDIr3I4K2Xxx5K9ydiAWSs6fw5AX6MWkTBSF7cqYOrRWaLa0Bpj5EfJrPTSUqSLGgJANBA==", + "sha512/v1:microsoft.netcore.app.ref/11.0.0-rc.3.26522.148": "sha512-j8tl8qNGsq8/x+ulBVTXOjRF1hvMpCm82gORO6xe7rFn3MYicZuWdWOD/6gm/6wsmWqdO+P2QxWEgXmqgkNvrQ==", + "sha512/v1:microsoft.netcore.app.ref/3.0.1": "sha512-JPbWGLnLSKJoP+E4dqQd93QIQ4GqXXv/+iltuzd1hFXHEqf1Ie5oOK/x/Z/oJn6PeFTSvOghef32T4cBUi9C1A==", + "sha512/v1:microsoft.netcore.app.ref/3.1.0": "sha512-cTXlQgzxZx5XsAIVw8tcdYhvPpcScA3vG3AQ/ScleqMn32SMBCIQqetoE0X0EqPSjW3S+hw/pRIUli0msjiJ9A==", + "sha512/v1:microsoft.netcore.app.ref/5.0.0": "sha512-bBp1LYzTBY58dMaCABHnp44CYBcBvW7RrfSsXENaS7iRq/yx39g+jhWdgUBZcJQBoF6AZeGbHhKV+JAoT3LHDw==", + "sha512/v1:microsoft.netcore.app.ref/6.0.36": "sha512-qAcjjw2vDNJrTIw7R4UWLQuvslJbUpXxTrd1ckfDpWPqE0cEehOd9CvwizbD7HADjewzVv+LKvB5aOWYnpNmKA==", + "sha512/v1:microsoft.netcore.app.ref/7.0.20": "sha512-dk6z/ZqMpZ4lxVisgnPX1H+MwiUTRQHhwq3e9VMSIRL5loVdqHlZ9fRFfAejEz3U8EbvGV43Vp3OwF5R7mlTTw==", + "sha512/v1:microsoft.netcore.app.ref/8.0.31": "sha512-/lRLHYI1unTyWFmIbGgvqqiPEKH19Cw63ps5Q+rQd1ZndFpt3h47mpFanCkFh+hO/QkweEZNHEQxlgh0Zme/Jg==", + "sha512/v1:microsoft.netcore.app.ref/8.0.33": "sha512-sT+TrpGAW5ohk1RNlNS+c7QI33CMS/paqBA++RpBvQhBe5RK4qCeYGVQwIvSjb/v/Rh4E8Qv3T8iyacXeomHGA==", + "sha512/v1:microsoft.netcore.app.ref/9.0.20": "sha512-8TKv2M85M/gbGNvlQAg77W2kFkHJ79rjjpkT0b92/8rz5RxfmospsQAeTpECquIP3ch1yg4d+B3BdmjHFymqqQ==", + "sha512/v1:microsoft.netcore.app.ref/9.0.22": "sha512-BSfQ87Wahavupw7Rv6R/d1YL6gzNG7qru9fPw4Fqw6Nxa57izRpr3hhpDEAyHhHfi90QGuhnvmls+JWTctRrbw==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/10.0.14": "sha512-XVcOnSgh4EnuySXtcnNRlAer7C6LtXvyT61deqzgHHt4fn0nnpgwiC2zaLkhb7vl1LT1cHeboGc/FGjB6FG5pg==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/11.0.0-rc.3.26522.148": "sha512-YGR0HzEe5HHEiCxQ1HcdMTrv2okOrR+ghDSp3NTjrJayKf4QwVL4nZPxGcHbyNiEOcT6VgRxDFwO9T7HuzvxuA==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/3.0.3": "sha512-20QbquU9rhPmfN4BOzNRup9mxOFvRqUiSKhWy2HX3tWQzbdftkR3A/vuXdNVGclIBeyXfKO+S3W3YP9Fz3pN2g==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/3.1.32": "sha512-30BMqutTq3QcWEyz4xicVoFFBDzjjYVFGOArgXxWvjT6sYBPO+vJJXfWWPdawkYWLVu+auPB0mmH9+QwpeL0uA==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/5.0.17": "sha512-8EXts9kMDVCteF1p5bIokt/VSOG1f47xpqyARkXXQ1zmbSL6VpJxoVu5/TR4qcYOAUBvH+FfrjdThJJ0or4FAw==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/6.0.36": "sha512-B3ZtzUpX1lR7XjfLrMh+rsZr5lRlVx4r2jK0eJQCyqt/V0Imw2ebQjieoQJra5sb5VQZZcS9LxNGhC5RZOrIbQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/7.0.20": "sha512-gxR7jFMvYM0IDe77zAE9OnCveUM5eW2poCOayo88FD82f//4/BK6sHY/gked0cu5cUMhygTmXEwr3klKrRnxgA==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/8.0.33": "sha512-sWbb6vpLVfSKgPiKzDGMLBVWh4T9iExHSktxwsRk/TvYHf9etdYQzsL//1k48pow3RPrP+poO1w73MY2WqYNHg==", + "sha512/v1:microsoft.netcore.app.runtime.linux-arm64/9.0.22": "sha512-hrKkJfd8pnZw1FteBKXBZV7ZocBI27zG1rF+AOskarVUruoWLfhJRCP0cEmkYMJk4Jj0YCfk/05HhkaRHhlFXQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/10.0.14": "sha512-gd2h8ho8PYx5o4ZS2eoDbgL3qBWSR15EaUPbYPkX7I5L6imQpro60FNIs0YJLacqQE6G7amHYF1wWLWacyd+3w==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/11.0.0-rc.3.26522.148": "sha512-6iEEdXEIhbdiuNAapKllrsJ1v9axOKJHP1GyAEUSOukxaZ7irdaW5PgGCmHKDSEzQtLzaA/c3o0Kwu9HafiCTQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/3.0.3": "sha512-hQFrym9SCn9M2kwnJ5GV91CbTsfZhLSmcb0HDX901DIc4zbCF1fB/VAeHhfTd/4/ADgbMNE/n/cG9she4bGHIQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/3.1.32": "sha512-5XvNdjhqnp3Hx7rmaXDW1GdVI5V3f3VXOQlnNAZ4nDZlQjNIEVRmxfbAwlE/XmnThwsldKa16kUSkd4yNgJEQw==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/5.0.17": "sha512-us+amSBsQ885nIi2ApDzrDeBJKvvDCKSsGuF3wA7hxA9oFqpxpfijXpWARxTb3gzSOqjG6v/GjvOesWtTZTRWQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/6.0.36": "sha512-8SzE6VIFgq87LipNuj1chTzR93v1Wu5Xun7Om1tvKCIUk98ZjXhIaqtWr6r7mwm/KFiBthCDsgq26n0ffM7wrw==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/7.0.20": "sha512-4Ok+e3bc2OJ2YisrmLCMFXKZ/WD5Gyxchryl5clC4s2w2ci/kiDnKI83WL1ibNvEk5wIDRsrCQ5KXA7vYn8wyw==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/8.0.33": "sha512-hd/agqVigShnrgQqV/lmUD4ccjzuwuK0bnW1eyRMUhHRK+tDXeqTXtg88aC+ns9qneHU0iXOPEXGiiJquCLbNg==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-arm64/9.0.22": "sha512-H9NcS7hm3QoHX2lQVFjJhs8tCXY87K3pwFW24uOdEV5sxsrlGT41+u6hYvGdIXiN9+efBfm2WfUlS43NRBdp8Q==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/10.0.14": "sha512-u1lsqblXTPJdwtSauZdCv7U3pYdAsSXjvDybS2Rl/rGGOLqMP80ljy/J79W9Ck1OsQFwa7297qUjm1YIwFOTag==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/11.0.0-rc.3.26522.148": "sha512-t8131Cq/b0pU23MgDeEereVt6DRCG/FAFqKdlfs6Z21luxKAayGi2kqEJC/mp4BivbZaSn0Cc7ddSaMY6mrALA==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/3.0.3": "sha512-DtrV3ONhk1E5hL17DM95SVJKV99BrlxjHlRAiEm1PY00NfX9dcowR5DOLc4FLmVKU629o5/xWa5rHITcLIrbwg==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/3.1.32": "sha512-jgeoftcDq2ks5Tb/2hI70KJzPYklL9cTmPISSq6MriPVOFhtZsbJwxuOrt86JanfolTujXe98kXbZXvUtpPmnw==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/5.0.17": "sha512-YlhkW0/2+ZiagSg1ZglBCrtTVUwtJJZZ+TDjgoKwdVcxahPYgpXsUDWtKfHVFxCAGccTZc92HecvAbFmfspbVQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/6.0.36": "sha512-dYTLwgPcI9x7oexhWy+b/vsLfq4sBTgGKKdtWOYgAZFCXkKLOeWCtLySNSMmITrs7MtGgRyEwDpc5XIENc7U3A==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/7.0.20": "sha512-J/bFX9ai9i8S0ux0ZdnBhN+s+IFLosIBgnFvTBHuNfblPQ6R1YFsfYww5LQFI+plL8A2NcIdnBxLACrN22jwNQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/8.0.33": "sha512-PtZ1+nJlVokdwSq8wuEKFZKlla0mmqIO69/Skq75BoK8NhkdYwmTKvVl05bK5+Zyar2MRXd3jYwpIQp12Y0plg==", + "sha512/v1:microsoft.netcore.app.runtime.linux-musl-x64/9.0.22": "sha512-ccweSXM22Gi5lBedje+oKNnFiCi3ZQY/BHMa5XN51eGEFnH76zffGfAyG5EhFMrs7sS/nez29f5QRWIAoIZExg==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/10.0.14": "sha512-IfDwQKE3gcK9u7iU7C/bOaqLNfoRf6zvXzGLHsJAbsC7Shwn5ztRCRWjD1mKRk5XUrPO9VWSC1+q8oimXRDlsg==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/11.0.0-rc.3.26522.148": "sha512-aa5l0dbB04tqv5gZG36jL+isSM9xBxUQAPDEK+QQgkiGmI2RqG9pVUrR/otB5qxjm/0tNCvYTHkqLg3rFEFEhQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/3.0.3": "sha512-SsEFpDY7x0sPe1ULwddZ7n5p4dfcOdx5wXPvGJQeYvjRs7J4dbqNfGTNPja+x0Zzl7mq0/oTobd6DSVIQpEdAw==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/3.1.32": "sha512-Sh3sRKcCjQwi7X9FPbbwz8tFygVewWLUiFO2/VnCOH40ZX9bix5nbESQxK0i8uy7OTuBDxNTGqcUvJxO+baw6A==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/5.0.17": "sha512-aZTIXNmm4nKrZP9iQrBAsuGFICZQdrZGbFq4p6StQ5eAfoWJK0maX/MWsXaWZGc/bc8o6h+v+elDxc29xuyo+g==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/6.0.36": "sha512-QOBu74LANKrjgQI6NMSSHZkungzGW+79tlOSv04HuGkphqCf330pMeCFvQn7U/i+egShqpFVZiFZDuzoTnCNjg==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/7.0.20": "sha512-swLcwMoZuUvAWukwmEbjr+YXYtRyeDR/hiYALZ5SVFjtyfS/FSE3IY/xbVtkEyfMFPEcRdErlDVYcJEEq0kPaQ==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/8.0.33": "sha512-2ctqCMiqxeGnlc4mbFNEzxp+w2svSaYKRIN3U3Vq/C1p6gahM7HGUw6NJBvSdG7ryTPWHUlArAe0PGW922xZug==", + "sha512/v1:microsoft.netcore.app.runtime.linux-x64/9.0.22": "sha512-f6zPJz45iWkeKmMNRwFOF8FNpiXIpnplg0ezy7DH3NwakSjELkbHpbIq5TMGXManAP6esRjcGJPKurs0jPiLwg==", + "sha512/v1:microsoft.netcore.app.runtime.mono.browser-wasm/10.0.14": "sha512-TClTxmTOoOiIIMeENr0h+sjzLGwKEZnzkKFx3MYlZYtvH4rTM51T20pOf9FaNwJcsiYvDmbsCPUZ8+fryppH2w==", + "sha512/v1:microsoft.netcore.app.runtime.mono.browser-wasm/11.0.0-rc.3.26522.148": "sha512-N+pC4wkhY2d+Y6I/L+i+Tbj2ykknWbLLVcqOI93JxmnOgzRyBeGn3lFVlpLqu882ChZ8fgZ9EmMlbPnDG9xpUg==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-arm64/10.0.14": "sha512-kkt+jqbr8OFoAuwLZ5mUKEFnJC504Qwqhgtj259288kKraAPNArh5usAHHSyoUAX8vnetInPHe7ccHfG9ykLnQ==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-arm64/11.0.0-rc.3.26522.148": "sha512-u0I1eV3Zp6iNd2Yhp1h6ZcrfKqjqWvMX6QjTagnOOiq7nWDd61Oi8buVq1AL9H4fPK++TnI4OzAtOKcoZ7JGDw==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-arm64/9.0.22": "sha512-EQUQktlErngf2spm+9jIfZICk7V3dbmzX0PUdVb7o9rHCuq7EoGyW2ss66C1z89BWJM0jHjAry1/cfx2HpEfHQ==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-musl-arm64/10.0.14": "sha512-Ykhofl1jAu4+hfUt2/89z6cbtpisnobwR+340N9TE5qXk7UtMl5fN/jxza/hezlRRlkPU3RCPsGRBMbpTXpwFA==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-musl-arm64/11.0.0-rc.3.26522.148": "sha512-cTeVI2EzjjH84E9aRmx37E6oiER2Cs5TfiA8dMtGIhOiDaHy59qNhLdiPZDqmB4uHfFteb5b1YCEL+/PLDrXuw==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-musl-arm64/9.0.22": "sha512-epJLtqfmqhACJyb/0PbtuSaLIp3NkebJu6sLd1iZSEiB78DY+ayFEzw+0kz88HMYlyqCh0Ll/t6zjIU/gbgDfw==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-musl-x64/10.0.14": "sha512-D48gGGEx53DjsKJ3bhofq/4V+UomqsH+5EoE0tdhCuIbDgd2/zhH3wIoS/f7DqJ01t+RwrrQrVSGjLzl46L2Sg==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-musl-x64/11.0.0-rc.3.26522.148": "sha512-duhiuEyyyTbFsmINi8kxJs+gPIkl39O0INN61a9wzByd4bDv1UrV+0nFVE/s+P9johVO33sRkYr/1bpYxsfCuw==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-musl-x64/9.0.22": "sha512-l2ik5QqkHDUGturduERMpzc45ypoQhS4sl91DDGROSxM6c4nUXID7YAmZjg0JlCIJgzo53EyMfUPVOu2MT2iUw==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-x64/10.0.14": "sha512-IIj3QW0MZPRI7NOKO44MpNCMcgLo9+z9/CqWVmtejV735Aap2/cheQ7yGZS28H93+yu4LEKWy1SBcLi5Y4+DHQ==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-x64/11.0.0-rc.3.26522.148": "sha512-fS2PEsXyXui20naQgEhEUpKuIxowq6yCHOjRf1pBzTQyxpVFPQZ4lg+jMAATSc9A1MdxYpoHHhn5jdVYvduF+g==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.linux-x64/9.0.22": "sha512-xVud96M4KQo4kGbhs69+mNmzMEc8qzpBOKCCll63iFZ7Jx5fO/EbLfLPupO6pctc1r1dQTAQTL7CQHQkY+lbyg==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.osx-arm64/10.0.14": "sha512-SaeXGZoDmwJs/4kLtoaLvpFDl6lTOEytpx/ZR3jtqVRI44farCSXizx3K7QX5T4sBMgLptfLF1Z0lfdGO7qDpw==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.osx-arm64/11.0.0-rc.3.26522.148": "sha512-lji1y0jbcqB2ATsBx80cIQP1cRaEgUG3FGsjnQT7B2XHwUU969A4hxOjBAVGOUplJ05AnvP0cjjXJi4Cj1P4Cg==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.osx-arm64/9.0.22": "sha512-8Y7K11umNDxpZU7+QcZdGkMglgN/zEvmz6HxTMiuOj1N3hJX/y4YXiNagL3zzQT57noUYueDZ2cf1C6MihtQQg==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.osx-x64/10.0.14": "sha512-0Bb2ZMdtEr7DZGZ5uJtOmTFx83tvy/dM8UYGDVa0eRJ7BAmeTiZYZUfUJrmQSrSU+CymP5Do4T0Tpt0HUwLqwA==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.osx-x64/11.0.0-rc.3.26522.148": "sha512-bhAhE0nVjdTZVmacJ7JKuVnN86L83zEztcWeIrLlaehHyzQAlG4g2tpUisnoykXRWKAO4HhCRqI6TBVn8lZluA==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.osx-x64/9.0.22": "sha512-uMGFCMCSLCaJrHonZc/9BOchOFCYUeqB9ec3D2ue24RNYCWGFfq0mpKDmO6HbIsvJ3aET8IVlpj+Mod+rljduA==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.win-arm64/10.0.14": "sha512-ZmSPyo5Oz6UDNE3+moZ6VZBKNH/tZRNvCF+j8ssby4eKI0FlTDMH1rcdszdrk/nRhPidzmvg0XdPkZ02ZEG6Kg==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.win-arm64/11.0.0-rc.3.26522.148": "sha512-qLjmAu12k8JkVDhgXH304GYvbgXRGFb8HlLDL8FE+khiMXxnmlN+Ri3fBdlmD64NNoY6q/BtAikRQlJM9UDYDw==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.win-arm64/9.0.22": "sha512-lSp4NcpfJyqTZYSO9YbX0blon2/vmPN4Ovnce7pPLmKXW55z1nliNsI9xavgVBYA79QuqNkmP/9kD9lbsp8v2w==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.win-x64/10.0.14": "sha512-932Q01OgC1k4vtlOWSqCT3+fHDken18kfcyV5sNSBMrKNGuXs9XBcK+GqFeUS65BgWRao4K8BhbaJYxJRythsA==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.win-x64/11.0.0-rc.3.26522.148": "sha512-qBlrCY+7+NcHa2IYCBMFxJxp58wWIjD0m3i74va0OaH2O6/AhAa9dETX4gtUMhpF4IEsiko4rZNQwLfDocYzKg==", + "sha512/v1:microsoft.netcore.app.runtime.nativeaot.win-x64/9.0.22": "sha512-2zFGsQHFusUtyYuV/xhkgcIIt+CxNi5o8sZcy1gzyRpcGS8U5ovqwplO4iYE+Cvyiz33hE22H5cHEcRKFI9iUA==", + "sha512/v1:microsoft.netcore.app.runtime.osx-arm64/10.0.14": "sha512-aaaa/7gTMAMy7wlLle+AU0VZhYoMUBmImsZI9zcdrpSiZvb1GVVzsyQnwp4vEg+TvPRwm6qQuWisowO1q5AhKg==", + "sha512/v1:microsoft.netcore.app.runtime.osx-arm64/11.0.0-rc.3.26522.148": "sha512-tEZQztHAjZwDisfiny66QP33kn/brI/eGmU29MnpGTD7EgX3b4gNLzpOOl+PkFZGAq7+u0ZgQ+N51iTB6tIwhQ==", + "sha512/v1:microsoft.netcore.app.runtime.osx-arm64/6.0.36": "sha512-zPyKnjYA4/HHBEKgPPl+AvPBi61273ub52yfTNE1Pb4WkI0Xlc7Vg8aPtoux3kO+jS5IVs2MM3uCjOVLJKwD2g==", + "sha512/v1:microsoft.netcore.app.runtime.osx-arm64/7.0.20": "sha512-+fCP5RM7V7wOodSFtnIzEsrnJUAwnVsySDZ3rR8QTn71r9L8e04rlDicaFiphr5j537pMbGvLttPBt8NbIdCgw==", + "sha512/v1:microsoft.netcore.app.runtime.osx-arm64/8.0.33": "sha512-f9wFtPsE/e9pSpuJh5h7/a4XGK1DqLJxcy9++yIy+qcOcnzl7N6l6oNPIGZmDFcYNK6yxvmLL1lSP6NFA5wv+A==", + "sha512/v1:microsoft.netcore.app.runtime.osx-arm64/9.0.22": "sha512-BrxjCW58J3yUd+v+RAUKkTlwyEOqkQCefaSlAcTFCGo8p5JIMe7IgJ9JV+oOCaNRX2eAHZF7CKktyovIim4KTQ==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/10.0.14": "sha512-OQVIOSu5UGOlBhTsaYRyrtRiwbAEfplTx+Ln51OU332ZSocOskRFw4IaaDJ12Ke6ekFJGAd3i2yLFcjb3zmJbA==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/11.0.0-rc.3.26522.148": "sha512-TNGuOrGpbuvOe8p1PMjFLELV295MnvzLt2wYmuiyd+h6pet6MmKns2s00JxZu7nc56iCig6nbTiZnR9VwkPUtQ==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/3.0.3": "sha512-dfHXm0iFa0QsOrbuTjO3EOXDHUelL90ZJuKfV//W1wekoBMKRhSbJPFq2SI99BGvQZJj7ysv9RT6QtIEiWfGXg==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/3.1.32": "sha512-91V9PmRcFOJzY6lc3QzA2Vk7fLiTpaT/0a0DoYaaBOSXDX6sy0YjDa/PPYGDHUaYnxUUftqVmXz4Rd415ccAwg==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/5.0.17": "sha512-2sAAzMHaag8pSyGZxRG94a69UxRmWHaQ8p5qnrNgoFzTa1X0b+jsLqzNvrQgQba4fTtNc3lUoRdIfqaQJb6MmQ==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/6.0.36": "sha512-M6IcgiyppQQ5GUkSwCaOXGh7y9qOugLj+ePi4Ooi4qMqolXB56ciPZ7XJ2HxWsXg9OHmFcOYtu/7mDPGy2uodQ==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/7.0.20": "sha512-+wNTFv4sHMdAc6G9qlx0GaRNbBhwW/DmN4OMQVkEDgTVCiCWg+DiFON2mffojexy7trJUl6Y3MoxYMJV9/1TUw==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/8.0.33": "sha512-oM7mEHEMWoEy0nWMWYmziothHbVUM7xy67jZeezrKLpwEI9wwQd6PAorDETVkuvKfJyHBocdew1AQ1MWZm1IRg==", + "sha512/v1:microsoft.netcore.app.runtime.osx-x64/9.0.22": "sha512-ZfP8ipaqPnCSJPuwc1pn96pqoHbCOHuFkc6GbZclwcqn2t4C4MHZ7iTqYeIXQIE79tfH2dfNxUBBBxy/6dVC4w==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/10.0.14": "sha512-VX6JXS+AXtCL8brqXN5qvXmOzrlHOraG5T8dpdn3O1IL2knDcR1XwDNWZc2lLWuyg3u1Muu4zme2C5VnLOBoMQ==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/11.0.0-rc.3.26522.148": "sha512-tyho9IFTNgbPDijipz5ZyrNj+ArsCIbVqNqawcRSFLlbDSFLyHvufjgtifgG5QQvatnvJ7IwVFLTZj8MXRC4Kg==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/3.0.3": "sha512-W9wQFjLpXfqXbV17s0FnAlPCUadTo58sA/yrQIc+vmUkFZ8m20D+XkBAUG9u6mut+oJta8K269Tc628P0E/uSA==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/3.1.32": "sha512-k1EL5k/HYiUoQoTygRfUVAKwtmtpDKo4GC00OxvElEIMG5FmpYtnT075jBFqB0b5J3y4CB0kfQf1gZaiV9DwlA==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/5.0.17": "sha512-B2v3X59Gh8WD8079ZQJ68ipPA4qxjYHF++h0KqHhFMRIhVWwAMQfgkdPCSsnNyoNWZmXvVex/NQ3YWCV5LYFOA==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/6.0.36": "sha512-9duYa7xbMuNJG3vsFO+TNLA8Fcvs7OPonbvH812od/ujnfbeoKPsPVPxOcgJhdUbTiRS9AMTLh3R8v491smQ0A==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/7.0.20": "sha512-qpAjc0CKz+vt3d0eoeZsjmcnb6S6IQmGnXXjv/sfqYqkYErDlBFq448CYOcLUYWdEotInD2Qc6V7wnhs9hVgoQ==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/8.0.33": "sha512-FMVxwioECbe2SHp5DN85EL5HC9e76IRDgKju1IiTw53Of7xGZ3eK8MyHm8qPhICQgbRh+JqPsCPGbaj5Ne9OxQ==", + "sha512/v1:microsoft.netcore.app.runtime.win-arm64/9.0.22": "sha512-tCgmpEQryAOGHmf6Oj+4Jg2XsjxWEwxjTfHKdHld3AxAOdD51XonAhZyx63czCGnUev1sSvGlc/xvBLI5vocSg==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/10.0.14": "sha512-mLWGagTP5n7nMfJQI2XpXRYgvPcnyYvAc8ZiDfum8ShM0UcrPDyfW4Lqo45UtlCHCucERUHQuMTI6ybVweCN9A==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/11.0.0-rc.3.26522.148": "sha512-Gke2/vSd6pznUB72HsUUnU2FDoz2qFQu2QdAPP25s5OMG64bW95IwND9E5ajQJkKFIVE39bhLd6hpvpwsQRrtA==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/3.0.3": "sha512-Pwv8RB2F8LCVFpTL2kdCcNvru4EZsG1vSFljPClbpTJR3tF9mp0DAyxBbyfy6Tg2PwV4XMKysqy2tTd4zCqpBA==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/3.1.32": "sha512-cVOGmQYfQoQbls4z3fT1otCY08PvQwSJj3Ur+zwcJwd6Ejq0aRIkiiZZUQNxB/P6W+pfRTA5xi01u5lZzMvcKw==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/5.0.17": "sha512-Q+VlqOuhbAg5vU2RsWhKnPTP/QaeHzLhes32Y0aPadzKCgxYAxt2Bng7QTdNXqzraENevQQCFR83/oOutMp4/w==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/6.0.36": "sha512-SjnCMVnWxee70G6D0Pkd4ku/hkPgs6z/nK7ivfLSk12fIWb7aMtM3umXjWjDs8f0aBH8MIw+JTDObDpAKsbCKA==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/7.0.20": "sha512-eiJuU57LsGAsxxkbDS4iDsSWKIJH08FcJtEIiSfPtUVN4aExj1IoLp+MWFa60QA4+hkNpqs49R+g92ye8oGoxQ==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/8.0.33": "sha512-sK+4Xj/iglM4b1QnXeOzdJlQ3pFNKRJntXfzbryAGcAIzrL4BTicSV9m7C/iPvx+tHOPJzMGsafj1e1q5pfuIA==", + "sha512/v1:microsoft.netcore.app.runtime.win-x64/9.0.22": "sha512-lQ4B9IjWCa2OQRyZvxGd9OpyRvn5GBvTTrDO8CYpB7ir7zD33beCluAdEfvgOel5qmgfd32mnPxTiXvk5h1s4Q==", + "sha512/v1:microsoft.netcore.app/1.0.16": "sha512-BKKb2pT1E0j3PpRXOahEKoLYGCPecVWkvogMEQT+sHM1eZIdGTiDo10ZGeG7sZk3TJHt3VRvLOBk8QyrtzpyYw==", + "sha512/v1:microsoft.netcore.app/1.1.13": "sha512-KkiJ9r8OprE+HzBNRBGGpvtBl2HwzoxCnu8NZaHV9h7XjCtGSdVKIna6LOFPqp98gqZ7HJ3AUE4zWCv5F7zyBQ==", + "sha512/v1:microsoft.netcore.app/2.0.9": "sha512-RA35OXXK2enpLyFQrBW6N5WxPQLGJ8cx4SVNPa0PRLEmPcIu1OmdiPzOlqaB++7ejGWY5O3o3CKkOgEgsHzDqA==", + "sha512/v1:microsoft.netcore.app/2.1.30": "sha512-rjXfBeXZZOixeTIXi8F+HkfXSf+iauTQg0wO+CZbzqDOm5XPesc2GypYQ0otFOBbfbFP4awZrZwNa60LaYVvYQ==", + "sha512/v1:microsoft.netcore.app/2.2.8": "sha512-WZ0ojrXi2DZ66MWxds4jU7ZWUyMgKOQB7gyQ70ovrvbrhzu50XNUjnlfTT7ZpWoxKDGAfneDoJjTHoJk+Oa1RA==", + "sha512/v1:microsoft.netframework.referenceassemblies.net20/1.0.3": "sha512-M1vB2xSMJY0FdXNSUH4kjj04aTqWIOPUKeUUfaCoVA5JVw30XGO9ID7mUuBo+inSXLgmLvoMkSb3d98YEQwfyA==", + "sha512/v1:microsoft.netframework.referenceassemblies.net35/1.0.3": "sha512-l0U4pfjnh80q9nnMSy6h9OaaLt9289Qo2lOzYaoNXwz4BBUgx1FeQA/Bbz3hc1+CUvDpziG77O8i1DZ6bXIK+A==", + "sha512/v1:microsoft.netframework.referenceassemblies.net40/1.0.3": "sha512-vUXmwPxi7lY1DEmxnrnve/a4JgN/Z1XE6Raozcmlqrf2OZxs9smXBb3Q9y2dZ2lCPtVMyZBRM4jQPBXz04InpQ==", + "sha512/v1:microsoft.netframework.referenceassemblies.net45/1.0.3": "sha512-zPJ5Pqc6+cBg4ir33AWryA8CUxJJj68Cs1Cfo8plZt1HH3Q0B/EqVon6LRXw9b8dfQyLYMqTJJk2maXgLhGJIw==", + "sha512/v1:microsoft.netframework.referenceassemblies.net451/1.0.3": "sha512-fS2Qwxx3JboJ2aUCknMGdM13SaYLsgurXehv+Lp5lnbl/lKwtH55S/uI3K7KRBH5CqGxLqBfWWJvAz/elS9ACA==", + "sha512/v1:microsoft.netframework.referenceassemblies.net452/1.0.3": "sha512-Els1ywsbLD/XpEgQWV0yMpAOHk0Lecz4jWmOeLwzGSFJ3KFXB+57wKjX4rEJxqJf97CIFnUmcO+pvIz8LfTXvw==", + "sha512/v1:microsoft.netframework.referenceassemblies.net46/1.0.3": "sha512-2DUXmacjqNTXn5FE95qWE6bL22ae0m/0rL/SgK3aWsW6qClDzXVmo0kOLycCh6JV6i3dQU/KMuT2wtrT8EfZiA==", + "sha512/v1:microsoft.netframework.referenceassemblies.net461/1.0.3": "sha512-txfcwV2rUr4Dxr0r2jU637Dsx4W9Wo1PxHI5oTJPRsSsGHWV2QLS75DGm7vJ2e7sl9BMZZn174/ro3SDO/oBxg==", + "sha512/v1:microsoft.netframework.referenceassemblies.net462/1.0.3": "sha512-HMn0QQmPYcJsVuKet9WA8IQbBweZvc7US88N39itSRqcn/1XOT/Kao1QiiykxU+vx8k7/zim11cVmKtunju4MA==", + "sha512/v1:microsoft.netframework.referenceassemblies.net47/1.0.3": "sha512-x2ENtw+CyAOV9EO1V5okeMkPkR8LGWW8F6xG+ndxwEq3GMlNmDo0CDBZtI690PP/0jMHTwlPwyQTvYBhUpGiZA==", + "sha512/v1:microsoft.netframework.referenceassemblies.net471/1.0.3": "sha512-Vxmc1FxJLU4hA0b2mcELn4O5S6P3AfxtlFHjg1Gw6oMaBPL8gMRt9XT+IODkzDWeJ9bX/yYN4EPiJMz9Zh/2hQ==", + "sha512/v1:microsoft.netframework.referenceassemblies.net472/1.0.3": "sha512-PvZKpFbtsxtJBi6hJyzt/iaK71qGdu9mNVpJT43+i1Wp23ym57YVuQI+BEnO/99K2pxPMEgYtz62n7yZFEgi2A==", + "sha512/v1:microsoft.netframework.referenceassemblies.net48/1.0.3": "sha512-XWKgyeNadNcTQaIVvQB8BrdCNrEar6fo/de1OdQRZ9HFy0jcBSaM8IV5q64ZampsSnC8AlTsACaGZUuoFw41RA==", + "sha512/v1:microsoft.netframework.referenceassemblies.net481/1.0.3": "sha512-7q2vMYIMeNF2TU1/z8ZStlyALlfQjPRa3eCLwTT+6ErueWvXZsKF6MkjPXU0vglvjCP/5iXxhTMPzvuWRKJ1Ew==", + "sha512/v1:microsoft.windowsdesktop.app.ref/10.0.12": "sha512-0GgUriVcZ5eKx2nC3I4BgwNaLh/86sFbOymI754j4UwjrgxwTDP/TUhUWNgKZjiKInOAVxhog0BDAOPZesvLww==", + "sha512/v1:microsoft.windowsdesktop.app.ref/10.0.14": "sha512-oUdMkVocvdewR870lSc4DEViKTPzW25fpQDd0uZTY2DjxpAMvHJfr419eGop+vj909UT4SYSLFPGI4FfvS0hTg==", + "sha512/v1:microsoft.windowsdesktop.app.ref/11.0.0-rc.3.26522.148": "sha512-3gNn2jwzGn6fT5j4c94lOUU/MEd/aviFH64H9D/wATXCaJnNlcn9QByEeXzA1xEmvTaJP4uEaMVrH2FTlbW9xw==", + "sha512/v1:microsoft.windowsdesktop.app.ref/3.0.1": "sha512-FxSkb/mSrkZO2es3PFkreB8bmJdTN8BsMNC8EQLsGr0PgUD9B7utQl0h0ANMSvgbSatIfec/cDFTK5rSIl4urA==", + "sha512/v1:microsoft.windowsdesktop.app.ref/3.1.0": "sha512-JA8oDYlaS3rPvcczLrHLWbx/7Rdr18rRwlIyTflPIuh4yr0lnQg65ve9SPkIiYSLH5v+g6ryVm6EPyXB0K4KGA==", + "sha512/v1:microsoft.windowsdesktop.app.ref/5.0.0": "sha512-+rXLbXw6DUZiUirFq17LILBQ8tMQoVNharLf5fg78LdBf7f/DDxiTV0o35sBRe85HAEewaVZkqlb6PfjlvmeZQ==", + "sha512/v1:microsoft.windowsdesktop.app.ref/6.0.36": "sha512-0JRZrVwwDsYQbue5o0tO10sfzjO7UGAjFPTRcKT/QzyPDljnGeiATrADhPoeNCi6tsmEpafmlEIkJiH+SbKMyQ==", + "sha512/v1:microsoft.windowsdesktop.app.ref/7.0.20": "sha512-eCdVf6ia9vPelz62o84/e7D/fIFeBjQ/iEOU9aa/1PYcR0yKuW8J/+6oJ996MrZfnrdS8ml/2cWEwAeJeosydw==", + "sha512/v1:microsoft.windowsdesktop.app.ref/8.0.31": "sha512-F2ZqlRUS93M7EyJ01OxVlSZ7cZLX3BETvFDd/40JUrpykPrdOHcYZyWp/R38IDkdA1P8tN1Uwe21xlqqBjCyyQ==", + "sha512/v1:microsoft.windowsdesktop.app.ref/8.0.33": "sha512-irn2O9pUJHTmXyyzEcHLpFP773eJdpI5ynIvpwmbIoqcvdLGEThew5w+1H9yEaow50Po0s4bY+Lzij6DCXe63w==", + "sha512/v1:microsoft.windowsdesktop.app.ref/9.0.20": "sha512-z/KuP+Dkr31YEuNdsoujwFBLxEd1ChjfdpfBkYwmiC1DwJefrjdNvfNnLJPnW5VlYB/Swqi0N8oqi8wwLFgmXg==", + "sha512/v1:microsoft.windowsdesktop.app.ref/9.0.22": "sha512-EtbruLw7kxpzNDButT9HGDly6p9yAM00/w4HZbOPBC1vK8kq7Qz8zgij96irv070h/rINICgQ8SVr+9xs6JGJA==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-arm64/10.0.14": "sha512-lSaoV5YDlcF/C36uu0fQA0RCUt/N0GMEZuUNXJw6ReuSeuG5lUFoKb6QtD1/Voro/EWalx3OBZacIaX7k0bs+Q==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-arm64/11.0.0-rc.3.26522.148": "sha512-dGAYYNYmqq34DJrbl2WohY1esfYOEnkpXk6lMzcr6MeLlZkytnQyv83ckxHhbXI0eiMvzmbvJHxTVnu/BZZa1g==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-arm64/5.0.17": "sha512-Hy8bUW21EO5zU29PRsC+jubq/pP6N5jBL/u8RNE6odAoW/DDU8zZoKQ0ATVYhtT6wpiMt5IMeBsXdl2MpIKdhg==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-arm64/6.0.36": "sha512-+Gokybbp6YExCOIPClS5iK9ogzvNrvQHiRmh+q0IsETjIq9DwtG+E78MxxhYRKzKRK8uCFbvERpVttNfEbFm2Q==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-arm64/7.0.20": "sha512-9/XYKLU2xVEkWQBWp7HcpbjIDJ6dU1cPGA2EN6ZHBF7eUbinWDOYT+H+8nFcTKtvudtir7ouU72UiP6Do6lkKw==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-arm64/8.0.33": "sha512-CQ9uQUZrAxtYKDFSOr7YP+60tKvkRM/hVUceziGGtKXqfmXERwuvwkCLvsvr8ooVzup7S4i8tuE6QR25PN35zQ==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-arm64/9.0.22": "sha512-cdTCR+IMc5TYeRhuiglrhMI17sLS2ZsQ2YjgYNwHqWgRCpuZPQvLAWk0XIFntraHA0KuTeRA+Rosem22/rqp0w==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/10.0.14": "sha512-Hxj4llZzFIss9eBt/EKnxessXLi3/wj6Cwrqp2ZL1j74Pmg8VM+IZd9B7bWGt8flKre7z6cJwoRY5YpwJqX44Q==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/11.0.0-rc.3.26522.148": "sha512-kDkZ8Nw2CM8X6178ZQvtgeS/6GI+HM8Un8uD1aeunBPFiEWBoeVCxOumWhcXWrxdLqqJ1xMzvXiGdb4XoFJPQw==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/3.0.3": "sha512-Fhfi6NC7KBCZr3WSHyKL0OPGZtRm6htz8b1ihoKCO3aClplgheItWeBgUE3X4xptExpCtBP+M10AhJpHTLCqag==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/3.1.32": "sha512-BRPF2SJS8ZkLUUIE/Ca9VRECab9zSufDXl7Ihrodq54n44Jt+4i5JnOVh5eq0Vf1qM/vMGbFgfJ6qt95r10vkQ==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/5.0.17": "sha512-JfoOdMU5IP3EMbBFhUW82eIaKWBqA/y2UWv3sT1hEFhdaTVpd8Vx+t4C6bx3mQPTQRzfrW3s136IZd2npvAM/g==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/6.0.36": "sha512-hHNGpJc4CFbExEdy22WRxvBLmXfTeDAPi2voKp17MbQWvC+qI77Icrf3ijDhlt1//1uPexFwEDli7PlA6vnCfQ==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/7.0.20": "sha512-Q0TcTdqzKzsZ3vdclO5OAEwBzLmdAwfupwIFNYY0amyS1oBwkMYJ/qLEZArMtzcVR0FxZw0jKdn0bW+ADvKIeA==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/8.0.33": "sha512-aYwFzvVUnVsU4tPQ0Okz22sUYRajhjBVkPvadAg9zBWyIK02qMZRdo/AlaPO/Gm6v6ExMccf4mNUjQxRIXiTJw==", + "sha512/v1:microsoft.windowsdesktop.app.runtime.win-x64/9.0.22": "sha512-WX68NBhRCbAJJnnkMHVRvvRBgOe29e4gY9w7SbjOeNgL1dRlr0tgQpe/Tqo8qUzalHHofATJG5xh5cCOy2Qlgg==", + "sha512/v1:netstandard.library.ref/2.1.0": "sha512-Jr0OqnqkaJJGEVq3w9oNQrIEteD/4QBNg3YOh1cvRjydzwop07+5aWjO/SfEYu6CwBn+dSBKXj8niEvTNy2brA==", + "sha512/v1:netstandard.library/1.6.1": "sha512-CXLcLbtJJeiW9ivOLlnU5IY5Mg7jitMBbc1IX71pNqDtCAc61e7yphLf8F38OQ85MP/5552HoGBw7rgSgnfL0A==", + "sha512/v1:netstandard.library/2.0.3": "sha512-548M6mnBSJWxsIlkQHfbzoYxpiYFXZZSL00p4GHYv8PkiqFBnnT68mW5mGEsA/ch9fDO9GkPgkFQpWiXZN7mAQ==", + "sha512/v1:runtime.linux-arm64.microsoft.dotnet.ilcompiler/10.0.14": "sha512-UcpmRCl2A+RfQuHHs6CxaErtOJE53heqABJSIRezy6Pa4wrCi5heEi95DMYepn3r8QL8zz5CptiwR4CA43PrRw==", + "sha512/v1:runtime.linux-arm64.microsoft.dotnet.ilcompiler/11.0.0-rc.3.26522.148": "sha512-0L9BtGU8BGFONAJ7EG1aZiYr9NICkZvbfRU50hQDn8U/wdv6B4sZd5gu6jZ/wq4Bbln7gGSBMClxkUBW4hFQ9w==", + "sha512/v1:runtime.linux-arm64.microsoft.dotnet.ilcompiler/9.0.22": "sha512-/EB7zMnrrlKi38GnDZ/+ijwRxQyentelc9xV6TPKRubRQTiQaK6rEcn79WHi7y37jw1ybXRhWVwZarHRZlVxTg==", + "sha512/v1:runtime.linux-x64.microsoft.dotnet.ilcompiler/10.0.14": "sha512-m/ieK6s5RbG2CPljI+m6HdDkFg72H/ZSlanRER4btNulnlUvhF+/KJuVZOLM/K5IySJ+RiG6aR8In0uiOoWqig==", + "sha512/v1:runtime.linux-x64.microsoft.dotnet.ilcompiler/11.0.0-rc.3.26522.148": "sha512-IKe2pTQj7SHSPXtrhSekhNwa1h32Zkbpi204Q7kFXQAGEWzhA8+SiCkOXVd6zTv2sOsrhVgEtx5yT7DLrB1f2A==", + "sha512/v1:runtime.linux-x64.microsoft.dotnet.ilcompiler/9.0.22": "sha512-jx1qvTtMvpsFLj4B2JAfI4T2l1NwgipG1RTWA9rufCX9uikqKxMCdVWAzgqDkigy/leTL8LXgaNlVPy10GWqJg==", + "sha512/v1:runtime.osx-arm64.microsoft.dotnet.ilcompiler/10.0.14": "sha512-U3hoAD9ZqqCaWTwWRu8lr7ckqDF5qXQhkzGW0AFEGjWwJ2qO3l1IMrL26Vso43WM8fhYk+bsIj0Gmjju7gXeGQ==", + "sha512/v1:runtime.osx-arm64.microsoft.dotnet.ilcompiler/11.0.0-rc.3.26522.148": "sha512-dveQwEJgGBL8SJkBvdQZe5+Rb+xo+uBlCuF0WkHAI3hv2/Zmj2X/ceikVw9yNVSdsS+l7ltP+6GfY7dxLgfHTA==", + "sha512/v1:runtime.osx-arm64.microsoft.dotnet.ilcompiler/9.0.22": "sha512-JnxWhAswvbbTy3Gaf+BUIlbc4uJdYhRE6buv767UkqRmix8fTeb+zRg+taTpX/64MK8LrBHx5g1Fps7hE/j4+Q==", + "sha512/v1:runtime.osx-x64.microsoft.dotnet.ilcompiler/10.0.14": "sha512-z7/XiOwSqWTIzDZqO00IP3extOs7il1qwFNa6P87rVpnCp6e4Lxgg+nH2DrFVcdrNc2ai+9++i2303xn3P4lAA==", + "sha512/v1:runtime.osx-x64.microsoft.dotnet.ilcompiler/11.0.0-rc.3.26522.148": "sha512-I9YqxEgscSjr5sYKphNswT4TxFTk2yG7RnISgNeHgslx26+AgqFYVMZ6Ibqf8j1vAdm3z69M8/YB3MevNVaZfg==", + "sha512/v1:runtime.osx-x64.microsoft.dotnet.ilcompiler/9.0.22": "sha512-2IzpLs32EUztz0Sq0PN5LXPNHP6dpXF3iP3C695UZItq5Wu02AcrNpDe7+ujapXxMxUNE+yjBlf3nkAwu6i9dg==", + "sha512/v1:runtime.win-arm64.microsoft.dotnet.ilcompiler/10.0.14": "sha512-28U/aWOlu44dhBelU8NZEr6ha+D3t2aI6gt/PzQSuHXzCMsla/iRJ97skD/YmBsly7+fg7CHDBkcYPlmRWAX3w==", + "sha512/v1:runtime.win-arm64.microsoft.dotnet.ilcompiler/11.0.0-rc.3.26522.148": "sha512-rPzdI1/OLNTBY068wEq3mtP5M5mMnLrz4umD4FKqyI+Qk+vcszwoLeWyGAL71F5MteMidz+ac5CGNcPHFkmFPQ==", + "sha512/v1:runtime.win-arm64.microsoft.dotnet.ilcompiler/9.0.22": "sha512-tazYimRKRb5HiMu7eavB8la8fqWGL2HteQZ/xexcv/6NrPQHsD8D6WZipFuXAhKMLXd7PrdkuVo0OCw8AzyAvQ==", + "sha512/v1:runtime.win-x64.microsoft.dotnet.ilcompiler/10.0.14": "sha512-ZiiQBsOdluailDf6kiMGIqF8fN4nllbQf/B39Mrkc+n2CMb2ZLc3g43GDo4T77aDV6gcmLYCNf2Idxc0AQdZmw==", + "sha512/v1:runtime.win-x64.microsoft.dotnet.ilcompiler/11.0.0-rc.3.26522.148": "sha512-lcwQOd2lh1Rm+zbXLrSsN8K2/ioa7zLLeBWeKJHcI/vCvRZNoKtdyAgB/LdCVLuvoss2LRKqwI/jN4jzUrt+Ag==", + "sha512/v1:runtime.win-x64.microsoft.dotnet.ilcompiler/9.0.22": "sha512-XDaIz12Bo5aVvT3AUmFheT+S+M9epOknCoSzENVj8a2HlkCiA9CZM+ZykrUodvd0+H9CqXFtPMyiRV40WhF+Gg==" + }, + "@@rules_dotnet+//dotnet:paket.bzl%paket": { + "sha512/v1:awesomeassertions/9.6.0": "sha512-3joel37nn30rYVP4/AP27ybmZsXbxJwMFRzScKyl7VJyMaVxjzBeX9OdUyclRzeHq1QJz8aacfMq2VyE91Amww==", + "sha512/v1:azure.ai.openai/2.1.0": "sha512-9u9f/FCId1QFbv4ydjcdYVSlbQ2hZG39wtm6lSdtFBd1+g6Zy358BR8IRxrPIB6fF1ClY6LQDwcOuag5EWEGug==", + "sha512/v1:azure.core/1.64.0": "sha512-v3+nA9kjZdfu/Cwq7rKlLd4JWdu2niVn+qDI/OjGhRK7zE1K+wdjNVsgGDo3lKNCFsDgriWKe0Iz32EW2ULrzA==", + "sha512/v1:benchmarkdotnet.annotations/0.15.8": "sha512-DFLX2cXJSDNQMO3yJzaKjGZNNxSf5tlLTyIKvzIW8NbGNG4LtM/LbQLvZ/9UEINZ4wArXNq1DPEw29E4vISs7w==", + "sha512/v1:benchmarkdotnet/0.15.8": "sha512-QUZ5ClSA06aLdm+kC7nbpOE2Jlhu7loBg8q8gLDV5wBuQ1aPN7Ns+eHxei1mvgsklDT663a/sJlSxMKAfdFcJw==", + "sha512/v1:castle.core/5.1.1": "sha512-N4oUnr+qEtAMs1vK7ogGgD33vHWYDJ4MZ/NuPgV9avKrrq0kzYJ0qVlcesdMuVl8nWkTsRJbhuaxVqZvehrC+g==", + "sha512/v1:commandlineparser/2.9.1": "sha512-TzZORclmjH58xqkitIjz+lIwM8INekMmlPCmrwXOUo6gSB2DdeL08QMsaZA0e0gDzpoOSAaMb+FexG+xJU8IXQ==", + "sha512/v1:diffplex/1.7.2": "sha512-JPtEgy3DyXWvpU7uJVikOhwU5a4N/b3oChVfYe/o8lqcyKKQqMJJFqjbZIr7kKkc7sgA6iTtsKmvDDcHTIZNmQ==", + "sha512/v1:gee.external.capstone/2.3.0": "sha512-kHnVcF1ZHDuBkSey4Ldj2sq7ISMU6flrL2MvYrRanz4cII8TbfkaSDTdGDijisL9IWHOi1Rf5w+AeLZvxmxKqA==", + "sha512/v1:humanizer.core/2.14.1": "sha512-yzqGU/HKNLZ9Uvr6kvSc3wYV/S5O/IvklIUW5WF7MuivGLY8wS5IZnLPkt7D1KW8Et2Enl0I3Lzg2vGWM24Xsw==", + "sha512/v1:iced/1.21.0": "sha512-lgvcEHF2Obyoj5rUjUpfUAQNx0JjwoEJ5NTdvdgXSyUJV9X8wjU3MQQxuRauH9Gtxwb0Wt9qubuAHVMpFFkRZA==", + "sha512/v1:microsoft.applicationinsights/2.23.0": "sha512-3Ul7+tDGXlSk940qFkTz0IVNTNAd2DulBvjV1TY14oFSx8EyEN1d05hXgKqxRqdiDePrrq2O8SxvhwiGdsIVfw==", + "sha512/v1:microsoft.bcl.asyncinterfaces/10.0.10": "sha512-8Mx8TUFWoK2gH35Cyr0ndO2l9j4XJzo1wsC6ufVD2nlFsVe5NXmbM+vEOILLhdANZKEgN+U8hkPrT1YQsSSBSA==", + "sha512/v1:microsoft.bcl.asyncinterfaces/10.0.13": "sha512-wJST8kXIEadP/LskuKK2fsQdbvmjXhuF5rBcUQy4dfjg9+sDSyvQVgB3BO4n3iF4aQ60KPxizcairf0aW4AwmA==", + "sha512/v1:microsoft.bcl.asyncinterfaces/9.0.0": "sha512-bYp2ksSR5uB6xqOa4NyD2gBOeFrc2n8FAWoh781MNMDcPjk1ysD7DNpv7r7sQOXfdFJT6F/syX7fN4lmUsn+RQ==", + "sha512/v1:microsoft.bcl.asyncinterfaces/9.0.4": "sha512-5W+kj/UwatizPzn0crP/UQPEP81DPKlPcrqGlH98O3aoh0BKYsqWPOHqGGK5STYiP6LD/sFMBlEHNVMDh+gYsA==", + "sha512/v1:microsoft.bcl.hashcode/1.1.1": "sha512-UMESB/MTHGSZ1lc9M8CVHt7NupRLzQh2K1qRK5pMnNOETUx/4ZaGwhliM2XW93QIGKglIAzkV1sUwHmx9/xvPg==", + "sha512/v1:microsoft.bcl.timeprovider/8.0.0": "sha512-zT75Wrt3nldkniSDDS4ATQj1NKvAdCr/f7aRtymY/pImnA1qlccNorg0nhi2nGu3/Llb0DHElU5WjSOCJyO6Wg==", + "sha512/v1:microsoft.build.framework/17.11.48": "sha512-y/Hk1fEUdX9KWOzAWa3dJ+GcR3YlULyhH7SFVddtEgMSaIiIr+M3aRRzk80wnXO9YlBdzoMakHwy2Kinm6BdWQ==", + "sha512/v1:microsoft.build.utilities.core/17.11.48": "sha512-sFbRApNXDU/n9uTQWsfBDOg3fNaW74DJDKGMySk1Zq54cLS+/SqJ5882hBEhS0tE8241r6X5khsuq3KmRfLpWw==", + "sha512/v1:microsoft.codeanalysis.analyzer.testing/1.1.3-beta1.26255.1": "sha512-m73wX0jh+DcegJi6ZnOaipsOPfStG+awLWGUZ/6f3Tju7w0ucl6o5BkFYxzjf98mAPh1/6gYdBnXUqCQ2H4rjQ==", + "sha512/v1:microsoft.codeanalysis.analyzers/3.11.0": "sha512-tP9SLzLK72XCExlh8KXfrKbU6ycmZL3ExGl/a3Ml7LNy2Uaam7gFjjUmdzyTYkMXTyckCHHpzx7bD6BMumh8Bg==", + "sha512/v1:microsoft.codeanalysis.analyzers/5.6.0": "sha512-in3YRkkpGhfekPD9j9G04qzdOoWBjaiGYrl6xy0+8Xp0N3Q1+Du5wkx/THhOTIvqk6Oy1d8RTIQnA8/qFapDNQ==", + "sha512/v1:microsoft.codeanalysis.codefix.testing/1.1.3-beta1.26255.1": "sha512-ZqZj4NKb24MAUBNwiZB+NfCqjfnysnNmrqS3QPGC20NzGD9nb+3tXxHYVEh9TxzUDlsin0+uKP5cbTKfppo9ow==", + "sha512/v1:microsoft.codeanalysis.coderefactoring.testing/1.1.3-beta1.26255.1": "sha512-fJIT6SSvKGU1ECakq2oZor8Yo6B3O0S8feSBFdWnL2dp9EErwAcpxHmlxHkh4vkT1Mq38uBYpoiZ46GHoJin4Q==", + "sha512/v1:microsoft.codeanalysis.common/4.14.0": "sha512-k9AIzOrtcZVqr9+lmcEW0vY80emyXx5JB/757K0HUF96GeUeiTD+djOlFF2y7k4XPZo20Lru4tDgQos+VKBr0w==", + "sha512/v1:microsoft.codeanalysis.common/4.8.0": "sha512-R3u+gGs/RakiGqnBf80niDI56pCaN1g+2n66QmKqj6fAv6xw9uES2BtwtKOkQsiTEDqPm6Vk0OwrgsP1S+rSbA==", + "sha512/v1:microsoft.codeanalysis.csharp.analyzer.testing/1.1.3-beta1.26255.1": "sha512-bvK19LZ4vnml2i60dHZo/AzS7ga8NqDbValVfLr301FJBC9AIrV3Ns+udYCpjcSmsgZAQYHooZGEi8PuMsZ06g==", + "sha512/v1:microsoft.codeanalysis.csharp.codefix.testing/1.1.3-beta1.26255.1": "sha512-77KgmGFTV762oms3rRruJfSpaHGpm/pAQort5SP9o9rkEepnesh9ByOtkGg0OtSnXqHmWaFv3cvmniJu0Ud8+w==", + "sha512/v1:microsoft.codeanalysis.csharp.coderefactoring.testing/1.1.3-beta1.26255.1": "sha512-yyvFmNamRl36xLCLibsio/MMguaseL7dqK9Y6Bb/8Kntx4odFCCH7zkzdQHCX9wkLAze3EzO4g3sTQ5LiX16aw==", + "sha512/v1:microsoft.codeanalysis.csharp.workspaces/4.14.0": "sha512-q9VD/wqMEGW0S5WIKuTZ4Wr9EpsZJQrQxqCodxjlsfW0bWl7mOQ4zA7k0Nf80ZrEe7Edaz6+3SBvrALiUcaHzA==", + "sha512/v1:microsoft.codeanalysis.csharp/4.14.0": "sha512-kqS2NihVvNQHxzLePtyYiiJmFzoYO9Wm46O9DhfUgIIf5NwTbvSy66kV9EM+qAHmGpi7zQy4w8JU6DFnPlAyTA==", + "sha512/v1:microsoft.codeanalysis.csharp/4.8.0": "sha512-1HVXCQh5b0w/KE7qni2T1k2dK/5+P9uXwOHu+NDUwX6ZplpNH94FSUQBC/wwzjFpxfmdYhen1LvGk0h40a/0aA==", + "sha512/v1:microsoft.codeanalysis.visualbasic.analyzer.testing/1.1.3-beta1.26255.1": "sha512-4xqHHBRNaLuWk2QW5+d4+Yj+lwaUQL9p7PSsx5iNr1VouYPfa0SafYCtRMxNput0kKpxTsOvIoM3Fj1dU/U24g==", + "sha512/v1:microsoft.codeanalysis.visualbasic.codefix.testing/1.1.3-beta1.26255.1": "sha512-Pe84iZObeQ8Ljq8ekzVaGCVtzggyn7IZJOZrj2AbJ8K/pJQZ+O3h/BH8T+N3CCG3h5ysbQ6dm3TYCRdXnIfpzA==", + "sha512/v1:microsoft.codeanalysis.visualbasic.coderefactoring.testing/1.1.3-beta1.26255.1": "sha512-FDxrR67nkmvpC3rfeUzy6wnNEIaY/QD/DwZ+sArEYyzyEvowrFHLrADwjqW8EhChLJrBJbN7UrsyJnwN1/r3vQ==", + "sha512/v1:microsoft.codeanalysis.visualbasic.workspaces/4.14.0": "sha512-LZMVjjbRTcKOtgVDz/sZn+AXBNGL4iKYnWwu5eOvvRcdXaLNlOA7bYtTZOnSMlqig7b/3gMzkoaLqcJ+7hgddg==", + "sha512/v1:microsoft.codeanalysis.visualbasic/4.14.0": "sha512-vXhNyQk07THoSHzsu/fM48tFFHYAZQumfT7uDJuL/5ZO4CRgJK9Zr6UOJOwX1Df8N//lRMeymYyT+qiAmnWiYA==", + "sha512/v1:microsoft.codeanalysis.workspaces.common/4.14.0": "sha512-m/c+FWBNr/JgCYRJ/jh14U9oAtPxHTgDiujb+19QG1AA3KMNZed+UQ51PRSaOt9CbIoMubZp2AkUMSeioz4EHQ==", + "sha512/v1:microsoft.codeanalysis/4.14.0": "sha512-eNBbL927Lc1Nh24ElWJmlGA928O9tu4mgWGOqmMFe6sskqQWCdnronCrrzwUdhBsBIjfx898MOCMOXuZQMtqOg==", + "sha512/v1:microsoft.diagnostics.netcore.client/0.2.510501": "sha512-gbZWvs9SVPM+P7/9oNzssmgX2VZntsXsXB78bwZD5tDQ5cawEUY2V4XC6KotYLbpuV/+jmoOvgwvTO8Ur5nvjw==", + "sha512/v1:microsoft.diagnostics.netcore.client/0.2.607501": "sha512-GdGIngaFB/8M44Zn0tsdd3Os8TtZVpl26omlzFmxEZ2z2rN1yKbDUhhhXVCtgNECBFUdKaaEd48qmU3Ya4SqtA==", + "sha512/v1:microsoft.diagnostics.runtime/3.1.512801": "sha512-hCww6vrXZqAUoFk1FIh6G0rshMyoFOwM8LqD078/mr5ulIDEXMBU1vpjHNjWbMU6ukNK4ik6IRbilL5xpxLtMQ==", + "sha512/v1:microsoft.diagnostics.tracing.traceevent/3.1.21": "sha512-pjzR9aKCY4SbZe3MAFF5Cc+OjGABtm1CeaZdxT61ECIJ5Buv40tBfH9mGWaGkgt9Gvvd+z0IlLz1izkchBTeww==", + "sha512/v1:microsoft.diasymreader/2.2.10": "sha512-pgvn8AvPXyFhM0DGlU0TaGF8Z57lE2I+tEehshesi1rZKiGizlpHsOFWGa7AZWWA//Hr5BL5CpfN3AwbpIqIiw==", + "sha512/v1:microsoft.dotnet.platformabstractions/3.1.6": "sha512-Vbh/VEh0aGvtloiZU7fpnkNCa3mw+sMcxFLg9KJ8pcwIUiwKyWe/nfZJ98BBN6XiVT0TStedXB5pV4NnwrS0xg==", + "sha512/v1:microsoft.extensions.ai.abstractions/9.10.0": "sha512-hMeLx5YsZoxs/+suEsr2uAwUjsg8IgotR9pzBmRax8PqDFU8nlGUWJplxcl/+UW7pO6W3XTq4KrJ+P3vbiNTGQ==", + "sha512/v1:microsoft.extensions.ai.openai/9.10.0-preview.1.25513.3": "sha512-lgkjDh0ryZeGDRB5Gogq+5Qra/AG+3xdpR+Mt7pDrQ12t5KPMRvQ+dw3hyEXOMl/VGWS1QqBbwsf0gPgbVcfvQ==", + "sha512/v1:microsoft.extensions.ai/9.10.0": "sha512-w5KR6HEbVQ5c0MU3Hj+Nd4jmOr5U0jSgpGJeUgfOdN2GjxMQV1+wtDgbE/HiL5neVZQN9/BLwOXKby/pqF61Eg==", + "sha512/v1:microsoft.extensions.caching.abstractions/8.0.0": "sha512-H9wwkSzB6tk2L3CFPeIZqdxwcLwo9iHjhxhWcOYFdG7i8TsN+dsD0LH4kZ1L2q1A6+n4ID46DLthFFqohIvhNg==", + "sha512/v1:microsoft.extensions.caching.abstractions/9.0.10": "sha512-GeHbk72Z5GzmJwIn24bkcbxsH+SRFi9OayBWmjy6qlto+39gasgYiBj+2ufJrAHxahHW2mNxHLuAWHxYYZfXCw==", + "sha512/v1:microsoft.extensions.compliance.abstractions/10.11.0": "sha512-eJDqQfmXITZr7TKbO/of+/1gl8EdcVQ/FYVEx3u4K9Vy54c9mQ9nammkp8+iIu6PdnPYWbvJggrcrC6gaktddg==", + "sha512/v1:microsoft.extensions.configuration.abstractions/10.0.13": "sha512-1yn/u+lXwUUfASntZD0ztNL/Imj2E8UMuaEpLD6nwO1x4KjDHHyn77bMeauqsOFxTRyCw0/zKBZpJs48wh5+FA==", + "sha512/v1:microsoft.extensions.configuration.abstractions/8.0.0": "sha512-MxYXCRCpQpDI30/tJvqISkfdm/l063rSI2jVpjMIZgoB0tq0pEZiBh2srsz0ugnNq/zNRjb3arMXi+zsWtMaLw==", + "sha512/v1:microsoft.extensions.configuration.binder/10.0.0": "sha512-bH+AO/Klr68TI53UlfjyVmPjb65C14QEFmGcE5ds/SlN4sS0coIGGU3Qs47oMQiagfP2PoulNsYNG3/VuXaR0A==", + "sha512/v1:microsoft.extensions.configuration.binder/10.0.13": "sha512-EV7HcsfpTYvk5KJWQLK/tnIrD+RgSW+L2XOWCcUUTdT0FaVU3DewbHEosW8TypMaLTcxcEY+7C2udAgczL4w2w==", + "sha512/v1:microsoft.extensions.configuration.commandline/10.0.13": "sha512-IrrqE7R9DO1l6wsywzM1OTJgR2QfUTLevg2sYqXubnsPJiPwX6HD/qVhly7L6/XYh0VrDQVuXhe7rpbWeqO7uA==", + "sha512/v1:microsoft.extensions.configuration.environmentvariables/10.0.0": "sha512-Tcus259p3DvLe7pgO+GVD+oVQ3n2FBLSyF4BhZY/Mc82OHuEjVSele3fjKxVUP0lk94RCuGbioyCmH+mmXzimw==", + "sha512/v1:microsoft.extensions.configuration.environmentvariables/10.0.13": "sha512-DEFjf1X9NDOn1mI14oNFgiLmXofPRJx9JTY5EO8+ARm2NsLVCJZ8SDc3IMHiusu4chnn4qbqAnF8deI7kf98kg==", + "sha512/v1:microsoft.extensions.configuration.fileextensions/10.0.13": "sha512-VAQVRsM/n4x9vZF6OkbvZMDiAPN88NNHC5ZjdDFn1wnScci0hE9aj/r4mRAXRlJWR5G1uANCYX8EY9+UmtIpBA==", + "sha512/v1:microsoft.extensions.configuration.json/10.0.13": "sha512-Pkdgc2R29UQhg7vCdaeMB/TSorILH7JlZ7+c7PsYd/S+W6g5Rl3w66VTdyHsLJ9CyyLc9DFNAuLCplXTQqnhtQ==", + "sha512/v1:microsoft.extensions.configuration.usersecrets/10.0.13": "sha512-MI90RM38GlutLx/6xUiSd42CGmTEOQYW3H4d/B7l8fi271uCqD88tJdlL2fBqZnD0ngkDW0vAPqDuIp0ijtzbg==", + "sha512/v1:microsoft.extensions.configuration/10.0.0": "sha512-cUi/56QZA0Idt8SeyMEsjHkXX55smUqGnWDstFo2BoaKoEKbHY5/eOMqiVGTsc6OdsXq5Jy9fSLOORhhkS5LNQ==", + "sha512/v1:microsoft.extensions.configuration/10.0.13": "sha512-qL83vRaljmu8SJUWaEtVLNCLHb01vUi2pS7FL9Q05hcu5pFu7SKdTEhKIyZErhDfwhFT5Vy9ga54QWRd//cZTw==", + "sha512/v1:microsoft.extensions.dependencyinjection.abstractions/10.0.13": "sha512-sqnzVqf7TBGwINY7FQdWkE76L+wjOJlTLo6Z+CW9oeiWATGt7c8sT2yLt0nTNiACtS75XgX99Q7bFLlMDt9KMw==", + "sha512/v1:microsoft.extensions.dependencyinjection.abstractions/6.0.0": "sha512-AVo5KjYsgbNRQ7GcXaTqwJKMwvLhMymrLpRaFaXJ3qB3zWawxGfHXy3+b5DD4L8uzcBZ11CWusObQValP5l70g==", + "sha512/v1:microsoft.extensions.dependencyinjection.abstractions/9.0.4": "sha512-yG2pj45qdgLQfzNjgiYKsvWUf0vQqaV1FRX30kZzgQUrNJCnFhYNouFOLLdkUUN6nP2V4H9HusCAAZvSCHOcPw==", + "sha512/v1:microsoft.extensions.dependencyinjection/10.0.13": "sha512-OcGo3d8uimoqH/jTbvu/T31v64F3EDnhLuHA2bw4rF/b4d3oruiAQ+qT30BAwtGNyYWLKMAAagcezJy0RX0lKg==", + "sha512/v1:microsoft.extensions.dependencyinjection/6.0.0": "sha512-wl7voCCnhdhgj4xbwbfUeao/m7MpWqxBoba4FEDujC1obyirX3yb2MdiFSrYlXzHG3q/p9S2yFWSv8J+UVWSig==", + "sha512/v1:microsoft.extensions.dependencyinjection/9.0.4": "sha512-uCoySYSdv8Qc7sRsZjYacdCfM/WQTU+F056uATIDxtXMSoF5RRF7cfcOwjW/z2wxFxmG/D6Zuv/Rwme4E7dYTw==", + "sha512/v1:microsoft.extensions.dependencymodel/10.0.10": "sha512-OIfiU9hYZuULmU3tGa9JiPxR51UehkY8uWzItD5HfZzM6c0q+fVYS2kF4h8kfzJnmoP/+/3DJdDfQM69VX1Ouw==", + "sha512/v1:microsoft.extensions.diagnostics.abstractions/10.0.13": "sha512-7cyZJ1A/FdDhSJw2LpFlKMilU367LodDpkvRlIi1hyaeOWD70Nooh8T99H+Iv6M9bYNn4SVPnnhBCZD47pW13A==", + "sha512/v1:microsoft.extensions.diagnostics.abstractions/8.0.0": "sha512-p13QQOPgPpDIuqAGvVaduf0JmDz5wnv8skbZanPiWVzqeu5hFkOJifjfMbVrx/5q2qen/LarlexbHWTQsX/2Fw==", + "sha512/v1:microsoft.extensions.diagnostics.exceptionsummarization/10.11.0": "sha512-ncjc/8ZEYLM/kU1aHhfRwemYd/l18Tfco16Bz7BtIVgQTwUUtoRFjJ2d1saFzArmvG2eqDyXp2+Y4IRmWxXbgw==", + "sha512/v1:microsoft.extensions.diagnostics/10.0.13": "sha512-ET3/5TB3aaYcbNElvTMqB8fHAx8mDKlhvfRSw2Dc8jbIxWK3+1rjOr2zX14HHZaePlHFF+sXwEqc9r/gFvxOng==", + "sha512/v1:microsoft.extensions.diagnostics/8.0.1": "sha512-pmjH3jLDk4Sg3PhauxJWCy4oZEGuJps57+pxSbsuSpColJ1vlBueJLizZC8V+GuKlo82GD2XaVAZvSPw6nviNw==", + "sha512/v1:microsoft.extensions.fileproviders.abstractions/10.0.13": "sha512-vg2s8hHME+9qRW1QxI392RvwLBbW/CfT+werLG1hwdxi+Za+BbrxEENbZaFChL7hrRCQ65NcZEcrqve7aK1UmQ==", + "sha512/v1:microsoft.extensions.fileproviders.abstractions/8.0.0": "sha512-/pqhjy6BlpTyDjIsk+B14nvuLVfd1TgGJPxIqVZpxSbCcKtcdPWMakch0Y7NtbL+vwMV+HlFha5lYXgxRZ4qCw==", + "sha512/v1:microsoft.extensions.fileproviders.physical/10.0.13": "sha512-6FBP7soMpjulEfl36p7VVA2dIaDfmRf8nd1lgq4++t9D5azRiP0oY0KjtXRdTzseaC9MnpmFe7MPTmC8Q3JXSg==", + "sha512/v1:microsoft.extensions.filesystemglobbing/10.0.13": "sha512-dPqAXy8doQT1K+PeX0CWPeRiVKxHAogQ1CVcaPcS9SaITfpWIERWLwr0/sZDplaj4/XLo5RQabPxpwBwi+Kziw==", + "sha512/v1:microsoft.extensions.filesystemglobbing/9.0.4": "sha512-rx5fmJ0eyJPbgNq1PoSU+XJ2qx4ClpD1ceDmrhLQQ0/Q/NFOPLlXm5pciMfAYGs1S8Juhh8+x7FS20sMcs4W0Q==", + "sha512/v1:microsoft.extensions.hosting.abstractions/10.0.13": "sha512-sIv6+ZPe3wdZsSUBYqs6Tk01lEo4AxUotvIg6eS+ZTRR6ZR4thgo48OhmouAmOMzQRnYX8s1VIgQaswR4f0b4Q==", + "sha512/v1:microsoft.extensions.hosting.abstractions/8.0.0": "sha512-Z4jBbBObokHPLGXk3tELitizhgK0SQpf8n3VKwLJAIO3zUDHtPrEiu2UdC9lRdqVmHC12Im0EHiyJwis12HaZg==", + "sha512/v1:microsoft.extensions.hosting/10.0.13": "sha512-JMx2PyyWxU6PRNxwZ/E3Xqag1s+HY8KFAFd8xmnqfr3eMAFTkzGYfLx00+Mtmh1b7G/+mx2CFWZkEj97oGZdNw==", + "sha512/v1:microsoft.extensions.logging.abstractions/10.0.13": "sha512-Y3oe2I5CEKRytcK6YOWFZJJOFFykrc9GmjSMWJ+Em0Z1XGGOMXE0Z+5xWmeEoc2pZHGz50YDFvosOaYypYerxA==", + "sha512/v1:microsoft.extensions.logging.abstractions/6.0.0": "sha512-v7G0uYJCEEgD0aZaGgUdC45IH7yYf6L0tYphCrRZtNJOh1PFFcMqN23SxoBNHOLTliS5cqgcaOkkgZWOGoox3w==", + "sha512/v1:microsoft.extensions.logging.abstractions/9.0.4": "sha512-gFPAVaJSpboi57b62ZEc52w4C2aMmwCTH5oD6Sx39tRgsGapRgv3+yH+aI+vEvJYcbhSB4yI2nG1fgYi6bp3Bw==", + "sha512/v1:microsoft.extensions.logging.configuration/10.0.0": "sha512-ilZC08jI+mexJPr81kA/ClvQMvopdZHxhot9CM9hAOOYc5qRlMGbwvKFNFPD8N+e5VU9V5w/KJng/B3orJt27A==", + "sha512/v1:microsoft.extensions.logging.configuration/10.0.13": "sha512-u6yj+3XsscuFKV7nJi720z7xiaIV5KTuUFbbPIl+xZnKoB7mqi263dnXpV6s3VWam3yrdEc5P6zp8l9Hhm9F2w==", + "sha512/v1:microsoft.extensions.logging.console/10.0.13": "sha512-Kq9XfXPKeUeqtb2mgWUTpz7LMQaRzyT3tagwMvlILLCv6yZ2xgV6NPGQ9Ej/oPoP4flQM55a56jfM7QNrqTIgw==", + "sha512/v1:microsoft.extensions.logging.debug/10.0.13": "sha512-dI6FHHpAzdnItzMi5MzXrxtkqAoil4Cu8GN7X6mrWU6i+apNVLa0lyBwKN3q8EHIzRv4NTJ1mPvGHy1C8KTZ7w==", + "sha512/v1:microsoft.extensions.logging.eventlog/10.0.13": "sha512-cfvWCkLd7wSTAa3hNwtkqOdcPeszZ/bbvI39suDfpZucPtQPsrpKQVnIwBvrmSw6IBm1/aS5/n5YPkqyMnwY2w==", + "sha512/v1:microsoft.extensions.logging.eventsource/10.0.13": "sha512-6hqxr5n9aN7ZU3iFtIMsBlBYSRiT1BLb8LkQ9yH6cOaKCkWVFggjYSrnFzLN1utXhXlUyH+0/qJQiUI82qraNg==", + "sha512/v1:microsoft.extensions.logging/10.0.13": "sha512-6//Y/KXdzFQ99xq61NZwGvAg1oEJNmwhOg37LuZIQ5VJYlL0TB/x5ycrx5hQuVOSZ00JdUwGfnwvf2KW10QJ3Q==", + "sha512/v1:microsoft.extensions.logging/6.0.0": "sha512-9d7FkKNTt/uzX9p5nAg9wHhXxw+g1G2uwOAMSVCo1l9CxvOZqGcG4tl+5R+1BCvifzVjdnOiR53E9iNZDVlzEQ==", + "sha512/v1:microsoft.extensions.logging/9.0.4": "sha512-dcL8Hur5tzJZIaIq4Deep3soGeKDonTDI/DweAfywe0+eF2Ngi3bFU2Nu3v0YVApjI6IHPxcyqt+LsY3MIlkKA==", + "sha512/v1:microsoft.extensions.objectpool/10.0.13": "sha512-cnXaKW91GYPAlABL8bWAd0txwY4asVSm2MOp4gLyyH6M3DC9DpNryR1c4RNdLprutiD6WSEHVNtoHydx96XqVg==", + "sha512/v1:microsoft.extensions.objectpool/8.0.32": "sha512-S8in+vcWCUTYTfZWFc60DKLC35CaDpe9sYljBTYC7rmvvQ3b1k+QeO/YTPHl4Vser7NCn8VkXsyRMnJQWdAFFQ==", + "sha512/v1:microsoft.extensions.options.configurationextensions/10.0.0": "sha512-E22PBySOcYXl1o1qMM6MnMLu9Hb75sCVemGuy/7uuWVFbByZ0d3FHmZiH41j9P5Izi35ZuvsfTZPUkLhrgV6gw==", + "sha512/v1:microsoft.extensions.options.configurationextensions/10.0.13": "sha512-I/T3TSBumSCRfP6UeeRcGv5H39D4nM0AmhBFM+LMsvPTg5lCQ2+PuAuBMcaLpw9Jcloe+0xXkbrP/wxKM9bwuw==", + "sha512/v1:microsoft.extensions.options/10.0.13": "sha512-8nXqNCDJgjg1y1DXwRFmUjbddUpvR+lKgyo7GOLP/4g4jTP0OqTDqJnZhF+hWkkL48Kh3C2PgDCN25c2ttyxcA==", + "sha512/v1:microsoft.extensions.options/6.0.0": "sha512-PDRFK6wCGTJksFY2VLpSgqdLA+3itnWtJfqF69kVvcyoVxWBU+tKSgJAZetOnXvB670jSFSTzYlcTQSaukpd0g==", + "sha512/v1:microsoft.extensions.options/9.0.4": "sha512-5erk3hQsT/uOl7TJrAKQdtf5uoHn5DNeb9rV2FLKAVfxcUBgg5xhXJsRXs2XIJ+K7Ynai/bnDNnXTGGnR1svFA==", + "sha512/v1:microsoft.extensions.primitives/10.0.13": "sha512-gBWYLF7cPvAbIkhm58A7a2/1g2KsRX3Sy07IOkpAdBMtpTswZrki4DSxisdfSBOIA/JyM8MpL9GSmeEbfAk5lg==", + "sha512/v1:microsoft.extensions.primitives/6.0.0": "sha512-CyaX81VXrv8HhLEK5qTq/XYBv3BhIe1lhKYYeexuSUUU7Ho+DaCqa6qZ8/cW9pAw7HxMgvZXyN/brLY3usRUfw==", + "sha512/v1:microsoft.extensions.primitives/9.0.4": "sha512-HNbyuV90vxHsQBxjQ7bjkwW1+XTJ1FSu7unDu5NTq8HHRH3+s67A1tZRqOJ+vkwgRxhMH26BBBn9xUzWXFnUVA==", + "sha512/v1:microsoft.extensions.resilience/10.11.0": "sha512-Pvd8BUQJlXoGYCvv4lnaG6pygYnPE+tAxSD1ZFMaVwP841pOjmOxTshsz/bx8upVOwNNOaDtLVqQFiXGKOEutg==", + "sha512/v1:microsoft.extensions.telemetry.abstractions/10.11.0": "sha512-g4sLweWOnUdBy7AXNIa3FzQg/bd0U4iyjbgPiOxvkFq/F5ZaD/2gItScs3Kg81OX4PG/cNrUXxcOBMhANmTVAg==", + "sha512/v1:microsoft.identity.client.extensions.msal/4.90.0": "sha512-8TINxuq2piigg/nVg8JZdz3gIvxFrs5LBkAi4SXZjf+vNFSCw0JbypGlTQkuIKK8pfEvoCf+KwafJOxexYBBMQ==", + "sha512/v1:microsoft.identity.client/4.90.0": "sha512-e5xtlLy0gGkv+DPyI3es6FbGeP3mxdsmBg6K9ayMmxNcysWlA4ox7haR5i6De4HyzydJ43k3DHLlwIxpXNd6sw==", + "sha512/v1:microsoft.identitymodel.abstractions/8.14.0": "sha512-F174v3i2PzwyfmgNXPdyHXTynpZGDmhrIrTmfCZPsDanqb6hRz9KW0hzN6t6VgyGG1HtGqdEd38wM2ImKwGotA==", + "sha512/v1:microsoft.net.stringtools/17.11.48": "sha512-uigVXhq6FT7XL3YEzDpLdF5uW8b4AzSmPGmTFU6Fiul2CBM2BoNPWX5oPoBjDMsiBI8O2oz+ZYIc1YvEodMVSA==", + "sha512/v1:microsoft.netcore.platforms/1.1.0": "sha512-a/iSwnRZb+LHFk49hQOyThh/ZNC3vsbZsF65XwQIb863qF6msmhdQtxGXFL28Ob2NsCz/drEj28BJd/YPpLRBg==", + "sha512/v1:microsoft.netcore.platforms/5.0.0": "sha512-hJP+EWSMfswgtlMEkNMP1jdElhNFwFAaehCxEEZmHaCbeD3c64syCK5SpyqKlMr9zo3BvWBzwyCB4w0OdAfxdA==", + "sha512/v1:microsoft.netcore.platforms/6.0.5": "sha512-GTMT/dgCRBCRUj11ssZ8K1FJm6Md+C/tSJl8I7YjxOFwSvopaIneV32y1VlnBTI4wy1SwueI7ou2sVfHkWENrA==", + "sha512/v1:microsoft.netcore.targets/1.1.0": "sha512-HvAzpoaIqrmZfsHAN4rLFji0r7YY5TP8r3SdkziXN7qU9KCpRIG+zfcBx+mIri/jkBNqjq4iWIfuYNtFBjSQ/g==", + "sha512/v1:microsoft.testing.extensions.telemetry/2.5.2": "sha512-mjcqGEmWh1AMnzP9MkRQ1/b8lveKyGvgi3859bwvfNkTfrZRNVDfgtK2vk0Dzdv4LcSHPPCY5NO9DTi/gzjJnA==", + "sha512/v1:microsoft.testing.extensions.trxreport.abstractions/2.5.2": "sha512-dPverw8jfCHdXrjtv13/pbfEZiXS0rKesm4XLRkALjG0dqqKUd1b+lYOokGDDsa3EJdP1j9xmVChbMdBsuasKA==", + "sha512/v1:microsoft.testing.extensions.trxreport/2.5.2": "sha512-O3lE+Y6eZ96/U3TrpbVVpl2rBL9J06Ex5+zmBojafcs0Ofgk+PubeIWXRX/bjCgEg01ueshVA8RZHEq+Ro1Clg==", + "sha512/v1:microsoft.testing.platform.msbuild/2.5.2": "sha512-CK+ktqmocJsi7B+LNaVshZxv7CacVh4Nyj7tvsjuxmFea52OdzmxJ7EV7tcFyICfqSqxPmQ1lemoX/bc7NORdA==", + "sha512/v1:microsoft.testing.platform/2.5.2": "sha512-6KqAjSgMFVifUOEbuRkb1bgaeX7X18JChpM++NWW1uABpcm5ZlcS3lCn9EVMvTX6+E2PYQMWhAMT7+QeGtH9eg==", + "sha512/v1:microsoft.testplatform.filter.source/18.10.1": "sha512-CMjdPlbNomtt3K1LjFmx4v6VeJZvjulE6OgknX8KIFFrXRK0DMbsTqI3+tJ2MxoKx7wFKf3xB8+/z1TuJlMOxg==", + "sha512/v1:microsoft.testplatform.objectmodel/18.10.1": "sha512-Uq4yA61fmEJkFGw3ai3tkhYGWEF6pnUQUkBQlN/8NtUDOxsNYVlWZ/oRQazwvV3qNjVRN4IO+YSp8UCCXM10Xw==", + "sha512/v1:microsoft.visualstudio.composition.netfxattributes/16.1.8": "sha512-6k+AckA8uV+0pbuvnFDHv36Jk5C9kWh3Dt2TcasNLuARvvrEfiMlqFWYh0HAq1DRCOnh808WzIbbctueA9J27g==", + "sha512/v1:microsoft.visualstudio.composition/16.1.8": "sha512-bGOILZtZi1/Z47avfXgjAhJdctE0gvzzFHXs4evY8yvF2PPWtYArEemO2VBGGeAdZ1TPjUwNGIFmSrz8glD5Uw==", + "sha512/v1:microsoft.visualstudio.validation/15.0.82": "sha512-D5KQQ7inSh/7oeFmhFjvlZDQWCHOZFWDZ9XPAJVLuSRJ5y+PmBhi6D3hSjaRreuxb5vlcMheNSV/2TGJUGdObg==", + "sha512/v1:microsoft.web.webview2/1.0.3179.45": "sha512-AqvMjM6eGVbfvi4k/dTOYlqz4f8BOcm6mr7SZDOxnxZw9RNrpxwq+R8pjd5QeynZ3MZfCQ5d2bXrzsIZvk6A6Q==", + "sha512/v1:microsoft.win32.registry/5.0.0": "sha512-Rx5mVnzlnMhkda7OeBXQUmEmTOEU4MFoi6JVHdUUlJAfpy3XqPdPjo8PPbp0r4WV8XdVLzwGq7S/znZpIZcHbg==", + "sha512/v1:microsoft.windows.sdk.buildtools.msix/1.7.20250829.1": "sha512-OoKxwzDL1nbqM5rBpB5h05wXsvmKff31Or5KBxjJiKfiUP9rSeqhC8FqZBJQZHOW75Ffn559MuM+J5C3Ulwa0g==", + "sha512/v1:microsoft.windows.sdk.buildtools/10.0.26100.4654": "sha512-kXdAbJ9Vu1gFheVpgqdxFqbamlponIVeVEnnkIzuvLkcaGrQOoJwaZSRcrhwICgc1UZCoPUE4FWZKxHWTW4s3Q==", + "sha512/v1:microsoft.windows.sdk.net.ref/10.0.17763.57": "sha512-pFw+NKTzAP2+6hEqz4GckgRm5+wzGDBufMDJ6PkeYWyMhAjzO8LfygOGLwXq1b4givSjdVY5RPQuQgCwIs8+Ug==", + "sha512/v1:microsoft.windows.sdk.net.ref/10.0.18362.57": "sha512-HCeN62SssN/1sIA1BSZ1AryTLYzKWQJNYxaoLXnH9pSCkk0Qf3asLYVk0ten7nBX+C3HFNn7GQQz3+mz5G2iHg==", + "sha512/v1:microsoft.windows.sdk.net.ref/10.0.19041.57": "sha512-TI9FqukRZSFfSZ6fLh0cjO0X0OIAn5vZKGU/iNzINt3IZeK7o9Y1Dmtp+xwEv696XO1cHMB7aUqTjql3/KY9xg==", + "sha512/v1:microsoft.windows.sdk.net.ref/10.0.19041.87": "sha512-6uo60OiEQ/2shNDU5vgerKsm9elKx4sTLre60FSzkPRzL5/zClEvN1mGl9o4VxB1brF7uBBLNjtXer2+wg1o2w==", + "sha512/v1:microsoft.windowsappsdk.ai/1.8.38": "sha512-epJ359fe5s4Np8CB/FEo4MGgO2RHaZ79lb9NJkfBE96+F8s37rHbS+nKdvNlfVJlLRMYW1fK5i8Lte/3hQWcKA==", + "sha512/v1:microsoft.windowsappsdk.base/1.8.250831001": "sha512-xhTh19d7OGfhE1AcVUsaQxs05XvfE8IlbGBHlgcJ42PF6R9J05ySwtX3VC1cDeUyX5F9Yt+hNArVew0amDqOjg==", + "sha512/v1:microsoft.windowsappsdk.dwrite/1.8.25090401": "sha512-O3HX4bTuPJoESjOfYAGc1k8XRks/U+kJms4cIaOyni60rDZmm/rpWQecEf4vHzpXQRSGMom5ur50IqdAJJ3ORQ==", + "sha512/v1:microsoft.windowsappsdk.foundation/1.8.250906002": "sha512-ecpmrATo4TAYMyIYJF3oarZtOqLhqi3c+NCa0u4cvp3V/PBWSx1jze9JCl4EAS0qcNa2ogvnOTAbLw2eqXVBxQ==", + "sha512/v1:microsoft.windowsappsdk.interactiveexperiences/1.8.250906004": "sha512-rWG2wWtRGE+TFms2ApVpuVCDI4WqdMGCrl7ITqWfdmDNndt/DdcaDq5KeofSlfXrEvhjagJTuSPGvfBASKJrcw==", + "sha512/v1:microsoft.windowsappsdk.ml/1.8.2095": "sha512-C8EsEKly/hmQBSY86+4BgrzX5NKLJfoQAitqtdR7jFdPpQjia8cbiujmnd4+ckR9hsYUhQRkA3N/tC8k87bWqg==", + "sha512/v1:microsoft.windowsappsdk.runtime/1.8.251003001": "sha512-Jn2yC6aNT5mtYQ/qK32PfkkD/KtI3Cp5ii+6mKNKkdCrY8TwVSWxwY1h+soTcLwipY2fLabC49aaSllw5dO8aQ==", + "sha512/v1:microsoft.windowsappsdk.widgets/1.8.250904007": "sha512-sBr64fZdOTCZBP+8SCfCdTITMWKqf3uiMm//UTp+KYwRNQGhWhTy63cFUxsJYTOwTOcnWCVdmSK94osHLjWigQ==", + "sha512/v1:microsoft.windowsappsdk.winui/1.8.250906003": "sha512-oer7PQjIJnuM7uUs1IOZ/Gy+m1o6Ub9+hOp2jUaBrfcCAcqmxOmz3sgY019I/gRGWae1twDd8shTNs5LItBivA==", + "sha512/v1:microsoft.windowsappsdk/1.8.251003001": "sha512-CVaeC0rMHvjkjLwSl9Aptve6H1vcHp93y0KL+y4e8oZw8JVpbu9CniRKgm+6ifcXE6FfLF4yVIBDA0WT6DwwEQ==", + "sha512/v1:mono.cecil/0.11.6": "sha512-HFkyJGsjyfMXaQolzj4UFtFo2IWHEGPS9gTPmX7Z6Z1BvM3Q4i1L5uSl6nKdBr2SzFQ2htu9dasBmdtg4JEvtA==", + "sha512/v1:moq/4.20.72": "sha512-HeLdAKzFe2G4fUg+tUa1WRf/Mye9zbkiv57jHRSb5IVi7GXVPgWbbEaUP8SaOpt43JJFRlWY9N5Yro32/tgRpQ==", + "sha512/v1:mstest.analyzers/4.5.2": "sha512-vTkut40KXsQAJCdKZWufsrIXUCqVQFVNr8SMYjoHGVFoP/QpWSYnbdiQrEM/eHzKWf4WM8loCcNYCwJitQ4S7g==", + "sha512/v1:mstest.testadapter/4.5.2": "sha512-LViLjzNOj6uZMm5k/aQTLOgyTDz2/AqWiHyrn13Yv737SlswkonsJuY61Yp2Txyb1Ac5UX2UfyJoumx0k0m95Q==", + "sha512/v1:mstest.testframework/4.5.2": "sha512-SKGDN6pH0GTx43viZjC9xjZssQ/v7GoraZZhk7nFj0WuvUpO/jWR/XK7z243t/wQ791FmqQ4fdTuvp49R8847w==", + "sha512/v1:netstandard.library/2.0.3": "sha512-548M6mnBSJWxsIlkQHfbzoYxpiYFXZZSL00p4GHYv8PkiqFBnnT68mW5mGEsA/ch9fDO9GkPgkFQpWiXZN7mAQ==", + "sha512/v1:newtonsoft.json/13.0.1": "sha512-g3MbZi6vBTeaI/hEbvR7vBETSd1DWLe9i1E4P+nPY34v5i94zqUqDXvdWC3G+7tYN9SnsdU9zzegrnRz4h7nsQ==", + "sha512/v1:nuget.common/6.3.4": "sha512-xRNgIv//8z2BW9MLTO1fLQ3fKvDLt5u2AypI8Us0IpSr3jQoI+GcZ1E91DdfrLBQCXp1zCfix65S0S/qgpu6xg==", + "sha512/v1:nuget.configuration/6.3.4": "sha512-CDx5+H4p/J1uVV4XUdL5mqoCDO49ZVRBASLeINTv43Q9fwTi+XxVdX3ejBQf7Xpz7mZ10AFtMGsVO86RSQ0ImQ==", + "sha512/v1:nuget.frameworks/6.3.4": "sha512-uTD7MipvfjgBFWNWI/wn/Dr+ftDq1MQ3hfpKsoH5WP/kaLtawt4cI3apCZW/9BCXcBsPHimb9A2c7B3LsRxrTQ==", + "sha512/v1:nuget.packaging/6.3.4": "sha512-99IhQD5g1jbjPdoyzbR+4hzZt22xdaA0vVdHiosfRXUToud8G+3rKd97vGhx5h2KcIA28d7shflqINQuu9Rjmg==", + "sha512/v1:nuget.protocol/6.3.4": "sha512-8UQgj0k29HC6xZH44D7dFMX7wX6cjCnff0tk3KXMzapXwIrmFzkdwniKHfy/r7Erq9iK5WeNQbVrJAD+u+EJ4Q==", + "sha512/v1:nuget.resolver/6.3.4": "sha512-2BG5ACrBTZ4EYCJSg/owQA9IMGUqoj70mwdD7SHSAbrfTktCFQBgsJtUWiiB89w9wXRVRVClGI0iqy+RR3xqkg==", + "sha512/v1:nuget.versioning/6.3.4": "sha512-lzNvaPYdUlo9VwDParYsCvL03GvNYxn2ktzqWk+VM6Q2feWV+6OknnMt3c8j5OtpRpwYJUElVaQItNFcpsooqQ==", + "sha512/v1:nunit/3.14.0": "sha512-XXEZJblHyeSp9T9rXXabxKcC79crz/a0/k/lGnJFRKUmbQIxf9tf5eMS+STOvjFUnl7rLFeBycLzXD5OMa40hA==", + "sha512/v1:nunitlite/3.14.0": "sha512-0TEZNUokBNFu03MYqaFdaWQrYNRwuLI5k1IR1ly/p3DUVLq48a+Ig5uVWjI6t1OKOkrS/cIKkl+FkQE+2nRboQ==", + "sha512/v1:openai/2.5.0": "sha512-j6Y3h2kiK8RhRFpXUmqpXSCfXAwi3nOipUZA8t9vBiH4bbV7Vwl3XAi/eQVpaCiv8HSZfU9E/nmTwuMJIK3gRA==", + "sha512/v1:opentelemetry.api.providerbuilderextensions/1.13.1": "sha512-o00BeCGC6EPwrChkGDhSrxwY7QZS8mssjiCBLtXTGxWbCI3WEc5+AtkWBSGsp83bbcosXIvBtuJMWrG4rXUERw==", + "sha512/v1:opentelemetry.api.providerbuilderextensions/1.19.1": "sha512-IJZqLYSMv65REhZwTcw9ir/PC4bLClt2UDWJ7s36YtnQSn2CGbnRZyNfEYkw9u0ncWjTGgaDe0zkBHFpHb8Y6w==", + "sha512/v1:opentelemetry.api/1.13.1": "sha512-X5ZKukHBIo0/mEgJJQzDvc3he75AiLSi4hNvJ+/vjFdGcHGMY60J70GFEixQlwu3bRoDwdo3npWQGgLlUv6qSA==", + "sha512/v1:opentelemetry.api/1.19.1": "sha512-lzh+LTiwTPU+rjBJ5QIwskdSsC5a60h2dxDmtLIsquz/+6atFDEW8ZqIublALlXWrMPV52T1S7SEX1iBI04rHQ==", + "sha512/v1:opentelemetry.exporter.console/1.13.1": "sha512-OHg/KRV8VmqZ2Zn1qw0v8GeIHhlgK+aSZOPhQi9d2bPWtcm9TVtl301jYkeVp1c12UvDXlGXcQTjJ7XMwbiF+A==", + "sha512/v1:opentelemetry.exporter.opentelemetryprotocol/1.19.1": "sha512-0rFaapR8OBnfeXtBEIsRQe+AZ4gouJ0S8DbacoGZUbGO39ZLsxf+k83TvzHQ+o7/wI5xLKfARM0lqy+CGh/YIw==", + "sha512/v1:opentelemetry.extensions.hosting/1.13.1": "sha512-9VVaGwVllxg2T7VofCDMEfygl8b79qY5ASLj1UQ9YHwdi0RaFhMmhPReT4z5ebOKkTbJmeLNXhIoTSHZtrgWBQ==", + "sha512/v1:opentelemetry/1.13.1": "sha512-pnr+hx6ii/eB4FT9IaC2mE2tj8bjgyQ2BFj1Zw3Yl9JcqHL792Vzn0cziXEgbpCijJkKDNRFK8RzKEBtANhuyQ==", + "sha512/v1:opentelemetry/1.19.1": "sha512-/OcvoJcS7ebn5w+JHB5URXIEdMEufDuyEM346/qWFRWsD+S9pAGQOHRpLkx13/YOXdj2o8Ek37RTVIHKmxtLnw==", + "sha512/v1:paket/12.0.0-alpha003": "sha512-0b2LwvaCJinHCqOkAocVvM7SndDqH3zM4GZLnL10WblZSTigWygjUErQARQsSveLg6Iq/3dLiTo0CvnQetsG7w==", + "sha512/v1:perfolizer/0.6.1": "sha512-ZEl6E48b3hYKSS7L5W2Iwp99RGD21j4+NsosvWGrRzpdPTlwH0UbhfA2xp9ptrVJhBh1AjOfjud8qsVkY9fKEA==", + "sha512/v1:polly.core/8.4.2": "sha512-1iLyP8P4WHnv5Ajz1XR8WT8qjlkiN2JmmE31heAAVBG2jsW1teWHkFZVTXO2srZz5wuI/1lJU8cqpfPd3OSVAA==", + "sha512/v1:polly.extensions/8.4.2": "sha512-BG6kei2BTU0veYirm84tRCI8FEq24Zo9JexWdzU+oFyYKUQPkXyKCfyygwgTOz4KXzxeHTPe1HvOGhuQQmOaQQ==", + "sha512/v1:polly.ratelimiting/8.4.2": "sha512-6AMnfwK1I25jb3JMpkcHkfWElHA4S1+mCNmQgXVTJZX+AySxasV3v8xCwEeVHSZalAM6Ywv0RM50o38rLa0Cig==", + "sha512/v1:pragmastat/3.2.4": "sha512-oj+1XqDcl7Cf0P/y1RqPKb8U/rbuMgUCC5z9lpnrS4ZjnOHbD0Cnc3YyTJfbyK8SrcumyrmmZcmKYNqJR9/tCA==", + "sha512/v1:system.buffers/4.5.1": "sha512-gNphWOVbm89+C15jebnPRaYykU8De1PFv1YJV24814IfeGGVa3PXRHDS0MLlbdI1pe9Mpv/n4ZK4INwtAjqv8g==", + "sha512/v1:system.buffers/4.6.1": "sha512-qve/dFwECwehSWlZmpkrrlIeATCvo/Hw2koyMrUVcDBy5gXAQrnwX8pHEoqgj8DgkrWuWW1DrQbFqoMbo+Fvrg==", + "sha512/v1:system.clientmodel/1.16.0": "sha512-vJQ7Qu9tcfZAVmVFuKZE7ZwrZ5xql8FuX37blNBY18N4jd2r9udrgN/IF929gT1ehZZZ4OmYMCY4CkkcJMJ1LQ==", + "sha512/v1:system.codedom/9.0.5": "sha512-8zToqP/7XOcORjPJA1VbJAMd5MM5Tt/cfNClW+964LMcvSTwSDF31J0My0+Py6xUrTMK+wuDvSSgm/7lHmRBpA==", + "sha512/v1:system.collections.concurrent/4.0.12": "sha512-pGvUC4zHr+rqFMgO5quZpe9tJ+nol8/oQumrXKBLnejXGSoxAiWxBA1X1IcJIUh6z135k6uBMB1JmUBI4TQehQ==", + "sha512/v1:system.collections.immutable/10.0.0": "sha512-X8f2K6WYvpYzbYT4QLhZfzEXLp8RG7VYKRpFQtcrOcBnfA5ifRxwTN3G2EE6N7MwdNfH8ygbmtB18ql62Uzqjw==", + "sha512/v1:system.collections.immutable/7.0.0": "sha512-8ISvyTlddLTyUsR7fQ43jmdta4tgM6aGNrZItYgF43ct0i/x3tBdPIyFU9LnaFspt1P+HLtaMz8Bir5kIqPr+g==", + "sha512/v1:system.collections.immutable/8.0.0": "sha512-BXqVkcIrhimvvem6q2ChWkuW6XYYirvb6FlhvuwaMoBqBdpcr4nehJBKP65Tw40UqcUM6oDoODsecM0yjZ6AUw==", + "sha512/v1:system.collections.immutable/9.0.0": "sha512-z/Oo7nxWmZ0Y578vj8EUVrFJZ3DX6OMuUGlgeYgeeUZOFGT89XfaM8fDFMvJy6+mOIqW6ux5NdNzEnlTnQGJ7A==", + "sha512/v1:system.collections/4.0.11": "sha512-9ht1Mpul18DmiKqdEQsiAMiTTDoYiPaxtfGYuqerk/I4Neg4CFPowEbyVxcrUGBXjtht8m5f4O802MRAigLDPw==", + "sha512/v1:system.componentmodel.annotations/5.0.0": "sha512-WJqsTGaXAc55EPGjJylPFXiNPs/x1t9dklVlHlIBxUEcIxIob6sRGm9Un7TehkyEFM+vKjZd7rbwaMH/znw1PA==", + "sha512/v1:system.componentmodel.composition/4.5.0": "sha512-pOLRbg5l0P53ZWs8fAqiLPHb1fJum2H1XoWeO5XV6b/oCzRSSzz5LPtzDUZay2KCNWCn7w38zx1+swei210iJg==", + "sha512/v1:system.composition.attributedmodel/9.0.0": "sha512-oYuQzlIvO31GxSlTo6NCU+RnK9dVb1m154BNE7VGm9PUyJM+RrOQss8cNbMj+iIWVcp6VRnyJlBJ3MfzYo14AA==", + "sha512/v1:system.composition.convention/9.0.0": "sha512-3efhxn/7hQI9kNy6M6UUwWrMJCzdBZZ4hkYS3MUxqXyGdQ2sLCWToX1nLnnrRYafcdRSMOY2naMPNlRAEKDAGA==", + "sha512/v1:system.composition.hosting/9.0.0": "sha512-zLPGbMYw6y2GoNBjcoPnvXt7wSJM/qIG1fU2Do8kDObDTYWHG6fFOhulSViX0Ip2j+qGeuCESqEswCRG+xDvwA==", + "sha512/v1:system.composition.runtime/9.0.0": "sha512-P777aBPIwmLvL0Q8mPA7RiiomfjqLTbpX/xzKpk7YTJLcvPDMTvRIfNFognEpfJYRLadBymaBIU81vW3MzZYnA==", + "sha512/v1:system.composition.typedparts/9.0.0": "sha512-7b7mkn4H0149jNKD1tZRUG2gmkszNzO6YAGV+xEsxdfIU+5SLhxWRYJpqm1zKzKNdzpKUW93oyEFGcTuoNvqGg==", + "sha512/v1:system.composition/9.0.0": "sha512-aWcyK90nIChHyxq7rpQ83Bbvt/t9l1X6yQtkvODaZ+rJlYHUMVpSji0YXIZTX5VlcWRCVRFdeEY767BCOzueaw==", + "sha512/v1:system.configuration.configurationmanager/8.0.0": "sha512-WLn7WxNMGs8+pboojHpid8CJiNhcr2j7kA0gmI8fgU5LF0JGKGqHhSSHc8WW0h77svQSS29KO+hr+xKeuS2J9A==", + "sha512/v1:system.diagnostics.debug/4.0.11": "sha512-AvTQv5aesah23vIcH/11+O1fl5rtmhFp9AnmCm4HAWhU4hVNpcAWT6uur2UnoY2OZygtsbaTJ6GzWB6cDHQvWA==", + "sha512/v1:system.diagnostics.diagnosticsource/10.0.13": "sha512-F+hq74FfrkIxNsGbb2ImUbKWg4lwNA5HINrpk/1xdHMRMToHXxmWpx3+RG8KMaeJs0HmOYdlclTPG0nxKjst6g==", + "sha512/v1:system.diagnostics.diagnosticsource/5.0.0": "sha512-uiERi607Ni/EgHCMceI5No1LzL8rLg5cg1d9VCBdsmsWL0biS0+4RrZB6+gPT6NBeQsK7I5yWgl48BsWXjvd1w==", + "sha512/v1:system.diagnostics.diagnosticsource/6.0.0": "sha512-dYnmo66bitfHxLjNBU2LPp6Dn98n7hRyk7ZKGVzaAPw2MHy+40dLxfw7susxMkWfL3C//aJF+/UDAPgH2YhUZg==", + "sha512/v1:system.diagnostics.diagnosticsource/9.0.4": "sha512-bBrikfCvKccpTKI1y2BW2mp7NBlV53f9i6e0OqUPDhCOHURQbfPrjl46cg+R0+HXrGdWv3I+ZM5rgRIsQyu0yQ==", + "sha512/v1:system.diagnostics.eventlog/10.0.13": "sha512-DwAONGl3vt0DZ4Wu9lfveTpQAaZ9op44sgzO4SbgJmEr5Qe+Ml7FcCZuoywrO/BOA2Obce7F6DEHaOhdbIR/9A==", + "sha512/v1:system.diagnostics.eventlog/8.0.0": "sha512-um5/JzI6kqUKdoRX4qtIrMql36C6GQgspx2ntHO3HNO23QNuRC4Qn8Fe+7TCZ4gamEQJeuTt3Dy4hxUsjJURpQ==", + "sha512/v1:system.diagnostics.tracing/4.1.0": "sha512-DGTyVYNstilYexF72N5ecL/n5MbX0Ti/8QuehfSIP7olCuBxGMIdXpEwujzxIKmiv1gaF1d9On7AkmCTPHtNRw==", + "sha512/v1:system.dynamic.runtime/4.0.11": "sha512-CyGJpvUO/6tEqLH4g/Kh+bmzLESBIxkOiUaod8KP9GojWqkK8ImNHM1tovMVWqLPJuV/f2HufjxQ394hkNeBqw==", + "sha512/v1:system.formats.asn1/6.0.1": "sha512-MWGuaoN8md7TflQd4DQ5ysc+7R9rqzhAXZcPHsJjZ1T87NayBx0u8Dtx83YrC6z7atnItgaV6gRxKEFWj7g6Jw==", + "sha512/v1:system.formats.asn1/8.0.1": "sha512-BmMIpT6SEmFhYntSyWjEV14uTdPj11cyPzaqn3nr+v4mcRStpRQ5g3siendvADafgOGevAdIKCDmwoqJ6zkQ7g==", + "sha512/v1:system.globalization/4.0.11": "sha512-ZrwhZn9fg5vHEe2jsEY4Y9cOCthncP1UEOASMAbW8DF1XPciAYf7fO/tabP0qeq48IaMrnZcsUJci/YEJ/OV5g==", + "sha512/v1:system.io.filesystem.accesscontrol/5.0.0": "sha512-Raa1RG+qBmEukJdL19VC2aFIDAWDwCN+hzL/vO/xtwpuEsI3khRedhO9AAQb2iZ0W4PXMAjucaRtpcekCkVo0w==", + "sha512/v1:system.io.pipelines/10.0.10": "sha512-uJchtc574qQrjiemB8P1ChopZAmgr5FOysWQUue0O3OO5KPkTlozvw9Stq/Dvh6cm77FGcmtlLA4VFGZyVC24Q==", + "sha512/v1:system.io.pipelines/10.0.12": "sha512-xgigWTwGVnV66bxqWKXGp+YufWR5Zm/DTgV0jgBee9jD6HcimBlbAFfM55r7fs81AWjd3dHqtfqyWn4RsbU8EA==", + "sha512/v1:system.io.pipelines/10.0.13": "sha512-PmZT2//VfIdcHSHWw/JVZKWN+hrh4+2MGzcxI3wifNRQiQJcG4d5Ow2y/E0oIfZYuI6P6Q5/a/LnmbURRH/OOg==", + "sha512/v1:system.io.pipelines/9.0.0": "sha512-XIeVKR80wuDl05DI4Hufye7TT4D1Ca1Bm4zJPc7mgnodrCy0OfcQ1C00A7se56dMvg48cI64TMD+YKcZl+qOaA==", + "sha512/v1:system.io/4.3.0": "sha512-v8paIePhmGuXZbE9xvvNb4uJ5ME4OFXR1+8la/G/L1GIl2nbU2WFnddgb79kVK3U2us7q1aZT/uY/R0D/ovB5g==", + "sha512/v1:system.linq.expressions/4.1.0": "sha512-BGBaCR066kBLyXy3/8FUcIs77IhlYtnjauzU0u0TCvu0X1TNFqP3FPDMs/J8W8dwflX7w+gWgaeD6TlpMAWKzA==", + "sha512/v1:system.linq/4.1.0": "sha512-U+UyIOX91q1E9JjkZXUDeAvKH3O+ZGAJE0FQ8Gp2sIc3U9s6rpc5gFS9HozAwcTN0tt3P2WiaHSrlBEO2wzdsQ==", + "sha512/v1:system.management/9.0.5": "sha512-0UCF9ysyHwq3W5R2W6Fl4QPJO/2YHkuhgUMTDlfef5nlseLOtcBfEHdXCftSGRRKnjhyWpHrgRtp1MeL994doQ==", + "sha512/v1:system.memory.data/10.0.10": "sha512-5y3Zy/IbVV7L/kwudNrD5oMUCoXn2Zc3tZhrnjU8b251yunvbgU6JX4TFVjmoExwFTZDBLtkh/tV+a3SHq4uvA==", + "sha512/v1:system.memory/4.5.5": "sha512-6MjlNsl7lKw0Q8lAsw2tQ89ul9x6jD2Yk3EEj+dOFoYGOE9eAUO9wNhvd4O/n97oQXlkyzqKXXUnE+kLElFy3A==", + "sha512/v1:system.memory/4.6.3": "sha512-NXcNYlWoXe5cz9sb8Huo6x2dCZVYkhwKtgE00n/MoI8V4ZI/7/t+EI5bOhQFlZfFjjqM8+U6prjU/aARt7H/tA==", + "sha512/v1:system.net.serversentevents/10.0.10": "sha512-0XSl7BJlOQS+tn3X2uypzGws2aCfAqSAuH7HHFyyHzCn1MRvN6oaJw7JAStYd0iLV/+yC6ik/sZHHlgtm57b4A==", + "sha512/v1:system.numerics.vectors/4.4.0": "sha512-gdRrUJs1RrjW3JB5p82hYjA67xoeFLvh0SdSIWjTiN8qExlbFt/RtXwVYNc5BukJ/f9OKzQQS6gakzbJeHTqHg==", + "sha512/v1:system.numerics.vectors/4.5.0": "sha512-nATsBTD2CKr4AYN6eRszhX4sptImWmBJwB/U6XKCWWfnCcrTBw8XSCm3QA9gjppkHTr8OkXUY21MR91D3QZXsw==", + "sha512/v1:system.numerics.vectors/4.6.1": "sha512-/rkvpUeUPlCY/2qYVQKiUsj5IKaXZcy2+SQAGAfemAdyEF5AgIgYOFNSTMWDXo09JWFX9HB+wV1yCyi2Mwi3TA==", + "sha512/v1:system.objectmodel/4.0.12": "sha512-9Rkc2zYL0mJKvXRUxmhiVA+XqhnfkuoIVHhrnTy5VJ6VxhlM/orcAViSA8T+sWc6EpxJKUhry1+NuD6lNUd8Uw==", + "sha512/v1:system.reflection.emit.ilgeneration/4.3.0": "sha512-6b5fYr9ksZR6SYVzNzBqXQmAaGtY1mWYnpQAarBKp+C79NhUPRtX1bs4B5BS8nXzObcwVKc1fk+jVyCKCshdaQ==", + "sha512/v1:system.reflection.emit.lightweight/4.3.0": "sha512-rVivBylr0ISQegifkgJvo4mLdk651qB8lBS1UKg6xgRW8yo0Enwpu5OpYz+we6n9go97QaMdzl/wGafPGrKUNQ==", + "sha512/v1:system.reflection.emit/4.3.0": "sha512-vkUFFGejarllQQ8RKkdfuBUQpVlTR9HMDEawKOBDajOSGN08Bz8EjC0zi2fcE7RXQikLbEb1WYJQP3So8mmIGA==", + "sha512/v1:system.reflection.extensions/4.0.1": "sha512-Pi8Hwpg2c1vmJH5192DekHg9Xs5k6Mzk4j7Ot3faiXWjUTCATYfd0mRJwT0so0GA4/a4RLD90txZS77G5ycgmA==", + "sha512/v1:system.reflection.metadata/7.0.0": "sha512-LZPIuhp4zrkNJbejuCrnx/JFKtKfSe6OHGCyvNoZ+Pbt9oaJ1CpYau9fr58QSf5egJXsmkq0iizSqVCot+wshQ==", + "sha512/v1:system.reflection.metadata/8.0.0": "sha512-+6sMdkJjee0B6nm3AlBBl7cQaI0oPniLvvkrkFhmEN3fo/hGONaFdwpAaO+GRTlbZe4kRZzFwU7kSXQW0RyJxg==", + "sha512/v1:system.reflection.metadata/8.0.1": "sha512-RRGojQ9bLmxf4KvLXCGOIYp6PqxmDGpsEh+p1TZCF97z2Vs/1glLPi3sSIB43m1ts7msByeuJMDPUvh8KxTpvQ==", + "sha512/v1:system.reflection.metadata/9.0.0": "sha512-jz+Y2m/CpdPvdjCNRigiWJYKFusdkfJlxDx4V5cWX2TubAMaz5CZpODBD/P2+20SpWvmZG6J3UYjl+R2Yg7yFw==", + "sha512/v1:system.reflection.primitives/4.3.0": "sha512-1LnMkF9aXKuQAgYzjoiQaL9mwY7oY6KdaO/zzeLMynNBEqKoUfLi5TiKIewoAF+hkxfGTZsjkjsF1jRL4uSeqg==", + "sha512/v1:system.reflection.typeextensions/4.3.0": "sha512-aK6BpjW5ryrun8j8j+faA1bvTaTrMvgaift1YTuWcU6PGh9MEr0NM177sDQIzHp0QxSDfxNWTV+yYsonIFVnfw==", + "sha512/v1:system.reflection.typeextensions/4.7.0": "sha512-Q/fczHO357fqTntQPZBSwhstHCcZFvgqOwBnkO+lhMyS2pYBDtXyfRQblK3SYXN8GXHOEJzjNM5Tr12zp73c6A==", + "sha512/v1:system.reflection/4.3.0": "sha512-IyW2ftYNzgMCgHBk8lQiy+G3+ydbU5tE+6PEqM5JJvIdeFKaXDSzHAPYDREPe6zpr5WJ1Fcma+rAFCIAV6+DMw==", + "sha512/v1:system.resources.resourcemanager/4.0.1": "sha512-UWWRbiWN04+oMnj7mNzicaleAJHBJ0uM9fF9iLnmKE96e/FFGUr+TyAlDMMa1xQUH54Gh88jX/BUYPtHzqDFJQ==", + "sha512/v1:system.runtime.compilerservices.unsafe/6.0.0": "sha512-1AVzAb5OxJNvJLnOADtexNmWgattm2XVOT3TjQTN7Dd4SqoSwai1CsN2fth42uQldJSQdz/sAec0+TzxBFgisw==", + "sha512/v1:system.runtime.compilerservices.unsafe/6.1.2": "sha512-t2aXWJZBkAkRrTOnw31OBELKEVSDD5YvC3O5dXaHFsR66/nRTKm1y3Iq6NwFI5u5IlKrWYfdan66V+GKKkY8hQ==", + "sha512/v1:system.runtime.extensions/4.1.0": "sha512-QtAJvlfWSXqgckkkiRKJ897NkW0EMsHIZcwElAkvXlkof2MqcMUGCzx442GrBFENdd+zwtKFP1QgH3NetuLepg==", + "sha512/v1:system.runtime/4.3.0": "sha512-kqsiSfCAc8+v3Ez719s21lGthxuNi6lhAGmCGH3jdL9KMK+T8V9zsFrzQ/enDL1ISwTWRlcFh2Nq5yFx6wcU+w==", + "sha512/v1:system.security.accesscontrol/5.0.0": "sha512-rmsDrQKdPraBimyLtWz0kEAT+lNaZ7jmIbeDoCndiKouRx4ALLx9cgOBrYvIxrkxEaCPbOLSca9tl0v00CtsgQ==", + "sha512/v1:system.security.accesscontrol/6.0.0": "sha512-ZKNqEDuVSrS36KdsDodleb1ITDCOREwtkV+5oP0FrWNhRQHtI1xUSvybQxy4pM8PBxW47UFOhZWObWhXkWj7RQ==", + "sha512/v1:system.security.cryptography.cng/5.0.0": "sha512-trvkAklUhzM+/z9bPnGmDLzmbvD0l1IlC6gpFRpzjGLylTgtTPqm8Uv7tnDBTuBQObjEZBxNS0bChIi6zQCV9w==", + "sha512/v1:system.security.cryptography.pkcs/5.0.0": "sha512-kN0CX1xlXQtfOh/YGex3BLiYOHrpph7gN7zOIEpGCAzMPK+7ncbGnUdozIrPJ/4X0wkIMtttrBUDqnatR1xOfQ==", + "sha512/v1:system.security.cryptography.protecteddata/4.4.0": "sha512-WwEexvBd+17yfY7fcS+fBGl+HADEfCJuKeDJqBT7D6j6vKwYvfLyGuq2y/MmrKORC6mbYwth7kjinO1mPhTL3g==", + "sha512/v1:system.security.cryptography.protecteddata/4.5.0": "sha512-s/MFK8BvgtejZj5a8qAPDXEGBtWkpFX98qwQP/wqVa9CgIC7LrKHxDFdlN5x6afGAb0ZVBVGIZlCdBLnO2QjZw==", + "sha512/v1:system.security.cryptography.protecteddata/8.0.0": "sha512-hvcXZ/IR+KXxY9lC9S2izw5/fGYoODJR2r9kQSvs5v/HUAnBRuYYZPJrHzaT0CeDRJzIm8BHJb1ZrwHQ59j3uQ==", + "sha512/v1:system.security.permissions/4.5.0": "sha512-O+e9qamSTJ4YOJCpnLgsf9FTGfsxJv2On1OdYkhmd/XA5AYRvUatkz7Rp3dS9XR7rhVuklnjST1dRoMK7N4cGw==", + "sha512/v1:system.security.principal.windows/5.0.0": "sha512-RKkgqq8ishctQTGbtXqyuOGkUx1fAhkqb1OoHYdRJRlbYLoLWkSkWYHRN/17DzplsSlZtf2Xr8BXjNhO8nRnzQ==", + "sha512/v1:system.text.encoding.codepages/7.0.0": "sha512-SFq/rrH52sMHJJsthDdafWPEuxdRCRB7pZ46trR2xSpi1nfKPAbw6amZr9W/LyHTlqS01TRWO7najRuO1vxFig==", + "sha512/v1:system.text.encoding/4.3.0": "sha512-b/f+7HMTpxIfeV7H03bkuHKMFylCGfr9/U6gePnfFFW0aF8LOWLDgQCY6V1oWUqDksC3mdNuyChM1vy9TP4sZw==", + "sha512/v1:system.text.encodings.web/10.0.10": "sha512-TXtTo3/0UBfe6AAvB/4onunh+kGhRJcF/opONc+eU/f3Pf/u5mHWrtMwb/NUUHr6/74VvQD5O6ejZqgfk75eUg==", + "sha512/v1:system.text.encodings.web/10.0.12": "sha512-7E/Xp7IC0Ph8vC1V1Hccetko5p8dsKEmJRyWA0Lugu8UC6raEQEnF6g3HBiw5SVwjM/vZjmc6srDQZGgJWHErA==", + "sha512/v1:system.text.encodings.web/10.0.13": "sha512-gn9H7aASix082iyl0rSDBB8NC2LR5kLJGxxm7NLeRcb7tEHQocnZFjGujMtoA57HjmDV3cRmWo5kM8Ur8ywEPg==", + "sha512/v1:system.text.json/10.0.10": "sha512-hlL45w7omHa2stdt0EiQDvAHwkT/+H6iqWZu+w6S/e7U2CpK0Ahj90WvyoT5EM54vUnIB6AtaTnRaVLqnRbWBw==", + "sha512/v1:system.text.json/10.0.12": "sha512-me8gnI4gU2dcn04i1l2CHmVHalUcKAlCjLQ3jOMVyaVEQpxSVBACYoZfhiTIM3cmFkBFpEIM1IaUsK/9rdWzpw==", + "sha512/v1:system.text.json/10.0.13": "sha512-6tOpmh8ULBurJZ3/aD5KJC8MutjHO5a9jApthIPYWrmk+0GYv90M9u9SG6lJ1/VJrRCUC6EmOZkApKL+qHfGnA==", + "sha512/v1:system.text.json/8.0.5": "sha512-E1iQIa4+gfVMh3q/YTzpMcwkyle/EnrxBjzMHrTcV6bMIjph5kUiB/XQ3ORTtmJ0MOMeQUPHjnHptd1kf2gKvw==", + "sha512/v1:system.threading.channels/7.0.0": "sha512-XXmpdJbyVCagWg3bGfUGNTxKp4EK/3C4Bt8pXhKVYZKwHPjeHPOg0u2wdqHFsojU4u4i9KByAJTyzqLCMqwpUg==", + "sha512/v1:system.threading.channels/8.0.0": "sha512-M1s365f1lOc6s2585/ATW+KRRFFnaI6JvSSdE14n9ZKgvWnZHoJGoccqV41XvtRDrHMCMRNlwWFgt9yXTu3xQQ==", + "sha512/v1:system.threading.ratelimiting/8.0.0": "sha512-ixhwz8JQm1n+6qf8WzbMMfhBAT51Kq0U/71YGhR2bGyDnDERdGbmQF6A8HDwpkp+ntVie832Yiz9xmPs63OPKA==", + "sha512/v1:system.threading.tasks.dataflow/4.6.0": "sha512-U+WVv+MkUi5T7PM3yJD7WsX0pnlzNcM08r+ua2P5MpvGXv69DE+3bBfhdz8U6ZxvPthkvDvqy/AaIxZhKKgUdw==", + "sha512/v1:system.threading.tasks.extensions/4.5.4": "sha512-aAUghud9PHGYc3o9oWPWd0C3xE+TJQw5ZZs78htlR6mr9ky/QEgfXHjyQ2GvOq9H1S0YizcVVKCSin92ZcH8FA==", + "sha512/v1:system.threading.tasks.extensions/4.6.3": "sha512-zWRHXIBnbfzQE1SamNoW9X5NjEcW/JNAtvVxGKd3bcg71wQVmoI3pDq+WUa2A+temXSNCm7707hmAFwwcYlK0A==", + "sha512/v1:system.threading.tasks/4.3.0": "sha512-fUiP+CyyCjs872OA8trl6p97qma/da1xGq3h4zAbJZk8zyaU4zyEfqW5vbkP80xG/Nimun1vlWBboMEk7XxdEw==", + "sha512/v1:system.threading/4.0.11": "sha512-BcDdG7z87bb8bF8xHEGSCkd1+KKKYcoka2xlrYr9mwSIHTNXiArwAKwFb9Eh/Fw+wLVtb9YH4MJ+emORV8hePg==", + "sha512/v1:system.valuetuple/4.5.0": "sha512-+gDrtQRdEsUSdPZEEcVRmBvs6xJmqGBqRzEGMQm5XqHxWTkZe/PSuomdth5ZPcOb/Oh2kIu6NChoI1JQk649jg==" + } + } +} diff --git a/README.md b/README.md index a536947fbd..9979648618 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ We welcome any kind of contribution! - [Contributing](./CONTRIBUTING.md) guides how to best contribute - [Dev Guide](./docs/dev-guide.md) explains how to build and test +- [Experimental Bazel build](./docs/bazel.md) documents the staged native build, validation commands, and remaining MSBuild parity gaps. - [Documentation](docs/README.md) contains information about the history, context, and supported or unsupported features. It also gathers the various official documentation pages on learn.microsoft.com about MSTest. ## How to consume MSTest? diff --git a/azure-pipelines-bazel.yml b/azure-pipelines-bazel.yml new file mode 100644 index 0000000000..85d378684e --- /dev/null +++ b/azure-pipelines-bazel.yml @@ -0,0 +1,133 @@ +# Register this as a separate, non-required pipeline. The shipping/required pipelines +# deliberately do not import it, consume its outputs, or depend on its result. +trigger: + batch: true + branches: + include: + - main + paths: + exclude: + - docs/** + - .github/** + - '**/*.md' + +pr: + autoCancel: true + branches: + include: + - '*' + paths: + exclude: + - docs/** + - .github/** + - '**/*.md' + +schedules: +- cron: 0 5 * * * + displayName: Bazel cache controls + branches: + include: + - main + always: true + +parameters: +- name: runBenchmarks + displayName: Run the cold, forced-test and matched MSBuild controls + type: boolean + default: false + +variables: +- name: _TeamName + value: MSTest +- name: _RunAsPublic + value: true +- name: _RunAsInternal + value: false + +jobs: +- template: eng/pipelines/jobs/bazel-dogfood.yml + parameters: + jobName: BazelCached + mode: Cached + +- template: eng/pipelines/jobs/bazel-dogfood.yml + parameters: + jobName: BazelCold + mode: Cold + condition: and(succeeded(), or(eq('${{ parameters.runBenchmarks }}', 'True'), eq(variables['Build.Reason'], 'Schedule'))) + +- template: eng/pipelines/jobs/bazel-dogfood.yml + parameters: + jobName: BazelBuildCache + mode: BuildCache + condition: and(succeeded(), or(eq('${{ parameters.runBenchmarks }}', 'True'), eq(variables['Build.Reason'], 'Schedule'))) + +- template: eng/pipelines/jobs/bazel-dogfood.yml + parameters: + jobName: MSBuildReference + mode: MSBuild + condition: and(succeeded(), or(eq('${{ parameters.runBenchmarks }}', 'True'), eq(variables['Build.Reason'], 'Schedule'))) + +- job: DogfoodSummary + displayName: Compare dogfood evidence + dependsOn: + - BazelCached + - BazelCold + - BazelBuildCache + - MSBuildReference + condition: always() + timeoutInMinutes: 15 + pool: + name: NetCore-Public + demands: ImageOverride -equals windows.vs2026preview.scout.amd64.open + variables: + DogfoodEvidenceRoot: $(Agent.TempDirectory)\bd-evidence-$(Build.BuildId)-$(System.JobAttempt) + DogfoodHistoryRoot: $(Agent.TempDirectory)\bd-history-$(Build.BuildId)-$(System.JobAttempt) + DogfoodSummaryRoot: $(Agent.TempDirectory)\bd-summary-$(Build.BuildId)-$(System.JobAttempt) + steps: + - checkout: self + fetchDepth: 1 + persistCredentials: false + + - task: DownloadPipelineArtifact@2 + displayName: Download dogfood evidence + inputs: + buildType: current + itemPattern: dogfood-*/** + targetPath: $(DogfoodEvidenceRoot) + + - pwsh: New-Item -ItemType Directory -Path '$(DogfoodHistoryRoot)' -Force | Out-Null + displayName: Prepare performance history + condition: always() + + - task: Cache@2 + displayName: Cache dogfood timing history + condition: always() + inputs: + key: '"bazel-dogfood-history-v1" | "$(Build.BuildId)" | "$(System.JobAttempt)"' + restoreKeys: | + "bazel-dogfood-history-v1" + path: $(DogfoodHistoryRoot) + + - pwsh: | + .\eng\bazel\summarize-dogfood.ps1 ` + -InputRoot '$(DogfoodEvidenceRoot)' ` + -OutputRoot '$(DogfoodSummaryRoot)' ` + -HistoryRoot '$(DogfoodHistoryRoot)' ` + -CollectionUri '$(System.CollectionUri)' ` + -Project '$(System.TeamProject)' ` + -BuildId '$(Build.BuildId)' ` + -RequireControls:([bool]::Parse('${{ parameters.runBenchmarks }}') -or '$(Build.Reason)' -eq 'Schedule') + displayName: Reconcile results and cache transfer time + condition: always() + env: + # Only the summary needs build-timeline read access. Build/test processes + # receive no token; forks without it retain explicit missing-timing evidence. + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + + - task: PublishPipelineArtifact@1 + displayName: Publish dogfood comparison + condition: always() + inputs: + targetPath: $(DogfoodSummaryRoot) + artifact: dogfood-summary diff --git a/docs/bazel.md b/docs/bazel.md new file mode 100644 index 0000000000..befbe8c400 --- /dev/null +++ b/docs/bazel.md @@ -0,0 +1,519 @@ +# Experimental native Bazel build + +This branch provides a **staged development build, not a drop-in replacement for +the shipping MSBuild/Arcade pipeline**. The portable graph compiles 35 projects +under `src` for .NET 8/9/10/11 without running MSBuild or consuming its outputs. +Separate compatibility targets provide 26 netstandard2.0 and five net462 source +variants. Native packaging now produces ten experimental MTP/MSTest/analyzer/SDK +NuGets, alongside self-contained test hosts. Existing release, signing-service, +and official packing workflows remain unchanged. + +## Getting started + +Install PowerShell 7.2 or newer. On Windows, use an environment that already +permits symbolic links (Developer Mode or an appropriately privileged shell). +The bootstrap does not change machine policy or install a global SDK. + +From the repository root: + +```powershell +.\eng\bazel.ps1 build //:managed_all +.\eng\bazel.ps1 test //:portable_tests +.\eng\bazel\validate.ps1 +.\eng\bazel\validate-packages.ps1 +``` + +`validate.ps1` also checks discovery, real TRX/HTML/JUnit/CTRF output, paths +containing spaces and `!`, failing-test exits, zero-result exits, mixed-module +failure aggregation, and the native action graph. Evidence is written under a +unique `artifacts\bazel-validation` directory. Its success is scoped to the +portable suite, not the complete repository. `validate-packages.ps1` separately +builds and inspects native NuGets, compiles the existing platform explorer against +them for all four frameworks, runs the net11 consumer, and executes isolated +self-contained publishers on their actual .NET 8/9/10/11 runtimes. + +The wrapper pins and verifies Bazel **9.1.1**. Bzlmod pins `rules_dotnet` commit +**add5c92b30888a70aa951de1744a770b8f8ef436**, with an integrity-checked archive and +a set of scoped compatibility patches. Its default toolchain downloads SDK +**11.0.100-rc.3.26522.148** (runtime **11.0.0-rc.3.26522.148**). Neither the +machine SDK nor `global.json` selects this experimental compiler. + +The exact `global.json` SDK, **12.0.100-alpha.1.26509.101**, is also available as +an explicit, checksum-pinned compiler/runtime choice: + +```powershell +.\eng\bazel.ps1 build //:managed_all --extra_toolchains=@dotnet_engineering_toolchains//:all +``` + +This opt-in uses SDK12's real compiler and execution runtime while retaining +the published SDK11 reference/RID-pack policy for net8.0 through net11.0. +It does not claim SDK12 bundled-pack defaults or net12.0 targeting. +`eng/bazel/verify-engineering-sdk.ps1` audits an actual action-graph capture; +the decision record distinguishes successful native builds/consumers from +synthetic verifier checks. The default remains SDK11. + +The bootstrap supports Windows x64, Linux x64, and macOS arm64. Windows was +executed locally; the added Windows/Linux CI job is configuration, not evidence +that CI or Linux has run. Other architectures can use Bazelisk with +`.bazelversion`, subject to the rules' platform support. + +On Windows, the default output root is +`:\tfb\` to avoid batch-file path limits. +Set `TESTFX_BAZEL_OUTPUT_ROOT` to override it with another short, writable path. +It must not be shared by simultaneously running worktrees. Non-Windows hosts +default to a worktree-specific temporary directory. The executable itself lives +under `artifacts\bazel-tools`. + +When several worktrees share a nearly full volume, choose a unique output root +on a volume with capacity and pass an absolute evidence root to the validators. +Their consumer feeds and restore caches stay under that evidence root: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfb\my-bazel-worktree' +.\eng\bazel\validate.ps1 -Jobs 2 -EvidenceRoot 'C:\tfb\my-native-evidence' +.\eng\bazel\validate-packages.ps1 -Jobs 2 -EvidenceRoot 'C:\tfb\my-package-evidence' +``` + +The override is process-local; set it in every new shell rather than changing +machine-global settings. `-Jobs` limits Bazel build concurrency, not the tests' +existing assembly worker settings. + +Bazelisk users can invoke `bazel` directly, but must provide a suitably short +Windows output root themselves. The checked-in `.bazelrc` supplies the required +runfiles settings. + +## Targets and current scope + +| Target | Contents | +| --- | --- | +| `//:managed` | 35 source projects in the selected framework configuration (net10.0 by default). | +| `//:managed_all` | The same graph built for net8.0, net9.0, net10.0, and net11.0, retaining fixed-framework analyzers/generators and server-client validation. | +| `//:managed_compatibility` | All 26 netstandard2.0 and five net462 source variants, with exact-framework inventories. | +| `//:managed_netstandard2_0`, `//:managed_net462` | The respective compatibility subgraphs; individual labels use `_netstandard2_0` or `_net462` suffixes. | +| `//:explorer_released` | Existing platform explorer compiled against its released MTP 2.5.2 packages. | +| `//:explorer` | The same sample compiled against this checkout's MTP and TRX assemblies. | +| `//:simple1` | Existing `samples/public/mstest-runner/Simple1`, using the source-built MSTest runner and reporters. | +| `//:baseline_tests` | Seven Windows test targets: the three sample smoke runs, existing framework/adapter/platform-services suites, and build-tool regression cases. | +| `//:portable_tests` | The Windows baseline plus protocol-contract, source-generation, and VSTestBridge suites: ten targets. | +| `//:portable_non_windows_tests` | The same portable contracts without the Windows-filesystem platform-services suite: nine targets. | +| `//:all_unit_tests` | All thirteen original unit-test projects, including the full MTP suite and its known Windows host failures. No cases or original skips are filtered out. | +| `//:framework_tests` | Existing framework tests, including the assertion-generator tests, using the existing sequential `TestContainer` engine. | +| `//:adapter_tests` | Existing adapter tests, using `TestContainer` and a framework-dependent layout for child-process tests. | +| `//:platform_services_tests` | Windows-only platform-services tests, using `TestContainer` and an isolated writable layout for filesystem/child-process fixtures. | +| `//:build_tools_tests` | Thirteen cases for RESX/XLF handling, version/build-stamp generation, and experimental package-version validation. | +| `//:reference_alias_tests` | Nine cases for aliases, signed friend access, emitted public keys, and satellite identity. | +| `//:sdk_package_tests` | Twelve cases for native SDK/meta-package generation and dependency/asset flow. | +| `//:compatibility_reference_tests` | Four analysis tests for package version/TFM precedence and preservation of native/independent references. | +| `//:protocol_contract_tests` | All 27 existing protocol-contract cases, compiling the shared wire sources independently. | +| `//:source_generation_tests` | All 197 existing source-generator cases, retaining method parallelism with four workers. | +| `//:vstest_bridge_tests` | All 202 existing bridge cases, retaining method-level parallelism. | +| `//:terminal_contract_tests`, `//:self_real_tests` | The existing 15 terminal-contract and 24 self-real cases, with their original method/class scheduling. | +| `//:msbuild_tests` | All 388 existing cases, including the real native netstandard task fixture and reference aliases. | +| `//:server_client_tests` | Native self-contained host and original child-process bootstraps; 305 passes and eight original Unix-only skips on Windows. | +| `//:extension_tests` | Original extension sources, aliases and annotation fixtures; 2,863 passes and seven original skips on Windows. | +| `//:analyzer_tests` | All 2,102 existing analyzer/code-fix cases with ordinary test-subject references, generated Recommended policy and isolated reference-pack caches. | +| `//:packages` | Experimental `Microsoft.Testing.Platform`, `Microsoft.Testing.Extensions.TrxReport.Abstractions`, and `Microsoft.Testing.Extensions.TrxReport` NuGets, each with four portable TFMs. | +| `//:analyzers_package` | Native MSTest.Analyzers package, including C#/VB analyzers, C# fixes, satellites and generated analysis-mode configs. | +| `//:mstest_packages` | Native framework, adapter, Telemetry and Platform.MSBuild packages; real netstandard task assemblies are bundled at their required paths. | +| `//:mstest_package_closure` | Those four packages plus the original three MTP/TRX packages and analyzers: eight native archives. | +| `//:mstest_package`, `//:mstest_sdk_package` | Native MSTest meta-package and MSTest.Sdk; together with the closure above, ten packages for isolated consumers. | +| `//:published_samples` | Self-contained platform explorer layouts for .NET 8/9/10/11 on the selected host RID. | +| `//:windows_libraries` | Four WinRT PackagedApp and four WPF-reference UIAutomation variants, plus three modern-UWP and three WinUI library variants. | +| `//:windows_probes` | Seven native self-contained library consumers; no XAML application compilation. | +| `//:windows_controllers` | Both original net8/net9 win-x64 framework-dependent apphost layouts. | +| `//:windows_app_model` | A native console host for real loose-MSIX registration/activation and controller checks. | +| `//:platform_tests` | Full 3,380-case MTP suite, preserving method-level parallelization. Two real Windows impersonation cases are host-blocked in local validation; this target is deliberately not part of `baseline_tests`. | + +The default configuration remains `net10.0`; `managed_all` explicitly builds the +four-framework matrix. The assertion generator, MSTest +analyzers/code fixes, and MSTest source generator retain `netstandard2.0`; +the server-client's default validation assembly retains `net8.0`. +`managed_compatibility` explicitly selects the additional non-Windows-qualified +project variants rather than relying on compatible-framework fallback. +Windows-qualified targets are opt-in; full workload/runtime parity remains a +separate gate. +`validate.ps1` selects the ten-target suite on Windows and the nine-target suite +elsewhere, and records the selected suite and unsupported targets in its result. +`MSTestAdapter.PlatformServices.UnitTests` has Windows path/filename semantics +and is also absent from the repository's `NonWindowsTests.slnf`; an explicit +request for its Bazel target on another OS fails compatibility analysis rather +than reporting those tests as passed. Windows still executes its full suite. + +The native Roslyn producer/test pins must match `Directory.Packages.props`. +`verify-roslyn-dependencies.ps1 -SelfTest` checks both Paket declarations and +locks before workflow compilation; regenerate them with the existing dependency +updaters when the central analyzer baseline changes. Analyzer package validation +uses that supported baseline rather than assuming an older compiler host. +Workflow text assertions remove ANSI styling from their in-memory view only; +raw command logs remain unchanged. Intentional failure probes force ANSI output +so hosted-console formatting is covered even during plain-console local runs. +Ordinary test launches use the selected SDK's .NET 11 runtime; the separate +self-contained publisher checks prove execution on each actual runtime. + +The six source projects outside `managed` are: + +| Project | Dedicated target or remaining work | +| --- | --- | +| `MSTest.Analyzers.Package` | `//:analyzers_package`. | +| `MSTest` | `//:mstest_package`. | +| `MSTest.Sdk` | `//:mstest_sdk_package`. | +| `Microsoft.Testing.Extensions.PackagedApp.MSBuild` | Windows NuGet/SDK routing and complete packaged build assets remain outstanding. | +| `Microsoft.Testing.Extensions.PackagedApp.Controller` | `//:windows_controllers`. | +| `TestFramework.Windows.UIAutomation` | `//:windows_ui_automation_all`. | + +Native targets now exist for all thirteen repository unit-test projects; this +does not turn the known full-MTP host failures into a passing suite. +Not yet migrated or established: the complete integration/acceptance suites, +every public example, complete legacy runtime behavior, native XAML/UI-thread +and classic-UWP/AppContainer execution, NativeAOT execution, +SourceLink/API-audit parity, official package layout/signing/publishing, +and downstream servicing. Native assemblies and satellites use the same +public-only Microsoft signing key as the repository's Arcade development build +(`PublicKeyToken=b03f5f7f11d50a3a`). This preserves assembly and friend identities +needed by separately shipped extensions; it is not official signature completion +or package publication, and requires no private key or machine verification change. + +Building portable `PackagedApp` alone does not prove activation; the separate +Windows gate below exercises that boundary. Building the server-client +validation DLL likewise does not validate the source-only package's consumer +transformation. + +### Running applications and selecting tests + +PowerShell consumes an unquoted `--` when invoking a script. Quote it when using +the wrapper: + +```powershell +.\eng\bazel.ps1 run //:explorer '--' --list-tests +.\eng\bazel.ps1 run //:explorer '--' --filter-uid TestingPlatformExplorer.UnitTests.SomeTests.TestMethod1 +.\eng\bazel.ps1 run //:framework_tests_app '--' --treenode-filter '/*/*/AssertTests/*' +.\eng\bazel.ps1 run //:platform_tests_app '--' --filter 'FullyQualifiedName~PlatformInformationTests' +``` + +Use the test host's options after the separator; Bazel's `--test_filter` is not +translated by these targets. The explorer intentionally includes failures: +selecting `TestMethod2` returns **2**, and an empty selection with +`--minimum-expected-tests 1` returns **9**. The manual +`//:explorer_failure_probe` is an intentional negative fixture used by +`validate.ps1` to verify Bazel's aggregate exit **3**. + +### Test host differences + +The additive `//:terminal_contract_tests` and `//:self_real_tests` targets run +the existing terminal-reporter contract and MSTest self-real-example suites. +Their first Windows x64 validation compiled `net10.0` and executed on the pinned +.NET 11 runtime: **15** and **24** cases passed, respectively, with no skips. +They are not yet included in `portable_tests`. The terminal target also requires +a standalone `net8.0` compilation of the reporter and its coverage/retry model +closure; this does not claim that the existing `.props` manifest contains that +entire standalone closure. + +These two targets use `eng/bazel/NativeUnitTestMain.cs`, preserving method-level +and class-level scheduling respectively, with the original CPU-count worker +setting. Their native hosts retain the normal source-built reporters, dump +providers, and OpenTelemetry registration, but not the CI-only affected-test and +coverage collectors. Explicit framework metadata identifies their compile TFM +even when the test host runs on a newer runtime. + +Three further opt-in targets retain their original method-level, CPU-count +scheduling: `//:msbuild_tests` passes 388 existing cases; +`//:server_client_tests` passes 305 with eight original Unix-only skips; +`//:extension_tests` passes 2,863 with seven original OS/filesystem skips on +Windows. Their native test hosts and source dependencies are public-signed. +The server suite uses a real self-contained .NET 10 publish so its child +process fixtures can launch the same assembly outside Bazel's application +shim. The other two compile net10 and execute on the pinned .NET 11 host. +The MSBuild suite stages the real native netstandard task DLL, not a reference +assembly. Extension source-location checks use declared original source files +and the repository's `/_/` pathmap. These targets remain outside +`portable_tests`. + +`//:analyzer_tests` runs all 2,102 existing analyzer cases in a native +self-contained net10 host, with zero failures or skips. Its generated +`mstest-recommended.globalconfig` comes from the native analyzer-package +producer. The analyzer/codefix assemblies remain ordinary test-subject +references, as in the original project, not compiler plugins running against +their own tests. NuGet reference-pack downloads, HTTP cache, temporary files, +and user-profile settings stay in Bazel's per-test temporary directory. + +`eng/bazel/TestMain.cs` replaces only the selected suites' registration/entrypoint +plumbing. It keeps their test bodies and scheduling, registers the real source +runner and TRX reporter, and uses each Bazel test's undeclared-output directory. +It does not register the Arcade-only affected-test/coverage collectors or +dogfood every extension. Suites with special child-process bootstraps or extern +aliases need their own faithful migration, not this generic entrypoint. + +Native C# targets now accept consumer-local aliases by assembly simple name: + +```starlark +reference_aliases = { + "Microsoft.Testing.Platform.MSBuild": ["global", "PlatformMSBuild"], + "Microsoft.Testing.Extensions.GitHubActionsReport": ["ghactions"], +} +``` + +The list replaces implicit global access. Include `global` explicitly when both +access paths are needed. The runtime dependency identity is unchanged. The +`//:reference_alias_tests` target exercises global-plus-named, named-only, and +key-qualified friend references through every C# compiler pass. It also checks +the emitted public keys and localized satellite identity. Unknown assemblies and +empty/duplicate alias lists are rejected during analysis. + +Local full MTP execution reported 3,378 passes and these two failures: + +- `CreateServerStream_AnUnauthorizedIdentityCannotConnect` +- `CreateServerStream_AnAppContainerConnectsOnlyWhenItsOwnPackageIsAuthorized` + +Windows returned `ERROR_BAD_IMPERSONATION_LEVEL` (**1346 / 0x542**). +The same error occurred outside Bazel's test wrapper, and a standalone +`NamedPipeServerStream`/anonymous-token probe with no TestFx or Bazel code +reproduced it. The tests and their assertions remain unchanged. A separate, +explicit selection excluding those two executed and passed the other 3,378 +cases; this is not a full-suite pass. Do not change machine security policy or +weaken the assertions to obtain a green result. + +## How the build works + +`BUILD.bazel` and `eng/bazel/*.bzl` declare the graph independently of MSBuild. +When changing a project, keep its native declaration aligned with the project +file: references, linked/excluded sources, constants, usings, resource names, +version overrides, friend assemblies, and runtime files are all significant. +Do not treat a successful C# glob as project parity. + +Compatibility wrappers also expose a `runtime_files` output group. Before +staging an external consumer, materialize its exact runtime closure, for example +`.\eng\bazel.ps1 build //:framework_net462 --output_groups=+runtime_files`. +Library default outputs alone do not force every satellite/runfile to be built. +Use the inventory's `satellites` and runtime-dependency paths, and verify staged +hashes; an old file left in the output tree is not evidence of the current build. + +The native build explicitly provides: + +- Repository implicit usings and scoped `.editorconfig` diagnostics. +- SDK-compatible `NETCOREAPP` selection and transitive compilation references. + Friend-only transitive references are also declared directly where required. +- RESX accessors and binary resources, all existing XLF satellite cultures, + logical resource names, and the HTML template. +- Existing version templates, assembly/file versions, neutral-resource metadata, + the source generator's assembly-version override, and MTP's UTC build date + from Bazel's volatile build stamp. Cached artifacts retain their build stamp. +- Real Roslyn generators, analyzer release files, and the MSTest diagnostic + suppressor rather than blanket nullable-warning suppression. +- Declared runfiles/PDBs and native process exit propagation. + +NuGet resolution uses checksum-locked generated repositories, not the +machine's NuGet cache during ordinary builds. Update them explicitly: + +```powershell +# Re-resolve the declared package graph and regenerate Bazel repositories. +.\eng\bazel\update-dependencies.ps1 -Resolve + +# Regenerate from the committed lock without selecting new versions. +.\eng\bazel\update-dependencies.ps1 +``` + +The updater uses pinned Paket 11.0.1 through the Bazel toolchain and then refreshes +native Bzlmod dependency metadata. Review and commit `paket.dependencies`, +`paket.lock`, and `MODULE.bazel.lock` together. The old generated +`nuget/paket.*.bzl` repositories are no longer used. The source graph's +AI/resilience/hosting closure requires +shared 10.0.13 abstractions; these deliberate development-build convergence pins +are documented in the dependency file and do not change `Directory.Packages.props`. + +`eng/bazel/patches/testfx-compatibility.patch` is rebased against the pinned commit. +It retains quoted source paths, generated resource names, satellites, short +Windows launchers, argument/manifest handling, PDB runfiles, netstandard facade +selection, and the workaround for Roslyn crashing in the extra reference-only +analyzer pass. Diagnostic analyzers still run on implementation compilation. +The old duplicate-analyzer patch is no longer needed. + +The new matrix also exposed upstream dropping newer transitive package references +in favor of older framework assemblies. The patch preserves package-version +precedence for those references. Native packing exposed a Bazel crash when a +transition is attached to a label-keyed file dictionary; explicit package files +now retain their incoming configuration. Reassess these changes on an upgrade. + +## Native package and runtime validation + +### Additional existing portable samples + +`eng/bazel/samples.bzl` adds opt-in targets without changing sample test bodies: + +| Target | Verified behavior | +| --- | --- | +| `sdk_runner_sample_test` | Existing net8 SDK-runner example: one passing case, using native source assemblies rather than proving SDK-package behavior. | +| `reliable_suite_test` | All 11 existing net8 reliability cases pass, including retry/cancellation and the real pinned-dotnet executable condition. | +| `scale_10c_test`, `scale_100c_test`, `scale_1000c_test` | Existing method-parallel net8 scale examples: 1,000, 10,000 and 100,000 passing cases. These are scalability fixtures, not newly generated coverage. | +| `custom_report_test` | The existing passing custom-report example; the separate manual failure probe retains the intentional failing example and exit 2. | +| `ensure_sample` | Existing custom framework: discovery finds its one case; real execution intentionally fails with exit 2. | +| `otel_sample_test` | Existing net9 host-composition example: five passes and real source-built OpenTelemetry output. | +| `browser_publish` | Native upstream WebAssembly bundle; unchanged Node runner passes one browser-wasm case and propagates minimum-count exit 9. | +| `benchmark_runner` | Native self-contained net10 layout; build with `-c opt`. Twelve existing benchmarks are discoverable and an in-process Dry execution runs without an MSBuild-generated host. | +| `aot_sample` | Existing SDK AOT sample compiles with source-generated reflection metadata and passes its one managed case. This alone is not NativeAOT execution. | + +The manual `aot_publish` invokes upstream's native AOT publisher, but the pinned +upstream does not supply NativeAOT for this existing sample's net8.0 target: +an isolated Linux attempt also rejects `net8.0 on linux-x64`. Windows native +linking is separately unsupported. The sample was not retargeted to hide this +boundary, and its managed pass is not AOT coverage. None of these targets enlarges +the previously verified `portable_tests` aggregate. + +Packages carry an explicit `-preview.bazel` prerelease version derived from +`eng/Versions.props`; they are not official shipping packages. They include the +portable DLLs, XML documentation, PDBs, satellite resources, readme, and relevant +`build`/`buildTransitive` assets. Dedicated analyzer, MSTest and SDK/meta-package +validators exercise the native layouts; complete official package/workload and +release parity remains outstanding. + +```powershell +.\eng\bazel.ps1 build //:mstest_package_closure //:mstest_package //:mstest_sdk_package +.\eng\bazel\validate-analyzers-package.ps1 -Jobs 2 -EvidenceRoot 'C:\tfb\analyzer-evidence' +.\eng\bazel\validate-mstest-packages.ps1 -OutputRoot 'C:\tfb\mstest-evidence' -VerifySatelliteSensitivity +.\eng\bazel\validate-sdk-packages.ps1 -Jobs 2 -EvidenceRoot 'C:\tfb\sdk-evidence' +``` + +Use unique writable evidence roots for concurrent worktrees. The analyzer gate +checks actual C#/VB compiler diagnostics, generated configs, fixes and an older +Roslyn host. The MSTest gate checks loaded native hashes, registration, +localization, actual four-runtime execution and MSBuild parent exits; its optional +sensitivity check repacks the adapter without one required satellite. The SDK +gate distinguishes layout/evaluation from execution of default/None SDK and +meta-package consumers, including the pinned external CodeCoverage dependency. +`-LayoutOnly` deliberately omits composed execution and is not a consumer pass. + +`validate-packages.ps1` stages the three NuGets in an isolated local feed and +restores into a fresh cache. Source mapping prevents first-party packages from +coming from nuget.org. It compiles the unmodified explorer sample against each +TFM, verifies loaded net11 assembly hashes and native-build metadata, and checks +TRX output and exits 0, 2, and 9. MSBuild is used only for these external package +consumers, never to build the TestFx producer. + +The same script copies each self-contained publisher outside Bazel's output +tree, points `DOTNET_ROOT` at a nonexistent directory, checks the actual runtime +major and loaded CoreLib location, and repeats pass/failure/zero-result checks. +Evidence is written to `artifacts/bazel-package-validation/`. + +## Native Windows validation + +On an existing AppX-capable Windows session: + +```powershell +.\eng\bazel\windows\validate.ps1 -ArtifactsDirectory 'C:\tfb\windows-evidence' +.\eng\bazel\windows\validate-app-model.ps1 -ArtifactsDirectory 'C:\tfb\app-model-evidence' +``` + +The first gate builds all fourteen library variants and runs seven copied +self-contained consumers, checking actual runtimes, loaded hashes, public-key +identity, Windows minimums and projection selection. The second builds both +controllers and the native console host, then exercises unpackaged and +suppressed execution, real registration/activation, 0/2/9 results, malformed +bootstrap exit 5 and discovery without the execution handshake. It verifies +the run-owned package/install identity and reads back empty registration after +cleanup. It does not alter Developer Mode, ACLs, global SDKs or verification +policy. + +This is a non-XAML loose-package validation, not a signed MSIX archive or a +WinUI/XAML application pipeline. The bounded standalone XAML compiler +experiments did not produce C# or XBF; no MSBuild hybrid bridge is presented +as a native build. These Windows gates are separate from the portable CI job. + +## Build-and-test cache dogfood + +`azure-pipelines-bazel.yml` is an independent experimental pipeline. Register it +against this repository in the public dnceng project and keep its GitHub status +**non-required**. It is not imported by the required or official pipelines and +does not supply their binaries, tests or coverage. Keep fork secrets disabled; +only the summary job maps the job token for build-timeline reads. + +Ordinary PR/main runs select `Cached`. The nightly schedule and the manual +`runBenchmarks` parameter also select the three controls: + +| Mode | Work | +| --- | --- | +| `MSBuild` | Fresh MSBuild outputs and execution of the matching unit assemblies. | +| `Cold` | Fresh Bazel outputs and compiled/test cache; tests execute. | +| `BuildCache` | Fresh outputs restored from the action cache; tests must execute. | +| `Cached` | Fresh outputs, build-cache and eligible test-result reuse. | + +The bounded workload is all thirteen original unit projects at net10.0, using +the exact SDK12 compiler, Release/optimized compilation, eight build workers and +at most two test processes. Existing in-process scheduling is unchanged. The +analyzer/server-client suites retain their self-contained runtime; MSBuild +explicitly uses the matching runtime for those assemblies. Other suites use +the SDK runtime. Runtime drift, missing targets, empty/partial TRXs and different +canonical test identities/outcomes prevent a comparable result. + +This is not the full required pipeline: no affected-test filtering, coverage, +acceptance, packaging, Windows application activation or shipping validation +is included. Those remain on the existing pipeline. The comparison includes +the selected test targets' localization/runtime dependencies, not just the +primary-output matrix. + +For a local experiment, keep a dedicated cache and use a **new run directory +for every command**: + +```powershell +$cache = Join-Path $PWD 'artifacts\bazel-dogfood-cache' +$runs = Join-Path $PWD 'artifacts\bazel-dogfood-runs' +.\eng\bazel\dogfood.ps1 -Mode Cached -CacheRoot $cache -RunRoot (Join-Path $runs ([guid]::NewGuid().ToString('N'))) +.\eng\bazel\dogfood.ps1 -Mode Cached -CacheRoot $cache -RunRoot (Join-Path $runs ([guid]::NewGuid().ToString('N'))) +.\eng\bazel\dogfood.ps1 -Mode BuildCache -CacheRoot $cache -RunRoot (Join-Path $runs ([guid]::NewGuid().ToString('N'))) +``` + +`-Targets '//:protocol_contract_tests'` is a smaller local probe. Its selection +gets a different scope fingerprint and must not be compared with the full +workload. Remove any `.bazelrc.local` override in an isolated checkout rather +than letting local options silently change the experiment. Windows x64, the +repository's normal build prerequisites and symlink capability are required. + +Azure caches downloaded archives and the action store separately. It does not +cache the output/server tree or extracted repositories with machine-specific +links. Compatible prefix restores allow reuse across commits; per-run keys +allow immutable snapshots to accumulate new entries. PR cache writes cannot +replace the target branch's cache. The MSBuild control caches its private pinned +SDK/runtimes and NuGet packages, not its `bin/obj`. + +Each job retains `context.json`, `result.json`, exact commands, logs, BEP/binlogs +and TRXs. Newly executed reports are published to Azure test results; reused +reports remain under `reports/cached` as historical evidence, never as new +passes. A dependent summary reads Azure's completed timeline, including +post-job cache uploads. `comparison.json`, `timings.csv` and the job summary +show build/test/job time, cache-transfer time and executed/reused counts. +Missing timing stays unknown and is not included in a speedup. Compatible +successful history records provide sample/revision counts, median and P95 job +times; a repeated SHA or small sample is not a representative CI estimate. + +The original host-dependent failures are not suppressed. Failed or incomplete +runs remain failed and are excluded from successful timing samples. Cached test +results are experimental, target-level evidence; regular forced-execution +controls and input-invalidation checks are required before considering any +replacement of authoritative validation. + +## Evidence and next migration gates + +See the maintained [research and decision record](decisions/bazel-build.md) for +experiments, exact commands, red/green evidence, and remaining limitations. +`validate.ps1` produces `validation.json`, command logs, copied TRX files, reports, +and `actions.json`. Its portable suite has 3,443 passing cases across ten targets; +the inspected managed action graph contains no MSBuild execution. + +The combined native source revision `c910ab89ce7dc95c3ab2666ed62c4172a9950183` +was validated after integrating all seven lanes. All modern, compatibility and +Windows library builds succeeded. The thirteen original unit projects reported +12,502 passes, 15 original platform-dependent skips and exactly the two known +Win32-1346 failures described above; all 34 native helper cases and six +targeting/reference analysis checks passed. The full-unit command correctly +returned failure rather than filtering those host limitations. + +On that same integrated source, the SDK/meta gate passed all 40 steps, the +MSTest/runtime/satellite-sensitivity gate all 31 steps, and the analyzer package +gate all 15 cases. Separately recorded parent runs cover real Windows +registration/controllers, all 111,000 scale-example cases, copied browser-wasm +execution with exits 0/9, and opt-in SDK12 compilation with actual 0/2/9 consumer +outcomes. These are local results, not CI or release certification. + +Before replacing an existing shipping leg, add the missing framework/workload +toolchains and test harnesses, reproduce every NuGet/SDK layout, preserve signing +identity and audits, then run actual packed consumers and release-branch +acceptance. A successful `managed` or `baseline_tests` target does not waive +those gates. diff --git a/docs/decisions/bazel-build.md b/docs/decisions/bazel-build.md new file mode 100644 index 0000000000..d753a17523 --- /dev/null +++ b/docs/decisions/bazel-build.md @@ -0,0 +1,3770 @@ +# Bazel build: research and decisions + +## Problem and contract + +Enable and validate a native Bazel alternative for TestFx on an experimental +branch, progressing from existing public examples to source libraries and tests. +Bazel must schedule compiler actions itself; a target that shells out to +`dotnet build`, `dotnet test`, or MSBuild is not a migrated build. + +The existing Arcade/MSBuild build, package layout, CI, and release branches remain +unchanged until parity is demonstrated. This is a reversible development-build +experiment, not authorization to replace the shipping pipeline. + +The initial producer/consumer contract is: + +- Bazel owns dependency downloads, compilation, generated inputs, output + directories, test launches, and action invalidation. +- `rules_dotnet` owns the compiler/toolchain and .NET runtime launchers. + Tool versions and NuGet contents must be pinned and integrity checked. +- Public samples first consume their documented released package versions. + Source-built samples must instead consume the Bazel-built TestFx graph, not + prebuilt TestFx packages or assemblies from `artifacts/bin`. +- A passing test process returns zero. Test failures, an empty selection, and + launcher failures must remain visible as nonzero exits. Bazel aggregates + modules; one successful module must not hide a failing one. +- Existing MTP lifecycle, controller/child launch, discovery, filtering, report + generation, and cancellation semantics are not intentionally changed. +- Bazel outputs are development artifacts, not officially signed or published + replacement NuGets. Package/SDK/release parity requires separate shipping-layout + validation. + +## Research and experiments + +### 2026-11-03: SDK/meta-package lane + +This lane starts at `6bc33c48b9dae0e89486862f46af3c876fd7cf5d` and owns +`//:mstest_package` and `//:mstest_sdk_package`. The existing three-package +`//:packages` aggregate and validator remain unchanged. The coordinator owns +the combined guide, CI, dependency integration, and eventual rollout. + +**Contract and sources.** `src/Package/MSTest.Sdk/MSTest.Sdk.csproj` explicitly +packs ten SDK props/targets, generates `Sdk.props` and `Runner.targets` from +their real templates, and suppresses both build output and package dependencies. +Its packaged-app project reference orders the shipping build; it does not embed +a controller or become an SDK NuGet dependency. The native package must retain +the actual conditional targets for classic execution, NativeAOT, VSTest, central +package management, test libraries, optional features, and Windows application +models without claiming that all those consumers have been validated. + +`src/Package/MSTest/MSTest.csproj` packs empty `_._` files and dependencies, not +an assembly. For each portable framework its dependencies are the framework, +adapter, TRX reporter, Microsoft.NET.Test.Sdk, and CodeCoverage. The test SDK's +build assets must flow transitively (`PrivateAssets="none"`); other dependencies +retain `Build,Analyzers` exclusions. The +[4.5.2 published manifest](https://api.nuget.org/v3-flatcontainer/mstest/4.5.2/mstest.nuspec) +was inspected only as corroborating pack-contract evidence, not as a substitute +for native dependencies. + +Version inputs remain `eng/Versions.props`, `Directory.Packages.props`, and +`Directory.Build.props`: MSTest `4.6.0-preview.bazel`, MTP +`2.6.0-preview.bazel`, and JUnit `1.0.0-preview.bazel` are separate families. +CodeCoverage, Fakes, Playwright, Aspire, +and Microsoft.NET.Test.Sdk keep their actual external pins. The producer uses +the explicitly selected Bazel SDK 11 RC3, not the unchanged repository SDK 12 +pin. The portable meta-package scope is .NET 8/9/10/11; net462/UAP groups and +Windows/AOT execution remain unvalidated and are not enabled by writing an +archive. + +**Alternatives and decision.** The pinned upstream `nuget_pack` rule requires +one compiled library or binary, which is inappropriate for these assembly-free +packages. Its +[public native packer](https://github.com/bazel-contrib/rules_dotnet/blob/add5c92b30888a70aa951de1744a770b8f8ef436/dotnet/private/tools/nuget_pack/BUILD.bazel) +accepts file-only JSON requests and already owns deterministic ZIP, OPC, nuspec, +and collision validation. Reuse that tool behind an area-owned rule and a small +template/metadata generator. Do not add a fake anchor assembly, implement a +second ZIP writer, invoke an MSBuild producer, or change shared BuildTools.cs. +The private request schema is pinned with the upstream commit and must be +rechecked on upgrades. Package descriptions, readmes, tags, license, and release +notes come from the repository; native artifacts must not acquire official +signing or servicing claims. + +**Planned validation and ownership.** First build and inspect both archives and +exercise template/version/metadata rejection cases independently of other +lanes. Then integrate the coordinator's native framework/adapter/analyzer and +support-package commits. A fresh local feed/cache must supply every TestFx +package; repository feeds may supply external CodeCoverage/test-SDK dependencies +but must never conceal a missing native package. Real consumers will cover the +default SDK, explicit extension suppression, test-library and layered-SDK +evaluation, and the meta-package. Record actual restore/build/run exits, +dependency versions, loaded assembly hashes, discovery identities, passing and +intentionally failing tests, zero-result handling, and TRX content. Consumer +MSBuild is the product boundary under test, not a producer escape hatch. +No runtime lifecycle or scheduling changes are intended: MTP retains process +launch, handshake, cancellation, reporting, and teardown. Composed success is +pending the other lanes; archive/layout success alone does not satisfy it. + +Test generation is focused on the new SDK package helper. Tests use per-case +temporary directories and child-process arguments, never process-global +environment mutation. Existing method-level scheduling is retained. + +Implementation and initial experiments: + +- `eng/bazel/sdk-packages.bzl` exposes both archives through `DefaultInfo` and + `NuGetPackInfo`, without compiled assembly anchors. `SdkPackageTool.cs` reads + the real project/property inputs, checks the declared asset/dependency + contracts, generates the two templates outside the source tree, and feeds + the pinned upstream packer. It fails on unknown template tokens, version + ambiguity, feature-pin drift, and missing/changed package assets. +- The first cold toolchain build failed with disk exhaustion on the shared + worktree drive before compilation. The lane-owned Bazel server was stopped; + subsequent builds use a process-local `TESTFX_BAZEL_OUTPUT_ROOT` on a drive + with space. Moving the cache across volumes failed on symbolic links; + incomplete copied contents and the lane's rebuildable extracted cache were + removed using ordinary file operations, without elevating privileges or + touching another lane's cache. Source edits were preserved. +- A first package analysis rejected a glob for authored `.props` files because + this SDK currently has only a generated `.props`. Empty glob alternatives + are now allowed; the generator still enforces the full explicit project + asset set, so missing required files cannot silently pass. +- `validate-sdk-packages.ps1 -LayoutOnly` is the independent gate: it inspects + archive metadata and template/static bytes, then resolves the packaged SDK + in an isolated cache and checks actual SDK evaluation. The default mode + additionally requires the native framework/adapter/analyzer/telemetry/ + platform-MSBuild closure, builds real consumers, and executes them. It does + not silently downgrade a failed default consumer to the `None` profile. + The only public-feed exception to `Microsoft.Testing.*` source mapping is + the exact external `Microsoft.Testing.Extensions.CodeCoverage` ID. +- A metadata-only read of the pinned CodeCoverage `18.13.0-preview.26527.4` + [manifest on test-tools](https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/438ed41f-de8e-41cb-9183-cc6c25081f52/nuget/v3/flat2/microsoft.testing.extensions.codecoverage/18.13.0-preview.26527.4/microsoft.testing.extensions.codecoverage.nuspec) + found a minimum MTP dependency of `2.6.0-preview.26526.14` in both its + `net10.0` and `.NETStandard2.0` groups. `2.6.0-bazel` sorts below that + minimum. The unchanged default SDK/meta-package therefore has a version-range + blocker even after the native closure is available. This has been raised + with the coordinator for a common experimental-version decision. Do not + hide it with a released MTP, an older CodeCoverage pin, a downgrade-warning + suppression, or a silent switch to the `None` profile. +- Native compilation was paused before completion at the coordinator's + shared-host resource gate; the lane's own Bazel server was shut down. + Static inspection confirmed ten explicit SDK assets and nine version + substitutions, and the PowerShell parser and Git whitespace check passed. + These are not archive, executed-test, or composed-consumer success claims. +- The coordinator chose the common `-preview.bazel` suffix after checking + NuGet.Versioning ordering: `2.6.0-preview.bazel` is above the pinned + CodeCoverage minimum but below stable `2.6.0`. The SDK/meta generator, + focused expectations, and consumer validator now use that suffix without + changing numeric product prefixes or external pins. The coordinator owns + the matching shared BuildTools and MTP package change. This resolves the + version-range design issue; actual binary/API compatibility still requires + the native composed consumer run. +- Consumer SDK isolation removes named inherited MSBuild variables from each + `ProcessStartInfo.Environment` dictionary rather than setting them to empty + strings. This includes `MSBUILD_EXE_PATH`, as well as SDKs/extensions paths. + The parent process environment is unchanged, and each child starts in its + own consumer directory beside its pinned `global.json`. +- At `9e1604807cacd4f704b4e416137a8ad106513634`, the resumed command + `.\eng\bazel.ps1 build //:mstest_sdk_package //:mstest_package --jobs=2 --noshow_progress --show_result=0` + completed with exit 0 and eight actions. The isolated + `.\eng\bazel\validate-sdk-packages.ps1 -LayoutOnly -Jobs 2` invocation + (with an explicit run-owned `-ArtifactsRoot` on the available drive) + also exited 0. It verified both complete payloads, dependency groups, + unchanged static assets/readmes, all generated template text, and the SDK + archive actually restored into the fresh cache. +- That run evaluated eight real SDK consumers: default profile, `None`, + explicit extension disabling, test library, layered Web SDK, central package + management, VSTest precedence over AOT, and opt-in source generation. All + eight selected the expected references and the pinned SDK/MSBuild paths; + the invalid-profile target returned its expected exit 1 and diagnostic. + This is evaluation evidence, not AOT/Windows/source-generator execution. + `validation.json` explicitly records `ConsumersPassed=false`. + The retained run is `bazel-sdk-validation/20261103-141504-951f465d`. + Native archive SHA-256 values are + `1C2164B473C7E0128E7ABF3639485336E99FB4D6E4245A62A750874D2CC197AD` + (SDK) and + `BBC675E5100C12D7672A3C0BD1D696A2DA76A181163844BACEE1EE2848EA6195` + (meta-package), both at `4.6.0-preview.bazel`. +- The final independent harness also checks AOT **reference selection only** + and caller-supplied version overrides, bringing the evaluated configurations + to ten. Each selected `PackageReference` or central `PackageVersion` is + checked against the correct product/external version. `-EvidenceRoot` is + aligned with the shared validators; `-ArtifactsRoot` remains an alias. + Relative roots and `-Jobs 0` fail before execution. The retained successful + run `bazel-sdk-validation/20261103-145104-041a6740` includes `actions.json`: + two native input generators, two native packers, and no MSBuild executable + in the producer graph. Both complete archives and all ten evaluations + passed again, including the expected invalid-profile rejection. + +#### Composed consumer evidence: SDK/meta-package lane + +The native core and all six framework/adapter package checkpoints through +`ba725abc5cb28aaa36ec789ab50891f5e65b0b6e` are integrated at +`133c1785583d89399531b7bd7f4a1923f9c3d13d`, along with the shared version and +analyzer prerequisites. All ten archives build and pass the SDK harness's +layout, version and native-action checks. Consumer isolation now explicitly +uses its own NuGet.config and clears inherited fallback package folders. + +The first full default-SDK build exposed a real remaining boundary, not a +restore-source issue. In +`bazel-sdk-validation/20261103-152228-1bdaf495/sdk-default-net8.0.binlog`, +the generated CodeCoverage registration fails with CS0012. The external, +unchanged CodeCoverage package requests `ITestApplicationBuilder` from +`Microsoft.Testing.Platform, Version=2.6.0.0, PublicKeyToken=b03f5f7f11d50a3a`. +Binlog reference provenance records the selected native +`2.6.0-preview.bazel` compile/runtime asset in the fresh cache, with +`PublicKeyToken=null`. The coordinator owns the shared native identity +correction. No released MTP, coverage downgrade, warning suppression, or +default-profile success is implied. + +Separate checks progressed without concealing that failure: + +- The explicit SDK `None` profile builds for net11.0, discovers both fixture + methods, verifies loaded native framework/MTP hashes, and returns 0/2/9 for + `NativePackagePass`, `NativePackageFailure`, and an empty selection. Its + restored graph contains neither the CodeCoverage nor TRX report extension; + all seven native archives in that graph match the freshly built feed. +- The default meta-package builds for net8.0/net9.0/net10.0/net11.0. Its + actual net11.0 VSTest `dotnet test` consumer discovers both methods and + executes one passing case (exit 0) and one intentional assertion failure + (exit 1), with the corresponding single-result TRX files and zero skips. + All nine native archives in its graph match the isolated feed. +- These successful scopes are deliberately separate from the default SDK. + The run's `validation.json` remains failed; independent command logs, + binlogs, `independent-consumer-provenance.json`, and meta-package TRX files + preserve the narrower results. + +Two harness assumptions were corrected against actual source/output, not by +changing product behavior: the framework assembly is named +`MSTest.TestFramework` in its authoritative project, and the platform's +unconditional `--coverage-threshold-*` options do not mean the optional +`--coverage` collector is registered. Help checks now match complete option +tokens instead of prefixes. + +#### Final SDK/meta-package composed validation + +The coordinator's public-signing checkpoint +`aff2cf0f702a07779cee99a8acf29cf515e858bb`, with alias prerequisite +`797eb6f29721389a9178d42df726bce6155b9e42`, is integrated as +`3dcde1f7db1b2e85db75dadd4a8e5b157685bbf0` and +`80b2380cc9d9065f98af2755b5d555d4561a9fca`. It supplies the repository's +public-only Microsoft identity and proper friend/satellite identities, not +private-key signing or official release provenance. The native net8.0 and +net11.0 MTP files now report the required +`PublicKeyToken=b03f5f7f11d50a3a`. + +At the exact integrated head +`3dcde1f7db1b2e85db75dadd4a8e5b157685bbf0`, the original full command +`.\eng\bazel\validate-sdk-packages.ps1 -EvidenceRoot -Jobs 2` +completed with exit **0**, using the lane's isolated C: Bazel output root. +It rebuilt all ten native archives and used a new feed/cache; it did not reuse +the unsigned consumer cache or alter the default SDK's pinned CodeCoverage +reference. The full commands, binaries, package SHA-256 values, selected SDK, +native action graph, resolved assets and run outcomes are retained in +`bazel-sdk-validation/20261103-161231-02a3781e`. + +| Contract | Executed result | +| --- | --- | +| Native packages and SDK evaluation | Ten packages, ten evaluated configurations, exact SDK/meta layouts and dependency versions; expected invalid-profile diagnostic. | +| Unmodified default MSTest.Sdk | Builds for net8.0/net9.0/net10.0/net11.0 with CodeCoverage and TRX enabled; net11.0 discovery and native loaded-hash checks pass. | +| Explicit SDK `None` profile | net11.0 build/discovery succeeds; collector/report options remain absent, without confusing core coverage-threshold options with the collector. | +| SDK runtime outcomes | Both default and `None` execute `NativePackagePass` / `NativePackageFailure` / empty selection with exits 0 / 2 / 9. Default-profile pass/failure TRX files have exactly one executed case and no skips. | +| Native SDK `dotnet test` | The real SDK 11 driver executes `NativePackagePass`, exits 0, and writes a single passing TRX result. | +| Default MSTest meta-package | Builds for all four TFMs; net11.0 VSTest executes one pass (parent 0) and one intentional failure (parent 1), with exact TRX outcomes and no skips. | +| Provenance and isolation | Every resolved native archive matches the newly staged feed; loaded framework/MTP hashes and Bazel metadata match; external coverage is the unchanged production pin. | + +The final `validation.json` records `Passed=true`, `LayoutPassed=true`, +`ConsumersPassed=true`, **40** completed steps and **zero** unexpected exits. +The two failed TRX cases are intentional negative fixtures asserted by the +successful harness, not unhandled failures. This closes the observed default +SDK/CodeCoverage identity boundary; the earlier CS0012 is retained as integration +failure evidence, not counted as behavioral mutation proof. + +This lane's runtime evidence is net11.0; its other three SDK/meta TFMs are +compiled-consumer evidence. Windows-qualified/UWP/.NET Framework execution, +NativeAOT execution, repository SDK 12 parity, official signing/publishing, CI, +release-branch certification and downstream servicing remain outside this +delivery. Conditional assets are preserved without advertising those gates as +passed. + +#### Test-value evidence: SDK/meta-package lane + +At `78b990d9986486f1c3755fc3a9f38ddaceab87c6` (the shared version-helper +prerequisite integrated, with only this documentation update pending), +`.\eng\bazel.ps1 test //:sdk_package_tests //:build_tools_tests --jobs=2 --noshow_progress --show_result=0 --test_output=errors` +exited 0. The actual TRX files reported 12/12 SDK helper cases and 13/13 existing +build-tool cases passed, with zero failures or skips. Existing method-level +scheduling remained enabled. + +The same SDK test DLL then ran against an isolated, natively compiled mutation: +only the `MicrosoftTestingPlatformVersion` substitution read MSTest's +`VersionPrefix` instead of `TestingPlatformVersionPrefix`. The compiler and +arguments came from the real Bazel action; only the mutant source/output paths +changed. The original helper and test assembly hashes were unchanged afterward. +This is a compiling behavior-removal comparison, not a pristine-baseline run. + +| Contract / exact test | Counterfactual | Without correct behavior | Correct implementation | +| --- | --- | --- | --- | +| SDK component versions / `Generate_SdkPreservesTemplatesAndComponentVersions` | Use the MSTest prefix for MTP | Executed: detected the wrong `7.8.9-preview.bazel` instead of `2.3.4-preview.bazel` in generated SDK XML | Passed before and after | +| Meta-package dependency versions / `Generate_MetaPackagePreservesDependencyAndAssetFlow` | Same substitution | Executed: detected the wrong TRX dependency version | Passed before and after | + +Every paired run used +`--filter FullyQualifiedName~SdkPackageTests --minimum-expected-tests 12 --report-trx --report-trx-filename tests.trx` +with its own results directory. Counts were respectively 12 passed / exit 0, +10 passed + 2 intended assertion failures / exit 2, and 12 passed / exit 0; +all three executed 12 cases and skipped zero. The ten +`Generate_RejectsContractDriftBeforeWritingOutputs` cases remained green. +Mutation patch SHA-256: +`123F7CECD92BAC1A07052F9956F89CFB2F818D047C7B1CFED9CF352A05403EB5`. +The retained `sdk-counterfactual` artifacts contain the patch, original native +compiler arguments, discovery, all three TRX reports, and `comparison.json`. +An initial launcher probe used the wrong runfiles working directory, and a +repeat encountered a copied read-only sidecar; these setup failures are not +counted as regression evidence. The successful comparison used the real test +runfiles root and task-owned copies. + +### 2026-11-03: experimental version compatibility and constrained storage + +The repository's actual production CodeCoverage pin is +`18.13.0-preview.26527.4`. Its package requires +`Microsoft.Testing.Platform >= 2.6.0-preview.26526.14`; the original native +`2.6.0-bazel` identity sorts below that requirement. Downgrading the external +dependency, suppressing restore errors, or accepting a released platform from a +remote feed would not validate the native product. + +Native package and assembly informational versions now use the common suffix +`-preview.bazel`, keeping numeric product/assembly versions unchanged. The real +NuGet.Versioning comparer verified that `2.6.0-preview.bazel` is above the +required numbered preview but below stable `2.6.0`. This avoids an official-looking +release identity or invented build number. Actual native helper compilation and +both product-version commands, informational metadata, and missing/duplicate +property rejection passed; integrated consumer API compatibility still needs its +real package handoffs. + +Seven concurrent worktrees exhausted Q: during bootstrap. Only lane-owned caches +were stopped/removed; build outputs and large restore/evidence directories moved +to separate C: locations through process-local overrides. The shared validators +now accept positive `-Jobs` and an absolute `-EvidenceRoot`, preserving default +behavior and test-worker settings. Parameter binding was checked independently +without launching another heavy build. Compiler work is released in small waves +while source/layout work remains parallel. + +### 2026-11-03: C# reference aliases for the parallel test lane + +The remaining test projects require `global,PlatformMSBuild`, +`global,serverclient`, and named-only `ghactions` references. The pinned C# rules +have no alias attribute. Adding an extra compiler option while leaving the +ordinary global reference intact would not preserve named-only semantics. + +The parent owns an additive `reference-aliases.patch`, layered after the existing +compatibility patch. The planned interface is a C# `reference_aliases` dictionary +from assembly simple name to alias list; the list replaces implicit `global`, +which must be included explicitly when both access paths are needed. Reference +providers and runtime identities remain unchanged, so aliases are local to the +consuming compilation. All implementation/reference-only passes must receive the +same aliases. Unknown assemblies and empty/duplicate alias declarations must fail +explicitly rather than being ignored. + +Validation will compile and execute real assemblies with colliding type names, +including friend-only members, using global-plus-named and named-only references. +Unrelated C#/F# targets must retain the existing no-alias path. The test lane will +receive the validated commit/interface before wiring its real legacy tests. + +Executed conformance now passes: `GlobalAndNamedAliasesReferToTheSameAssembly`, +`NamedOnlyReferenceDoesNotMakeTheGlobalTypeAmbiguous`, and +`AliasesPreserveFriendAssemblyAccess`, with all compiler passes enabled. The +unchanged-alias path also passed all 13 BuildTools cases with the new shared +package versions. Unknown, empty, and duplicate alias configurations were each +executed through Bazel and rejected with their exact intended diagnostics. +The first attempt used one comma-joined compiler alias argument, which Roslyn +rejected with CS1679; the corrected implementation emits one reference switch per +alias, matching the compiler's actual contract. No test assertions were weakened. +These are build/behavior conformance results, not a claim of a full mutation +campaign. Logs and TRX files are retained in the parent session's +`files/reference-aliases` evidence directory. + +### Native MSTest.Analyzers package lane + +Starting revision: `6bc33c48b9dae0e89486862f46af3c876fd7cf5d`. +The producer is the native `//:analyzers` and `//:codefixes` netstandard2.0 +assemblies, their XLF-derived satellites, and `//:globalconfigs_generator`. +`//:analyzers_package` exposes one experimental `MSTest.Analyzers` NuGet, +using `VersionPrefix` from `eng/Versions.props` with `-preview.bazel`, plus +`NuGetPackInfo` for the framework/adapter and SDK package lanes. +The coordinator subsequently changed the final experimental suffix to +`-preview.bazel`: the original `-bazel` sorts below a required MTP dependency +minimum in the combined package graph. This lane consumes that shared version +helper correction rather than maintaining a different version policy. + +The source package project is the layout contract: analyzers in both +`analyzers/dotnet/cs` and `analyzers/dotnet/vb`, code fixes in C# only, the +corresponding culture subdirectories, four generated globalconfigs, the +unmodified `buildTransitive` and `tools` assets, and `PACKAGE.md`. No assembly +belongs under `lib` or `ref`; neither Roslyn nor its dependencies may flow to +consumers. `developmentDependency` remains true. Compilation keeps the existing +Roslyn 3.11.0 API references rather than linking the SDK compiler's newer APIs. + +The simplest upstream `nuget_pack(library=...)` is not the intended contract: +the existing native assemblies are ordinary libraries for unit-test consumption, +and automatic library layout/dependency traversal would ship the wrong assets. +Changing those assemblies to analyzer-only targets would change existing +consumers. The chosen lane-local rule reuses the pinned native JSON NuGet packer +and its provider with explicit entries and empty dependency groups. This avoids +an MSBuild wrapper, a second ZIP writer, and changes to shared `packages.bzl`, +`BuildTools.cs`, or the compatibility patch. This intentionally depends on the +pinned packer/provider contract and must be rechecked when upgrading rules. + +The existing globalconfig generator expects an absolute `OUTPUT_PATH` and an +analyzer DLL beside its output. A Bazel-only initializer will normalize the +declared action-relative path; a declared symlink supplies the existing native +DLL. The generator's source, analysis-mode policy, and error propagation stay +unchanged. + +Validation will use separate run-owned feeds/caches and real C# and VB compiler +consumers: default/recommended/all/none modes, the missing-test-class diagnostic, +successful corrected input, effective props/targets and analyzer selection, +exact package contents, compiler API references, satellite lookup, and a code +fix loaded by the Roslyn 3.11 host. A repacked isolated mutant that suppresses a +required diagnostic will test the same consumer assertion without altering the +tests. MSBuild is permitted only for external package consumers, never for the +producer. Process exit codes, diagnostics, package hashes, resolved asset paths, +commands, and source states will be retained. + +The validation script owns its child processes, unique artifact paths and +process-local SDK/cache overrides, restoring overrides in `finally`. It does +not change test-assembly scheduling, machine settings, or shared caches. No +new handshake, cancellation protocol, test-result aggregation, or runtime +fallback is introduced by this compiler-plugin package. Publishing, signing, +release-branch validation, and servicing remain outside this experimental lane; +the migration coordinator owns combined integration and downstream rollout. + +Executed research and infrastructure observations: + +- Inspected the released `MSTest.Analyzers` 4.5.2 archive: the install and + uninstall scripts belong under `tools/`, not at the package root. They and + the build-transitive assets are copied without rewriting the signed scripts. +- The initial two-worker native compilation failed because Q: had no free + space, not because an analyzer failed to compile. The lane-owned output base + was removed with `.\eng\bazel.ps1 clean --expunge`; no shared cache or other + checkout was removed. Subsequent commands use the process-local override + `$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfba\6a8043a5c4a6'`. The validation script + also puts its unique restore cache under that configured root when present. +- The new validation harness parsed successfully, C# helper BOMs were checked, + and `git diff --check` passed. These are setup checks, not package-consumer + or regression-sensitivity evidence. +- The native package built successfully in 142 actions. The initial + `4.6.0-bazel` archive has 55 entries and SHA-256 + `E9E77ADA2F44098D2E783FE7DAE3017D82FB398D4EB03CA3858B6558C29D1FE1`. + All 12 C#/VB compiler cases passed: the four analysis modes, corrected input, + and intentionally disabled build analysis, with package/cache/SDK and selected + analyzer/config provenance checked. +- Consumer setup caught two isolation defects in the new harness. SDK lookup + uses the working directory, not merely `--project`, so dotnet runs from the + generated consumer root. PowerShell's method binding turned a `$null` + environment-variable argument into a present empty value; the restore binlog + showed empty `MSBuildSDKsPath`/`MSBuildExtensionsPath`. Named `Env:` entries + are now removed and restored exactly. A later assets inspection found the + machine's Visual Studio fallback package folder; an explicit restore config + and cleared fallback folders retain the single-cache assertion. +- The old-Roslyn host compiled, then its real package load failed the expected + `.NETStandard,Version=v2.0` attribute assertion (actual `null`, process exit + `-532462766`). The native compile configuration alone did not emit the SDK's + assembly attribute. A lane-local linked `AnalyzerAssemblyInfo.cs` restores + that metadata for the analyzer and code-fix DLLs without changing shared + build helpers or their compiler API references. The unchanged host source + has SHA-256 + `963B99DA9CE77E318BC0831B215437843E60BAE62AC1185288A59C0D7C4802C0`; + that first probe subsequently caught one incorrect whitespace expectation in + the harness's normalized source literal, which was corrected without changing + the code fix. +- `.\eng\bazel\validate-analyzers-package.ps1` then passed all 15 cases on + Windows x64 / SDK 11.0.100-rc.3.26522.148, before the common version correction. + The archive SHA-256 is + `C0094E399DB33DC32CBE4AC88E258C6534F34D70F5ACCA80BBC1AEE037DB7E01`. + `roslyn-3.11-codefix-and-satellites` loaded 83 analyzer and 52 code-fix types, + executed MSTEST0030, applied `AddTestClassFixer`, checked the exact resulting + source and disappearance of the diagnostic, and verified French analyzer and + code-fix resources against the XLF catalogs. The producer action graph contains + native compilation, globalconfig generation and NuGet packing, not MSBuild. + +#### Analyzer metadata test-value evidence + +The final host source SHA-256 is +`1C6960A00A023EA3D382F44B44AD4966934D56C87A31F1974ECAD96C60199740`. +The same compiled host, input document and assertions ran against both retained, +native-built `4.6.0-bazel` package snapshots; only the loaded package directory +changed. This is a package-snapshot comparison, not a pristine-baseline Git run: +the Bazel packaging feature exists in both variants, and the defective variant +lacks the analyzer/code-fix target-framework metadata. + +| Contract / case | Before attribute | Corrected package | Evidence | +| --- | --- | --- | --- | +| netstandard analyzer identity / `roslyn-3.11-codefix-and-satellites` host | Executed: detected; expected `.NETStandard,Version=v2.0`, actual `null`; child exit `-532462766`. | Executed: passed before and after comparison; child exit 0. | Package hashes above, unchanged host hash, `before-attribute.json` / `after-attribute.json` and logs. | + +Evidence is retained under +`artifacts/bazel-analyzer-validation/20261103-141156-7f50da86`: `validation.json` +lists all 15 case outcomes, exact compiler/restore/host commands and exits, +package entries/hash, resolved package paths and old-Roslyn results. Every C#/VB +case also retains its SARIF, selected analyzers/globalconfig, SDK provenance and +binlog. The standalone host invocation is the recorded native `dotnet.exe`, +`consumer/legacy/bin/Release/net11.0/LegacyHost.dll`, the selected extracted package +directory and `MissingTestClass.cs`, in that order. A text transcript is more +useful than a staged IDE screenshot for this compiler/package boundary. + +The shared `-preview.bazel` prerequisite +`2d79cf530332c91d54e62f95f37b85c784984209` was applied after this checkpoint, +preserving both lanes' decision-record sections. The final validator also checks +both loaded analyzer/code-fix informational versions against the package version, +and supports an absolute `-EvidenceRoot` like the shared validators. +Final-identity validation is recorded below. Combined shipping layouts, release signing, Linux, +IDE UI integration and downstream release/servicing remain coordinator-owned +gates; this evidence does not claim them. + +#### Final analyzer package identity validation + +The corrected package is `MSTest.Analyzers` **4.6.0-preview.bazel**. Both loaded +DLLs report the same informational version, retain their netstandard2.0 identity +and reference Roslyn 3.11.0.0. The final package has 55 entries and SHA-256 +`F45295E95D041CF2256F906BEA63B9D5125DFD0019F64B6DD661E605BEE074AA`. + +Executed from this lane's worktree: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfba\6a8043a5c4a6' +.\eng\bazel\validate-analyzers-package.ps1 -EvidenceRoot 'C:\tfba\6a8043a5c4a6\analyzer-evidence' +``` + +Exit **0**, all **15** checks passed. Evidence: +`C:\tfba\6a8043a5c4a6\analyzer-evidence\20261103-142351-14e2448a`. +`validation.json` records the package hash and loaded DLL paths/versions, +commands, child exits and case outcomes; SARIF and binlogs establish compiler +behavior and SDK selection. This run used the shared prerequisite applied as +`ef4ae3790425d5472d7f9e8bec4b977ff781ce24`, with the lane's final validator and +probe changes. Relative evidence roots and `-Jobs 0` were also rejected before +build/restore execution. + +| Requirement | Evidence | +| --- | --- | +| Exact C#/VB package layout, resources, generated configs, assets and no dependency leakage | `package-layout-and-private-dependencies`: exact entries plus native/source payload hashes; fresh-cache restore checks. | +| Enabled, suppressed and corrected compiler behavior | `cs-default-missing-class`, `cs-recommended-missing-class`, `cs-all-missing-class`, `cs-none-missing-class`, `cs-default-fixed`, `cs-default-disabled`, and their six `vb-` counterparts: exact MSTEST0030 count, exit and selected assets. | +| Legacy compiler APIs, code-fix execution and localized resources | `roslyn-3.11-codefix-and-satellites`: Roslyn 3.11 host, 83 analyzer/52 fixer types loadable, actual diagnostic/fix, exact resulting source, French strings and package-aligned versions. | +| Native producer, not an MSBuild wrapper | `native-producer-action-graph`: compiler, generator and NuGet actions inspected; MSBuild remains exclusively in the external consumers. | + +`bazel query 'labels(srcs, //:packages)'` still returned exactly +`//:platform_package`, `//:trx_abstractions_package`, and `//:trx_package`. +The new target's queried `DefaultInfo` contains one `.nupkg`; its +`NuGetPackInfo` exposes `package_id="MSTest.Analyzers"`, `version=None`, +`version_file=analyzers_package/version.txt`, `target_frameworks=["netstandard2.0"]`, +and the two bundled analyzer/code-fix assembly names. Framework/adapter and SDK +packages can consume that provider without inventing versions or dependencies. + +#### Generated-config counterfactual + +Revision `6f69c9d135c542f6c1f3bacf4e003da66506e9f3` was tested without source +changes. A separate native packer request copied the correct package inputs, +changing only `dotnet_diagnostic.MSTEST0030.severity = warning` to `none` in +`globalconfigs/mstest-default.globalconfig`. The original action inputs and +workspace files were not edited. The already-built upstream NuGet packer +executed successfully (exit 0); a byte comparison of all 55 archive entries +confirmed that only this one globalconfig differed. + +Mutation package SHA-256: +`FEB7BDCACAD3308BBF54F05C1ECC7F272D843A532D289395B48E05629C87BDE2`. +Original/mutant config SHA-256: +`2DCA22D15DC71132E7D03709B2114A05B613B4A306D1F577F9B8278CBC68A9FC` / +`FC7FF585809806B9B95606D156BE4BF8E78FCB002F4CF567852F445720F2F931`. +The native request, exact packer path, input paths, mutation description and +exit are retained in `request.json` / `mutation.json` under +`C:\tfba\6a8043a5c4a6\analyzer-counterfactual\76facf33252d4f6f93cdc6eb80a32a72`. + +The unchanged validation script was run against that package: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfba\6a8043a5c4a6' +.\eng\bazel\validate-analyzers-package.ps1 ` + -EvidenceRoot 'C:\tfba\6a8043a5c4a6\analyzer-counterfactual-evidence' ` + -PackagePath 'C:\tfba\6a8043a5c4a6\analyzer-counterfactual\76facf33252d4f6f93cdc6eb80a32a72\MSTest.Analyzers.4.6.0-preview.bazel.nupkg' +``` + +| Contract / case | Without required behavior | Correct package | Evidence | +| --- | --- | --- | --- | +| Packaged Default analysis / `cs-default-missing-class` | Executed: detected. Compiler completed successfully, exit 0, with zero MSTEST0030 diagnostics; the outer assertion expected exit 1 and failed. | Executed: passed before and after mutation, compiler exit 1 with exactly one MSTEST0030 error; outer validation exit 0. | Same script/fixture/assertions; fresh feeds/caches; package hashes and SARIF. | + +This is a deliberate behavior-removal comparison, not a missing-tool, restore, +compile-setup, or missing-symbol failure. The mutant's structural check passed, +then the intended behavioral assertion failed: outer exit **1**, two checks +executed (one passed, one failed). Fail-fast left the other 13 checks unexecuted; +they are not counted as passing, failing, or paired mutation evidence. +Red evidence: +`C:\tfba\6a8043a5c4a6\analyzer-counterfactual-evidence\20261103-143726-14dd2d2b`. + +The original command was then rerun with +`-EvidenceRoot 'C:\tfba\6a8043a5c4a6\analyzer-final-evidence'`, without +`-PackagePath`. Exit **0**, all **15** checks passed on the unchanged revision +and the original `F45295E9...` package. +Final clean-revision evidence: +`C:\tfba\6a8043a5c4a6\analyzer-final-evidence\20261103-143911-b8403951`. +Only documentation was added after this run. + +#### Signed analyzer compiler-host refresh + +The coordinator requested the same 15-case analyzer gate after the shared +public-signing checkpoint `aff2cf0f702a07779cee99a8acf29cf515e858bb`, alias/signing +fixture prerequisite `797eb6f29721389a9178d42df726bce6155b9e42`, and source-root +mapping patch `adeb20ba67eefec9464be5561eecfbe03d346963`. +Their lane-local cherry-picks end at +`05ba1d3e10c5e504a96f5f9c9bd907bee80037e3`. Conflict resolution retains the +shared public key, compiler options, friend identities and exact patch files; +the unrelated absent SDK, compatibility and expanded-test declarations remain +absent. Parent-owned decision sections are historical evidence, not claims +that those other lanes were built in this checkout. + +The original `analyzer-packages.bzl`, `validate-analyzers-package.ps1` and +`AnalyzerPackageConsumer.cs` remain byte-for-byte unchanged from the unsigned +checkpoint. All package-layout, compiler-mode, selected-asset, Roslyn 3.11, +code-fix and resource assertions remain enabled. New native outputs will be +packed into a fresh feed and restored into a unique cache using the existing +validator. The preserved unsigned feed still matches SHA-256 +`F45295E95D041CF2256F906BEA63B9D5125DFD0019F64B6DD661E605BEE074AA`. + +The new producer contract is public-only development signing with the pinned +160-byte Microsoft public key, not official signing or publication. In addition +to the unchanged gate, inspect the actual packed main/satellite DLL identities +and strong-name signature regions to distinguish public signing from unsigned +outputs or private-key signature completion. Keep the package prerelease +identity and unchanged dependency suppression. Source-root mapping is a shared +compiler-input change, not a reason to alter consumer assertions. + +The focused signed run passed on clean source +`66620597c6357e3e29d94546c0a1c27d2b6d116f`: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfba\6a8043a5c4a6' +.\eng\bazel\validate-analyzers-package.ps1 -Jobs 2 ` + -EvidenceRoot 'C:\tfba\6a8043a5c4a6\analyzer-signed-evidence' +``` + +Exit **0**, all **15** original checks executed/passed. Native packing rebuilt +128 actions (91 local actions; 14 cache hits) before the consumer run. The +fresh package remains `MSTest.Analyzers` **4.6.0-preview.bazel**, with 55 entries, +SHA-256 +`B417D113D797FA56C38868D99C0726BBEBD478998BB3E76A4FB4CA4B8F54F712`. +The original gate, Roslyn host and package rule required no changes. + +| Requirement | Signed refresh evidence | +| --- | --- | +| C#/VB layout and suppressed dependencies | `package-layout-and-private-dependencies` passed; source/native payload hashes and fresh-cache provenance remain enforced. | +| Compiler modes, corrected input and intentional suppression | All 12 unchanged `cs-` / `vb-` cases passed with the original exact diagnostic, exit, analyzer/config selection and SDK assertions. | +| Older compiler API, real code fix and satellites | `roslyn-3.11-codefix-and-satellites` passed on Roslyn 3.11.0.0; all 83 analyzer/52 fixer types loaded, MSTEST0030 was produced, `AddTestClassFixer` changed the exact expected source, and French analyzer/fixer strings matched the XLF catalogs. Both loaded DLLs report the package-aligned informational version. | +| Native producer and development identity | `native-producer-action-graph` passed. Supplemental read-only PE inspection verified all 42 main/satellite DLL entries carry public key token `B03F5F7F11D50A3A`, the exact pinned 160-byte key, the public-sign flag and zero/uncompleted 128-byte signature slots; no Authenticode or NuGet package signature was introduced. | + +The signing and source-root patch blobs match the coordinator's source commits +exactly (`77ebdde668431f21d5e7a08d8c34098e1c36c6f5` and +`245d283dbdd6b54ada49a1b0948e4fbda7bb2f35`, respectively). A byte comparison of +the retained unsigned and new signed archives found exactly the 42 DLL entries +changed; all 13 other entries, including the four generated configs, package +metadata, readme, build hooks and signed installation scripts, are unchanged. + +**Test-value evidence:** the 15-case gate is an executed green-before / +green-after preservation comparison, not proof that the old unsigned identity +was acceptable to every downstream component. The same supplemental signing +inspection rejects the retained unsigned code-fix DLL for its absent expected +public key, then passes all 42 signed entries. The shared signing fixture's +broader red/green evidence belongs to the coordinator; no new test scheduling, +diagnostic suppression or official signing was introduced here. + +Evidence and the new package feed are retained at +`C:\tfba\6a8043a5c4a6\analyzer-signed-evidence\20261103-165840-50c02dd7`. +`validation.json` records the clean source revision, all case outcomes and +commands/exits; compiler SARIF, binlogs and selected asset files remain beside +it. `public-signing.json`, `verify-analyzer-public-signing.ps1`, +`unsigned-identity-rejected.log` and `signing-refresh-comparison.json` preserve +the supplemental probe and package comparison. The previous unsigned evidence +and caches remain separate. Only this decision record was edited after the +successful signed run. + +#### Parent integration: shared framework metadata + +The parent integrated the analyzer and netstandard core commits, then replaced +the analyzer-only attribute file with the shared +`CompatibilityFrameworkMetadata.cs` in exactly the two netstandard analyzer/codefix +declarations. No modern source target receives this guarded file. + +The same analyzer validation command passed all 15 cases after consolidation, +including exact emitted framework metadata, C#/VB compiler behavior, the Roslyn +3.11 code fix and French resources. The integrated package has SHA-256 +`117B33B04791A2DBB1A1344EC50EAE5496B7F27C10D4B0EAD99A117B37CE4229`; +the changed source/PDB provenance is not treated as byte identity with the lane +package. Evidence is under +`C:\tfb\parent-analyzer-evidence\20261103-151018-80b35180`. +The run started at parent revision `11ae3b9f2369f098d1ba352df7259b6e5b5b17fe` +with the three-file metadata consolidation; the only concurrent parent commit +changed the separate MTP package validator, not these producer/consumer inputs. + +### 2026-11-03: native Windows library lane + +This lane starts at `6bc33c48b9dae0e89486862f46af3c876fd7cf5d`. +It owns `eng/bazel/windows.bzl`, a separate Windows dependency group, and a +scoped `windows-targeting.patch`; the portable graph and three-package aggregate +must retain their existing behavior. Shared root wiring is additive. The +coordinating migration session owns combined documentation, CI, integration with +other package/SDK lanes, and any eventual release/servicing decision. + +The first contract is a **native library and controller foundation**, not native +XAML application compilation: + +- `PackagedApp` needs its four `net8.0` through `net11.0` Windows 10.0.19041.0 + variants, including `PACKAGEDAPP_WINRT` and actual WinRT projections. +- `mstest-appmodel-controller` retains its net8/net9 Windows 10.0.19041.0, + win-x64, framework-dependent apphost layout and `LatestMajor` roll-forward. + Its source-built MTP/PackagedApp/reporting assemblies must not be replaced by + released first-party binaries through transitive NuGet resolution. +- `MSTest.Windows.UIAutomation` needs Windows-qualified .NET 8/9/10/11 TFMs + and reference-only WPF targeting assets. Building this library does not + require XAML generation or prove UI interaction. +- Framework extensions and adapter platform services need distinct WinUI + (`net8.0-windows10.0.18362.0`, minimum 10.0.17763.0) and modern UWP + (`net9.0-windows10.0.17763.0`) source/metadata variants. Classic UWP remains + separately bounded by its reference/toolchain requirements. +- Package registration, activation, app identity, connect-back authorization, + cancellation, exit propagation, and cleanup remain production-owned. + An unpackaged/disabled launcher must not register an app; informational + no-handshake launches and required-handshake executions remain distinct. + Any real activation experiment uses only a task-owned identity and outputs. + Win32 1346, missing capabilities, or denied registration remain failures, + never a reason to alter ACLs, Developer Mode, global SDKs, or test assertions. + +The no-change alternative leaves the Windows source branches uncompiled. +Manually compiling those branches against portable references would not preserve +TFM selection or runtime projections. The chosen bounded extension therefore +adds explicit native Windows targeting and asset selection first, then exercises +the resulting outputs. An MSBuild-driven XAML bridge is a possible separate +hybrid experiment, not a native producer or a replacement for this contract. + +Planned evidence: native action graphs; target-framework, minimum-version and +reference/runtime asset checks; exact loaded assembly hashes; isolated +controller/library consumers with contractual exits; a buildable +counterfactual for new executable checks; and a bounded XAML toolchain +assessment. At this entry these experiments have **not yet run**. No shipped +package, application activation, native XAML pipeline, CI run, or backport is +claimed. + +Research found two distinct CsWinRT 2.x profiles in the pinned SDK's +`Microsoft.NETCoreSdk.BundledVersions.props`: the net8/net9 Windows 19041 builds +use `Microsoft.Windows.SDK.NET.Ref` 10.0.19041.57 (`lib/net8.0`, +WinRT.Runtime 2.2.0.0), while net10/net11 use 10.0.19041.87 (`lib/net9.0`, +WinRT.Runtime 2.3.1.0). The packages' `data/FrameworkList.xml` separates +the ordinary `Windows` profile from `Microsoft.Windows.UI.Xaml.dll`'s `Xaml` +profile. The ordinary library targets must not accidentally include the latter. +Windows SDK revision `.1` requests the new CsWinRT 3 pipeline according to +`Microsoft.NET.Windows.targets`; it is not an alias for `.0` and stays unsupported +by this bounded patch. + +The first native dependency-tool build passed on the unchanged baseline. +Q: then ran out of space. Only this lane's Bazel resources were relocated to C:; +an attempted link-preserving extracted-cache move failed because Robocopy could +not recreate symbolic links without a privilege the process does not have. +No privilege or machine policy was changed. Incomplete extracted caches were +discarded, and subsequent native work uses fresh C: repository extractions rather +than trusting moved cache records. The source worktree remains on Q:. Residual +owned cache cleanup is tracked separately and is not yet claimed complete. + +The source draft preserves distinct modern UWP/WinUI extension, platform-service, +and adapter assemblies. WinUI's existing source-level supported-OS annotations +are retained (17763 for framework extensions, 18362 for platform services), +rather than emitting duplicate attributes or silently changing those contracts. +The desktop mode uses the WindowsDesktop reference/runtime pack without adding +XAML generation. Ordinary WinRT imports select only the `Windows` profile and +its matching generator/runtime. The Windows compatibility table is bounded to +the net8-net11 library matrix plus older net5-net7 package assets; it does not +claim untested future Windows framework or CsWinRT 3 support. + +The coordinator temporarily paused new heavy builds/restores for the other +lanes' initial compiler wave. During that pause, the Windows draft gained a +19-assertion analysis test and seven isolated library-consumer probes. These are +not yet executed. Root wiring and the generated Windows lock will be enabled +together after dependency resolution; the existing portable graph is unchanged. +The controller's CodeCoverage pin is available on the repository's `test-tools` +feed, not nuget.org. Its native dependency closure belongs to this lane, while +the coordinating session owns the shared experimental package-version change. + +#### Targeting-rule test-value evidence + +The first bounded native check executes without C# compilation or NuGet restore: +`//:windows_targeting_test` is one Bazel analysis-test target with 22 assertions. +The tested production patch has SHA-256 +`218BEF63B48ED1C921CA3D6553AE82FC90194D731F4B43B4A824F3E1220D5BFB`; +the test source has SHA-256 +`4C8CE129AF297443DBB76E441477A1CE4591E81400916C9FBB709802FC928502`, +on the starting revision above. This validates selection, symbols, pack +mapping and runtime-configuration generation, not compiled Windows libraries. + +The initial run exposed nonexistent WindowsDesktop arm64 runtime packs for +.NET Core 3.0/3.1. The patch now preserves their actual x64-only support rather +than declaring unsupported downloads. The final check covers that boundary too. + +For the counterfactual, a task-owned copy of the patched rules retained the +Windows API/table shape but restored upstream's ordering-only +`get_highest_compatible_target_framework`. The same test then detected both +incorrect selections: + +```text +NewerPortableCannotConsumeOlderWindows: expected None, actual "net8.0-windows10.0.19041.0" +RuntimeUpgradeCannotRaiseWindowsMinimum: expected None, actual "net8.0-windows10.0.19041.0" +``` + +| Production state | Bazel exit | Executed targets | Result | +| --- | --- | --- | --- | +| Correct, before | 0 | 1 | All 22 assertions passed | +| Ordering-only counterfactual | 3 | 1 | Test process exit 1; both assertions above failed | +| Correct, after | 0 | 1 | All 22 assertions passed | + +The counterfactual patch SHA-256 is +`EA7FDED741B15412701381B23CEAE8118CE1CA4259A4142B70A38F97390529F1`. +JUnit reports were parsed for exactly one executed target, no skips, and the +expected outcomes. The isolated comparison materialized one existing internal +resource-test fixture symlink as a normal file; that fixture is not consumed by +this test. No TestFx source or test assertions were changed between runs. + +Exact correct-state command, from the worktree root: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfbw\d683319bb48a' +.\eng\bazel.ps1 --batch --host_jvm_args=-Xmx2g test //:windows_targeting_test --jobs=2 --noshow_progress --show_result=0 --nocache_test_results --repository_cache=C:\tfb\d683319bb48a\cache\repos\v1\content_addressable +``` + +The counterfactual used the same command with output root +`C:\tfbw\d683319bb48a-red` and the additional argument +`--override_module=rules_dotnet=C:\tfbw\d683319bb48a\targeting-counterfactual\rules_dotnet`. +The three reports, command/test logs and counterfactual patch are retained under +`C:\tfbw\d683319bb48a\targeting-evidence`; the excerpts and outcomes above preserve +the decisive evidence in this versioned record. Batch mode left no test server +running. Windows library compilation, controller layout, real registration/ +activation and native XAML remain separate, unproven gates at this stage. + +#### Windows library execution and the controller identity boundary + +The subsequent `net8.0-windows10.0.19041.0` PackagedApp build passed with +`--jobs=1`. Its copied, self-contained consumer ran on **.NET 8.0.33**, invoked +the real `PackageManager.RegisterPackageByUriAsync` API-presence query through +the WinRT projection, and verified the loaded native MTP, PackagedApp, +Microsoft.Windows.SDK.NET and WinRT.Runtime hashes against its producer. +The staged directory contained spaces and `!`, and `DOTNET_ROOT` pointed to a +missing directory. This is a library/runtime check, not app registration. +The desktop reference-only consumer and modern UWP library flavors also built. + +The full graph exposed further native asset-selection requirements: Windows SDK +NuGet versions have four numeric components; `lib/native/*.lib` entries are C++ +linker inputs, not unsupported managed TFMs; and a flat Bazel `select` cannot +choose between a newer portable TFM and an older Windows-qualified TFM because +their compatibility conditions form a partial order. The scoped patch preserves +the full versions, ignores C++ inputs for managed references, and uses ordered +single-condition aliases with the same nearest-framework precedence. + +The exact CodeCoverage payload was independently hashed because the `test-tools` +feed's registration/catalog route did not expose its integrity. Its SHA-256 is +`D3BD12007741B5037080C4C97802FFD5C9DB97DBE4186F040A1D4B56EA8CAE4E`, +and the module fragment pins its SHA-512. Only that package's six managed +assemblies, 17 satellite cultures and 11 win-x64 native/config assets are +imported, with the source-built MTP dependency rather than the released one. + +Controller compilation then failed at its real CodeCoverage hook: that package +requires `Microsoft.Testing.Platform, Version=2.6.0.0, PublicKeyToken=b03f5f7f11d50a3a`, +while the native platform has the same version but `PublicKeyToken=null`. +The coordinating session owns the shared signing/friend-identity correction; +this lane does not rewrite CodeCoverage, substitute released MTP, or use +reflection to hide the mismatch. At that point the controller was not yet a +built deliverable. + +The complete **14-library Windows matrix** and seven isolated consumers +subsequently passed: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfbw\d683319bb48a' +.\eng\bazel\windows\validate.ps1 +``` + +The command exited zero. WinRT consumers ran on .NET 8.0.33, 9.0.22, 10.0.14, +and the pinned .NET 11 RC runtime; the WPF and WinUI consumers ran on 8.0.33 +and the modern UWP consumer on 9.0.22. Every loaded first-party/runtime DLL +matched its native producer hash and was loaded from the copied layout. +Windows target/minimum metadata, the WPF implementation-versus-reference +boundary, the ordinary WinRT profile's exclusion of the UWP XAML projection, +and the compiler action graph were checked. Evidence: +`windows-validation/20261103-152856-5ac73479` beneath the lane's output root. + +The real packaged-host check also passed: + +```powershell +.\eng\bazel\windows\validate-app-model.ps1 -HostOnly +``` + +This builds a native console host around the unchanged explorer framework/tests, +not a XAML application. It checks unpackaged pass/failure/empty-selection exits +**0/2/9**, launcher suppression without registration, then real registration, +AUMID activation, the selected passing test's TRX, exact installed package +identity/location, and loaded native hashes. The final registration readback +was an empty array after removal of the exact task-owned package. Evidence: +`windows-app-model/9f309006ea6d4343ad62a3a7704cca0e`. The identity was +`TestFx.Bazel.9f309006ea6d4343ad62a3a7704cca0e`. + +Two harness attempts were corrected before that result: Windows PowerShell's +first-module-load progress CLIXML must not be appended to stdout JSON, and an +initial 52-character generated package name exceeded the Windows identity +limit, causing `0x800706F7` before registration. Neither was treated as a +production pass or a host-permission failure. No package remained registered +after any attempt, and no ACL, Developer Mode, SDK or VS installation changed. +`-HostOnly` explicitly excludes the still-blocked external controller checks; +the default script requires those checks too. + +#### Bounded XAML boundary research + +The pinned Windows App SDK WinUI package contains a standalone +`tools/net472/XamlCompiler.exe`. Invoking it with no inputs returned its documented +two-JSON-file usage and exit zero. The package's +`Microsoft.UI.Xaml.Markup.Compiler.interop.targets` supplies `RealBuildPass1` / +`RealBuildPass2` inputs, then consumes generated C#, XAML and XBF outputs. +Metadata inspection of `CompilerInputs`, `AssemblyItem` and `FileItem` established +the actual serialized input shape without invoking MSBuild. + +A bounded direct-compiler experiment will test whether that private, versioned +JSON contract can generate a tiny XAML library with explicit native references. +That would be a compiler experiment only: it would not establish a complete +Bazel XAML rule, WinUI deployment, application activation, or supported tooling. +An MSBuild bridge remains hybrid and must not be described as native support. + +The bounded experiment was executed with the native WinUI library's actual +compiler reference list and a tiny `MainPage.xaml`/partial C# class. +`XamlCompiler.exe ` ran directly, not through MSBuild. +The first input returned exit 1 with an internal index-out-of-range error. +A second input supplied the core reference root and left `LocalAssembly` +absent; a third restored the vendor's omitted-field defaults, a trailing output +separator and the existing Windows SDK path. Both returned exit 1 without +generated output. Inputs and logs remain under `xaml-probe` in the owned output +root. No generated C# or XBF, native XAML build rule, or XAML app execution is +claimed. This establishes an unresolved private compiler-input/toolchain +boundary, not that native XAML compilation is impossible. Further work needs a +canonical input/output contract before a safe two-pass Bazel rule. + +#### Signed controller completion and configured asset evidence + +The shared portions of coordinator checkpoint +`aff2cf0f702a07779cee99a8acf29cf515e858bb` were integrated without importing its +absent SDK/alias-conformance lane files. The public-signing patch matches the +checkpoint's Git blob `77ebdde668431f21d5e7a08d8c34098e1c36c6f5`. +The public-only, hash-pinned MSFT key and `/publicsign+` preserve the source +assembly token `b03f5f7f11d50a3a`, qualified mock/Microsoft friend identities and +satellites. This is development **public signing**, not private-key release +signing, an MSIX certificate, or authorization to publish packages. + +Both original `mstest-appmodel-controller` targets now build natively for their +net8/net9 Windows 19041, win-x64, framework-dependent apphost layouts. The +unchanged CodeCoverage extension binds to source-built MTP; none of its DLLs +were rewritten. Its 11 native/config files remain under +`runtimes/win-x64/native` in each controller publish layout. + +The full `validate-app-model.ps1` run +`windows-app-model/2e60d7846fe94b6d8e9eb163f17c667a` exited zero. It exercised +both controllers, not `-HostOnly`: + +| Path | Expected and observed exit | +| --- | --- | +| Each controller's malformed bootstrap | 5 | +| Each controller's selected passing test | 0, with one executed passing TRX result | +| Each controller's selected failing test | 2 | +| Each controller's empty selection | 9 | +| Each controller's discovery without execution handshake | 0, with the real host's test names | +| Native packaged host registration/activation and suppressed launcher | 0 | +| Exact package removal and empty registration readback | 0 | + +The source MTP/PackagedApp public-key tokens and loaded native hashes were +checked in the activated host. Signed Windows-library validation also exited +zero for all seven consumers under +`windows-validation/20261103-162841-f7772f5c`; it additionally requires the +correct token on every source library and executes both analysis-test targets. +WinUI/UWP probes establish library API/metadata and runtime provenance, not +UI-thread execution or Windows App SDK initialization. The UIAutomation probe +loads real WPF types but does not interact with an application window. +Classic UWP, AppContainer activation, the native SDK's full packaged-test +routing and official packaging/release qualification remain distinct gates. + +`windows_asset_selection_test` adds four configured checks around actual +`tfm_filegroup` aliases. A retained, buildable counterfactual reverses the alias +priority while preserving the same fixture/tests. It executes and fails: + +```text +NewerRuntimeWinsWithoutAmbiguity: expected ["LICENSE"], actual [".bazelversion"] +``` + +The files are read-only markers for newer-runtime versus older-Windows assets. +The test passed before and after; Bazel exits were **0 / 3 / 0**, with one +executed test target per run and no skips. Counterfactual patch SHA-256: +`D1F37B396384FAC2354007DAEFCBA58C2B77F2E151B7034FBA67855723A15451`. +Test-source SHA-256: +`58960E7A1E1F703975549C5EE7241C8A3379D5B89D7F6B5AA908BEE1A74C6CEB`. +Windows-targeting patch SHA-256: +`2A63D276D7647CBACACCB3AA8AEBA0CD66CDDBB4A70BC6C42E948EBD8F55044F`. +The first attempted counterfactual restored the flat `select` and failed during +configuration before tests could execute; that is retained as an analysis +blocker, not counted as behavioral red evidence. + +Exact selection command: + +```powershell +.\eng\bazel.ps1 test //:windows_targeting_test //:windows_asset_selection_test --jobs=2 --noshow_progress --show_result=0 --nocache_test_results +``` + +The isolated red run selected only `//:windows_asset_selection_test`, used the +owned `-red` output root and the module override described above. Reports, +logs and patches are under `asset-selection-evidence`. The comparison checkout +and retired Bazel output/install subtrees were removed after their evidence was +preserved; active checksum caches and final validation evidence were retained. + +After the shared signing integration, the unchanged portable baseline was +rerun with +`.\eng\bazel.ps1 test //:baseline_tests --jobs=2 --noshow_progress --show_result=0 --nocache_test_results` +and exited zero. Parsed reports account for **3,017 passing cases across seven +targets**: framework 1,634; adapter 152; platform services 1,215; build tools 13; +and one each for the source explorer, released explorer and Simple1. No cases +were skipped. The reports and counts are retained under +`portable-signed-evidence` in the owned output root. + +This lane establishes native managed Windows compilation, self-contained +library consumers, two framework-dependent controller layouts, and real +registration/activation of a **loose MSIX layout**. It does not produce a signed +MSIX archive or establish native XAML, classic-UWP/AppContainer execution, +Windows NuGet integration, release-branch servicing, or CI completion. +The coordinating migration owner retains those rollout/integration decisions. + +### 2026-11-02: extending the migration after upstream SDK discovery + +The user authorized implementing as much of the remaining migration as possible. +The starting TestFx revision is +`22a3f9d008b53fdb97a569ee382307bf65bc5787`. The existing MSBuild shipping pipeline, +production source, test assertions, and `global.json` remain authoritative. + +[rules_dotnet#593](https://github.com/bazel-contrib/rules_dotnet/pull/593), +merged as `add5c92b30888a70aa951de1744a770b8f8ef436`, supersedes the generated SDK +tables with release-metadata discovery and native Paket module extensions. +An unchanged released-MSTest consumer already passed against that exact upstream +revision on .NET 11 RC3, including its runtimeconfig and loaded assembly hash. +That bounded result is not validation of the TestFx source graph or upstream's +full suite; its Buildkite status was failed when inspected. + +The implementation sequence is to pin this immutable upstream source, reassess +the nine old compatibility patches, restore the existing native baseline, expand +the portable framework/test graph, and then produce locally validated native +packages. Keeping 0.22.2 would require maintaining SDK discovery and dependency +machinery that upstream has replaced. Updating blindly to an unpinned branch +would make the experiment irreproducible. + +The compiler remains an explicit investigation: TestFx pins an engineering +.NET 12 SDK, whereas upstream discovers published release metadata. No silent +edit of `global.json` or claim of compiler parity is authorized by this work. +Windows-qualified NuGet TFMs remain unsupported upstream, and a native XAML/UWP +toolchain is a separate requirement, not something an MSBuild wrapper can satisfy. + +New packages must be produced solely from native Bazel outputs, staged in a +task-owned feed, and exercised by actual consumers. MSBuild is allowed in those +consumers because MSTest's SDK/build extensions are themselves products under +test, not because it is allowed to build the TestFx producer graph. Release +signing, publishing, and downstream rollout remain disabled until their own +parity gates pass. + +Observed during this implementation: + +- The pre-upgrade seven-target baseline passed again, before changing the + compiler/rules. The same baseline then passed on Bazel 9.1.1 and SDK 11 RC3. +- The old minimal-context patches caused a Bazel patcher exception. They were + rebased with full context against the immutable upstream tree, not applied to + a mutable shared checkout. Upstream now resolves duplicate analyzers itself. +- Roslyn still crashes while running diagnostic analyzers in the extra + reference-only compile. The implementation compile retains its diagnostics; + the reference-only workaround remains. The netstandard code-fix build also + still needs canonical framework facades instead of legacy System.* copies. +- Building net8/net9 exposed a separate reference-resolution defect: upstream + discarded newer transitive `System.Text.Encodings.Web`, `System.IO.Pipelines`, + and `System.Diagnostics.DiagnosticSource` references in favor of older + framework copies. Version-aware transitive selection fixed the actual graph + without changing TestFx source or weakening nullable diagnostics. +- `managed_all` now builds the four portable framework configurations. Existing + protocol-contract (27), source-generation (197), and VSTestBridge (202) cases + were added unchanged, preserving method scheduling and the generator suite's + four-worker setting. The portable suite totals 3,443 cases in ten targets. +- Native NuGet packing hit a Bazel exception for a transition on a label-keyed + file dictionary. Explicit package files retain their incoming configuration + instead. All three MTP/TRX packages include four TFMs, resources, documentation, + and their consumer build hooks. +- A package-consumer attempt failed with NETSDK1005 because overriding + `TargetFramework` only on the build command did not change restore's project + framework. The binary log identified that mismatch. The isolated copied + consumer now declares each actual framework before its build; all four build. +- The package-consuming explorer executes on net11 with a new cache and + first-party source mapping to the native feed. It verifies the loaded DLL + hashes and native-build metadata, emits a real TRX, and returns 0/2/9 for + pass/failure/empty selection. Four self-contained publishers also execute + outside Bazel's tree, with nonexistent `DOTNET_ROOT`, and verify their actual + .NET 8/9/10/11 runtime and staged CoreLib before the same exit checks. +- The full MTP suite was rerun: 3,378 passed, the same two Windows impersonation + cases failed with Win32 1346, and none skipped. This is not included in the + verified portable suite and its assertions remain unchanged. +- The exact engineering SDK archive on `ci.dot.net` now returns HTTP 200. + The .NET 12 release-metadata URL and the equivalent `builds.dotnet` archive + return 404. Availability of the archive does not mean the upstream metadata + resolver can yet select it; compiler parity remains outstanding. + +### Package-version test-value evidence + +The new package-version command intentionally writes the selected product's +`-bazel` version, rather than an official-looking release version. The four +`PackageVersion_*` cases select both product versions and reject absent/duplicate +properties. An isolated counterfactual retained that command and the same tests, +but omitted `-bazel` from its output. Its native compiler invocation succeeded. + +The same compiled test assembly and filter +`--filter 'FullyQualifiedName~PackageVersion' --minimum-expected-tests 4` +executed in all three runs: + +| Implementation | Exit | Executed | Passed | Failed | +| --- | --- | --- | --- | --- | +| Correct, before | 0 | 4 | 4 | 0 | +| Counterfactual | 2 | 4 | 2 | 2 | +| Correct, after | 0 | 4 | 4 | 0 | + +The two failures were exact equality assertions: `4.6.0-bazel` versus `4.6.0`, +and `2.6.0-bazel` versus `2.6.0`. The invalid-input cases still passed. +Counterfactual patch SHA-256: +`49CE9D3486B197EF1678088EB14C6403037606C13522070D43B376FCCEBADF24`. +Commands, compiler arguments, patch, and all three TRX files are retained under +`artifacts/bazel-expansion/package-version-counterfactual`. Earlier setup errors +while locating a direct test launcher are not counted as behavioral evidence. + +### Remaining delivery boundaries after this stage + +The new packages are the platform, TRX abstractions, and TRX reporter only. +MSTest framework/adapter packaging, analyzer packaging, SDK/meta-packages, +Windows-specific assets, netstandard/net462 parity, the other test projects and +examples, NativeAOT/browser execution, signing, and release rollout still require +work. Windows x64 was executed; the expanded Windows/Linux workflow is only +configuration until its jobs run. No TestFx PR or package publication is implied. + +### 2026-10-29: baseline and upstream contracts + +Baseline: `10847b7d879200796a35ea9888f36fdee7b9b593`, clean worktree. +No existing Bazel configuration was found. + +Sources inspected: + +- [rules_dotnet v0.22.2](https://github.com/bazel-contrib/rules_dotnet/releases/tag/v0.22.2), + its `MODULE.bazel`, `dotnet/defs.bzl`, rule implementations, and examples. + The module requires Bazel 8 or later, despite the release body's older Bazel 7 + instructions. Use Bzlmod and the actual pinned source contract. +- [Native C# test rule](https://github.com/bazel-contrib/rules_dotnet/blob/v0.22.2/dotnet/private/rules/csharp/test.bzl): + `csharp_test` executes a C# program. MTP is already executable; NUnit wrapping + and VSTest discovery are unnecessary. +- [Toolchain versions](https://github.com/bazel-contrib/rules_dotnet/blob/v0.22.2/dotnet/private/sdk/versions.bzl) + and [TFM graph](https://github.com/bazel-contrib/rules_dotnet/blob/v0.22.2/dotnet/private/common.bzl): + SDK 10.0.400 is supported with checksum-pinned downloads; modern TFMs stop at + `net10.0`. TestFx's `global.json` pins SDK 12.0.100-alpha.1.26509.101 and its + source build also includes `net11.0`. Full toolchain/TFM parity is therefore + not available from the released rules. +- [Paket integration](https://github.com/bazel-contrib/rules_dotnet/tree/v0.22.2/tools/paket2bazel): + use upstream dependency resolution/lock generation rather than inventing a + second NuGet resolver. +- Local `Directory.Build.props`, `Directory.Build.targets`, product projects, + `eng/Versions.props`, and sample defaults: implicit usings, linked sources, + generated resource accessors, version templates, source generators, friend + assemblies, and extension registration all need explicit Bazel equivalents. + Merely globbing `*.cs` is insufficient. + +The machine has no Bazel installation. A repository-scoped, checksum-pinned +bootstrap is needed; do not alter user-global SDK or tool settings. + +### 2026-10-29: bootstrap experiments + +- The checksum-verified Bazel 8.8.2 bootstrap executed successfully. +- Building upstream `paket2bazel` with the output root below this long worktree + path compiled the F# tool but failed to launch `apphost_shimmer.dll.bat`: + Windows `GetShortPathNameW` could not shorten the path sufficiently. + The bootstrap now selects a short, worktree-specific output root; + `TESTFX_BAZEL_OUTPUT_ROOT` allows an explicit supported cache location. +- The machine's temporary directory is `C:\Windows\TEMP`; Java could not resolve + its extracted security configuration there (`AccessDeniedException`). Windows + now defaults to `:\tfb\` instead of changing + system permissions. Other systems use the normal temporary directory. +- PowerShell consumes an unquoted `--` passed to a script. Commands invoking + `eng/bazel.ps1 run` must quote `'--'` to forward Bazel's separator. +- Native compilation of the existing platform explorer exposed an upstream + response-file defect: source paths such as `In-process extensions/...cs` were + split at spaces (`CS2001`). A one-line, version-scoped Bzlmod patch quotes C# + source arguments. Do not rename sample directories or copy sources elsewhere + to conceal the defect. This is build-contract evidence, not a runtime + regression-test red phase. +- Paket's default maximum-version strategy selected Application Insights 3.x + for a package that declares a 2.23 minimum. Use `strategy: min` and a committed + lock to align transitive selection with NuGet's lowest-applicable behavior. +- The compiled explorer could not resolve its runtime dependencies with + Windows manifest-only runfiles. Follow the upstream `.bazelrc` contract: + `--enable_runfiles` and `--windows_enable_symlinks`. Windows therefore needs + permission to create symbolic links (Developer Mode or an appropriately + privileged shell); the bootstrap does not change machine policy. + +### 2026-10-29: source-built platform + +The initial `bazel test //:explorer` target compiled `Microsoft.Testing.Platform`, TRX abstractions, +and TRX reporter from this checkout and passed the same existing explorer test. +The real controller launched a child that reported `Microsoft.Testing.Platform +v2.6.0-bazel`, completed one test, and exited zero. The released-package baseline +reports `v2.5.2`. No MSBuild compile/restore outputs were used. +The runnable applications and filtered smoke tests were subsequently separated +into `//:explorer` and `//:explorer_test`, so application arguments do not inherit +a fixed smoke-test filter. + +Native actions now generate RESX string accessors and binary resources, version +attributes, and existing version templates. A scoped rules patch preserves the +fully qualified manifest names of generated `.resources` files, including +hand-maintained cross-assembly resource accessors. + +The first platform compile exposed another SDK difference: upstream emits `NET` +but not `NETCOREAPP` for `net10.0`. That accidentally enabled legacy polyfills and +the netstandard JSON parser. Explicitly restore the missing symbol in the TestFx +macro; do not delete conditional sources or suppress the resulting diagnostics. +Compilation then succeeded with warnings treated as errors. + +The initial migration preserves SDK-style transitive compilation references via +`@rules_dotnet//dotnet/settings:strict_deps=false`. The first source-generator +compile with strict dependencies could not see `Microsoft.CodeAnalysis.Common` +through its declared CSharp package. This setting changes reference visibility, +not dependency ownership: the complete closure is still declared and cached by +Bazel. Tightening direct dependencies is a separate cleanup, not a prerequisite +for behavior-preserving build migration. + +Windows executable/test labels live at the workspace root: deep labels doubled +inside runfiles exceed the batch-launch path limit even with a short output root. +Source files remain in their original locations. + +### 2026-10-29: MSTest compiler boundary + +The MSTest assertion generator remains a native `netstandard2.0` analyzer. +Supply the existing `EnforceExtendedAnalyzerRules` property through a global +analyzer config, and pass the repository `.editorconfig` to preserve its scoped +experimental-API diagnostics rather than changing product sources. + +SDK 10.0.400's compiler crashed in the *extra reference-only* compilation used by +`rules_dotnet` for friend assemblies: `CSharpCompilerDiagnosticAnalyzer` reported +`Cannot enqueue data after PromiseNotToEnqueue`. Disabling compiler parallelism +was tried and still failed (AD0001); that experiment was removed. Public +builds.dotnet/ci.dot.net probes for the repository's SDK 12 pin returned 404, so +no SDK substitution was claimed. + +A version-scoped patch passes `/skipanalyzers+` only in that extra `/refonly` +action. Source generators and analyzer configuration remain supplied there. +The implementation compilation still runs all configured analyzers with +warnings as errors; it is not disabled or replaced. + +### 2026-10-29: localization, metadata, and existing-test sensitivity + +The first full framework run executed 1,634 tests: 1,632 passed and two failed +because Korean satellite resources were missing. Native XLF compilation now +builds locale assemblies and propagates them through runfiles/dependency +manifests. The same 1,634 tests then passed, with no skipped cases or changed +assertions. Preserve logical names such as `FrameworkMessages.ko.resources`; +the shipped 4.5.2 package's satellite manifests were inspected for comparison. + +Translation behavior was checked against `dotnet/xliff-tasks`' `XlfDocument`, +`XElementExtensions.GetTargetValue`, and `TranslatableDocument.Translate`: +apply targets regardless of state, and fall back to source when target is absent. +The existing localization guard passed all 364 catalogs. No RESX/XLF was edited. + +Two existing platform-services tests exposed a second real difference: the +shipped `UTA_ExecuteThrewException` resource contains CRLF, while the initial +XDocument reader normalized it to LF. A non-normalizing XML reader, with DTDs +prohibited and external resolution disabled, preserves resource text. Both +tests and all 1,215 platform-services cases now pass. Added focused LF/CRLF, +XLF, invalid-input, BOM, and metadata tests; all nine execute and pass. + +An existing adapter test also required the SDK's neutral-resource assembly +attribute. An MTP test required `Application.BuildTimeUTC`. Native metadata now +emits `NeutralResourcesLanguage("en")` and uses Bazel's volatile timestamp for +the platform's UTC date rather than inventing a date or consulting an undeclared +wall clock. All 152 adapter cases pass. + +### 2026-10-29: expanded graph and dependency experiments + +`//:managed` now compiles 35 of 41 source projects. The +[scope inventory](../bazel.md#targets-and-current-scope) identifies the six +packaging/Windows-workload projects outside this target. + +NuGet package selection required care. `strategy: min` only affects transitive +dependencies; a lower-bound experiment selected unwanted newer direct versions. +`lowest_matching: true` plus broad lower bounds caused lengthy backtracking +around the composed AI/resilience/hosting graph. The final declaration pins +direct versions, retaining repository versions where possible and converging +shared abstractions to 10.0.13 as required by that graph. A resolver abandoned +during the experiment retained its process lock; its exact owned PID was +verified and stopped, and the final bounded resolution completed in 15 seconds. +No global cache was cleared. + +Further executed failures established these scoped rules patches: + +- Both SDK and explicit System.Text.Json generators ran, generating duplicate + members. Prefer the explicit package generator when assembly names duplicate. +- Code-fix compilation received old System.* facades alongside NETStandard's + canonical references. Give the selected framework references priority. +- Long DLL-based batch launcher names overflowed Windows' doubled runfiles + paths. Use short launcher names and preserve the original source layout. +- Windows launcher argument rewriting corrupted quoted paths; forward arguments + without rewriting them and disable delayed expansion while invoking dotnet. + Actual report generation succeeds in a directory containing spaces and `!`. +- PDBs were not declared as runfiles. Carry them with the compiled assembly. + +Analyzer release files and the existing MSTest diagnostic suppressor are native +inputs. The suppressor, not a new CS8618 allowlist, handles injected TestContext +properties. Ordinary analyzer and source-generator compilation still uses its +declared Roslyn API version. + +### 2026-10-29: remaining host-specific MTP failures + +Full native MTP execution ran 3,380 cases: 3,378 passed and two real Windows +impersonation tests failed with Win32 1346 (`ERROR_BAD_IMPERSONATION_LEVEL`). +They fail outside Bazel's test wrapper too. A separate plain .NET named-pipe +and anonymous-token probe, with no TestFx or Bazel code, reproduced HRESULT +`0x80070542`. No security settings or assertions were changed. + +The explicit selection excluding those two ran and passed 3,378 cases; report +that separately from the failed full run. `baseline_tests` does not include the +full MTP target. Other suites with extern aliases, special child bootstraps, +shipping-package assumptions, or unsupported workloads remain migration work. + +## Alternatives and decision + +1. Keep MSBuild only: preserves all existing capabilities but does not answer the + request. +2. Invoke MSBuild from Bazel: easy orchestration, but retains MSBuild's graph and + ambient outputs. Rejected as a migration claim. +3. Native `rules_dotnet` targets alongside existing project files: chosen. + Start with public examples, then grow the source graph and existing tests. + Make generated inputs explicit and retain a documented supported matrix. +4. Extend the rules immediately for all TestFx workloads/TFMs: not attempted. + Only demonstrated compatibility gaps in the supported graph received scoped + patches; a complete toolchain/workload fork remains a separate decision. + +The Bazel experiment deliberately uses its own hermetic SDK pin, currently +11.0.100-rc.3.26522.148, not a globally selected SDK or a silent replacement of +`global.json`. The portable matrix and three native packages have the bounded +evidence above. Windows app models, native AOT, the remaining shipping NuGet +assets, release signing, and Arcade services are separate parity gates. + +## Validation and demonstration + +### Initial 2026-10-29 baseline + +Executed on Windows x64, Bazel 8.8.2, rules_dotnet 0.22.2 at +`7e7cff30826695e814bfbe05d555db6a780a7123`, SDK 10.0.400, runtime 10.0.11. +Source baseline is `10847b7d879200796a35ea9888f36fdee7b9b593` plus this branch's +changes. Logs and reports are local evidence, not published or CI-verified. + +| Command | Result and scope | +| --- | --- | +| `.\eng\bazel.ps1 build //:managed --jobs=8` | Exit 0; 35 source projects. | +| Same build again | Exit 0; 315 action-cache hits, one internal action, 1.869 seconds in the recorded no-op run. Not a benchmark against MSBuild. | +| `.\eng\bazel\validate.ps1` | Exit 0; seven-target baseline, 3,013 passing cases, real reports, failure/zero-result/aggregation assertions, and action-graph inspection. | +| `.\eng\bazel.ps1 test //:build_tools_tests` | Exit 0; nine new cases, all passed and exported to TRX. | +| `.\eng\bazel.ps1 test //:platform_tests --nocache_test_results` | Bazel exit 3 / host exit 2; 3,380 executed, 3,378 passed, two host-specific failures, zero skipped. | +| `.\eng\bazel.ps1 run //:platform_tests_app '--' --filter 'FullyQualifiedName !~ CreateServerStream_AnUnauthorizedIdentityCannotConnect & FullyQualifiedName !~ CreateServerStream_AnAppContainerConnectsOnlyWhenItsOwnPackageIsAuthorized'` | Exit 0; 3,378 executed/passed, zero skipped; not a full-suite pass. | +| `python .github\scripts\check_localization.py` | Exit 0; 364 catalogs valid. | + +The reproducible script writes `validation.json`, logs, TRX, four actual report +formats, and `actions.json` under `artifacts/bazel-validation/`. The recorded +run `20261029-132646-a5e454f4` found 404 declared C# compiler actions and no MSBuild +execution. Product exits were 0 for success/discovery, 2 for the known failing +sample, 9 for zero work with a minimum of one, and Bazel 3 for mixed module results. +Console output plus structured reports are more useful than screenshots here; +no demonstration was fabricated or uploaded. + +### Test-value evidence + +The preserved localization red state has patch SHA-256 +`B7CC4A0E2369ED1145384D8D9C92D137E35592EA46E934EDF09FAF4C09363FA1`; +the paired green state has +`7D4B0A9F33F01F1F043FEDB894DCFB3167D2572737275A406B0E92E4468D5309`. +Both apply to the baseline above. Their patches, logs, and TRX were retained in +the session's `bazel-evidence/localization-{red,green}` storage; these are +intermediate revision-bound comparisons, not a claim that every commit was +independently compared. Later baseline runs revalidated the final behavior. + +| Requirement | Evidence | +| --- | --- | +| Localized resource behavior survives native compilation | **Executed: detected.** `GetDisplayNameArgumentsDisplayNameRefreshesLocalizedFormat` and `GetDisplayNameRefreshesLocalizedFormatWhenUICultureChanges` failed without satellites and passed with them; same assertions, 1,634 cases executed in both states. | +| Resource text and generated encoding are preserved | `Resx_PreservesTextAndEmitsBom` executes LF and CRLF cases; exact resource/source text and BOM assertions pass. Existing `ExecuteForTestThrowingExceptionShouldReturnTestResultWithFailedOutcome` and `RunTestMethodForTestThrowingExceptionShouldReturnTestResultWithFailedOutcome` failed before newline preservation and pass afterward. | +| XLF fallback and errors are explicit | `Xlf_AppliesTargetsAndPreservesMissingTargetFallback`, four `Xlf_RejectsInvalidCatalog` cases, and `Resx_RejectsNonStringDataBeforeWritingOutputs` pass. Invalid inputs produce nonzero exits without result artifacts. | +| Version and build-stamp outputs follow inputs | `Metadata_UsesVersionTemplateAndBuildStamp` passes exact source/metadata/BOM assertions. | +| Process/consumer integration is real | Existing sample tests run source-built MSTest/MTP, controller/child exits propagate, and `validate.ps1` asserts reports and mixed-result failure rather than accepting an outer success alone. | + +Paired mutation evidence for every new helper branch, complete package/source API +compatibility, all platforms, and shipping/servicing parity remain unproven. + +## Open questions + +- How much of the existing source/test graph can the released rules build without + weakening compiler diagnostics or changing product behavior? +- Which existing tests assume an MSBuild output or NuGet shipping layout? +- Which upstream changes are required for .NET 11 and Windows app-model parity? +- Release rollout/backports: none enabled. This branch owns the experiment; + replacing any supported shipping build requires an explicit later decision and + real package-consuming acceptance evidence. + +## Framework compatibility lane (2026-11-03) + +### Contract and inventory + +This lane starts at `6bc33c48b9dae0e89486862f46af3c876fd7cf5d`. +It adds opt-in native compilation for the actual non-Windows-qualified +`netstandard2.0` and `net462` project variants, without changing the modern +`managed`/`managed_all` selection, production source, test assertions, or +scheduling. Compilation against a compatible lower TFM is valid for a dependency, +but is not evidence that the requested project output was built for that TFM. + +The project inventory identifies these boundaries: + +- MTP, its portable extensions, and the server-client validation assembly declare + `netstandard2.0`. The portable `PackagedApp` project does not. The controller, + packaged-app build package, SDK/meta-packages, and Windows-qualified variants + belong to other lanes. +- `TestFramework` and `TestFramework.Extensions` declare both `netstandard2.0` + and `net462`. PlatformServices, TestAdapter, and MSTest.Extensions.Hosting + declare `net462`, but not `netstandard2.0`. +- The platform and server-client remove the System.Text.Json engine for + non-.NETCoreApp builds. The platform additionally removes + `JsonConfigurationFileParser.cs`. Keep the Jsonite sources and all + conditionally compiled legacy code. +- The server-client has seven additional, explicitly curated compatibility + polyfills; it must not acquire the complete polyfill glob. Other projects keep + their existing polyfill exclusions and linked sources. +- The framework extensions and platform services require the framework + `System.Configuration` reference on `net462`. Adapter/platform services need + `System.Memory` 4.6.3 and `System.Threading.Tasks.Extensions` 4.5.4 there; + Platform.MSBuild requires `Microsoft.Win32.Registry` 5.0.0 on netstandard. +- Preserve existing assembly names and friend grants. These remain unsigned + development outputs; strong-name/package identity is not established by this + lane. Fixed-framework analyzers and generators remain unchanged. + +### Decision and planned experiments + +Keep one source declaration per assembly, add its actual supported framework +choices, and select only the project-defined source/dependency differences. +An opt-in compatibility aggregate will verify the compiled TFM instead of +silently accepting the rules' highest-compatible fallback. Duplicating every +project macro would make source parity harder to maintain; globally changing the +default framework would disrupt other migration lanes. + +Resolve the compatibility-only NuGet closure in its own Paket file/group. +The modern lock's `>= net8.0` restriction cannot describe dependencies needed only +by older package assets. Shared `MODULE.bazel` or rules patches require +coordination with the migration owner. + +Validation uses an isolated Bazel output root and `--jobs=2` on the shared host: +compile every claimed project/TFM, inspect the selected framework/reference +inputs, run representative compatible consumers, and retain an unchanged modern +baseline. A failed compilation is build-contract evidence, not behavioral +red-phase proof. Exact results, unavailable variants, and runtime limitations +will be recorded as each experiment completes. Shipping packaging, SDK 12, +release-branch validation and rollout are separate gates. + +### First independently usable slice + +The first delivery is deliberately limited to three real `netstandard2.0` +outputs: `//:platform_netstandard2_0`, +`//:msbuild_extension_netstandard2_0`, and +`//:platform_msbuild_netstandard2_0`. Each wrapper forwards `DefaultInfo`, +`DotnetAssemblyCompileInfo`, and `DotnetAssemblyRuntimeInfo`, and rejects a +compiled framework different from the requested one. `//:managed_netstandard2_0` +also emits a JSON inventory of exact frameworks, output files, and runtime +dependencies. Its current membership is these three assemblies, not the whole +planned compatibility matrix. + +The initial broad dependency experiment resolved, but combining the newer +AI/hosting closure with the adapter's exact Tasks.Extensions pin produced a +lock containing incompatible minimum-version requirements. It is not the +delivered lock. The first slice instead resolves only the MSBuild task's actual +three package references in an independent 14-package closure; broader areas +must keep independently compatible dependency groups. + +Executed on Windows x64 with Bazel 9.1.1, rules_dotnet +`add5c92b30888a70aa951de1744a770b8f8ef436`, SDK +`11.0.100-rc.3.26522.148`, and `NETStandard.Library` 2.0.3 reference assemblies: + +| Command | Result | +| --- | --- | +| Pinned Paket launcher, from `eng/bazel/compatibility`: `paket update --no-install` | Exit 0; 14 locked packages, with the existing modern lock unchanged. | +| `.\eng\bazel.ps1 build //:managed_netstandard2_0 --jobs=2 --noshow_progress` | Exit 0; all three implementation DLLs and the exact-TFM inventory built. | + +The platform remains dependency-free. Its non-.NETCoreApp source selection +retains Jsonite, excludes only the project-declared System.Text.Json files, and +preserves the linked sources/polyfills. The task references the real +netstandard Microsoft.Build reference assemblies; their NuGets deliberately +provide no netstandard runtime DLL, because the executing MSBuild host supplies +them. Consumers must not stage these reference-only DLLs as runtime binaries. +Use the inventory/provider runtime closure for the remaining companion files. + +The initial Q-drive baseline was interrupted by ENOSPC and is not a test pass +or a compatibility-source failure. Only the lane-owned failed output/cache was +removed, and subsequent heavy outputs and retained evidence moved to C: using +process-local overrides. Logs, compiler response files, and the inventory are +retained in this session's `files/bazel-compatibility` evidence. Runtime consumers +and the rest of the framework matrix remain subsequent validation; this first +slice is a compilation delivery, not shipping-layout or CI certification. + +### Core assembly metadata correction + +The source compilation in `a29a5ffc0b1005848e71a645abcdeddb818113ff` was +genuinely netstandard, but the three emitted assemblies had zero +`TargetFrameworkAttribute` instances. Compiler-provider information alone does +not establish emitted assembly metadata. + +The reusable `//eng/bazel:CompatibilityFrameworkMetadata.cs` now supplies exact +`NETSTANDARD2_0` / `NET462` guarded attributes. The core declarations link it +only for their compatibility source selection; modern sources and fixed +analyzers are not changed by this correction. The analyzer lane can explicitly +reuse the file instead of its temporary local attribute without duplicate +attributes. + +Recompiled the three core outputs with the same pinned toolchain and inspected +their actual `GetCustomAttributesData()` results. Each has exactly one +`TargetFrameworkAttribute` with `FrameworkName == ".NETStandard,Version=v2.0"`. +The focused command +`.\eng\bazel.ps1 build //:platform_netstandard2_0 //:platform_msbuild_netstandard2_0 //:msbuild_extension_netstandard2_0 --jobs=2 --noshow_progress` +completed with exit 0. +Assembly paths and SHA-256 hashes are in the retained +`core-metadata-verified.json`. The broader keep-going build exposed separate +net462 facade and native executable-pack gaps; those do not invalidate this +three-assembly metadata correction and are not reported as a matrix pass. + +### Preserve no-op project removals in modern JSON selection + +The initial compatibility source split copied all project `Compile Remove` +entries into the modern source selection. Two entries, +`JsonExtensions.cs` and `JsonPropertyBagDeserializer.cs`, no longer exist. +MSBuild correctly treats those removals as no-ops; explicitly adding the paths +back made the unchanged modern graph fail with missing inputs. + +`modern_json_sources()` now globs the declared removal list, preserving every +actual JSON source while retaining no-op semantics for absent entries. This +correction does not remove conditional production code or change the +netstandard selection. + +The focused command +`.\eng\bazel.ps1 build //:platform //:platform_msbuild //:msbuild_extension //:platform_netstandard2_0 //:platform_msbuild_netstandard2_0 //:msbuild_extension_netstandard2_0 --jobs=2 --noshow_progress` +completed with exit 0: three modern `net10.0` and three exact `netstandard2.0` +outputs. Retained evidence is `modern-input-fixed.log` and +`modern-input-fixed.events.json`. The earlier missing-input report and a +corrected Starlark syntax attempt are build failures, not behavioral red-phase +evidence. + +## 2026-11-03: MSTest framework and adapter package lane + +### Contract and research + +This lane starts at `6bc33c48b9dae0e89486862f46af3c876fd7cf5d` and owns +`//:framework_package`, `//:adapter_package`, and their genuine portable support +packages. Existing `//:packages` and its MTP-only validator remain unchanged. +The consumer matrix is net8.0/net9.0/net10.0/net11.0; these are development +public-signed experimental packages, not a claim of Windows-app-model, +.NET Framework, or release-pipeline parity. The initial unsigned milestone is +preserved below. MSTest and MTP retain their separate version families +from `eng/Versions.props`, each with the explicit `-preview.bazel` suffix. + +The authoritative layouts are `TestFramework.Extensions.csproj`, +`MSTest.TestAdapter.csproj`, `Microsoft.Testing.Platform.MSBuild.csproj`, and their +existing consumer targets: + +- `MSTest.TestFramework` owns the core assembly under `lib/` and the + Extensions assembly under `buildTransitive/`. The core's localized + resources accompany the core assembly. Its dependency on `MSTest.Analyzers` + must retain build/analyzer assets; no `NotPublishable` package may appear. +- `MSTest.TestAdapter` owns both adapter and PlatformServices binaries under + `buildTransitive/`, with shared adapter/PlatformServices satellites under + `buildTransitive/_localization/`. The existing common hooks select + binaries, copy requested cultures, generate parallelization attributes, and + register MSTest's builder hook. PlatformServices is not a package. +- The portable adapter closure needs the existing TRX abstractions package, + native Telemetry, and native Platform.MSBuild. Extensions.MSBuild is private + payload of Platform.MSBuild, not a separately published package. The adapter's + direct Retry/TRX-report references are for classic UWP source only; portable + packaging must not invent dependencies from the unfiltered compiler graph. +- Platform.MSBuild's unmodified hooks load + `_MSBuildTasks/netstandard2.0/Microsoft.Testing.Platform.MSBuild.dll` and the + platform beside it. They require real netstandard2.0 native outputs, not net8 + binaries relabeled as netstandard. That source declaration is coordinated + with the framework-parity lane. + +The package rule must expose one nupkg in `DefaultInfo` and the pinned rules' +`NuGetPackInfo` so SDK/meta-package work can depend on the same native artifacts. +The analyzer package is owned by a separate lane; integration waits for its +actual ready commit, with no placeholder or released first-party substitution. + +### Alternatives and implementation decision + +The existing `nuget_pack` always puts ordinary assemblies under `lib`, which +does not express these shipping contracts. A fake library anchor or fabricated +NuGet dependencies would make restore succeed without proving the real layout. +Use explicit native output projections and the pinned rules' native +`nuget_pack` executable/request format instead. Preserve the repository's +consumer assets rather than rewriting them to fit an easier layout. Share a +small explicit-layout helper with the SDK lane if its contract is ready. + +### Validation plan and isolation + +Use `eng/bazel.ps1` with `--jobs=2`; the experimental producer toolchain remains +SDK 11 RC3. No TestFx producer is built or packed by MSBuild. External consumers +may use that SDK's MSBuild to test the packaged hooks and generated entrypoint. +Each validation run owns its feed, package cache, output, and report paths under +this worktree's `artifacts` directory. Child-only environment changes are +restored; existing test-worker settings and shared caches remain untouched. + +Inspect complete archive entries and dependency groups, then restore a real +MSTest consumer with first-party source mapping to that feed. Assert native +package/cache hashes, loaded assembly paths and hashes, generated registration, +discovery identities, report contents, and pass/fail/empty-selection exits +0/2/9. Compare a relevant deliberately incomplete package with the correct +package while retaining the same consumer assertions. Missing compilation, +restore, or launch is a setup failure, not behavioral red-phase evidence. +The coordinator owns combined documentation/CI and later rollout decisions; +no shipping leg, servicing branch, or package publication is enabled here. + +### Preparation results and current boundaries + +- The existing platform-only baseline build was attempted with + `.\eng\bazel.ps1 build //:platform_package --jobs=2 --noshow_progress --show_result=0`. + It reached native C# compilation, then failed with CS2012/ENOSPC when the + shared Q: drive filled. This was an infrastructure failure, not behavioral + evidence. The interrupted patch was inspected; it had not changed the package + helper. The complete intended patch was subsequently applied and its C# BOMs + and PowerShell syntax were checked. +- The coordinator approved process-local + `TESTFX_BAZEL_OUTPUT_ROOT=C:\tfb\d7ce736ef101` and run-owned C: consumer/cache + directories. The owned Q: Bazel server was stopped. Copying the extracted + repository cache was abandoned: Robocopy could not preserve 18 upstream + fixture symlinks (Win32 1314). No security policy or privileges were changed, + and the guarded command did not start a build from that incomplete copy. + The native tool must recreate incomplete extracted entries. Shared caches + and other lanes' outputs are not cleanup targets. +- The package rule exposes `DefaultInfo`, `NuGetPackInfo`, and `nuspec` / + `package_request` output groups. Framework and adapter preserve private + assembly placement instead of inferring package ownership from compilation + dependencies. The adapter retains the shipping Windows-only framework + dependency conditional. Development PDB/XML payloads are additional evidence, + not a claim of official symbol/signing parity. +- The new support packages preserve the platform's + `[current-bazel-version, next-major)` dependency bound. Telemetry deliberately + uses the native graph's locked DiagnosticSource version (currently 10.0.13), + rather than claiming equivalence with the Arcade graph's 6.0.0 minimum while + compiling against newer assemblies. +- The coordinator's common version decision supersedes the initial `-bazel` + spelling: all lane-local expectations now require `-preview.bazel` + (4.6.0-preview.bazel for MSTest; 2.6.0-preview.bazel for MTP). The SDK lane's + production CodeCoverage pin requires `>= 2.6.0-preview.26526.14`; the original + `2.6.0-bazel` sorts below that minimum. This lane awaits the coordinator's + shared version-generator commit rather than substituting released components + or downgrading the dependency. Runtime compatibility still requires the real + composed checks. +- The focused fixture is a separate generated consumer assembly, configured by + the packaged `Parallelize.targets` for method-level execution with two workers. + Its tests read immutable run-owned expectation files and explicit Korean + resources; only the provenance test writes its own evidence file. They do not + mutate process culture or environment. Existing repository test scheduling + is unchanged. +- The compiled netstandard prerequisite + `a29a5ffc0b1005848e71a645abcdeddb818113ff` was integrated locally as + `81a3248d192619e7fbe6476f638a6af246226ae6`, preserving both lane records in the + append-only document conflict. Its providers supply genuine netstandard + implementations; reference-only Microsoft.Build assemblies are supplied by + the executing MSBuild host, not copied into the task package. +- The consumer harness now removes the exact inherited `MSBuildSDKsPath`, + `MSBuildExtensionsPath`, and `MSBUILD_EXE_PATH` environment entries rather + than assigning null through PowerShell's .NET method binder. The analyzer lane + found that the latter left present-but-empty entries in this host. A local + process-only probe confirmed the `Env:` provider distinguishes absent and + present-empty states; the harness records presence and restores it in + `finally`. Consumer SDK commands run from their isolated `global.json` + directories. +- The imported task-runtime inventory identifies the selected Registry, + AccessControl, and Principal.Windows runtime assets on Windows. The package + projects' `RuntimeTargetsCopyLocalItems` contract is reproduced from those + declared native dependency files under the task folder; no reference-only + MSBuild DLL or invented support-package ID is introduced. +- Consumer restore now uses its explicit `NuGet.config` and clears + `fallbackPackageFolders`, preserving the single run-owned cache assertion + instead of accepting a machine Visual Studio fallback directory. Discovery + matches MSTest's source-declared short display names and the exact total, + not fully qualified names that the native terminal reporter does not print. +- All source prerequisites are now integrated, including the analyzer's final + identity follow-up `6f69c9d135c542f6c1f3bacf4e003da66506e9f3` and core + netstandard metadata `b156a7381a6b627d504e2d2b06e4002c6d3d97e4`. The latter + is compatibility-only; this lane does not claim portable assembly + `TargetFrameworkAttribute` parity from it. +- The first full closure attempt found that root Bzlmod could not resolve the + adapter's `@platforms//os:windows` selector. A direct dependency on + `platforms` 1.0.0 exposes the already-selected module; `bazel mod graph` and + the existing lock confirmed that version before the edit. This was an + analysis/setup failure, not test-value evidence. +- The two-worker C: closure then completed 601 local actions but failed two + missing modern platform inputs introduced by the compatibility declaration: + `JsonExtensions.cs` and `JsonPropertyBagDeserializer.cs`. Neither is tracked; + the original project removal list tolerated them, whereas `linked_srcs` + requires real files. The framework-parity owner was given that exact failure + for a narrow correction. This is an integration/build failure, not a failing + consumer assertion. +- That attempt did produce the real framework package: its inspected archive + has 89 entries, version `4.6.0-preview.bazel`, and the four expected analyzer + dependency groups with only compile/runtime excluded. SHA-256 is + `C589B3D8DE0DB7212AAB560621D6E037993A95E499F1F8BAF61B9E36EB01A27F`. + This partial artifact is not a full closure or consumer pass. +- The canonical selector correction + `46e50f3636cc8a7fcd3c5918b2c204a1282243ab` unblocked modern compilation. + The next native pack exposed a lane-owned request mismatch: the upstream + packer's `versionFile` accepts a version, not a dependency range. The small + native lane helper now resolves the platform version into literal + `dependency.version` ranges in the request; the pinned upstream packer still + writes the actual archives. No package dependency or upper bound was dropped. +- `.\eng\bazel.ps1 build //:mstest_package_closure --jobs=2 --noshow_progress --show_result=0` + then exited 0, producing all eight archives. Independent archive inspection + confirmed the two corrected version families and entry counts: framework 89, + adapter 75, Telemetry 78, Platform.MSBuild 112, platform 87, TRX abstractions + 17, TRX reporter 78, and analyzers 55. Package paths, SHA-256 hashes, and + dependency metadata are recorded in + `C:\tfb\d7ce736ef101\mstest-validation\built-packages.json`; the producer log + is `closure-range-correction.log` beside it. This is native package production + evidence; real consumer and sensitivity checks are the next gate. + +### Package target contract + +| Target | Package / result | Native payload contract | +| --- | --- | --- | +| `//:framework_package` | `MSTest.TestFramework`, MSTest version family | Core DLL/docs/PDBs/satellites in `lib/`; Extensions DLL/docs/PDBs and existing hooks in `buildTransitive/`. | +| `//:adapter_package` | `MSTest.TestAdapter`, MSTest version family | Adapter and PlatformServices in `buildTransitive/`, shared localized satellites, and unchanged registration/resource/parallelization hooks. | +| `//:telemetry_package` | `Microsoft.Testing.Extensions.Telemetry`, MTP version family | Four portable assemblies/resources, existing build hooks, native platform bound and locked external dependencies. | +| `//:platform_msbuild_package` | `Microsoft.Testing.Platform.MSBuild`, MTP version family | Portable Extensions.MSBuild in `lib/`; genuine netstandard task/platform binaries and selected runtime companions in `_MSBuildTasks/netstandard2.0`; unchanged root-relative build assets. | +| `//:mstest_packages` | Four packages above | Does not change the existing MTP-only `//:packages` aggregate. | +| `//:mstest_package_closure` | Eight-package isolated feed | Those four, the existing three MTP/TRX packages, and the independent native analyzer package. | + +Each individual target exposes exactly one nupkg in `DefaultInfo`, the existing +`NuGetPackInfo` with a generated version file, and `nuspec` / `package_request` +output groups. Its public package groups are the four declared portable TFMs. + +### Executed unsigned consumer gate (2026-11-03) + +The complete focused command exited **0**, with all **31 expected-exit steps** +validated: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfb\d7ce736ef101' +.\eng\bazel\validate-mstest-packages.ps1 -OutputRoot 'C:\tfb\d7ce736ef101\mstest-validation' -VerifySatelliteSensitivity +``` + +Source state: `42dac12d6c5d7c79d1d6b1aed2fd20bc0683396a` plus the retained +`validated-harness.patch`, SHA-256 +`FA281DC1151587A102AD3811642B4C8580B4C5BD89624AE2F39F34A8A0A3193B`. +The patch only prevents copying a read-only original adapter archive into the +counterfactual output slot; the native packer creates that variant afresh. +Full evidence is retained under +`C:\tfb\d7ce736ef101\mstest-validation\20261103-152848-a61a3ac9`. +It includes all eight original feed packages, isolated caches, generated +projects/assets, loaded-assembly hashes, command logs/binlogs, 13 TRX files, the +counterfactual request/package, the validated patch, and `validation.json`. + +| Consumer TFM | Actual self-contained runtime | Discovery / pass / intentional failure / empty selection | +| --- | --- | --- | +| net8.0 | .NET 8.0.33 | Exits 0 / 0 / 2 / 9. | +| net9.0 | .NET 9.0.22 | Exits 0 / 0 / 2 / 9. | +| net10.0 | .NET 10.0.14 | Exits 0 / 0 / 2 / 9. | +| net11.0 | .NET 11.0.0-rc.3.26522.148 | Exits 0 / 0 / 2 / 9. | + +Each discovery listed the four declared cases. Each positive run executed and +passed exactly three cases with no skips. Each negative run executed only +`IntentionalFailure`, returned 2, and emitted the expected assertion marker. +The published applications ran with `DOTNET_ROOT` pointing to a nonexistent +directory; their loaded CoreLib locations were verified inside their own +published layouts. The native netstandard MSBuild task also launched the net11 +application through `InvokeTestingPlatform`: parent exits 0 and 1 corresponded +to three passing cases and the one intended failing case, with separate TRX +reports. Both paths retained result directories containing spaces and `!`. + +| Requirement | Evidence | +| --- | --- | +| Native resolution and runtime provenance | `NativeAssembliesAreLoadedFromConsumer` checks all nine runtime assembly hashes, local loaded paths, and Bazel metadata. The outer harness checks the eight package/cache hashes, exact restore closure, and published CoreLib path. | +| Bundled localization | `KoreanSatellitesAreCopiedAndLoadable` checks three actual satellite files, hashes, load paths, and translated strings against the source catalogs. Archive checks require every declared framework/adapter source culture. | +| Build and registration hooks | `PackagedTargetsProvideExtensionsAndParallelization` checks the Extensions assembly, generated method-level/two-worker attribute, and generated option-default configuration. The outer harness also checks the generated MSTest builder registration. | +| Discovery, reports, and failure propagation | All four named cases are discovered; positive/negative TRX identities and counters are reconciled. `IntentionalFailure` supplies the failure marker; zero-result runs and real native MSBuild parent exits are checked separately. | + +### Test-value evidence: package payload removal + +The same three positive consumer cases and filter +`FullyQualifiedName!~IntentionalFailure` ran in all three states: + +| State | Executed | Passed | Failed | Host exit | +| --- | --- | --- | --- | --- | +| Correct native package, before | 3 | 3 | 0 | 0 | +| Repacked adapter without its Korean satellite | 3 | 2 | 1 | 2 | +| Correct native package, fresh restored cache | 3 | 3 | 0 | 0 | + +**Executed: detected.** `KoreanSatellitesAreCopiedAndLoadable` failed at +`Assert.IsTrue(File.Exists(satellitePath))` with +`Missing native Korean satellite: MSTest.TestAdapter.` Both package production +and consumer publication succeeded for the negative variant. It is not a +compile/restore/launch failure. Only +`buildTransitive/_localization/ko/MSTest.TestAdapter.resources.dll` was removed +from the payload; all remaining payload entries and the nuspec are byte-identical. +The native packer regenerated the expected OPC core-properties identifier and +relationship metadata. + +Counterfactual request SHA-256: +`FB446EAB0440A7CF110F7F7A39BFBE949F1199A962D63EE48DBF637AFF25CE70`. +Original adapter archive SHA-256: +`5658CB1D5468AA681310AE9CB56C3722AD3094A7D10CB6D698033BC9A576DC5C`. +Counterfactual archive SHA-256: +`738061DC328BFA039FF6ACC56927D96B7F420C3FCF003F1F68EEE68B29CA9081`. +`counterfactual-package-diff.json` records the exact payload comparison. + +The native producer action graph contains eight `NuGetPack` and 685 +`CSharpCompile` actions, with no MSBuild executable or `dotnet build/pack/test` +invocation found in producer command arguments. The graph and its compact +summary are retained in the same evidence directory. MSBuild was used only for +external consumers. + +Earlier harness failures were corrected rather than hidden: failed-test messages +must be read from TRX `ErrorInfo` rather than PowerShell's null +`XmlDocument.InnerText`; nested command-line quotes must use MSBuild `%22` +escaping; and a counterfactual writer must not overwrite a copied read-only +Bazel archive. The final complete command includes all affected checks. + +This gate is **Windows x64 and unsigned-native-closure evidence**. It does not +establish Linux/macOS, net462/Windows-app-model, or official-release parity. +The separately owned default SDK consumer exposed the external CodeCoverage +strong-name requirement for MTP's Microsoft public key. The coordinator owns +carrying the existing public-signing contract into native outputs; these unsigned +packages/results are preserved for comparison, not substituted with released +MTP or presented as default-SDK/CodeCoverage success. + +### Signed package consumer refresh (2026-11-03) + +The shared identity correction +`aff2cf0f702a07779cee99a8acf29cf515e858bb` is integrated here as +`0ff1d234924f01d4b893cdd443a210ee3fee8f48`. The absent SDK/alias lane files and +alias-patch wiring remain absent; the native signed runfiles source helper is +retained. The necessary blank context line in the upstream signing patch is +preserved as patch syntax, not trimmed to satisfy a generic whitespace check. + +The same complete command shown above exited **0** again: **31 expected-exit +steps**, all eight freshly public-signed archives, new isolated package caches, +and all four actual self-contained runtimes. In addition to the unchanged hash, +layout, configuration, discovery, report, and exit assertions, +`NativeAssembliesAreLoadedFromConsumer` now requires +`B03F5F7F11D50A3A` on all nine loaded product assemblies. +`KoreanSatellitesAreCopiedAndLoadable` requires the same token on the three +loaded satellites. Native MSBuild parent exits remain 0/1. These checks exercise +the packaged outputs, not a released MTP replacement. + +Source state is the integrated commit above plus `validated-source.patch`, +SHA-256 +`079F51DD4F1BA30E73FCB85D533349B1EE6B5DB952ED450762339A75BD55534A`. +Signed evidence is retained separately at +`C:\tfb\d7ce736ef101\mstest-validation\20261103-161417-ca2c12d5`, +including the new feeds, caches, loaded public-key/hash records, logs/binlogs, +and all 13 TRXs. The original unsigned run remains intact. + +Signed framework archive SHA-256: +`6C37A03B2025A00E8120E1C5B5F70713DD5936B5C3ACB5E09C814A2E3E4FB35B`. +Signed adapter archive SHA-256: +`AA105CE6E5542E5AB4C9411BE7AF1FCBA5331A6185B63ECD299044CAFEAA5D80`. +`validation.json` records all eight package hashes and the exact invocations. + +**Test-value evidence — executed: detected.** The signed refresh repeats the +same satellite-removal comparison without changing the three selected test +identities or assertions: green 3/3 (exit 0), red 2/3 with the intended +`KoreanSatellitesAreCopiedAndLoadable` missing-file assertion (exit 2), then green +3/3 from a new correct-package cache (exit 0). Counterfactual request SHA-256: +`1D6AD21519AF76843858F87DD5C77346FF1BE38B206944287BC17793246690EF`. +Publication succeeded for both consumer variants; no setup failure or skipped +test is counted as red evidence. + +The signed payload comparison again confirms one omitted satellite and +byte-identical remaining payload/nuspec entries (apart from regenerated OPC +metadata). Signed counterfactual archive SHA-256: +`C275E9CBDC9D4A0DFB7AF6089BAFE8496BC4DEEA6C8BC05CA5396B6969D209E0`. +The refreshed signed action graph still has eight `NuGetPack` and 685 +`CSharpCompile` actions and no MSBuild producer invocation. The run directory +contains both compact summaries and the complete graph. + +This completes this lane's portable framework/adapter and support-package +contract. Default SDK/meta-package/CodeCoverage composition remains the +separately owned SDK lane's claim to validate. Full legacy/Windows-specific +package layouts, Linux/macOS execution, official signing/publishing, SDK12, +release-branch servicing, and replacement of the Arcade pipeline are not implied. + +## 2026-11-03: native public signing and friend identities + +The default SDK consumer and the Windows controller independently reached the +same real composition failure: the repository-pinned CodeCoverage extension +requires `Microsoft.Testing.Platform, Version=2.6.0.0, +PublicKeyToken=b03f5f7f11d50a3a`, but native compilation emitted an unsigned +platform. Fresh isolated-cache provenance ruled out a stale or released MTP +substitution. The NuGet preview suffix fixes package version ordering, not +assembly identity. The SDK None profile and the default meta-package have +separate executed successes; they do not establish default SDK compatibility. + +The existing repository contract is already public signing: +`Directory.Build.props` selects `StrongNameKeyId=Microsoft`, and the pinned +[Arcade StrongName.targets](https://github.com/dotnet/arcade/blob/4163bf82769cbb7f0a6e1e02f85090d30b53e988/src/Microsoft.DotNet.Arcade.Sdk/tools/StrongName.targets) +selects `PublicSign=true` and its public-only `MSFT.snk`, including on Windows. +The 160-byte public blob was independently read and verified: SHA-256 +`933598639CBAA1DE502F80D2FD1DB78F13C8D7BB64A5FDC1BC73AC0B5CE4F5CA`, +token `b03f5f7f11d50a3a`. No private key, signing service, machine registration, +verification bypass, or official-signing claim is involved. + +Mirror that existing development-build contract in native source assemblies, +test hosts, and satellites. Preserve the distinct `MoqPublicKey` for +`DynamicProxyGenAssembly2`; other native friends use the Microsoft public key. +The upstream C# provider currently matches friend names literally, so qualified +friend attributes also require simple-name normalization for internal-reference +selection. The actual compiler attribute retains the full public key and still +enforces the friend identity. Keep this as a separate C# patch, independent of +package-reference selection and Windows targeting. + +Leaving assemblies unsigned cannot satisfy the real consumer. Replacing native +MTP with released bits, disabling default coverage, or changing CodeCoverage is +not an acceptable solution. Signing only MTP would break its compiled friend +closure. Public signing is the smallest existing-contract correction; official +signature completion, publication, and replacement of Arcade remain out of scope. + +Before implementation, extend the existing alias/friend conformance fixture +with emitted-public-key and satellite-identity assertions. Retain its three +existing cases and method-level, CPU-count scheduling. All new observations +read stable assembly metadata or load an explicitly named culture; no test +changes global culture, environment, files, or scheduling, so no new lock is +needed. Run the same cases before and after the identity correction, preserve +their reports and source states, then re-run the real SDK/controller consumers +from freshly packed native artifacts. Compilation failures alone are not +test-value proof. Results and remaining platform limitations will be recorded +after execution. + +The first regression attempt then found a genuinely coupled compiler failure: +the two native build-helper test hosts referenced upstream's unsigned `runfiles` +assembly, which now triggers CS8002 under the unchanged warnings-as-errors +policy. No tests executed in that failed attempt. Rather than suppress the +warning, weaken signing, or modify the helper's behavior, export its unchanged +pinned source and compile it as `//eng/bazel:runfiles` with the same public key +and original netstandard2.0 target. Only native tooling tests consume this +helper; it is not added to any shipping package. + +### Executed identity comparison + +The comparison starts at `960366ed123ea6d75083afbcaa68d071f7983665`. +The retained-test unsigned patch is +`0097C523566740B27C1BF18020AA93329A28C7F9AC35AB48F97B252E4E9D94D2`; +the first public-signing implementation patch is +`FA6B86EED4ACC3991B2EA665708209F00CCFDC14942B77C0C24C8C7DF7DEC42C`. +With `TESTFX_BAZEL_OUTPUT_ROOT=C:\tfb\aliases-df07ee`, both states ran: + +```powershell +.\eng\bazel.ps1 --host_jvm_args=-Xmx2g test //:reference_alias_tests --jobs=2 --nocache_test_results --test_output=errors --noshow_progress +``` + +| State | Executed result | +| --- | --- | +| Unsigned, regression tests retained | Bazel exit 3; 9 executed, the 3 existing alias/friend cases passed and 6 identity cases failed, zero skipped. Each failure expected `B03F5F7F11D50A3A` and observed an empty token. | +| Public-signed | Bazel exit 0; the same 9 display identities passed, zero failed/skipped. | + +`NativeAssembliesHaveThePublishedPublicKey` separately checks the platform, +framework, test host, globally visible alias, and named-only alias assemblies. +`SatellitesPreserveTheParentAssemblyIdentity` loads the actual French framework +satellite and checks name, version, culture, and its published public-key token. +The unchanged alias cases exercise global/named identity and actual internal +member access. Both runs compile net8.0 and execute on the pinned SDK11 runtime. +Fresh TRXs were parsed and their exact display-name multisets reconciled. +Reports, logs, and reproducible patches are retained under this session's +`files/native-signing/red` and `files/native-signing/green`. + +The final patch, including the unchanged-source signed runfiles helper, is +`DB1E09501F89D8EE4B2D9166E872F2F5561FCDA5CD4BBBF9E2068CC44C8FA78A`. +The command below exited 0; all four fresh reports were parsed: alias/identity +9/9, PlatformServices 1,215/1,215, build helper 13/13, and SDK package helper +12/12. Total: 1,249 passed, zero failed/skipped. The existing PlatformServices +suite exercises real mock/friend access, and both tooling suites execute their +real native helpers through the signed runfiles source. + +```powershell +.\eng\bazel.ps1 --host_jvm_args=-Xmx2g test //:reference_alias_tests //:platform_services_tests //:build_tools_tests //:sdk_package_tests --jobs=2 --nocache_test_results --test_output=errors --noshow_progress +``` + +Evidence is under this session's `files/native-signing/final`, including +`results.json`, four TRXs, the build events/log, and the complete source patch. +Only documentation was updated after that source state. This is a validated +shared compilation/identity checkpoint, not a claim that the signed ten-package +SDK or Windows-controller composition has already run; their owners must repack +and execute those consumers against this checkpoint. + +## 2026-11-03: completed compatibility validation + +### Complete compatibility source matrix + +The opt-in matrix now compiles **26 netstandard2.0 and five net462 source +variants**. Every implementation DLL was inspected and has exactly one +`TargetFrameworkAttribute` naming its requested framework. The generated +`managed_netstandard2_0.json` and `managed_net462.json` inventories include the +assembly names, output paths and runtime dependencies; retained +`verified-project-frameworks.json` additionally records the owning project, +actual framework metadata and SHA-256. + +All labels below are workspace-root labels. Append `_netstandard2_0` or +`_net462` to the listed assembly label to select that exact output: + +| Framework | Validated source labels | +| --- | --- | +| netstandard2.0 | `ai`, `azdo_report`, `azure_foundry`, `configuration`, `crashdump`, `ctrf`, `framework`, `framework_extensions`, `github_report`, `hangdump`, `hosting`, `hotreload`, `html`, `junit`, `logging`, `msbuild_extension`, `opentelemetry`, `platform`, `platform_msbuild`, `retry`, `server_client`, `telemetry`, `trx`, `trx_abstractions`, `video`, `vstest_bridge` | +| net462 | `adapter`, `framework`, `framework_extensions`, `mstest_hosting`, `platform_services` | + +The existing modern `managed` / `managed_all` defaults remain unchanged. +Fixed-framework analyzers and generators are not duplicated in this aggregate. +The server-client validation assembly uses its project-defined seven additional +polyfills and Jsonite source selection, not the full repository polyfill glob. + +#### Dependency and framework-reference decisions + +Compatibility dependencies are independently locked by area rather than +overriding incompatible minimum-version requirements: + +| Paket group | Contract | +| --- | --- | +| `compatibility` | The original 14-package MSBuild closure remains independent, including Immutable 8. | +| `compatibility_mstest` | Repository telemetry/ObjectModel dependencies; net462 Memory 4.6.3 and Tasks.Extensions 4.5.4. ObjectModel's net462 assets require Immutable 10. | +| `compatibility_hosting` | Repository Configuration/Hosting 8 and DI/Logging 9.0.4 rather than the unrelated AI closure. | +| `compatibility_extensions` | The existing native graph's newer AI/report convergence, allowing its required Tasks.Extensions 4.6.3 instead of forcing 4.5.4. | + +Additional groups use Paket `=` constraints rather than `==` overrides. +Regenerate from `eng/bazel/compatibility` with the existing pinned Paket launcher +(`update --no-install`), then run `.\eng\bazel.ps1 mod deps --lockfile_mode=update`. +The original `eng/bazel/paket.dependencies` and `paket.lock` remain unchanged. + +Net462 projects consuming netstandard assemblies need the SDK's genuine +`Microsoft/Microsoft.NET.Build.Extensions/net461/lib/netstandard.dll` facade +and `System.Runtime.InteropServices.RuntimeInformation.dll`. Native declarations +obtain these from the selected pinned toolchain, not an ambient SDK, a higher +framework's reference pack, or a copied modern implementation. They are added +only to the affected net462 adapter/hosting dependencies. Framework extensions +and platform services retain their own reference-pack `System.Configuration` +and polyfill behavior. + +The separately maintained `compatibility-package-references.patch` addresses +two real reference-closure failures without changing the original shared patch: + +- A newer NuGet package reference replaces an older reference of the same DLL + basename only when package/file ownership and version are known. Source-built + and unknown owners are preserved; a published package's numeric version must + not evict a native assembly's placeholder provider version. +- A direct package reference selects the consumer's appropriate TFM asset. + Its same-package transitive alternate-TFM reference must not be passed too. + This matters for DI.Abstractions 9.0.4: its netstandard and net462 reference + assemblies have different assembly versions and otherwise produce CS0433. + +Actual compiler response files confirm that the independent MSBuild task still +uses only Immutable 8, while the net462 adapter uses only Immutable 10. + +#### Executed validation and test-value evidence + +Validation uses SDK 11 RC3 and isolated C-drive outputs on Windows x64. +The source baseline is `6bc33c48b9dae0e89486862f46af3c876fd7cf5d`, with the +independent core/correction commits above and this additive matrix change. + +| Command / scenario | Result | +| --- | --- | +| `.\eng\bazel.ps1 test //:managed_compatibility //:compatibility_reference_tests //:compatibility_explorer_test //:framework_netstandard2_0_consumer_test --jobs=2 --noshow_progress --test_output=errors --nocache_test_results` | Exit 0; all 31 source outputs and six fresh checks: four reference-selection analysis tests and two real consumer probes. | +| `.\eng\bazel.ps1 test //:managed_all //:portable_tests --jobs=2 --noshow_progress --test_output=errors` | Exit 0; the four modern frameworks build, and all 3,443 existing cases execute/pass across ten targets, with zero failures/skips. Counts were reconciled with logs and available TRX files. | +| `.\eng\bazel.ps1 run //:compatibility_explorer --jobs=2 --noshow_progress '--' --filter-uid --minimum-expected-tests 1 --report-trx --report-trx-filename result.trx --results-directory ` | Real netstandard MTP/TRX consumer: `SomeTests.TestMethod1` exits 0 with one pass; `SomeTests.TestMethod2` exits 2 with one failure; `Compatibility.NoMatchingTest` exits 9 with zero results. All three TRX files were parsed and checked. | +| Pinned SDK: `dotnet build LegacyConsumer.csproj -c Release --disable-build-servers -p:UseSharedCompilation=false -m:2 '-bl:legacy-consumer-{}.binlog'`, then `CompatibilityConsumer.Net462.exe '.NETFramework,Version=v4.6.2'` | Both exit 0. An isolated external consumer references the actual native net462 framework DLL, resolves reference assemblies 1.0.3, executes on Windows CLR/mscorlib, verifies framework metadata, and observes an intentionally mismatched MSTest assertion throwing. Its copied framework hash matches the native producer. | + +The CLR consumer is validation only: MSBuild did not build the TestFx producer. +Upstream `csharp_binary` currently asks for unavailable apphost/runtime packs on +net462, so no native net462 executable target or modern-runtime fallback is +claimed. Runtime execution was on the installed compatible Windows CLR, not a +claim that the machine runs the original .NET Framework 4.6.2 release. + +**Test-value evidence:** + +| Contract / unchanged check | Without behavior | Correct implementation | +| --- | --- | --- | +| `compatibility_reference_newer_package_test` | Executed against isolated pre-fix rules: expected only the newer reference, but received older + newer; failed. | Passed. | +| `compatibility_reference_direct_tfm_test` | Same tests and isolated prior rules: expected direct reference only, but received the alternate TFM too; failed. | Passed. | +| `compatibility_reference_independent_test`, `compatibility_reference_native_test` | Both pass with prior rules, preserving the independent old closure and native placeholder-version reference. | Both pass; preservation is intentional. | +| `CompatibilityConsumer.Main` framework-metadata assertion | A buildable isolated producer counterfactual omitted only `CompatibilityFrameworkMetadata.cs`'s attributes. The unchanged CLR consumer exited 2 at the exact framework-name equality assertion: expected `.NETFramework,Version=v4.6.2`, actual `null`. | The identical consumer executable exited 0 before and after. Its SHA-256 is `4240E40D746FB9CA0B2827EAFB0F686B5C883EFF5BAC5D0D402E5C9412B61A39`. | + +The reference-selection comparison executes the actual Starlark collector, not +a translated implementation. Four tests execute in both states: pre-fix exit 3 +(two pass, two fail), then corrected exit 0 (four pass). The isolated prior +`common.bzl` SHA-256 is +`DBD5C9F95EF1F3BAF6E455CC128F48DDDF1823E6A9BBD351E97A31C60B10AF56`. +Unknown/native preservation is also an explicit positive assertion. + +The metadata counterfactual uses the real native compiler arguments and source, +changing only output locations and the attribute input. Initial setup failures +from an inactive Bazel input symlink forest and a corrected diagnostic-text +matcher are not counted as red-phase evidence. Paired metadata execution covers +net462; netstandard attributes were separately inspected and exercised by the +standard consumer. + +Retained evidence includes `final-verification.log`, +`verified-project-frameworks.json`, `verified-immutable-references.txt`, +`modern-test-counts.json`, `explorer-results.json`, paired analysis-test XML/logs, +the metadata counterfactual response file/results, and the external consumer's +binlog/assets. Console output and structured artifacts are the demonstration; +no media or GitHub publication is implied. + +#### Remaining boundaries + +No new package layout, signing, release/servicing rollout, Windows-qualified +TFM, WinRT/UWP/WPF workload, or SDK 12 claim is made here. Those remain owned by +their lanes and require their composed shipping-consumer validation. Net462 +adapter/hosting compilation is not full CLR execution coverage for every +adapter feature. The source-only server client's package transformation is not +validated by its DLL compilation. Linux/macOS execution is unverified. + +The two known full-MTP Windows impersonation failures are still present and +unchanged; they are not hidden by the portable-suite pass. No existing tests, +assertions, or scheduling settings were removed or weakened. + +## Engineering SDK 12 registration investigation (2026-11-03) + +This lane starts from `6bc33c48b9dae0e89486862f46af3c876fd7cf5d`. +Its requirement is the exact `global.json` compiler, +`12.0.100-alpha.1.26509.101`, under native Bazel, not an SDK renamed to +resemble that version. The shipping MSBuild/Arcade build and `global.json` +remain unchanged. Keep the working SDK 11 default until an explicit +engineering-SDK path has trustworthy inputs and composed-product validation. + +### Contract and design gates + +- The engineering archive owns the compiler and its execution runtime; its + bundled metadata must identify both. An SDK version is not evidence that + its runtime, reference-pack, or ASP.NET versions have the same number. +- Targeting packs, RID-specific runtime/apphost assets, and .NET 8/9/10/11 + consumer behavior remain independent compatibility requirements. +- `rules_dotnet`'s compiler-worker/apphost bootstrap SDK is independently + pinned upstream. Changing the user compiler must not retarget those tools + or silently change the runtime on which they execute. +- Downloads, outputs, consumer feeds, and caches are owned by this lane. + Archive hashes must bind the real downloaded bytes; no invented release + dates, module facts, or replacement SDK tables are acceptable. +- Native compilation, source-built consumers, and staged self-contained + layouts must establish provenance, real test selection/results, report + artifacts, and success/failure/zero-result exits. A successful download + or compiler version display alone is not compiler parity. +- The coordinating Bazel migration session owns combined integration and + rollout. No shipping-leg replacement, package publication, servicing, or + backport is enabled by this experiment. + +### Archive and compiler research + +The pinned rules' `dotnet/extensions.bzl` resolves one user SDK and one +independent bootstrap SDK. `dotnet/private/sdk/releases.bzl` currently obtains +SDK archives, runtime/language versions, and release dates from Microsoft's +published release metadata, then remembers complete metadata as Bzlmod facts. +An engineering input must be explicit rather than pretending that discovery +produced a released SDK. + +On 2026-11-03, the exact SDK's Windows x64, Linux x64, and macOS arm64 archives +on `https://ci.dot.net/public/Sdk/12.0.100-alpha.1.26509.101/` returned HTTP 200. +Both `sdk-productVersion.txt` and `productVersion.txt` returned the exact +engineering version. The same Windows archive on `builds.dotnet.microsoft.com` +and the published `release-metadata/12.0/releases.json` returned HTTP 404. +The conventional `.sha512`, `.sha512.txt`, `.sha256`, and version-level +checksum names probed there also returned 404. These are availability +observations, not archive verification or proof of installed contents. + +The first baseline command used a task-owned repository cache inside the +checkout. Bazel 9 rejects a repository *contents* cache there. The retry uses +a task-specific short output/cache root outside the source tree; no shared +cache was modified. Logs remain in `artifacts/bazel-sdk12`. + +The checksum search resolved the official daily alias once, only to discover +the separate `public-checksums` container. The implementation will not consume +that mutable alias. All six host archives have version-specific SHA-512 files +under `https://ci.dot.net/public-checksums/Sdk/12.0.100-alpha.1.26509.101/`. +The downloaded Windows x64, Linux x64, and macOS arm64 archives match those +published hashes. `productCommit-win-x64.txt`, the SDK's `.version`, and +the bundled runtime identify VMR commit +`907535df2f7eb8e1845571867684244ad04b031b`. + +The verified Windows installation executes Roslyn +`5.13.0-1.26509.101 (907535df2f7eb8e1845571867684244ad04b031b)`, +whose default/max C# language version is 15.0, and F# compiler 15.2.200.0 +for F# 11.2. Its host and three Windows shared frameworks are +`12.0.0-alpha.1.26509.101`. The compiler runtimeconfig requests that exact +runtime; its `tfm` string alone is not the runtime version. + +The bundled SDK metadata is transitional: `NETCoreAppMaximumVersion` and +`BundledNETCoreAppTargetFramework` still name 11, but both `net11.0` and +`net12.0` use `12.0.0-alpha.1.26509.101` reference/runtime/apphost packs. +Linux and macOS archives agree. Earlier reference packs are 8.0.31, 9.0.20, +and 10.0.12. The engineering packs are absent on nuget.org and the configured +dotnet11/dotnet-public feeds, but exact package manifests are available on +the public dotnet12 feed. Azure Artifacts rejected HEAD with HTTP 405; +the publication check therefore used GET, not a false missing-package claim. + +### Narrow, reversible registration decision + +Use the pinned rules' existing `dotnet_sdk_repositories` and +`dotnet_toolchains_repo` helpers from a separate, explicit module extension. +It can describe the verified archive, compiler versions, and real runtime +without patching upstream release discovery or writing fabricated Bzlmod +release facts. Validate its pin against both `global.json` SDK fields. + +Keep `dotnet.toolchain` at the published SDK 11 pin. It remains the default +compiler and the explicit source of the existing reference/runtime/apphost +pack graph. Select the engineering compiler with +`--extra_toolchains=@dotnet_engineering_toolchains//:all` during validation. +That selection uses the real SDK 12 compiler and .NET 12 execution host, +while self-contained .NET 8/9/10/11 applications retain their existing +target-specific runtime packs. The bootstrap compiler stays at upstream's +10.0.401; upstream deliberately runs its tools on the newer user runtime. + +This is **compiler selection, not full bundled-pack parity**. Copying SDK 12's +`net11.0` pack choice would relabel a .NET 12 runtime as the existing .NET 11 +publisher and invalidate its runtime-major assertion. Silently keeping those +packs while claiming SDK 12 bundled defaults would be equally misleading. +Replacing the default or changing the target-pack policy remains a separate +integration decision after the bounded opt-in path is proven. + +Disk exhaustion interrupted the first native baseline and SDK extraction on +the shared Q: volume. The verified archive was copied and rehashed on C:; +only this lane's partial files and failed Bazel output base were cleaned. +New heavy downloads, SDK installation, native outputs, and caches use isolated +C: roots. Those infrastructure failures are not compiler regressions or +red-phase evidence. + +The first opt-in Bazel analysis also exposed a repository-mapping requirement: +the root-owned extension's generated toolchains refer to `@platforms`. +Declare `platforms` 1.0.0 directly in the root module (the same already-resolved +version used by `rules_dotnet`); a transitive dependency is not visible through +that extension's mapping. No upstream compatibility patch is needed. + +`verify-engineering-sdk.ps1` checks a native `aquery` capture against the +independent `global.json` pin, executes the selected compiler's version +command, verifies the SDK/VMR/runtime metadata, rejects mismatched compiler +hosts and bootstrap compiler changes, and checks the existing four reference +pack versions. It deliberately describes action counts as **declared**, not +executed: an action query is not a successful build. Its companion +`test-engineering-sdk-verifier.ps1` exercises ten explicitly synthetic +graph fixtures with real installed compiler metadata, plus two checks that +success and failure restore environment values and preserve absent versus +present-but-empty entries. Those fixture results +must not be presented as native graph or composed-product validation. + +The source-build validation was paused at the coordinator's request to let +other prerequisites use the shared host's first compiler wave. Both owned +Bazel servers were stopped. The interrupted C: baseline had not executed +the tests and is not a passing baseline. + +### SDK-specific verification procedure + +Use one task-owned short `TESTFX_BAZEL_OUTPUT_ROOT` per concurrently active +worktree. Keep large artifacts/caches on a volume with sufficient free space. +The following are the intended native gates, not claims that the paused +builds completed: + +```powershell +$toolchain = '--extra_toolchains=@dotnet_engineering_toolchains//:all' +.\eng\bazel.ps1 build //:managed_all $toolchain --jobs=2 +.\eng\bazel.ps1 test //:portable_tests $toolchain --jobs=2 --nocache_test_results +$executionRoot = & .\eng\bazel.ps1 info execution_root +.\eng\bazel.ps1 aquery 'deps(//:managed_all)' $toolchain --include_param_files --output=jsonproto > "$evidence\actions.json" +.\eng\bazel\verify-engineering-sdk.ps1 -ActionGraph "$evidence\actions.json" -ExecutionRoot $executionRoot -OutputPath "$evidence\compiler.json" +``` + +Check every command's exit before continuing, and capture query stderr +separately from its JSON. Retain build/test logs beside the query: the verifier +explicitly does not turn an action description into build or runtime proof. +Native package validation must still run against source-built NuGets and the +published SDK 11 consumer, with the engineering override applied to the Bazel +producer only. Self-contained .NET 8/9/10/11 layouts must still pass their +independent runtime-major/CoreLib-path assertions. + +The verifier's focused fixture command was executed on Windows with the +verified SDK 12 installation and the baseline's downloaded SDK 11: + +```powershell +.\eng\bazel\test-engineering-sdk-verifier.ps1 -EngineeringSdkDirectory $sdk12 -PublishedSdkDirectory $sdk11 -EvidenceRoot $evidence +``` + +The latest run exited 0 with twelve checks passed: `NoSourceActions`, `MismatchedCompilerHost`, +`WrongNet11ReferencePack`, `MissingFrameworks`, `ChangedBootstrapCompiler`, +`OutsideExecutionRoot`, `PublishedCompilerRejected`, +`VerifiedEngineeringCompiler`, `EnvironmentRestoredAfterSuccess`, and +`EnvironmentRestoredAfterFailure`, plus `RequestedFrameworkSubset` and +`ExpandedCompilerArguments`. Ten deliberately use synthetic graphs; they test +the verifier, not the Bazel compiler graph. + +An additional existing native `build_tools.dll` (`net10.0`, built during the +SDK 11 baseline attempt) successfully executed its `version` command on the +verified SDK 12 host with both roll-forward environment variables absent. +Host tracing selected +`shared/Microsoft.NETCore.App/12.0.0-alpha.1.26509.101`, and the command +returned 0 and wrote `2.6.0-bazel`. This rules out an assumed prerequisite +for an ambient prerelease-roll-forward setting on this host; no speculative +launcher patch was made. It is runtime compatibility evidence for that +already-built helper, not evidence that SDK 12 compiled it. An earlier call +used the wrong `packageversion` command name and reached the helper's argument +error; that was not a host-startup failure or regression evidence. + +### Executed selection evidence + +Implementation commit: `1bbefce63f8cc733831d62835deca9a187b6448e`. +The shared package-version/evidence-root update +`2d79cf530332c91d54e62f95f37b85c784984209` was applied locally as +`9df2a5f363b89c88bb5befa600c04a8b234e187b` for the forthcoming consumers. + +At that source state, the cached +`cquery @rules_dotnet//dotnet:resolved_toolchain` with +`--extra_toolchains=@dotnet_engineering_toolchains//:all` exited 0. +It configured the actual toolchain and reported: + +```text +sdk_version=12.0.100-alpha.1.26509.101 +runtime_version=12.0.0-alpha.1.26509.101 +runtime_tfm=net12.0 +csharp_default_version=15.0 +fsharp_default_version=11.2 +``` + +Both `runtime_path` and `csharp_compiler_path` point into Bazel's +`+engineering_sdk+dotnet_sdk.12.0.100-alpha.1.26509.101_x86_64-pc-windows-msvc` +repository. The materialized `csc.dll` has SHA-256 +`2A7EF338D000A8814BB1CAC533ED6694DF1AEC0FA8BE6716C69972F68A3CF513`, +matching the separate checksum-verified archive installation. The query ran +**zero build actions**; this is selection/provenance evidence only. + +The opt-in does not enable `net12.0` source targets or claim the SDK's +transitional targeting defaults. Those remain bounded by the published +SDK 11 pack graph. Windows x64 SDK/compiler execution is established; +Linux x64 and macOS arm64 archive bytes and metadata were verified, not +executed. The other three host hashes were read from the authoritative +checksum feed, without claiming downloaded or executed archives. + +### Bounded native compilation and consumer proof + +On `9df2a5f363b89c88bb5befa600c04a8b234e187b` (plus documentation-only +working changes), this command completed with exit 0: + +```powershell +.\eng\bazel.ps1 --host_jvm_args=-Xmx2g --host_jvm_args=-XX:ActiveProcessorCount=2 build //eng/bazel:build_tools //:explorer --extra_toolchains=@dotnet_engineering_toolchains//:all --jobs=2 --loading_phase_threads=2 +``` + +The isolated C: output/cache configuration produced 157 actions, including +106 local processes; elapsed time was 193.922 seconds. This is an executed +native build, not an SDK download or a wrapper around MSBuild. + +The subsequent +`aquery 'deps(set(//eng/bazel:build_tools //:explorer))' --include_param_files --output=jsonproto` +uses the same engineering selection. Its SHA-256 is +`B5C0F9AD748B5F7B08C1CBBEF5EE67163F4E0FA1EF9C1F250E0DBB3868144E4A`. +All 34 source-owned C# actions name the SDK 12 compiler. Two additional +*declared* upstream tool actions (`scoped_css` and `static_web_assets`) name +SDK 10.0.401 and reference pack 10.0.12. They are not counted as executed +bootstrap tools merely because the query traversed them. The source-owned +net10 compilation retains reference pack 10.0.14. + +The compiled explorer's actual `--info` output reports platform version +`2.6.0-preview.bazel` and `win-x64 - .NET 12.0.0-alpha.1.26509.101`. +With the same `run //:explorer` toolchain selection: + +| Application arguments | Observed result | +| --- | --- | +| `--list-tests` | Exit 0; exactly four named sample tests discovered. | +| `--filter-uid TestingPlatformExplorer.UnitTests.SomeTests.TestMethod1 --report-trx --report-trx-filename sdk12-pass.trx --results-directory ` | Exit 0; TRX contains exactly one executed/passed `TestMethod1`, zero failures/skips, and the real controller observes child exit 0. | +| `--filter-uid TestingPlatformExplorer.UnitTests.SomeTests.TestMethod2` | Test executes and fails intentionally; child and Bazel-run exits are both 2. | +| `--filter-uid NoMatchingTest --minimum-expected-tests 1` | Zero-result diagnostic; child and Bazel-run exits are both 9. | + +The outer bounded harness exits 0 after asserting those child outcomes. +Evidence is in the task-owned `bounded-consumers/dfc2058d51064e2c8681b67ea1322425` +directory, with the actual command arrays in `validation.json`, individual +logs, and the parsed TRX. Both roll-forward environment variables were removed +for this run. The built platform DLL SHA-256 is +`4731C9ACBEA68117200BE683113E19BCDBD9E7A0FDFB0C6141012BA41591070A`. + +Initial harness attempts exposed three harness-only mistakes: a status message +was accidentally returned with log data, the ordinary test output was assumed +to include the full banner instead of querying `--info`, and the outer shell +inherited the intentionally nonzero final child exit. These were corrected +without changing product code or assertions about the intended test outcomes. +Only the completed exit-0 harness above is the bounded integration result. + +This proof is for the helper and source-built MTP/TRX explorer on net10 using +the SDK 12 host. The .NET 8/9/10/11 package/publisher gate and broader combined +source/test graph are separate validation stages. + +The actual Bazel 9 query expands response-file arguments directly into each +action's `arguments` array. The verifier handles that real format as well as +explicit `paramFiles` fixture input. `-TargetFrameworks net10.0` permits a +bounded audit without claiming the other three frameworks were checked; +omitting it still requires all four. That scoped audit passed against the +real bounded query above (34 source actions, SDK 12, net10 reference 10.0.14). +The extra fixture cases cover both the explicit subset and native expanded +argument shape. + +### Independent consumer SDK correction + +The first SDK 12 package build passed, but the existing package validator +looked for SDK 11 under `execution_root/external`. A distinct consumer SDK is +not necessarily a producer action input: the actual SDK 11 repository existed +under `output_base/external`, while its execution-root counterpart was absent. +This was a validator-location defect, not a missing SDK or package feed. + +The shared correction is commit +`6d851a91cf44d479ebf549996b337c26849f4578`. `Get-ConsumerSdk` explicitly +queries the declared/default toolchain, locates its materialized repository, +retains the unique-match check, verifies the selected executable and archive +`.version`, and records consumer provenance. It never substitutes SDK 12 or a +machine SDK. Actual production-function checks passed with both SDK 11 and +SDK 12 producer selections, returning SDK 11 in both cases. + +An isolated targeted counterfactual retained the function and changed only +`info output_base` back to `info execution_root`. With SDK 11 materialized +but not staged, it reproduced +`Expected one materialized consumer SDK for the execution host.` +Restoring the correct function passed. Counterfactual function SHA-256: +`7541D195B89080037DF3A7E358BB2D35DC7FC73EFF23B69B92FE932696524DC2`. +The local `locator-checks/f49dc4c2edbe413b9801baa38f46acec` evidence retains +the actual functions, command results, default/engineering contexts, and +restored outcome. + +### Completed bounded package and runtime gate + +Executed code revision: +`6d851a91cf44d479ebf549996b337c26849f4578`. A task-owned ignored +`.bazelrc.local` selected the engineering toolchain for Bazel producers and +the two-processor/2 GiB JVM cap; the delivered `MODULE.bazel` default stayed +unchanged. All output, SDK, download, and primary package-cache writes used +owned C: directories. The consumer process's MSBuild-path and roll-forward +overrides were removed before execution. + +```powershell +.\eng\bazel\validate-packages.ps1 -Jobs 2 -EvidenceRoot C:\tfb\9d855da170b9-sdk12\package-validation +``` + +Exit **0**; all **22** recorded steps matched their expected exits. The run +`20261103-151148-505d36d4` retains `validation.json`, exact command arrays, +four consumer binlogs/assets files, package inventories/hashes, five passing +TRX reports, and failure/empty-selection logs: + +| Boundary | Executed result | +| --- | --- | +| Native MTP/TRX producer | Three `2.6.0-preview.bazel` NuGets built with SDK 12 for all four portable TFMs. | +| Independent package consumer | SDK `11.0.100-rc.3.26522.148`, source commit `5254d8bcf59917edc1e1abc33bdf2442b77b1c70`; builds for net8/net9/net10/net11 all exited 0. | +| Loaded package provenance | All three loaded net11 DLL hashes matched the native feed and carried the native build metadata. Pass/failure/empty-selection exits were 0/2/9. | +| Isolated net8 publisher | Actual `.NET 8.0.33`, CoreLib in its copied layout, one passing test plus expected exits 2/9. | +| Isolated net9 publisher | Actual `.NET 9.0.22`, CoreLib in its copied layout, one passing test plus expected exits 2/9. | +| Isolated net10 publisher | Actual `.NET 10.0.14`, CoreLib in its copied layout, one passing test plus expected exits 2/9. | +| Isolated net11 publisher | Actual `.NET 11.0.0-rc.3.26522.148`, CoreLib in its copied layout, one passing test plus expected exits 2/9. | + +Each passing report contains exactly one executed `TestMethod1`, with no +failures or skips. The deliberate `TestMethod2` failure and zero-result +selection are separate child-product outcomes, not failing outer validation. +Publishers ran outside the Bazel tree with `DOTNET_ROOT` pointing at a +nonexistent directory. + +Native package SHA-256 values: + +| Package | SHA-256 | +| --- | --- | +| `Microsoft.Testing.Platform` | `31EFFC2BDF11A0B8FD9761F076B59FFCF29CFD5F151B7F4EFB1E8BC899F63262` | +| `Microsoft.Testing.Extensions.TrxReport.Abstractions` | `36CD8D67B72866ED8C243E0C2C52C11245B26DB52B4856AB7E75A9CFC303BCE7` | +| `Microsoft.Testing.Extensions.TrxReport` | `53395F8FC6042CFB175DA5713192D3F56647ED6721D98AF2A5F82C02FE029431` | + +The complete package/publisher action query has SHA-256 +`4FF508318AAD842906780A57EC746BDD4375F7A55565FAB178507FF166FA8BE1`. +The audit passed **129** declared source C# actions using SDK 12, all four +preserved reference-pack versions, and **four** SDK 10.0.401 bootstrap +declarations. The materialized `nuget_pack` and `apphost_shimmer` launchers +in their actual **exec configurations** select the SDK 12 runtime. Native +packing and apphost generation executed successfully with that separation; +unbuilt top-level configurations are not substituted as evidence. +The inspected producer graph contains 465 declared actions and zero MSBuild +invocations; MSBuild is used only by the external package consumers. + +The net8 consumer binlog independently records SDK 11's `NETCoreSdkVersion`, +`MSBuildSDKsPath`, `MSBuildToolsPath`, and compiler task/executable, including +Roslyn `5.12.0-1.26522.148`. This differs deliberately from the producer's +Roslyn 5.13. RAR records the native MTP compile/runtime reference in the run's +primary cache. All **12** MTP/TRX DLL payloads across the four TFMs were checked +against the native `.nupkg` entries, with exact compile/runtime asset selection. +Visual Studio's read-only fallback folder remained configured in NuGet; +it was not erased or falsely reported absent. The checked first-party payloads +reside in the owned primary cache, and no global cache was modified. + +### Test-value evidence for engineering selection + +The same native `//eng/bazel:build_tools` source and verifier were retained on +revision `6d851a91cf44d479ebf549996b337c26849f4578`. Separate owned output +roots selected the engineering SDK or the existing published SDK. Each state +successfully **built** before querying its real compiler action and executing +the unchanged verifier with `-TargetFrameworks net10.0`. + +| State | Native build | Action query | Identity audit | +| --- | --- | --- | --- | +| SDK 12, before | 0 | 0 | 0 | +| Published SDK 11 selected instead | 0 | 0 | 1: exact expected-SDK assertion | +| SDK 12 restored | 0 | 0 | 0 | + +This is an **executed configuration-removal counterfactual**, not a +pristine-baseline or missing-symbol compilation failure. One source compiler +action was audited in each state. The wrong state executed the actual SDK 11 +compiler and failed with: + +```text +Expected global.json compiler SDK 12.0.100-alpha.1.26509.101, +selected 11.0.100-rc.3.26522.148 +(5.12.0-1.26522.148 (5254d8bcf59917edc1e1abc33bdf2442b77b1c70)). +``` + +Verifier SHA-256: +`1BF79DFD84DCE5E161D9EF5D1307B6B76A5DEE87A8EDFEEB547CA02F4F69308A`. +Correct action-query SHA-256 before and after: +`8347FDB549845482D87348585AAC77F0E2B00B258B677AF353BC46B711FD9865`. +Wrong-selection query SHA-256: +`94ED142B360FC09E5BB08D355D6C6AA4E65C3C544EB2C8884D1C6971B4462835`. +The local `native-counterfactual/c4920a4c48c9436fbefd5c94308de06c` evidence +contains all commands, build/query logs, compiler identities, and audit results. + +### Delivery boundary + +The opt-in engineering compiler path and bounded MTP/TRX package/runtime +contract are established on Windows x64. The default remains the working +SDK 11 toolchain. Full SDK 12 bundled-pack parity, net12 source targets, the +combined source/test matrix from the other migration lanes, Linux/macOS +execution, additional host architectures, workloads/AOT, and shipping +signing/release/servicing parity are **not** claimed. The coordinating +migration session owns their integration and any later default/rollout decision. +No shipping pipeline, `global.json`, machine policy, or global setting changed. + +The temporary `.bazelrc.local` was removed after verification. A final query +without an engineering override returned SDK `11.0.100-rc.3.26522.148` and +runtime `11.0.0-rc.3.26522.148`. Both owned Bazel servers were shut down. +Only the obsolete interrupted Q: cache and failed partial cache move were +cleaned; verified downloads, active task-owned C: caches, and reproducible +evidence remain available. Delivery is local/committed, not pushed, published, +or CI-verified. + +## 2026-11-03: portable tests and samples lane + +This additive lane starts at +`6bc33c48b9dae0e89486862f46af3c876fd7cf5d`. It migrates existing portable test +projects and examples, not replacement tests or the Windows application-model +examples. The verified `portable_tests` aggregate remains unchanged until the +coordinator composes independently passing additions. Package/SDK production, +shared toolchain changes, final aggregate counts, and CI remain separate lanes. + +### Contracts and first inspection + +| Existing project | Native wiring requirements | +| --- | --- | +| TerminalReporterContract | Compile the terminal manifest's linked sources and resource into the consumer, preserve the public-abstraction exclusions when MTP is referenced, and separately establish standalone compilation. | +| Platform.MSBuild | Preserve the `global,PlatformMSBuild` reference alias and the distinct source-linked IPC model copies. | +| ServerMode.Client.Sources | Preserve `global,serverclient`, assembly serializer initialization, and all three self-host child fixtures before normal runner argument augmentation. | +| Extensions | Preserve the `ghactions`-only alias, native extension references, portable PDBs, and the renamed conformance-vector runtime file. | +| MSTest.Analyzers | Use source-built MSTest, the existing Roslyn testing versions, release-tracking input files, and reference-pack resolution. | +| MSTest.SelfRealExamples | Preserve class-level scheduling, rather than the other suites' method-level scheduling. | + +All six retain their source tests, data rows, exclusions, resource declarations, +and zero/unlimited worker settings. Existing generic native registration omits +affected-test/coverage collectors; those CI-only collectors must be recorded +separately from test behavior. Specialized child fixtures cannot be replaced +with the generic runner. No failing method will be excluded or assertion changed +to make a new aggregate green. + +The producer is this checkout's native Bazel graph, with its explicit Bazel 9.1.1, +rules_dotnet, and .NET 11 RC3 pins, not Arcade outputs or released first-party +fallbacks. The consumers are actual existing test executables and samples. +Normal tests must produce reconciled case identities and TRX counts; failure, +zero-result, child exit, and cleanup behavior must remain observable. Tests +retain their scheduling while Bazel starts with `--jobs=2` on the shared host. +Outputs, generated consumers, and any additional dependency-resolution work use +lane-owned directories. This experimental branch does not enable release +rollout, servicing, signing, or publishing. + +### Alternatives and staged validation + +Reusing the generic entrypoint is appropriate only where it preserves the +suite's contract. Copying test bodies, adding released MSTest as a fallback, +serializing suites, or invoking MSBuild from a Bazel producer would hide missing +native wiring and is rejected. Target-specific bootstraps and explicit native +dependencies are preferred where the existing projects require them. Additional +third-party test dependencies will use a separately locked test-support graph +with coordinated module wiring. + +The first validation is the existing native build-tools target before adding +targets. Subsequent additions are committed in coherent working stages with +exact commands, exits, TFMs, counts, and report locations recorded below. +Compilation/setup failures are not behavioral red-phase evidence; unchanged +tests passing under native wiring are preservation evidence, not a new-test +campaign. NativeAOT/browser feasibility will be assessed against actual upstream +build/publish paths after the portable unit targets. + +### Executed setup findings + +- The first baseline attempt ran zero tests: Q: filled during native compilation. + The lane stopped its own Bazel server, removed only its failed generated + `external`/`execroot` trees, and relocated builds to `C:\tfb\tests-05e68c`. + Logs and large dependency caches also moved to C:. No shared cache, another + worktree, machine policy, or test worker count was changed. +- A pure standalone compile of the terminal `.props` manifest exposed missing + coverage-summary and retry-property dependencies. Existing MTP references + supply those public types in the test application, but cannot prove standalone + consumption. The extra standalone native target therefore explicitly includes + the referenced coverage/retry model closure as well as the manifest sources, + rather than excluding either reporter partial or adding a platform DLL. + This is an explicit native closure extension, not proof that the current + `.props` manifest itself is standalone. +- The pinned upstream NativeAOT publisher explicitly supports Linux/macOS, not + Windows. Debian WSL is installed on this host; feasibility of a separate native + Linux build remains to be established. Browser publishing uses upstream's + WebAssembly bundler, not an MSBuild producer wrapper. +- Read-only package metadata confirmed the repository-pinned Roslyn testing + preview is on `dotnet-tools`, not nuget.org. Its exact + [ReferenceAssemblies implementation](https://github.com/dotnet/roslyn-sdk/blob/f98f564816af0ca213db2bcc32afed00a6d7c14f/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/ReferenceAssemblies.cs) + also writes `Path.GetTempPath()/test-packages`, independently of + `NUGET_PACKAGES`. The native analyzer bootstrap therefore redirects both + temporary-directory conventions and NuGet package/HTTP caches to Bazel's + per-test temporary directory before any runner or verifier initialization. + +### Stage 1: isolated test dependencies and integrity + +The additional dependencies use their own `eng/bazel/tests-support/paket.lock` +and the `testsupport.main`, `testsupport.analyzers`, and +`testsupport.benchmarks` repositories. Roslyn tests retain 4.10.0 and +1.1.3-beta1.26255.1; benchmarks retain BenchmarkDotNet 0.15.8. The complete +Hosting/Configuration implementation packages use 10.0.13, matching the source +graph's shared abstractions. No released MSTest or MTP package is introduced +into this support graph. + +Upstream's hash lookup follows the preview feed's catalog URLs to unavailable +Azure `commitLog` endpoints. A successful `bazel mod deps` consequently left +all nine preview testing packages without persisted hashes. The separate +`testfx-tests-paket-integrity.patch` adds an optional explicit integrity file +to `paket.parse`, without changing existing tags. The updater downloads the +exact locked preview packages, records SHA-512 SRI values, and removes only +its uniquely named temporary downloads. Entries outside the lock or malformed +SHA-512 values are rejected. `package-integrity.json` is generated, not a +version-only or released-package fallback. + +Executed on Windows x64 with the lane-owned C: output root: + +| Command / check | Result | +| --- | --- | +| `.\eng\bazel\tests-support\update-dependencies.ps1 -Resolve` | Exit 0; pinned Paket 11.0.1 resolves the separate graph and records nine preview hashes. | +| `.\eng\bazel.ps1 mod deps --lockfile_mode=update --noshow_progress` | Exit 0; the explicit pins are persisted without the failing catalog requests. | +| `.\eng\bazel.ps1 build --jobs=2 --noshow_progress` | Exit 0; all nine actual preview archives are downloaded and verified against their SHA-512 pins; no TestFx compilation is involved. | +| Same digest gate over retained pre-pin and current module metadata | Before: exit 1, nine missing pins. After: exit 0, all nine exact values match the generated manifest. | + +**Test-value evidence:** the metadata gate detects the actual missing-integrity +state rather than treating the resolver's exit 0 as success. Patch SHA-256: +`B2A7CBE4C97BABBBFE8A1CFCF31B3B1B0A52DC6E13EC9575993EF5673410D1ED`. +The retained `module-before-test-integrity.json`, `verify-package-digests.py`, +`integrity-{before,after}.log`, `integrity-validation.json`, and +`verify-preview-downloads.log` preserve the comparison and archive verification +under this session's `files/bazel-tests-lane` evidence. This stage validates +dependency inputs, not execution of the pending unit/sample targets. + +### Stage 2: terminal contract and self-real suites + +The first two existing suites are now native targets, without test-source or +assertion changes. Their source-bound inventory and independent discovery +reconcile with every executed TRX result, including duplicate display names for +the nested byte/short/long cases and the base/derived property cases. + +| Target | Compiled / executed runtime | Scheduling | Discovered / executed / passed / failed / skipped | +| --- | --- | --- | --- | +| `terminal_contract_tests` | net10.0 / .NET 11 RC3 | Method level, workers 0 | 15 / 15 / 15 / 0 / 0 | +| `self_real_tests` | net10.0 / .NET 11 RC3 | Class level, workers 0 | 24 / 24 / 24 / 0 / 0 | + +The terminal target also builds `terminal_contract_standalone` for net8.0 with +no platform reference, retaining all reporter partials and the explicit +coverage/retry model closure described above. The generic native bootstrap is +not substituted for the server-client child fixtures in the pending slice. + +The composed compatibility graph initially failed before execution because of +two stale modern JSON source names. A temporary two-entry removal demonstrated +15/24 passes; it was then removed, and the canonical framework-lane correction +`46e50f3636cc8a7fcd3c5918b2c204a1282243ab` was integrated instead. Both suites +were rebuilt and rerun successfully on that canonical correction. No competing +selector fix is part of the test-target addition. + +Discovery also exposed a metadata difference: without the SDK-generated +`TargetFrameworkAttribute`, the reporter displayed the newer runtime as the +target. Supplying only `FrameworkName` was insufficient because the existing +reporter reads `FrameworkDisplayName`. The native test metadata now supplies both +SDK-compatible fields, and the same discovery commands correctly identify +`net10.0` while execution continues on the pinned .NET 11 host. + +Executed commands, with `TESTFX_BAZEL_OUTPUT_ROOT=C:\tfb\tests-05e68c`: + +```powershell +.\eng\bazel.ps1 test //:terminal_contract_tests //:self_real_tests --jobs=2 --nocache_test_results --noshow_progress +.\eng\bazel.ps1 run //:terminal_contract_tests_app --jobs=2 --noshow_progress --show_result=0 '--' --list-tests +.\eng\bazel.ps1 run //:self_real_tests_app --jobs=2 --noshow_progress --show_result=0 '--' --list-tests +``` + +All three commands returned 0. The repository's existing `verify_execution.py` +gate then passed separately for 15 and 24 planned cases, using the independent +discovery name multisets, the captured pre-run UTC boundary, and actual process +exit 0. Retained evidence includes `stage2-final-tests.log`, +`stage2-final-run.json`, `stage2-test-inventory.json`, both discovery logs and +expected-name files, both `*-net10.trx` reports, and both execution-gate logs. +The new files preserve UTF-8 BOM encoding. + +**Test-value evidence:** executed preservation checks cover all 39 existing +cases, including the real Windows STA and synchronization-context cases. +The discovery metadata guard detected the incorrect target label and passes +with both attribute fields. Earlier missing-input/compiler failures are not +behavioral red-phase evidence. An independent Arcade/MSBuild green-before run, +other runtime/TFM executions, CI collectors, and the remaining four suites are +not claimed by this slice. + +### Stage 3: aliased MSBuild, server-client, and extension suites + +The separately checkpointed slice exposes only three verified targets; the +analyzer target remains separate until its existing tests execute. All original +test sources, assertions, assembly initialization, resource locks, exclusions, +method-level scheduling, and CPU-count worker settings are retained. + +| Target | Selected | Executed / passed | Original skips | Runtime | +| --- | --- | --- | --- | --- | +| `msbuild_tests` | 388 | 388 | 0 | SDK .NET 11, net10 compilation | +| `server_client_tests` | 313 | 305 | 8 Unix-only cases | Native self-contained .NET 10.0.14 | +| `extension_tests` | 2,870 | 2,863 | 7 OS/filesystem cases | SDK .NET 11, net10 compilation | + +The exact `global,PlatformMSBuild`, `global,serverclient`, and named-only +`ghactions` semantics are preserved by the coordinated compiler patch. The +MSBuild fixture stages the native netstandard implementation at +`LegacyMSBuild/Microsoft.Testing.Platform.MSBuild.dll`, enabling all nine +existing legacy-configuration cases without a reference-assembly fallback. + +The native launcher executes an application's physical DLL, not a runfiles +alias of its directory. The fixture wrapper therefore declares files beside +that actual DLL in the same TFM configuration and rejects a configuration/path +mismatch. Extension fixtures contain the original source files, including the +assertion implementation files whose real existence is part of the annotation +tests, and the correctly renamed appx conformance-vector JSON. + +The server's original early child fixtures are preserved before any results +arguments are added: stdout flooding, stderr exit 17, and release-file exit 23. +Initially four tests executed but their children could not resolve the +runfiles-oriented dependency manifest. An upstream native self-contained +publish supplies a real executable/DLL/dependency layout. A separate published +test launcher retains every published file rather than renaming the apphost +away from its DLL, and declares the pinned muxer on PATH for the intentionally +missing-DLL fallback case. Neither production launch logic nor assertions were +changed to mask those failures. + +After public signing and the source-root correction below, the full checkpoint +command returned 0: + +```powershell +.\eng\bazel.ps1 test //:msbuild_tests //:server_client_tests //:extension_tests --jobs=2 --nocache_test_results --noshow_progress +``` + +The three reports reconcile to 3,571 selected, 3,556 passed, zero failed, and +the 15 original skips. The prior missing-child dependency and missing-source +failures are retained separately; launch/setup failures are not claimed as +production regression sensitivity. `stage3-checkpoint.log`, +`stage3-test-inventory.json`, `signed-test-inventory.json`, the original failure +TRXs, and final signed TRXs preserve the executed evidence. No existing +verified aggregate was enlarged by this checkpoint. + +### Stage 4: all existing analyzer cases + +The final prioritized suite runs all **2,102** existing analyzer cases, with +zero failures/skips, against the source-built public-signed analyzer/codefix +assemblies. The shared reference correction removes the conflicting Roslyn +3.11 transitive paths while retaining the explicitly requested 4.10 test +references. No test source, assertion, or test-version pin was changed. + +The native producer's `OutputGroupInfo.globalconfigs` is narrowed to exactly +one file named `mstest-recommended.globalconfig`; no copied config text or +combination of incompatible modes is used. Inspection also corrected an +initially over-broad compiler-plugin dependency: unlike SelfReal, this project +declares analyzer/codefix projects as ordinary references and has +`UseMSTestFromSource=true`. The only inherited `OutputItemType=Analyzer` +reference is mutation-only. Removing the accidentally added native plugin +matches that project contract; individual diagnostics were not suppressed. + +Actual execution exposed two additional host requirements: + +- NuGet 6.3.4 consults Windows Program Files variables even with an explicit + repository config. These are declared inherited inputs. Its temporary + package area, package/HTTP caches, HOME/USERPROFILE, APPDATA and LOCALAPPDATA + are isolated under `TEST_TMPDIR`; no shared user configuration is written. +- Eight tests use loaded DI assemblies as compiler references. Running net10 + test code on the SDK's .NET 11 host supplied DI 11 to net10 reference + compilations, producing CS1705. A real upstream self-contained net10 publish, + with declared source/release/config fixtures in its runfiles layout, aligns + the loaded runtime and compilation references. All eight unchanged cases + then pass, together with the other 2,094 cases. + +The final full command returned 0: + +```powershell +.\eng\bazel.ps1 test //:analyzer_tests --jobs=2 --nocache_test_results --noshow_progress +``` + +Independent discovery of the same native executable yielded 2,102 names. The +existing repository execution gate reconciled that name multiset, the captured +pre-run UTC boundary, and the actual TRX: 2,102 planned/selected/executed/passed, +zero failed/skipped, process exit 0. Retained files include +`analyzer-aligned-runtime.log`, `analyzer-aligned-run.json`, +`analyzer-discovery-native.log`, `analyzer-expected.json`, +`analyzer_tests-signed-net10.trx`, and `analyzer-execution-gate.log`. + +**Test-value evidence:** this is execution of the original analyzer safety net, +including its real Roslyn compilations and diagnostic assertions. Initial +reference/compiler-policy and NuGet-profile failures are setup failures, not +behavioral red-phase proof. The runtime-mismatch failures are retained as +integration evidence; no source assertion was weakened to accommodate them. +Only the net10 runtime leg is claimed by this validation. + +### Stage 5: existing portable samples and native browser execution + +The sample module preserves all existing source bodies and their declared TFMs. +No Windows/WinUI/UWP sample is included. Source-built SDK-style examples do not +claim to validate the separately owned MSTest.Sdk package. + +The first five native sample targets passed: SDK runner (one case), +ReliableTestSuite (11 after declaring the pinned toolchain on PATH), the +10-class scale fixture (1,000), the intentionally selected passing custom-report +example (one), and MTPOTel (five). The unmodified 100-class and 1,000-class scale +fixtures subsequently passed 10,000 and 100,000 cases. Large TRXs were reconciled +with a streaming parser rather than treating one Bazel wrapper result as the +case count. Original parallel attributes and the reliability fixture's resource +and retry behavior remain intact. + +The existing custom-report failing case and EnsureTestFramework still execute +and return 2. Ensure discovery returns 0 and names its single case. The AOT SDK +sample compiles with the existing reflection-free generator and executes its +one managed test; that is not an AOT runtime claim. + +`browser_publish` uses the actual upstream `wasm = True` path and the existing +BrowserPlayground sources/assets. Its native bundle was copied out of Bazel +outputs and run with the unchanged `runtests.mjs`: one browser-wasm/net10 pass +returns 0; requiring two cases still runs the one case and returns policy exit +9. No MSBuild producer or replacement JavaScript test is involved. + +BenchmarkDotNet's initial exit 0 did not mean a benchmark ran: it correctly +rejected non-optimized source dependencies. A native `-c opt` self-contained +build fixes that prerequisite rather than disabling the validator. All 12 +existing benchmark identities are discoverable. The bounded +`--inProcess --job Dry --filter '*AssertThatBenchmarks*'` command executes exactly +one existing benchmark on .NET 10.0.14 and produces CSV/HTML/Markdown artifacts, +without compiling a replacement host through MSBuild. This single cold +iteration proves wiring, not a performance comparison. The tool's temporary +power-plan selection was reverted and the original active GUID was read back. + +Representative executed commands: + +```powershell +.\eng\bazel.ps1 test //:sdk_runner_sample_test //:reliable_suite_test //:scale_10c_test //:custom_report_test //:otel_sample_test --jobs=2 --keep_going --nocache_test_results --noshow_progress +.\eng\bazel.ps1 test //:scale_100c_test //:scale_1000c_test //:browser_publish //:benchmark_runner //:aot_sample //:ensure_sample --jobs=2 --keep_going --nocache_test_results --noshow_progress +.\eng\bazel.ps1 build //:benchmark_runner -c opt --jobs=2 --noshow_progress +node .\runtests.mjs --minimum-expected-tests 1 +node .\runtests.mjs --minimum-expected-tests 2 +.\MSTest.Performance.Benchmarks.exe --inProcess --job Dry --filter '*AssertThatBenchmarks*' --artifacts +``` + +The three Bazel commands, passing Node run and optimized benchmark command +returned 0; the second Node command returned 9 as asserted. Native copies are +under the lane-owned `C:\tfb\tests-05e68c\sample-validation` directory. Logs and +`sample-test-inventory.json` are retained under `files/bazel-tests-lane`; +large scale reports remain at their recorded native test-output paths. + +**Test-value evidence:** these are existing tests and examples, not a new-test +generation campaign. Actual test counts, intentional negative exits, native +browser execution and real in-process benchmark execution are distinguished +from wrapper success and compilation. + +#### Bounded NativeAOT attempt and final preservation checks + +Debian WSL failed to start with code 6 / step 2 / E_FAIL. A read-only Docker +context check instead confirmed the local named-pipe Linux engine. The exact +tracked source at `2938ff167a204dc414069c46a71e3e211786285a` was archived with +SHA-256 `C7BA7CB683317C935EA07C9044C62C1B572D4A2C1B52629533A18115EE50D858`. +A disposable container used the already installed public SDK image +`sha256:e70cdb7f80b0348f5cb85f19a8f670fca061f033d57eed12fa003d58b0e06317`, +two CPUs, a 4-GiB memory bound, a 900-second timeout, a read-only source mount, +and a task-owned results mount. The producer used checksum-verified Bazel 9.1.1 +and the repository's native rules/toolchain, not that image's MSBuild. + +The first actual build failed because no gcc/CC was installed. Installing +build-essential, clang and zlib development inputs only inside that disposable +container resolved that prerequisite. The unchanged command then failed during +upstream analysis with **`NativeAOT is not available for net8.0 on linux-x64`**. +No native executable or AOT pass is claimed, and the sample was not retargeted +to a higher TFM. Both failures and the container-only installation log are +retained in `C:\tfb\tests-05e68c\aot-linux\results`. The container was automatically +removed and its absence was checked. No shared WSL/service reset or machine- +level tool installation was performed. + +The optional C# worker path was separately exercised: +`.\eng\bazel.ps1 build //:alias_first //:alias_second --jobs=2 --noshow_progress --@rules_dotnet//dotnet/settings:use_compiler_worker=true` +returned 0 with two worker actions. Reading the actual portable PDB confirmed +`/_/test/UnitTests/Bazel.ReferenceAliases.UnitTests/First.cs`; evidence is in +`pathmap-worker-build.log` and `worker-source-paths.json`. F# worker execution +is not claimed. + +Finally, +`.\eng\bazel.ps1 test //:portable_tests --jobs=2 --nocache_test_results --noshow_progress` +returned 0 for the unchanged ten-target aggregate. Its 3,443 existing cases +remain separate from the new suite/sample inventories. This protects the +original aggregate after the shared signing/pathmap changes and the opt-in +sample toolchain helper. + +### Native source-root parity + +Existing extension annotation tests require real source files beneath the +repository root and the existing Arcade `/_/` deterministic source-path +contract. Declaring the original source files beside the native fixture root +resolved eight of the nine initial failures. The remaining +`RealAssertFailure_AnnotationPointsAtTestMethodAndNotAtFrameworkFile` failure +observed `CallerFilePath == "./test/..."` while the real annotation normalized +it to `test/...`; its assertion already handles Arcade's `/_/` form. + +The separately scoped `testfx-source-pathmap.patch` changes only the execution- +time pathmap destination from `.` to `/_/` in the Windows and POSIX wrappers, +the common worker subprocess path, and the F# worker in-process path. It does +not change signing, aliases, reference selection, test assertions, or test +scheduling. This is development source-path parity, not SourceLink parity. +The first generated multi-file patch lacked the file separators required by +Bazel's patcher; regenerating standard `diff --git` boundaries fixed that +setup error before compilation. + +With the shared public-signing checkpoint integrated, this command returned 0: + +```powershell +.\eng\bazel.ps1 test //:terminal_contract_tests //:self_real_tests //:msbuild_tests //:server_client_tests //:extension_tests --jobs=2 --keep_going --nocache_test_results --noshow_progress +``` + +The five real reports reconcile to 3,610 selected, 3,595 executed/passed, zero +failed, and 15 unchanged OS/filesystem skips: terminal 15/15, self-real 24/24, +MSBuild 388/388, server-client 305 passes plus eight Unix-only skips, and +extensions 2,863 passes plus seven existing skips. The extension test host's +actual token is `B03F5F7F11D50A3A`. The server-client run uses native self-contained +.NET 10.0.14; the other hosts use the pinned .NET 11 runtime. + +**Test-value evidence:** the original extension source-location assertion +failed on the `.` mapping and now executes/passes on `/_/`, without edits or +exclusions. Those recorded before/after runs also cross the shared signing +checkpoint; they are not an isolated same-signing counterfactual. Evidence is +retained in `extension_tests-initial.trx`, +`stage4-reference-source-fixtures.log`, `signed-pathmap-suites.log`, +`signed-test-inventory.json`, and five `*-signed-net10.trx` files. Wrapper-based +Windows execution is verified; the C# worker was subsequently exercised as +recorded above, while POSIX/F# compilation execution remains unverified. + +## SDK 12 public-signing refresh (2026-11-03) + +Refresh the existing bounded SDK 12 MTP/TRX package/publisher gate against shared +checkpoint `aff2cf0f702a07779cee99a8acf29cf515e858bb`, applied in this lane as +`70e5cddb3045fbad3296e7cc38e58c23f4c1df0e`. Preserve the earlier unsigned +packages, copied layouts, reports, and compiler evidence separately; their +success did not prove compatibility with signed consumers such as CodeCoverage. + +The integration keeps the SDK 11 default and SDK 12 opt-in unchanged. It takes +the pinned public-only Microsoft key, public-signing/friend provider patch, +signed product/satellite definitions, and the signed runfiles helper. It does +not introduce the absent SDK package tool, compatibility Paket group, or legacy +framework helpers from other lanes. Existing alias/friend fixtures remain +present and receive the checkpoint's identity assertions. + +Validate the same three native MTP/TRX packages and four target/runtime versions +with fresh consumer caches and separately named signed evidence. Check the +actual public-key token, signed satellites and key-qualified friend metadata, +SDK 12 compiler actions, independently selected SDK 11 consumer, selected +package assets, loaded hashes, and exact 0/2/9 child outcomes. The old unsigned +payloads are retained as an identity counterfactual, not relabeled as signed +evidence. Public signing preserves development-build identity; it does not +complete an official signature, authorize publication, or change machine +verification policy. The coordinator retains ownership of the broader +CodeCoverage/SDK composition and combined source/test matrix. + +### Refreshed signed gate results + +The signed refresh executed on +`70e5cddb3045fbad3296e7cc38e58c23f4c1df0e`, with documentation-only working +changes and the same temporary engineering compiler override: + +```powershell +.\eng\bazel\validate-packages.ps1 -Jobs 2 -EvidenceRoot C:\tfb\9d855da170b9-sdk12\signed-package-validation +``` + +Exit **0**; all **22** steps matched their expected exits. The independent +SDK 11 consumer built net8/net9/net10/net11, loaded the new native package +hashes, and returned 0/2/9 for pass/failure/empty selection. All four copied +self-contained layouts repeated those outcomes on the unchanged actual +8.0.33, 9.0.22, 10.0.14, and 11.0.0-rc.3.26522.148 runtimes. Each of the five +passing reports contains exactly one executed `TestMethod1`, zero failures +and zero skips. These are the bounded explorer cases, not the coordinator's +separate 1,249-case SDK 11 signing/mock/helper run or a new CodeCoverage run. + +The signed run is retained under +`signed-package-validation/20261103-161316-124e480a`; the earlier unsigned +run `package-validation/20261103-151148-505d36d4` remains intact. +All packages still use `2.6.0-preview.bazel`, so matching versions are not +treated as proof of matching bits: + +| Signed native package | SHA-256 | +| --- | --- | +| `Microsoft.Testing.Platform` | `B16EA5634803520CE303990D313139134591B3D11DC58FD91BDF72A987348A9B` | +| `Microsoft.Testing.Extensions.TrxReport.Abstractions` | `7C83682E0CE66C7E90E10D9C8370DB7BAE04DE000E9D31365CE657CB5ADF68DE` | +| `Microsoft.Testing.Extensions.TrxReport` | `E7A15B0C863CBF2FBC241BF19F6EEBDEDD1C54D98FCF58FF7F100221A764994B` | + +The actual loaded net11 platform DLL hash is +`9CC52C70A1B3989AC2848F27C4A200060F415B880B2BAB3AC96D61D01F2CB0FC`. +Loaded TRX abstraction/reporter hashes are +`BAF443AD6CD71C68C821597D8FA88563EC2204E9FFEE1EF7DEBDDEC91095F71E` +and `E168EFEF3D2850C04B6C1C18FFA9C2ECBECA2E85F415A333F4EA33408B8C6194`. +The live loader reported those hashes for both controller and child. + +### Public identity and test-value evidence + +The same PE/assembly-metadata audit was applied to the retained unsigned +packages and the new signed packages. It checked 116 implementation/satellite +assemblies, 128 friend attributes, 12 first-party assembly references, all +12 selected compile/runtime payloads in the fresh primary cache, and every +satellite's name/version/culture relationship with its parent. + +| Input | Executed identity assertions | +| --- | --- | +| Retained SDK 12 unsigned packages | Audit exit 1: 116 published-key, 128 key-qualified-friend, and 12 signed-reference assertions failed. | +| Refreshed SDK 12 public-signed packages | Audit exit 0: all observations passed; every implementation/satellite has token `B03F5F7F11D50A3A` and the expected Microsoft public-key blob. | + +This is a packed-output identity counterfactual, not a new test-execution count +or a claim that ordinary explorer tests rejected the old unsigned graph. +The earlier explorer tests passed with unsigned inputs; the identity oracle +distinguishes the defect. The audit source SHA-256 is +`D26B7157908D748DF80A9146FF3AF1582FA01F6F330AB1D5B9BD3992A7FEA2A4`; +its reports and extracted read-only inspection payloads are retained under +`signed-identity/unsigned-counterfactual` and `signed-identity/signed`. +An initial audit-harness attempt encountered PowerShell overload ambiguity +for an absent unsigned public-key blob; explicit byte-array handling fixed +that harness issue before either reported comparison run. + +The actual signed package/publisher graph has SHA-256 +`11FEE1B4DF6076AE6C9C69C31A1A0BC19E32BFFCA267268A11093FBBEE87C813`. +It retains 129 SDK 12 source compiler actions, all four original reference-pack +versions, and four SDK 10.0.401 bootstrap declarations. All 124 product, +satellite, and internal-reference compiler actions carry `/publicsign+` and +the one verified 160-byte public key. The remaining source actions are the +unchanged development helper and explorer executables. The complete producer +graph contains 465 declared actions and no MSBuild invocation. + +The fresh net8 consumer binlog records SDK 11's compiler/MSBuild paths and RAR +resolution of `Microsoft.Testing.Platform, Version=2.6.0.0, Culture=neutral, +PublicKeyToken=b03f5f7f11d50a3a` from the fresh run-owned cache. Visual Studio's +read-only fallback folder remains present in effective restore configuration; +it is not reported absent. All 12 checked package payloads reside in the owned +primary cache and match the signed feed. No prior unsigned artifacts, global +cache, machine verification setting, or shipping/default SDK policy changed. + +The audit source is retained as `signed-identity/audit.ps1` beside both reports. +The temporary signing-refresh `.bazelrc.local` was removed and the owned +Bazel server was stopped. A subsequent query without an engineering override +again returned SDK `11.0.100-rc.3.26522.148` and runtime +`11.0.0-rc.3.26522.148`. The original unsigned feed hashes were rechecked +unchanged. This refresh remains local Windows x64 evidence for the bounded +MTP/TRX contract, not official signature completion, a CI result, or validation +of additional SDK/CodeCoverage/Windows-controller consumers. + +## Parent integration checkpoint (2026-11-03) + +At exact source revision `a6c666d157e8ad8af694c1cfa049959b4da6164c`, the +combined public-signed modern and compatibility graph ran successfully: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfb\aliases-df07ee' +.\eng\bazel.ps1 --host_jvm_args=-Xmx2g test //:managed_all //:managed_compatibility //:portable_tests //:reference_alias_tests //:sdk_package_tests //:compatibility_reference_tests //:compatibility_explorer_test //:framework_netstandard2_0_consumer_test //:terminal_contract_tests //:self_real_tests --jobs=2 --nocache_test_results --test_output=errors --noshow_progress +``` + +Exit 0: all 20 test targets passed. Twelve fresh TRX reports contain **3,501** +executed/passed cases with no skips or failures. The other eight reports are +Bazel analysis/executable-wrapper checks and are recorded separately rather +than presented as additional MSTest cases. Their XML and the build-event target +summaries were also reconciled. + +The build includes the four modern TFMs and all **26 netstandard2.0 plus five +net462** variants. Both compatibility inventories were retained, and all 31 +physical implementation DLLs were read back, hashed, and verified to carry +`B03F5F7F11D50A3A`. This checks implementation outputs, not unrequested satellite +sidecars; runtime/package consumers must build and verify their own full layouts. + +Evidence is retained in +`C:\tfb\parent-integration-evidence\a6c666d157`: source identity, complete build +events/log, all 20 reports, `test-results.json`, both framework inventories, and +`signed-compatibility-assemblies.json`. Only the user guide changed while the +run was active. The 718.286-second elapsed time is a combined integration run +with existing action-cache hits, not a cold-cache or full-cache performance +benchmark. + +The subsequent source-path patch and newly integrated aliased suites require +their own final checks. This checkpoint does not include the full MTP suite's +two known host failures, the remaining analyzer suite, Windows-controller +integration, CI execution, or official release/servicing certification. The +separate lane records bind each package/SDK result to its actual source state. + +## Signed compatibility validation (2026-11-03) + +### Public-signing checkpoint validation + +The next validation starts from compatibility commit +`870a6d86b6952e6ed2eb84411c34f92c3c7ee8ad` and selectively applies the shared +identity correction from `aff2cf0f702a07779cee99a8acf29cf515e858bb`. +The lane-specific shared integration is +`42b9e7f8d500cc6f3d4841136ecc67ecc9ae9cf9`. +SDK/alias conformance files absent from this lane stay absent. The independent +package-reference selection patch and compatibility dependency groups are +preserved. + +The contract mirrors Arcade's development build: the pinned public-only +`MSFT.snk`, public signing for native libraries and satellites, and full +key-qualified friend identities (including DynamicProxy's distinct public key). +No private key, verification bypass, registry setting, or machine policy change +is allowed. Public-key identity is not official signature completion. + +The prior 31 unsigned DLLs were copied to separate evidence storage after +checking every hash against the unsigned inventory; the unsigned CLR consumer +and previous reports are retained too. Signed consumers must verify the actual +`b03f5f7f11d50a3a` identity in addition to framework metadata and loaded paths. +The planned checks rebuild the native compatibility matrix, run the real +netstandard host and CLR consumers, inspect satellites/keyed friends, and report +any genuine CLR signing/load boundary rather than weakening verification. + +Executed results for this checkpoint: + +| Contract | Evidence | +| --- | --- | +| Public-only key | The downloaded key is exactly 160 bytes, contains `PUBLICKEYBLOB` / `RSA1`, matches SHA-256 `933598639cbaa1de502f80d2fd1db78f13c8d7bb64a5fdc1bc73ac0b5ce4f5ca`, and derives token `b03f5f7f11d50a3a`. | +| Signed compatibility outputs | All 31 primary DLLs have the expected token and original exact TFM metadata. All 107 friend grants have the Microsoft or DynamicProxy key as appropriate. | +| Satellites | After materializing runtime closures, all 325 satellites (260 netstandard, 65 net462) match their parent's version/key and declare a nonempty culture. | +| Source behavior and friend access | `.\eng\bazel.ps1 test //:managed_compatibility //:framework_tests //:compatibility_reference_tests //:compatibility_explorer_test //:framework_netstandard2_0_consumer_test --jobs=2 --noshow_progress --test_output=errors --nocache_test_results` exits 0: seven fresh targets, including all 1,634 existing framework cases and their localization checks. | +| Signed runfiles dependency | `.\eng\bazel.ps1 test //:build_tools_tests --jobs=2 --noshow_progress --test_output=errors --nocache_test_results` exits 0; all thirteen existing build-tool cases execute/pass with the shared signed runfiles assembly. | +| Netstandard host | The real explorer again returns 0/2/9 for pass/failure/empty selections, with parsed TRX executed counts 1/1/0. | +| Windows CLR | The separate signed consumer builds and exits 0 on `Framework64/v4.0.30319/mscorlib.dll`, verifies the actual native framework token, loads its Korean satellite, compares full public keys, and exercises the failing-assertion path. Staged hashes match the selected producer. | + +#### Runtime-sidecar provenance correction + +The first explicit CLR satellite probe failed with `0x80131040`: its staged +satellite was still the old unsigned file, although the primary DLL was newly +public-signed. A library-only build had not materialized that runtime sidecar. +The standard consumers had materialized their own satellites and passed. +An independent satellite build in a different incoming configuration was not +proof that the wrapper-selected runtime file had been refreshed. + +Compatibility wrappers now expose the existing runfiles as an additive +`runtime_files` output group without changing their default files or assembly +providers. The exact command +`.\eng\bazel.ps1 build //:framework_net462 --output_groups=runtime_files --jobs=2 --noshow_progress` +materializes the selected framework and all thirteen satellites. The generated +inventory now names direct satellites too. After replacing the task-owned +read-only stale copy and verifying its token/hash before launch, the same CLR +consumer exits 0. No production source, key, machine policy, verification +setting, or binding bypass was changed to obtain that result. + +The full runtime-closure build was also executed for all 31 exact wrapper labels +using `--output_groups=+runtime_files` and exited 0. This distinguishes a +materialized artifact from a path merely reported by analysis. + +**Test-value evidence:** an isolated identity counterfactual retains the exact +signed consumer executable and correct satellite but replaces only the primary +framework DLL with its preserved unsigned predecessor. The CLR rejects that +wrong identity with `FileLoadException` / `0x80131040` and exit `-532462766`; +the correct payload exits 0 before and after. The consumer SHA-256 is identical +in all three runs: +`D87E07279F041D94F168918E77F6B61703F30667B25D3195D091713C04C29E10`. +This proves the identity/load boundary, not cryptographic signature completion. + +Signed evidence is separate under `files/bazel-signing`: key verification, +primary/satellite/friend inventories, materialization logs, CLR build binlogs +and matched-runtime output, TRX reports, and `identity-counterfactual.json`. +The original unsigned evidence remains unchanged under +`files/bazel-compatibility` and the signed evidence's `unsigned` snapshot. +No genuine public-signing load failure was observed with correctly staged +artifacts on this installed CLR. Exact .NET Framework 4.6.2-runtime execution, +environments with different verification policy, SDK 12, official signing and +shipping-package certification remain separate validation boundaries. + +## Combined Windows and unit-test surfaces (2026-11-03) + +The Windows patch and package-origin reference patch both touch the version +comparison context in `collect_compile_info`. Their first combined fetch failed +before any compilation because the latter still expected the former's old +strict version-parser line. The reference patch was rebased onto the Windows +patch's relaxed, four-component-capable comparison; its reference-selection +logic was unchanged. All six combined targeting/reference analysis targets then +passed, preserving both contracts. + +At source revision `2e461b38250bfda24d033c0d4c47d5c39ef506da`, the parent ran: + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfb\aliases-df07ee' +.\eng\bazel\windows\validate.ps1 -ArtifactsDirectory 'C:\tfb\parent-integration-evidence\windows-composed\libraries' +.\eng\bazel\windows\validate-app-model.ps1 -ArtifactsDirectory 'C:\tfb\parent-integration-evidence\windows-composed\app-model' +``` + +Both exited 0. The library gate rebuilt all fourteen variants and passed seven +copied runtime consumers (nine recorded steps). The complete app-model gate +passed 21 recorded steps, including both original controllers, real activation, +0/2/9 results, malformed bootstrap 5, and discovery without the execution +handshake. Package `TestFx.Bazel.7644695c921e4c9f9d3024e9d826e7ee` was read back +as absent after exact cleanup, both in the gate and a separate live readback. +No machine verification, Developer Mode, ACL or SDK setting was changed. + +Retained evidence is +`windows-composed/libraries/20261103-172016-c0ddf449` and +`windows-composed/app-model/7644695c921e4c9f9d3024e9d826e7ee` beneath the parent +evidence root. Each `validation.json` records actual source/input hashes, +consumer paths and expected exits. A task-owned ignored `.bazelrc.local` capped +only the Bazel JVM heap at 2 GiB; compiler selection remained SDK11. The user +guide was the only tracked file edited during these runs. + +The repository contains thirteen original unit-test project files. Their +existing native targets are now exposed together as `//:all_unit_tests`, while +the established `portable_tests` baseline is unchanged. The new aggregate +deliberately includes `platform_tests`; the two known host-specific failures +and the original platform-dependent skips are not hidden to produce green +output. This is selection plumbing, not a change to test bodies or scheduling. + +## Final combined native stage (2026-11-03) + +All seven lane implementations and their evidence are integrated. The final +behavior-bearing source revision is +`c910ab89ce7dc95c3ab2666ed62c4172a9950183`; subsequent +`5b51cb1bc9d97c018bb32f0363c5735fafb95809` and this handoff update change +documentation only. Original `src` code, the thirteen original unit-project +source trees, utilities, performance sources, and sample bodies are unchanged +from `6bc33c48b9dae0e89486862f46af3c876fd7cf5d`. New native-only fixtures and +build declarations are separate. All 22 added/modified C# files retain UTF-8 BOMs. + +### Complete source and unit-project run + +```powershell +$env:TESTFX_BAZEL_OUTPUT_ROOT = 'C:\tfb\aliases-df07ee' +.\eng\bazel.ps1 test //:managed_all //:managed_compatibility //:windows_libraries //:all_unit_tests //:build_tools_tests //:reference_alias_tests //:sdk_package_tests //:compatibility_reference_tests //:windows_targeting_test //:windows_asset_selection_test --jobs=2 --keep_going --nocache_test_results --test_output=errors --noshow_progress +``` + +All three source graphs built. All 22 test targets executed; 21 targets passed, +and the full MTP target failed only its two established Windows impersonation +cases. The aggregate correctly returned **3**. No filter, assertion change, +machine-policy change, or success-shaped fallback concealed them. + +| Scope | Selected | Passed | Failed | Original skips | +| --- | --- | --- | --- | --- | +| Thirteen original unit-test projects | 12,519 | 12,502 | 2 | 15 | +| Native BuildTools, SDK-package and alias/identity fixtures | 34 | 34 | 0 | 0 | +| Six analysis-test targets | 6 targets | 6 targets | 0 | 0 | + +The only failing methods remain +`CreateServerStream_AnUnauthorizedIdentityCannotConnect` and +`CreateServerStream_AnAppContainerConnectsOnlyWhenItsOwnPackageIsAuthorized`; +their actual failures again identify Win32 **1346**, as in the original +independent host reproduction. The eight server-client and seven extension +skips remain the original OS/filesystem conditions. Fresh reports and exact +identities were parsed against the independently established per-suite counts. +Evidence: `C:\tfb\parent-integration-evidence\c910ab89ce-full`, including all +sixteen TRXs, six analysis XMLs, build events, exact source revision and summaries. + +### Composed package gates on the integrated revision + +```powershell +.\eng\bazel\validate-sdk-packages.ps1 -Jobs 2 -EvidenceRoot 'C:\tfb\parent-integration-evidence\c910ab89ce-packages\sdk' +.\eng\bazel\validate-mstest-packages.ps1 -OutputRoot 'C:\tfb\parent-integration-evidence\c910ab89ce-packages\mstest' -VerifySatelliteSensitivity +.\eng\bazel\validate-analyzers-package.ps1 -Jobs 2 -EvidenceRoot 'C:\tfb\parent-integration-evidence\c910ab89ce-packages\analyzers' +``` + +All three commands exited **0**, and all three records identify the exact +behavior-bearing revision above with no tracked source edits. Their different +empty-status JSON representations (`""` versus no entries) were normalized +when checking provenance, not interpreted as a dirty tree. + +| Gate | Actual outcome | Retained run | +| --- | --- | --- | +| SDK/meta | Ten freshly packed archives, ten evaluations, 40 expected-exit steps; unmodified default CodeCoverage, explicit None, native driver and VSTest all pass. | `sdk/20261103-174813-c7d23f4c` | +| MSTest/runtime | Eight fresh archives, 31 expected-exit steps; actual .NET8/9/10/11 layouts, native loaded keys/hashes, MSBuild parent 0/1 and direct 0/2/9. | `mstest/20261103-175158-c19bcfd6` | +| Analyzer package | All 15 unchanged layout/compiler/legacy-host cases pass, including the actual Roslyn3.11 code fix and French satellites. | `analyzers/20261103-175427-1aec260c` | + +The signed satellite-removal counterfactual was repeated on this integrated +source: native production and consumer publication succeeded, the same three +consumer cases detected the omitted Korean satellite (two pass/one intended +failure), and a fresh correct-package cache restored three passes. +`validation.json` retains exact package hashes, commands, expected exits and +runtime paths. Consumer MSBuild tests the product boundary; it is not a native +producer escape hatch. The final analyzer archive SHA-256 is +`73721916DC47D15ED748C0B90734CEDE82B462904BB40217378F9BE3AA9E021E`. + +### Samples, reports and compiler selection + +The parent ran the unchanged baseline and all scale/reliability/sample targets: + +```powershell +.\eng\bazel.ps1 test //:baseline_tests //:sdk_runner_sample_test //:reliable_suite_test //:scale_10c_test //:scale_100c_test //:scale_1000c_test //:custom_report_test //:otel_sample_test //:browser_publish //:aot_sample //:ensure_sample --jobs=2 --keep_going --nocache_test_results --test_output=errors --noshow_progress +``` + +Exit 0; all fourteen test targets passed. The scale reports were streamed and +verified at 1,000, 10,000 and 100,000 actual passes; reliability had 11 and the +SDK example one, all with zero skips. The built browser bundle was copied +outside Bazel and run with its unchanged Node script: exactly one test passed +both times, with exits 0 and 9 for minimum counts one and two. The managed +source-generated AOT sample passed one real case; Ensure and the custom-report +failure sample retained their actual single-test failures and exit 2. +This is not native AOT execution. Evidence: `final-samples` under the parent +evidence root, including the large reports, browser layout/logs and exit records. +The lane's optimized in-process benchmark result remains separately bound to +its recorded source state; no performance comparison is inferred from it. + +The final `.\eng\bazel\validate.ps1 -Jobs 2 -EvidenceRoot +'C:\tfb\parent-integration-evidence\final-protocol'` command exited 0: +discovery, actual TRX/HTML/JUnit/CTRF output, paths containing spaces and `!`, +failure 2, empty selection 9, mixed-module aggregate 3 and the native +no-MSBuild action audit all passed. Its record is +`final-protocol/20261103-180527-e07947cd`. + +The explicit SDK12 compiler was also checked on the combined source: +`build //:explorer //eng/bazel:build_tools +--extra_toolchains=@dotnet_engineering_toolchains//:all --jobs=2`, +followed by the actual `deps(//:explorer)` action audit and real explorer +pass/failure/empty runs, all with the same explicit override. The build and +audit exited 0; 33 declared source compiler actions use exact SDK +`12.0.100-alpha.1.26509.101`, with two independent SDK10 bootstrap declarations. +The native explorer actually returned 0/2/9 and its TRXs contain respectively +one passed, one failed, and zero executed cases. The action graph SHA-256 is +`6AE1A9A09713E86F935E858838D1A22656DA77ECE9E0A2C138F057B32AD8ACAD`. +A no-override query then confirmed that the default is still SDK11. +Evidence: `final-sdk12` under the parent evidence root. The broader four-TFM +SDK12 package/runtime gate remains the separately recorded lane result, not a +claim that every final project was executed on SDK12. + +### Delivery boundaries + +This is a committed local development branch, not a pushed TestFx PR or a +replacement for the shipping build. Native XAML/UI-thread/classic-UWP execution, +Windows NuGet/SDK routing, the original net8 NativeAOT publisher's unsupported +target, the complete integration/acceptance suite, other-OS execution, official +signatures, CI and release/servicing certification remain explicit boundaries. +No released first-party package substituted for a missing native producer. +The two host failures and original skips remain observable in the full unit +aggregate. All parallel lanes stopped their owned servers/processes and retained +their evidence. The parent stopped its own server, verified no build/test process +remained for its exact output root, and removed the temporary heap-only rc. +Task-owned caches, native outputs and reproducible evidence are retained. + +## 2026-11-04: independent build-and-test cache dogfood + +### Approved outcome and comparison contract + +The user approved a separate, non-required Azure pipeline to measure Bazel +build and test caching over ordinary changes. The existing required pipeline, +affected-test selection, coverage, integration tests, packaging and shipping +process remain authoritative and unchanged. Adding a serial step to the +MSBuild job was rejected because it adds latency and allows existing outputs +to contaminate the experiment. A job in that pipeline would still delay its +overall completion; the dogfood therefore has its own pipeline definition. +Registering that definition and making it required are separate operations. + +The initial workload is the thirteen existing unit projects at net10.0, +Release/optimized compilation, on the same Windows image used by ordinary CI. +Both producers use the exact SDK12 compiler pinned in `global.json`. Native +test targets, rather than the primary-output matrix, request their complete +runtime dependencies, including localized satellites. The comparison must +reconcile canonical test identities and outcomes, not merely equal totals. +This is a matched unit-workload experiment, not full shipping-pipeline parity. +The source build systems still have different policy and generation machinery. + +Inspection found two existing runtime layouts: eleven framework-dependent +native suites run on the selected compiler toolchain runtime, while analyzer +and server-client tests use self-contained net10.0 layouts. The MSBuild runner +must preserve that distinction and explicitly select the corresponding runtime; +silently running all MSBuild assemblies on the repository's older net10 patch +would not be a matched comparison. Existing test bodies, assertions, scheduling, +skips, and the two locally observed Windows impersonation failures stay intact. +Coverage and affected-test filtering are not enabled in this bounded workload; +their existing authoritative CI runs are not changed. + +### Cache, lifetime and failure contracts + +The four modes are MSBuild reference, Bazel cold compiled/test outputs, Bazel +build-cache reuse with forced test execution, and Bazel build plus test-result +reuse. Default CI/PR runs execute the last mode. Scheduled or explicitly +requested benchmark runs also execute the controls, on separate fresh agents. +Compiler-node and concurrent-test-process budgets are explicit and shared by +the comparable modes; in-process test scheduling is not rewritten. + +The first cache transport is Azure `Cache@2`, not a new server. Persist the +dedicated Bazel action store and downloaded dependency archives separately. +Do not persist the server/output tree or extracted repositories with +machine-specific links. Cache snapshots are immutable, with compatible restore +prefixes so new commits can reuse older actions and add new entries. Azure's +pipeline/branch scopes prevent PR writers from updating the target-branch +cache. No cache miss suppresses a build or test. No remote-cache credentials or +write access to a trusted shared cache are supplied to PR code. + +Each invocation owns fresh output and evidence directories; it never cleans a +shared cache or stops another invocation's server. Only its own Bazel server +and child processes may be stopped. Build, test, bootstrap and report failures +remain nonzero, including missing/partial/zero-result reports. Evidence is +published on failure where available. A reused TRX is explicitly reported as +cached evidence, not newly executed cases. Failed or incomplete runs do not +become successful timing samples. + +Reports retain source/manifest/toolchain identities, exact commands, test +selection and outcome hashes, BEP cache statistics and separate build/test +durations. A dependent summary job must account for cache restore and post-job +save time from Azure's timeline; unavailable timing is unknown, not zero. +Overall job time includes bootstrap and cache transport. Queue delay and extra +dogfood agent consumption are distinct from build-system savings. + +### Research, alternatives and planned proof + +- Repository sources: `azure-pipelines.yml`, the Windows build/test templates, + `BUILD.bazel`, `eng/bazel/{tests,extra-tests,analyzer-tests,test-assets}.bzl`, + and the pinned SDK extension. The ordinary PR pipeline already selects + affected tests; its complete duration is not a comparable full-test baseline. +- [Bazel cache contract](https://bazel.build/remote/caching): action results and + content-addressed outputs can be shared through a disk cache; declared inputs + and environment determine validity. Test caching is per test target, not per + MSTest method. +- [Azure cache contract](https://learn.microsoft.com/en-us/azure/devops/pipelines/release/caching?view=azure-devops): + immutable snapshots, prefix restores, branch/pipeline isolation and post-job + upload. Whole-cache transfer can dominate a small incremental workload. +- A remote action-cache service is deferred until measured archive overhead + justifies its operation and authorization. Replacing required validation or + advertising the earlier 6-8 second local no-op as CI savings is rejected. + +Planned validation, not yet claimed as executed: strict BEP/TRX/timeline parser +fixtures, a buildable false-green counterfactual, real cold/forced/cached runs +with fresh output roots, and changed source/test/resource/configuration inputs. +Cross-machine Azure cache restore/upload and pipeline registration require +separate live evidence. Record actual outcomes and any comparison gaps below +before handoff. + +### Implementation experiments and corrections + +The initial driver experiments exposed three integration details before any CI +speedup could be claimed: + +- Passing Bazel flags through PowerShell `-File` reparsed embedded colons in + Windows paths and Bazel option names. The driver now passes arguments as JSON + data to a fixed child entry script; named MSBuild parameters remain a + hashtable, not reparsed command text. Four launcher checks exercise literal + options, Windows PowerShell parameter binding, nonzero exits, streaming logs + and child termination. The accidental, task-owned output directory from the + failed probe was moved into retained evidence only after its server exited. +- A previously extracted Arcade toolset can return before SDK initialization. + The baseline now calls the existing `eng/common/dotnet.ps1` bootstrap, pins its + process-local SDK paths, and runs the normal `eng/build.ps1` with PowerShell 7 + and the normal Windows VS MSBuild engine. This also avoids treating a benign + native workload-status message as a terminating PowerShell 5 error. +- Applying a global `TargetFramework=net10.0` during restore produced NU1510 for + packages still needed by dependencies' older frameworks. The driver now + restores the declared graph first, verifies selected framework assets, then + builds net10.0 without another restore. No warning was suppressed and no + package reference was removed. Restore and compilation both count toward the + MSBuild build duration. + +The first real protocol run executed all 27 cases on SDK12's runtime. A second, +fresh Bazel output root restored 453 actions from the disk cache and reused the +same 27-case report. The MSBuild control executed the same 27 canonical +identities and outcomes on that exact runtime. These are local harness/cache +checks, not a representative CI speedup or Azure cache-transfer measurement. + +The full optimized SDK12 native run selected 12,505 cases across all thirteen +projects: 12,487 passed, 15 retained platform skips and three failed. Two are the +previously observed Win32-1346 impersonation failures. The third is the existing +`FailedLaunchDisposesProcessHandles` assertion, which observed 13 handles against +an upper bound of 12. It is not retried away or weakened. The full MSBuild +control retained the same two impersonation failures, and that handle test +passed. The Release selection is smaller than the earlier fastbuild selection +because conditional tests differ by configuration. + +The MSBuild control also exposed nine legacy-task cases relying on a conventional +unqualified output directory. Their existing helper already accepts a +`LegacyMSBuild` sidecar, which the native lane uses. The driver now builds the +same netstandard2.0 task fixture and materializes that sidecar in its isolated +unit output. A fresh focused baseline then executed all 388 MSBuild cases +successfully. No original test or fixture helper was edited. + +Raw TRX identity comparison found one clock-dependent display name in the MTP +suite: `DotnetTestDataConsumerTests` supplies two `TimingProperty` objects using +`DateTimeOffset.UtcNow` to a duplicate-property rejection test. All other +identities matched. The opt-in `TestFxDynamicTimingV1` policy now projects only +that row's four clock fields, preserving its type, duration, remaining data, +counters and multiplicity. Raw TRXs and `RawSelectionHash` preserve the original +identities. The paired 3,380-case selections agree under this policy, with +exactly one projected key in each report. General date stripping or method-only +comparison is rejected, as is changing the original test to make the benchmark +look consistent. + +The finalized parser passed 77 checks, including the original 67 unchanged +test bodies and ten narrow policy cases. In an isolated copy, disabling only +the clock projection caused seven intended new-policy assertion failures; +restoring it returned 77 passes. The earlier missing-target guard mutation +caused its intended assertion failure as well. Four launcher checks and five +comparison checks passed, including literal Windows/Bazel argument forwarding, +nonzero child exits, mismatched identities, missing controls and unknown timing. +These helper checks do not substitute for the pending live Azure cache-transfer +and complete post-correction workload comparison. + +CI restores caches into fresh per-job temporary directories. This is necessary +even with Azure's branch-scoped cache service: reusing a local agent directory +could otherwise carry an untrusted branch's old files across a cache miss. +Ordinary Bazel `auto` test-cache policy retains eligibility rules rather than +forcing reuse of unsuccessful results. + +Evidence for these implementation experiments is retained under +`artifacts/bazel-dogfood-validation/20261104-104557-177b20c8`. Failed bootstrap, +restore and comparison attempts remain separate from successful samples. +The source state is the original local head plus the recorded working patch; +none of this is published or live-pipeline verification yet. + +## 2026-11-05: repair the native Windows/Linux CI graph + +The user explicitly requested fixing the previously optional Bazel workflow. +Run `41840481157` on head +`9a3d23a4cc29a8054b38be531e1e775059119c34` failed on both Windows and Ubuntu +before test execution. Both logs identify the same cause: the PR merge contains +`MSTestHostInjectionMetadataGenerator`, but the independent native analyzer +lock still supplies Roslyn 3.11, which has no `IIncrementalGenerator` or +`IncrementalGeneratorInitializationContext`. The repository now explicitly +requires Roslyn 4.14 for analyzer production and tests. The NuGet preview-feed +404 warnings are not the cause; graph analysis completed before compilation. + +The current `main` source was merged locally as +`325689026465371ec95dd3caa5b22c59d9e15805` so local validation exercises the +same product graph as the PR merge, including the already-landed main CI fixes. +No upstream assertion is weakened or test case removed for this repair. The bounded fix is +to align native producer/test declarations and regenerate their lock metadata, +then address any subsequent concrete native wiring errors exposed by the real +workflow. Updating only the compiler SDK cannot supply missing Roslyn API +references, and excluding the new generator would lose production behavior. +The analyzer package host probe must follow the now-supported Roslyn baseline, +not continue claiming the superseded 3.11 compatibility contract. + +Planned evidence: an executable dependency-drift guard with a detected old-pin +counterfactual, the existing Windows native validation and package-consumer +commands, and an isolated Linux execution of the same workflow. Preserve failed +attempts separately. CI run artifacts were downloaded under +`artifacts/bazel-ci-repair/41840481157`; no new outcome is claimed yet. + +### Executed repair and validation + +After the Roslyn fix, the complete graph exposed stale links to the split +`BaseSerializer*.cs` files and `DiagnosticAssertionObserver`, an absent runtime +reference for assertion-generator tests, and an adapter-test global using. +The native declarations now match those source/project contracts. The generator +has distinct compiler-plugin and runtime-test-subject providers so an +analyzer-only import cannot shadow the executable test dependency. + +New platform-services fixtures copy their own binary and launch Debug assertion +children. Bazel outputs are read-only and its ordinary runfiles are not a +standalone runtime layout. The native test now uses a framework-dependent +publication copied into its own `TEST_TMPDIR`, clears only the copy's read-only +attributes, supplies the declared SDK under the fixture's `.dotnet` contract, +and removes its own copy after joining the child. Linux apphosts retain their +full dotted basename; only Windows `.exe` is removed when finding the DLL. +The native entry point retains the original child-probe dispatch and markers. + +The adapter trace test now relaunches the already-built host rather than +evaluating an MSBuild project simply to run the same single test. Its child +selection, exit, one-result TRX, and ordered trace-message assertions are +unchanged. This is the one original test fixture modified by the repair. +All 184 MSBuild-built net10 adapter cases passed, and the same trace test passed +on the original net462 host after a successful zero-warning build. + +Linux execution then demonstrated that the platform-services suite contains +25 Windows path, invalid-character, newline and filesystem assumptions; it is +already excluded by `NonWindowsTests.slnf`. Porting that entire suite is not +part of this pipeline fix. The native target is explicitly Windows-compatible, +and a separate nine-target non-Windows suite retains the other tests. The +Windows suite still runs all 1,399 platform-services cases. The validator +reports the supported selection and unsupported suite explicitly; there is no +per-test filtering, assertion change or manufactured skip/pass. + +The complete Windows `validate.ps1 -Jobs 8` command passed all ten targets: +1,732 framework, 184 adapter, 1,399 platform-services, 13 build-tool, 197 +source-generation, 210 VSTestBridge, 27 protocol, one Simple1 and two explorer +cases (3,765 total). Discovery, reports, intentional exits 2/9 and mixed-module +exit 3 passed. `validate-packages.ps1` passed the real package consumers and +copied self-contained net8/net9/net10/net11 layouts. The analyzer gate passed +all 15 cases, including real C#/VB diagnostics, code fixes and French satellites +against the central Roslyn 4.14 host. + +`verify-roslyn-dependencies.ps1 -SelfTest` passes eight cases. Removing only its +version-mismatch guard in an isolated copy makes +`RejectsOldProducerDeclaration` fail at the intended assertion (exit 1); +restoring the guard returns eight passes (exit 0). The mutation script SHA-256 +is `1843CA0ED30E94B5516435ED251E35725ED336BC83994A12F0DA1BA73ADD9D09`. + +Local Linux runs use a disposable PowerShell 7.4 Ubuntu container with its +own Bazel volume. Missing Git/C++/`file` prerequisites were installed only +inside that container. Early Windows-origin archive and bind-mount failures +were validation-environment issues: the final harness uses Git's canonical LF +checkout and a native Linux evidence directory, then exports an archive. +These failures are retained, not counted as successful pipeline runs. +Exact commands, source snapshots, logs and reports are under +`artifacts/bazel-ci-repair`. + +The final Linux container run completed both workflow commands with exit 0. +Its nine supported targets executed 2,366 passing cases, with the unsupported +Windows suite explicitly recorded rather than counted as passing. Discovery, +all report formats, exits 2/9/3, and all 22 package/consumer/runtime steps passed. +The exported record is `linux-run5/native/20261105-100310-5441ee47/validation.json` +and `linux-run5/packages/20261105-100417-aeb3a585/validation.json`; the incoming +source archive SHA-256 is +`76ccf8719c9fc58710e2cd4810ca21c6451e3ba282c5f4049c4fa317748d0b6d`. +The original Windows checkout was canonicalized through Git before Linux +execution; no assertions or test source were patched inside the container. + +The Windows and Linux workflow commands were, respectively: + +```powershell +.\eng\bazel\validate.ps1 -Jobs 8 -EvidenceRoot (Join-Path $PWD 'artifacts\bazel-ci-repair\windows-final') +.\eng\bazel\validate-packages.ps1 +``` + +```sh +pwsh -NoProfile -File ./eng/bazel/validate.ps1 -Jobs 8 -EvidenceRoot /evidence/native +pwsh -NoProfile -File ./eng/bazel/validate-packages.ps1 -Jobs 8 -EvidenceRoot /evidence/packages +``` + +Both use native Bazel production and the same compiler/toolchain declarations. +The additional `validate-analyzers-package.ps1 -Jobs 8` run passed 15/15 cases +after repacking; its evidence is `analyzers/20261105-094003-959ed79c`. +The Linux container and its owned Bazel server exited; no shared host policy, +cache, or service was changed. Hosted GitHub validation is still a separate +gate, not inferred from these local runs. + +### Hosted console-output follow-up + +Hosted run `42008183305` at +`037269f4416f784c4f96b6d2afe1ccd0f542f00a` compiled and passed the selected +Windows and Ubuntu suites, then both validators rejected the intentional failing +sample after its correct exit 2. Their raw artifacts contain +`ESC[31mfailedESC[m TestMethod2`, so a literal plain-text predicate incorrectly +reported that the test had not executed. + +Both workflow scripts now use the same ANSI-CSI normalization when reading a +command log for assertions, while retaining the original bytes for evidence. +Seven focused cases cover plain/colored failure text, mixed outcomes, +zero-result messages, significant content/newlines, incomplete escapes and +empty logs. Both downloaded hosted failure logs reproduce the old false +negative and satisfy the corrected predicate. Removing only normalization in +an isolated copy causes `ColoredFailure` to fail (exit 1); restoring it returns +seven passes (exit 0). Mutation SHA-256: +`FED1041321DC357D8918F3E1B7CB17CFFC5C07C8B5D5618D1DEF7CCFFFAB4CCC`. + +The intentional failure probes now explicitly pass `--ansi on`, so this path +is exercised even when an LLM environment requests plain output. Both complete +Windows workflow scripts passed again, preserving exit 2 and the actual colored +raw log. Console fixtures are retained under the existing workflow evidence +directory, not deleted from the host's protected system temporary directory. +The hosted rerun remains the final verification of this follow-up. + +### Review follow-up: trigger and relative child paths + +Review of head `03e3d3503573ab52dd7b97e2a6f6f3b9d929d21b` identified two +bounded defects. The workflow path list did not include the central +`Directory.Packages.props` input of the drift guard; it now does. A direct +before/after path-filter check rejects the old omission and accepts a +package-only change with read-only workflow permissions unchanged. + +The trace fixture also passed a relative results path to a child with a +different working directory. Running +`TraceBridgePersistsEverySeverityInAnIsolatedHost` from the repository root with +`--results-directory artifacts\pr-review\relative-trace-12204\red` reproduced +one executed failure on net462: the child succeeded, but its TRX was not in the +directory the parent read. Resolving the complete child directory with +`Path.GetFullPath` before creating/passing it fixes that contract without +changing any trace, exit or result-count assertion. Fresh net462 and net10.0 +builds passed; the same selected test then passed with both relative and +absolute result directories (four runs, each exit 0 and exactly one pass). +Commands, binary hashes, binlogs and TRXs are retained under +`artifacts/pr-review/relative-trace-12204`. + +### Server-client source-link follow-up + +The next PR-merge run (`42014900952`, head +`3504d985dd3483c2bd25c4ddc440bb71f23ccc8c`) failed compiling +`MtpServerInProcessHost`: main's +`e7e3cd922964fa20ace264d20f1065d0577051b0` introduced injectable stopwatch +helpers and added their two source links to the source-client project, but the +independent native declaration still omitted them. NuGet metadata-probe 404 +warnings were not the failure: graph analysis completed before CS0246. + +Main was merged as `dbcd61c4cd0422ca608bfbb385d375bb4d757cf8` to validate the +actual new client and its regression cases locally. The native source list now +includes exactly `IStopwatch.cs` and `SystemStopwatch.cs`, matching the project; +no production client behavior, timeout or test assertion is changed by this correction. +The prior green hosted run remains evidence for its own revision, not this +later PR merge. + +The modern managed matrix and the `netstandard2.0` client then compiled +successfully. Running the new upstream client tests exposed a second missing +piece of native parity: the custom test entry point had not adopted the upstream +late-fault dispatcher, missing-server-arguments rejection, or bounded fixture +lifetime. Without the early dispatcher, fixture children started more test +suites instead of executing their isolated operation. That run was interrupted; +only processes belonging to the task-owned Bazel output root were stopped, and +zero remaining task-root executable processes were confirmed. This interrupted +run is not claimed as a completed regression-sensitivity result. + +The native entry point now follows those same upstream fixture branches before +adding Bazel report arguments. Normal execution retains method-level, +CPU-count parallelism; environment overrides remain child-process-local, and +the upstream tests still own their child handles and bounded cleanup. No +serialization, fixture assertion, or product timeout was relaxed. + +Validation used SDK `11.0.100-rc.3.26522.148` and the merged source above, with +the two native-file changes: + +| Command | Result | +| --- | --- | +| `.\eng\bazel.ps1 build //:managed_all //:server_client_netstandard2_0 --jobs=8 --keep_going --noshow_progress --show_result=0` | Exit 0; modern matrix and legacy client compile. | +| `.\eng\bazel.ps1 test //:server_client_tests --jobs=8 --nocache_test_results --test_output=errors --test_timeout=300 --noshow_progress --show_result=0` | Exit 0; 600 selected, 592 passed, eight original skips, zero failures. | +| `.\eng\bazel\validate.ps1 -EvidenceRoot (Join-Path $PWD 'artifacts\bazel-client-stopwatch\native')` | All nine steps passed, including expected negative exits 2/9/3; all ten Bazel test targets passed, with 3,776 passing cases in the eight TRX-reporting modules. | +| `.\eng\bazel\validate-packages.ps1 -EvidenceRoot (Join-Path $PWD 'artifacts\bazel-client-stopwatch\packages')` | All 22 native package/consumer/copied-runtime steps passed. | + +The client TRX confirms all nine directly relevant upstream data cases passed: +`ProcessFixture_MissingServerArguments_ExitsWithoutRecursivelyRunningTests` +(three), `TaskWaits_LateFaultObservation_ControlsUnobservedTaskException` (four), +and `LateFaultFixture_WatchdogTerminatesBlockedChild` (two). An attempted +combined VSTest filter encountered Windows batch interpretation of `|` before +tests ran; the successful command above runs the whole suite instead, without +changing filtering infrastructure or counting that launch error as a test. + +**Test-value evidence:** a subsequent safe, isolated comparison used the same +published net10.0/win-x64 layout and original test sources, recompiling only the +entry point from pre-fix blob +`06665c485246ed7801ea9729f31fd0fef3c7598e`. It invoked +`dotnet exec \Microsoft.Testing.Platform.ServerMode.Client.Sources.UnitTests.dll --help` +with each of the same nine fixture environment values. `--help` deliberately +makes the old fall-through bounded: a broken dispatcher prints help rather +than recursively executing tests. The assertions were unchanged across variants. + +| Probe contract | Old entry point | Correct entry point, before/after | +| --- | --- | --- | +| `RejectHelp_*`: three server-fixture gates reject incomplete arguments with exit 17 and the exact diagnostic | Three failures: exit 0 and help output instead. | Three passes in each run. | +| `DispatchLateFault_*`: four operations emit the exact two-case GC-observation summary | Four failures: help output instead of the operation summary. | Four passes in each run. | +| `DispatchWatchdog_*`: two blocked operations terminate nonzero with their exact output/diagnostic | Two failures: exit 0 and help output instead. | Two passes in each run. | + +Each comparison run selected and executed nine probes with no skips: +**9 passed / 9 failed / 9 passed**. The comparison harness exited 0 after +checking those expected outcomes; this is a targeted old-bootstrap comparison, +not a pristine-base build or a claim that the original nine MSTest cases ran +in the red variant. The two-minute server-fixture lifetime is aligned with +upstream and exercised through normal child cleanup, but its expiry was not +separately fault-injected. The missing-source CS0246 is build-reproduction +evidence, not a behavioral red test. + +Retained evidence is under `artifacts/bazel-client-stopwatch`: the two hosted +compiler failures, client TRX and fixture identities, native run +`20261105-112239-6c2c5784`, package run `20261105-112441-f31ade2e`, and +`comparison-3de5b36f23a24869aec2f5364a558734/evidence.json` with the exact compiler +response, binary/source hashes, and per-probe expected/actual output. Replay +setup initially encountered an absent optional published PDB and pruned +execution-root dependency links; materializing `//:server_client_tests` restored +the latter. Neither setup failure is counted as a failing behavioral assertion. +The checked bootstrap SHA-256 is +`5CDA88211A9E8FC506E86C1D85347D20C5E391745BC36D158B9DA7D198A16705`; +the comparison response SHA-256 is +`A95ED4BA29C31F70FCC0F9D6BECE474262F73CDF81915FD485A7DA6667C13ABA`. diff --git a/docs/dev-guide.md b/docs/dev-guide.md index be619a660a..94a763147f 100644 --- a/docs/dev-guide.md +++ b/docs/dev-guide.md @@ -50,6 +50,11 @@ This will update your fork with the latest from `microsoft/testfx` on your machi ## Building +An [experimental native Bazel build](bazel.md) is available for the portable +.NET 8-11 development graph, selected test suites, and native MTP/TRX package +consumers. It does not replace the MSBuild/Arcade shipping build or its complete +framework/workload and acceptance matrix. + The easiest and recommended solution is to build the repository with the provided scripts at the repo root. For Windows: diff --git a/eng/bazel.ps1 b/eng/bazel.ps1 new file mode 100644 index 0000000000..dfed9a4d73 --- /dev/null +++ b/eng/bazel.ps1 @@ -0,0 +1,80 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT license. See LICENSE file in the project root for full license information. + +#requires -Version 7.2 + +# Quote '--' when calling this PowerShell script so PowerShell forwards the separator. +$ErrorActionPreference = 'Stop' +$root = Split-Path $PSScriptRoot -Parent +$version = (Get-Content -LiteralPath (Join-Path $root '.bazelversion') -Raw).Trim() +if ($version -ne '9.1.1') { + throw 'Update the verified Bazel bootstrap hashes when changing .bazelversion.' +} + +if (-not ($IsWindows -or $IsMacOS -or $IsLinux)) { + throw 'The Bazel bootstrap supports Windows, Linux, and macOS.' +} + +$platform = if ($IsWindows) { 'windows-x86_64.exe' } elseif ($IsMacOS) { 'darwin-arm64' } else { 'linux-x86_64' } +$architecture = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString() +if (($IsMacOS -and $architecture -ne 'Arm64') -or (-not $IsMacOS -and $architecture -ne 'X64')) { + throw "The Bazel bootstrap does not support this OS/architecture ($architecture). Install Bazelisk and use .bazelversion." +} + +$hashes = @{ + 'windows-x86_64.exe' = '65f3484025c95a9f93647fd6edb84b19c15c67d5265d364f17843fd12c5d28fe' + 'linux-x86_64' = '857bed5d2756b4d998d3caebf2d941d13d434c4eda4b1d6d7dda205736c25a93' + 'darwin-arm64' = '2db883718453f0437a7bcb408e889dbf8539cdc4d61c8ebc3807a1a88d02ff08' +} +$tools = Join-Path $root 'artifacts\bazel-tools' +$executable = Join-Path $tools "bazel-$version-$platform" +if (-not (Test-Path -LiteralPath $executable)) { + New-Item -ItemType Directory -Path $tools -Force | Out-Null + $download = "$executable.$([Guid]::NewGuid().ToString('N')).download" + try { + Invoke-WebRequest "https://github.com/bazelbuild/bazel/releases/download/$version/bazel-$version-$platform" -OutFile $download + if ((Get-FileHash -LiteralPath $download -Algorithm SHA256).Hash -ne $hashes[$platform]) { + throw 'Downloaded Bazel failed SHA-256 verification.' + } + + Move-Item -LiteralPath $download -Destination $executable -Force + } + finally { + if (Test-Path -LiteralPath $download) { + Remove-Item -LiteralPath $download + } + } +} + +if ((Get-FileHash -LiteralPath $executable -Algorithm SHA256).Hash -ne $hashes[$platform]) { + throw "Bazel failed SHA-256 verification: $executable" +} + +if (-not $IsWindows) { + & chmod +x $executable + if ($LASTEXITCODE -ne 0) { + throw 'Unable to make the Bazel executable runnable.' + } +} + +Push-Location $root +try { + # Windows cannot execute long .bat paths; isolate each worktree under a short root. + $identity = [Convert]::ToHexString([System.Security.Cryptography.SHA256]::HashData([System.Text.Encoding]::UTF8.GetBytes($root))).Substring(0, 12).ToLowerInvariant() + $outputRoot = if ($env:TESTFX_BAZEL_OUTPUT_ROOT) { + $env:TESTFX_BAZEL_OUTPUT_ROOT + } + elseif ($IsWindows) { + Join-Path ([System.IO.Path]::GetPathRoot($root)) "tfb\$identity" + } + else { + Join-Path ([System.IO.Path]::GetTempPath()) "tfb-$identity" + } + & $executable "--output_user_root=$outputRoot" --max_idle_secs=120 @args + $exitCode = $LASTEXITCODE +} +finally { + Pop-Location +} + +exit $exitCode diff --git a/eng/bazel/.gitignore b/eng/bazel/.gitignore new file mode 100644 index 0000000000..ef001d3c41 --- /dev/null +++ b/eng/bazel/.gitignore @@ -0,0 +1 @@ +paket-files/ diff --git a/eng/bazel/AnalyzerPackageConsumer.cs b/eng/bazel/AnalyzerPackageConsumer.cs new file mode 100644 index 0000000000..ad7dd15fbe --- /dev/null +++ b/eng/bazel/AnalyzerPackageConsumer.cs @@ -0,0 +1,152 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.Loader; +using System.Runtime.Versioning; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeActions; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.Diagnostics; +using Microsoft.CodeAnalysis.Text; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +if (args.Length != 3) +{ + throw new ArgumentException("Expected the extracted analyzer package, C# consumer source, and supported Roslyn assembly version."); +} + +string packageDirectory = Path.GetFullPath(args[0]); +Version expectedApi = Version.Parse(args[2]); +Assert.AreEqual(expectedApi, typeof(Compilation).Assembly.GetName().Version); +Assert.AreEqual(expectedApi, typeof(CSharpCompilation).Assembly.GetName().Version); +Assert.AreEqual(expectedApi, typeof(Workspace).Assembly.GetName().Version); + +Assembly analyzerAssembly = LoadPackageAssembly("MSTest.Analyzers"); +Assembly fixesAssembly = LoadPackageAssembly("MSTest.Analyzers.CodeFixes"); +Type[] analyzerTypes = analyzerAssembly.GetExportedTypes(); +Type[] fixerTypes = fixesAssembly.GetExportedTypes(); +Assert.IsGreaterThan(0, analyzerTypes.Count(type => typeof(DiagnosticAnalyzer).IsAssignableFrom(type))); +Assert.IsGreaterThan(0, fixerTypes.Count(type => typeof(CodeFixProvider).IsAssignableFrom(type))); + +if (Activator.CreateInstance(analyzerAssembly.GetType("MSTest.Analyzers.TypeContainingTestMethodShouldBeATestClassAnalyzer", throwOnError: true)!) is not DiagnosticAnalyzer analyzer + || Activator.CreateInstance(fixesAssembly.GetType("MSTest.Analyzers.AddTestClassFixer", throwOnError: true)!) is not CodeFixProvider fixer) +{ + throw new InvalidOperationException("The package did not supply the expected analyzer and code fix."); +} + +DiagnosticDescriptor rule = analyzer.SupportedDiagnostics.Single(); +Assert.AreEqual("MSTEST0030", rule.Id); +CultureInfo french = CultureInfo.GetCultureInfo("fr"); +string englishTitle = rule.Title.ToString(CultureInfo.GetCultureInfo("en")); +string frenchTitle = rule.Title.ToString(french); + +string trustedAssemblies = (string?)AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES") + ?? throw new InvalidOperationException("The consumer runtime did not supply platform references."); +IEnumerable references = trustedAssemblies.Split(Path.PathSeparator) + .Append(typeof(TestClassAttribute).Assembly.Location) + .Distinct(StringComparer.OrdinalIgnoreCase) + .Select(path => MetadataReference.CreateFromFile(path)); + +using var workspace = new AdhocWorkspace(); +Project project = workspace.AddProject("PackageConsumer", LanguageNames.CSharp) + .WithCompilationOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)) + .WithMetadataReferences(references); +Document document = project.AddDocument("MissingTestClass.cs", SourceText.From(File.ReadAllText(args[1]))); +Compilation compilation = await GetCompilationAsync(document); +ImmutableArray diagnostics = await compilation.WithAnalyzers(ImmutableArray.Create(analyzer)).GetAnalyzerDiagnosticsAsync(); +Assert.HasCount(1, diagnostics); +Assert.AreEqual("MSTEST0030", diagnostics[0].Id); +Assert.AreEqual(DiagnosticSeverity.Warning, diagnostics[0].Severity); + +List actions = []; +CultureInfo previousCulture = CultureInfo.CurrentUICulture; +try +{ + CultureInfo.CurrentUICulture = french; + await fixer.RegisterCodeFixesAsync(new CodeFixContext(document, diagnostics[0], (action, _) => actions.Add(action), CancellationToken.None)); +} +finally +{ + CultureInfo.CurrentUICulture = previousCulture; +} + +Assert.HasCount(1, actions); +ImmutableArray operations = await actions[0].GetOperationsAsync(CancellationToken.None); +ApplyChangesOperation change = operations.OfType().Single(); +Document fixedDocument = change.ChangedSolution.GetDocument(document.Id) + ?? throw new InvalidOperationException("The code fix removed the consumer document."); +SyntaxNode root = await fixedDocument.GetSyntaxRootAsync() + ?? throw new InvalidOperationException("The code fix produced no syntax root."); +string expected = """ + using Microsoft.VisualStudio.TestTools.UnitTesting; + + [assembly: DoNotParallelize] + [TestClass] + public class MissingTestClass + { + [TestMethod] + public void Test() + { + } + } + """; +Assert.AreEqual(Normalize(expected), Normalize(root.NormalizeWhitespace().ToFullString())); +Compilation fixedCompilation = await GetCompilationAsync(fixedDocument); +Assert.IsEmpty(await fixedCompilation.WithAnalyzers(ImmutableArray.Create(analyzer)).GetAnalyzerDiagnosticsAsync()); + +Console.WriteLine(JsonSerializer.Serialize(new +{ + RoslynVersion = typeof(Compilation).Assembly.GetName().Version!.ToString(), + AnalyzerPath = analyzerAssembly.Location, + AnalyzerVersion = analyzerAssembly.GetCustomAttribute()?.InformationalVersion, + CodeFixPath = fixesAssembly.Location, + CodeFixVersion = fixesAssembly.GetCustomAttribute()?.InformationalVersion, + AnalyzerTypeCount = analyzerTypes.Count(type => typeof(DiagnosticAnalyzer).IsAssignableFrom(type)), + CodeFixTypeCount = fixerTypes.Count(type => typeof(CodeFixProvider).IsAssignableFrom(type)), + DiagnosticId = diagnostics[0].Id, + EnglishTitle = englishTitle, + FrenchTitle = frenchTitle, + FrenchCodeFix = actions[0].Title, + FixedSource = Normalize(root.NormalizeWhitespace().ToFullString()), +})); + +Assembly LoadPackageAssembly(string name) +{ + string path = Path.Combine(packageDirectory, "analyzers", "dotnet", "cs", name + ".dll"); + Assembly assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(path); + Assert.AreEqual(path, assembly.Location); + Assert.AreEqual(".NETStandard,Version=v2.0", assembly.GetCustomAttribute()?.FrameworkName); + AssemblyName[] roslynReferences = assembly.GetReferencedAssemblies() + .Where(reference => reference.Name!.StartsWith("Microsoft.CodeAnalysis", StringComparison.Ordinal)) + .ToArray(); + Assert.IsGreaterThan(0, roslynReferences.Length); + foreach (AssemblyName reference in roslynReferences) + { + Assert.AreEqual(expectedApi, reference.Version, reference.FullName); + } + + return assembly; +} + +static async Task GetCompilationAsync(Document document) +{ + Compilation compilation = await document.Project.GetCompilationAsync() + ?? throw new InvalidOperationException("The package consumer did not produce a compilation."); + Assert.IsEmpty(compilation.GetDiagnostics().Where(diagnostic => diagnostic.Severity == DiagnosticSeverity.Error).ToArray()); + return compilation; +} + +static string Normalize(string text) + => text.Replace("\r\n", "\n", StringComparison.Ordinal).TrimEnd(); diff --git a/eng/bazel/AnalyzerReferencePackMetadata.cs b/eng/bazel/AnalyzerReferencePackMetadata.cs new file mode 100644 index 0000000000..043c4d7bc9 --- /dev/null +++ b/eng/bazel/AnalyzerReferencePackMetadata.cs @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +#if NET11_0 +// Match the explicit native Bazel toolchain, not the separate Arcade engineering SDK. +[assembly: System.Reflection.AssemblyMetadata("Net11RuntimeVersion", "11.0.0-rc.3.26522.148")] +#endif diff --git a/eng/bazel/BUILD.bazel b/eng/bazel/BUILD.bazel new file mode 100644 index 0000000000..5cf3205eaa --- /dev/null +++ b/eng/bazel/BUILD.bazel @@ -0,0 +1,83 @@ +load("@rules_dotnet//dotnet:defs.bzl", "csharp_binary", "csharp_library", "dotnet_tool") +load(":defs.bzl", "TESTFX_PUBLIC_KEY_FILE") + +package(default_visibility = ["//visibility:public"]) + +exports_files([ + "AnalyzerReferencePackMetadata.cs", + "CompatibilityConsumer.cs", + "CompatibilityFrameworkMetadata.cs", + "GlobalConfigsEnvironment.cs", + "GlobalUsings.cs", + "NativeUnitTestMain.cs", + "PortableTestFrameworkMetadata.cs", + "RuntimeProvenance.cs", + "ServerClientTestMain.cs", + "TestMain.cs", + "analyzers.globalconfig", + "paket.dependencies", + "paket.lock", + "reflection-free.globalconfig", +]) + +csharp_binary( + name = "build_tools", + srcs = [ + "BuildTools.cs", + "GlobalUsings.cs", + ], + generate_documentation_file = False, + nullable = "enable", + target_frameworks = ["net10.0"], + treat_warnings_as_errors = True, +) + +csharp_library( + name = "runfiles", + srcs = ["@rules_dotnet//tools/runfiles:Runfiles.cs"], + out = "runfiles", + compiler_options = ["/publicsign+"], + keyfile = TESTFX_PUBLIC_KEY_FILE, + target_frameworks = ["netstandard2.0"], +) + +csharp_binary( + name = "sdk_package_tool", + srcs = [ + "GlobalUsings.cs", + "SdkPackageTool.cs", + ], + generate_documentation_file = False, + nullable = "enable", + target_frameworks = ["net10.0"], + treat_warnings_as_errors = True, +) + +csharp_binary( + name = "writable_test_launcher", + srcs = [ + "GlobalUsings.cs", + "WritableTestLauncher.cs", + ], + generate_documentation_file = False, + nullable = "enable", + target_frameworks = ["net10.0"], + treat_warnings_as_errors = True, +) + +dotnet_tool( + name = "paket", + entrypoint = {"net10.0": "paket.dll"}, + runner = {"net10.0": "dotnet"}, + target_frameworks = ["net10.0"], + deps = "@paket_cli//:tools", +) + +csharp_binary( + name = "mstest_package_version", + srcs = ["MSTestPackageVersion.cs"], + generate_documentation_file = False, + nullable = "enable", + target_frameworks = ["net10.0"], + treat_warnings_as_errors = True, +) diff --git a/eng/bazel/BuildTools.cs b/eng/bazel/BuildTools.cs new file mode 100644 index 0000000000..2bee8a0a65 --- /dev/null +++ b/eng/bazel/BuildTools.cs @@ -0,0 +1,202 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Resources; +using System.Text.Json; + +if (args.Length == 5 && args[0] == "resx") +{ + GenerateResources(args[1], args[2], args[3], args[4]); +} +else if (args.Length == 5 && args[0] == "xlf") +{ + GenerateTranslations(args[1], args[2], args[3], args[4]); +} +else if (args.Length == 11 && args[0] == "metadata") +{ + GenerateMetadata(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]); +} +else if (args.Length == 4 && args[0] == "version") +{ + string version = ReadVersion(args[1], args[2]); + _ = Version.Parse(version); + File.WriteAllText(args[3], ExperimentalVersion(version), Encoding.UTF8); +} +else +{ + throw new ArgumentException("Expected resx , xlf , version , or metadata