{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"id":"D11","name":"Test Reliability","shortDescription":{"text":"Test Reliability"},"helpUri":"https://codehealth.canine.dev/dimensions/D11"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D18","name":"Solution Shape","shortDescription":{"text":"Solution Shape"},"helpUri":"https://codehealth.canine.dev/dimensions/D18"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D23","name":"Boundary Type-Coupling","shortDescription":{"text":"Boundary Type-Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D23"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D27","name":"Navigability","shortDescription":{"text":"Navigability"},"helpUri":"https://codehealth.canine.dev/dimensions/D27"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"D39","name":"IL Efficiency","shortDescription":{"text":"IL Efficiency"},"helpUri":"https://codehealth.canine.dev/dimensions/D39"}]}},"results":[{"ruleId":"D2","level":"warning","message":{"text":"RetryResilienceStrategy.ExecuteCore (cognitive 25): RetryResilienceStrategy.ExecuteCore has cognitive complexity 25 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Retry/RetryResilienceStrategy.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"59227b7f95e90dbdde21234a8cb1d4a42732557611d6ee926baeccae19e68373"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncRetryEngine.ImplementationAsync (cognitive 21): AsyncRetryEngine.ImplementationAsync has cognitive complexity 21 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Retry/AsyncRetryEngine.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8406c1125e1c2bf05702948684f5ddcfdd7ccc02f4344298935cc6de40c7025"}},{"ruleId":"D2","level":"warning","message":{"text":"RetryEngine.Implementation (cognitive 21): RetryEngine.Implementation has cognitive complexity 21 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Retry/RetryEngine.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3779bec2e4f933d625264a655633b3b115e6c1fb4b417a6a499ee177e5ad46d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Policy: TooManyMethods \u2014 1573 significant lines (blank, comment-only and punctuation-only lines excluded), 260 methods, declared across 27 files: Caching/AsyncCacheTResultSyntax.cs (31), Caching/CacheTResultSyntax.cs (30), Timeout/AsyncTimeoutSyntax.cs (25), Timeout/AsyncTimeoutTResultSyntax.cs (25), \u002B23 more file(s). The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Caching/AsyncCacheTResultSyntax.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff3ac0a39064d577f1517e24f7ab17aeddb02e73f4501e2465adcd03cd42cb14"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncPolicy: TooManyMethods \u2014 202 significant lines (blank, comment-only and punctuation-only lines excluded), 48 methods, declared across 5 files: Polly/AsyncPolicy.ExecuteOverloads.cs (40), Polly/AsyncPolicy.ContextAndKeys.cs (2), Polly/AsyncPolicy.NonGenericImplementation.cs (2), Polly/AsyncPolicy.cs (2), \u002B1 more file(s). The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/AsyncPolicy.ExecuteOverloads.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0510a637c2f2dc3beff4f448ea02655e40a616980fa2ffc70f6079d351f81772"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): src/Polly/Utilities/Wrappers/ResiliencePipelineSyncPolicy.cs:35-53 | src/Polly/Utilities/Wrappers/ResiliencePipelineSyncPolicy.TResult.cs:11-29 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Polly/Utilities/Wrappers/ResiliencePipelineSyncPolicy.cs:35\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Utilities/Wrappers/ResiliencePipelineSyncPolicy.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2163e86e122ba40ba7ce333a94791154d38cdc4b118bfa829fefacdd5c8b95e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/Polly.Core/CircuitBreaker/CircuitBreakerManualControl.cs:72-86 | src/Polly.Core/CircuitBreaker/CircuitBreakerManualControl.cs:102-116 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Polly.Core/CircuitBreaker/CircuitBreakerManualControl.cs:72\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/CircuitBreaker/CircuitBreakerManualControl.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cb5e0978d9d3ce92825f1067fc8d981854de85dbc3dfb7b061539a194207549"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/Polly.Core/Simmy/ChaosStrategy.cs:17-23 | src/Polly.Core/Simmy/ChaosStrategy.TResult.cs:21-27 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Polly.Core/Simmy/ChaosStrategy.cs:17\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Simmy/ChaosStrategy.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa116c7f5dbb2a66ab7bfa22810f24f3754d869d2d9c6c2332160efc86d221bb"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Polly.Core(net8.0): Polly.Core(net8.0): abstractness 0.13, instability 0.00, distance 0.88 \u2014 zone of pain \u2014 concrete and depended on by 4 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"49027c5d584984624e4bea1739fb7e1667caa13ee3875897b1289ed1e6510a7f"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 no coverage collector is wired up: Coverage NOT MEASURED: the test suite built and its tests PASSED, but the run produced no coverage data \u2014 \u0060--collect:\u0022XPlat Code Coverage\u0022\u0060 found no data collector, which is what a test project with no \u0060coverlet.collector\u0060 PackageReference does. Nothing is wrong with the suite or the build; there is simply no coverage instrumentation wired up. Add a \u0060coverlet.collector\u0060 PackageReference to the test project(s) (or commit the Cobertura/OpenCover/lcov report your CI produces) and real coverage will be measured. It is excluded from the score rather than counted as a near-zero defect."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: AddRateLimiter_Extensions_Ok: Skipped \u2014 https://github.com/stryker-mutator/stryker-net/issues/2144"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.RateLimiting.Tests/RateLimiterResiliencePipelineBuilderExtensionsTests.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6ccdaede08f57720cde1bb1466939a910b8de47853c7c13b0ad4ba4135475b5"}},{"ruleId":"D12","level":"warning","message":{"text":"Deprecated: xunit: xunit 2.9.3 \u2014 Legacy \u2014 the publisher\u0027s replacement is \u0060xunit.v3\u0060; migrate the reference to it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d37c8c0e8046c9e8358e976373216abfb78e9fdef63ed53d3edcaa7d2238edcd"}},{"ruleId":"D12","level":"warning","message":{"text":"Prerelease dependency: StyleCop.Analyzers: StyleCop.Analyzers resolves to 1.2.0-beta.556, a prerelease build. Prerelease packages carry no support policy, may change breaking between previews and can be unlisted \u2014 pin a stable release before shipping, or record the reason this preview is required."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"40091d304d6fdd6429c18ce9fa4a5f5c1ba9310a235a6ebdee8af2127ed2764e"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 1 significant file(s) lose their only recent owner: src/Polly.Core/ResiliencePipelineBuilderBase.cs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3f605e1ec99c6fd8ebb17f8712f23ae1814f8b037bbc2ba578f238b25eca4100"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj \u2014 7 warning codes suppressed in one element: A single \u003CNoWarn\u003E suppresses 7 warning codes (CA1031;CA1062;CA1064;CA1303;CA1848;CA2000;CA2007) in one stroke \u2014 one team-wide decision, not 7 independent debts. Review the set centrally rather than code-by-code; each code you can re-enable is one less blanket suppression. (Every code still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"95d5939e7f24e54ecd7b1e3809883b571c245732dd7f64824f6cd33b5bf804f7"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj \u2014 9 warning codes suppressed in one element: A single \u003CNoWarn\u003E suppresses 9 warning codes (SA1123;SA1515;CA2000;CA2007;CA1303;IDE0021;RS0037;RS0016;CS1591) in one stroke \u2014 one team-wide decision, not 9 independent debts. Review the set centrally rather than code-by-code; each code you can re-enable is one less blanket suppression. (Every code still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"samples/Directory.Build.props"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb45e5a77876badc8a143978bab6849b3e0cf34130f07680c9c6a3d18dc18e1"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S2190 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"bench/Polly.Benchmarks/Workloads.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd5dcedc146f5a103f9e09c93c8e184750b0393b6bb1331d54025227531d7ed1"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE0079 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/CallerArgumentExpressionAttribute.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"22aefd068e54c9da4b07e0a93829e592a176cce1e5231144563c633e44949bfd"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE0079 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/IsExternalInit.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d818b735073963b30cb0bfdb5b62a95de8302d881dc795741a92deb3719100e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE0079 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"3731434c0cca187f2d1e668267e25cd8c7d636e3223c70fdbed41e8138cd20d2"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE0079 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"96bfc5ea903c07058f37fcd75156ff78f72b3e167ca451ecfe10a7b555b5a585"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1101 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/CallerArgumentExpressionAttribute.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"8666ac5a6f4e9e47584ddde6110136b5e59c4169f7798befb41f549dd5786bc4"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1101 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicDependencyAttribute.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e76961eebc23c1b82c676039fa99c1b0f59995ac0d189aba2a42cc7ddb5ac8c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1101 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMembersAttribute.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"2089835957868acedb019fe2cbe2afbb19550948b8815f5071099eb8102b66f4"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1101 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"cec2ab8a3c0546d6a8138a3f2b5c04854261e3df0a9bf1b0f6696089da55f9c4"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1101 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/RequiresUnreferencedCodeAttribute.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f2abca2885b254e7c380202f4a8b38011a093ff9f8a64aa2cab26da01414568"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1101 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/UnconditionalSuppressMessageAttribute.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"e86faf7b13c65890192e95a1f3c47a28b560750d2d4587b32f753257100f7214"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1512 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/CallerArgumentExpressionAttribute.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b8d5bdbb18d8ad8072786bfb8ea24163ee38ec4d37206d2296e78700bc3c21"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1512 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicDependencyAttribute.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec6d1700aa126c7a55c691666430d2dea9a94aa5d2e832f9fc78e159a0f1c686"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1512 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMemberTypes.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"35e6e23055fafa7c79f250d62fa09732dd6457393f2f09940d17431f174c91f8"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1512 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMembersAttribute.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"5455fd0173e1c26fa5f22aaa4e4921def1c6b5b17f3f5a83632b73d610ab81fa"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1512 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7771014e2aab09d9a2759ffb05c146e4d0bf4ae2c8db96a21aaf5e88533b81a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1512 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/RequiresUnreferencedCodeAttribute.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"89bd2ea6b46dc89b7d0f415b0be00a829cf7279e6d54756011a5c54ace86a5c4"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1512 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/UnconditionalSuppressMessageAttribute.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"2386c8756d67e70102937f67299f899660bcb1cde1cb1a375167a51ed59ebc0c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1116 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicDependencyAttribute.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ebb02732e9c54f8e357466fed95f620d3e12ae44826517bdf79f025ca8454ad"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1116 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMembersAttribute.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"844923293be171034eb802c933410c6f8c9120c991340d3f0860d98d53ecc6de"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1116 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"07fe404adfda0dc54448df58fe3bf103f0351df4909fd850d8a151c77d90cd59"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1116 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/RequiresUnreferencedCodeAttribute.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"93c12aca1259d1b0a6083dca11260ed6b46ce17bbfabab4830048d86c501a3b6"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1116 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/UnconditionalSuppressMessageAttribute.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a7d8b834821bb5db33fe6410907745375c49592a81d7410ff5f0df8cb74527f"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1117 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicDependencyAttribute.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"f36232edcff9a9dccd1e42f53f05e3f0e9c9c82466a553474d757988874928ab"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1117 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMembersAttribute.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"567b71065f4be62a57af6aa578ae4116c09f3152660ada40720d41f5e2368855"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1117 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5840c6e6e0a41dd1893750c23251bc12bf8f7b8f33d7aba60f00ea02cb773c8"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1117 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/RequiresUnreferencedCodeAttribute.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"61a470abddc8ce4626c698afaa017ffcd9e4f2b2081aea1e515475cde85506fd"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1117 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/UnconditionalSuppressMessageAttribute.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"77de6522047658dde167f785e44eee81feceb72bda5928ac9d181f78c75386de"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1623 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicDependencyAttribute.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ba33850391ff3a3cb38a263a2e9d1b59a4d0e2dd2cb64e4f5ac39bbb16d5dda"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1623 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMembersAttribute.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"e980f777ad35e6c927d74986bb325a5b90b5ae9b4ff51e68036e3d4cc80ab09e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1623 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"53b79858e296497a3f30bf1261b14c7d6d87f6c189a0f535834322af2a7d0155"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1623 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b645e83f725ee87d5706523a952f0e381d5ef8d9d79d9022cb1fdb59180590d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1623 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/RequiresUnreferencedCodeAttribute.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ad0710f709f88a26f05d06ac2c297cd6437391d33d123d92a65bcad3829a0a9"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1623 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/UnconditionalSuppressMessageAttribute.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d1fe2a67a985dc62721b8ed8c3be15140c35b13d0f94fbabccd659626cdcc24"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1642 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicDependencyAttribute.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c56f3767fd76cfeb021c8b1833a63e1c52a3d7bfbdb922440284668cb0920d6"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1642 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMembersAttribute.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"becb5a85772ac31bb981b1e7be2531fa106e0000ddc200bfe269bbe074e352c6"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1642 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"08cf0044f7ad3a1c368c3395c23dec58cd208dbe35764271f2f063a628f08f5a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1642 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d18d31c45a693c8ead967ad12bee0ef1e772444e4e959d99d633aa5ce10bee"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1642 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/RequiresUnreferencedCodeAttribute.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"04bd1289709f70d491fbe55485ad0fc0e27f8567397e9c1088d4f0037bb92027"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1642 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/UnconditionalSuppressMessageAttribute.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"017f02efe2493164853170d9d8dfca085b67532b53f933f63d6808ae02507c8c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3903 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicDependencyAttribute.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9694559dfc6dd52d101696efa0a7bdc6f2e5e3281ebeefe8f346c4ea7f07f83"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3903 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMembersAttribute.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"405a98df4f0fe88b86999819c7c2763e2c625fb4e983f4cd59780ca8babd420d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3903 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/IsExternalInit.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5322da76ce9e6e764b047576dfb36f77e6d76d38418da4f352f445593493820"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3903 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"3465867ef42b029103234bcdae9fe4df17f3a59dc04bbc10458528cc078d85d0"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3903 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/RequiresUnreferencedCodeAttribute.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeb27675e6f1ef7e1087ebea66970700642b7ba86fb6f6a0889f2e781c50042b"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3903 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/UnconditionalSuppressMessageAttribute.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"8777a8340a5b0440e6ed3b3ed3a02535d71da9e26fb9c11594200964d716cb84"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2217 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMemberTypes.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"b25823d492c05557166e79d9f3801c5c8aec5d9c2abcdac46303b37ceb67e1f7"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1413 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMemberTypes.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"94e60728225cc830423db03fc50ac13d14e1c056ed4849a53e1752d9937a4232"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S4070 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/DynamicallyAccessedMemberTypes.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"765dba340c5807569dfdf07ade53950b48b10fdaeccfc8660c03252de65b0ca5"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1402 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"2703ee6b222255014001b6e7645cf45d86473130aa609609d0a00756c9f95648"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1649 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5c2cb3168506d95eaaebd19a356e173513a1c2e6745f4e028edd7bb73ed72d0"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1019 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/NullableAttributes.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6047a6ab3dfe42018aeb0b189ebb1792e8c1af2c47d70ff0a65f4630bc2f52"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3996 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LegacySupport/RequiresUnreferencedCodeAttribute.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"175d2fb4a6e4e22aa91bc21944dd6e636997afc54329f4b080d0f61100082785"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated across 38 files: The identical BarePragmaDisable (\u0060#pragma warning disable CA1815 // Override equals and operator equals on value types\u0060) appears in 38 files (38 occurrences) \u2014 a single repo-wide policy (e.g. a Directory.Build.props decision or an idiomatic suppression), not 38 independent debts. Decide it once centrally rather than file-by-file. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/CircuitBreaker/BreakDurationGeneratorArguments.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cf9120402e864fba169ff3c13ecc83679a7013280a61e581a3f0033e4981601"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated 13 times in 9 files: The identical BarePragmaDisable (\u0060#pragma warning disable CA1031\u0060) appears 13 times in 9 files \u2014 one decision applied repeatedly (e.g. the same rule silenced on every overload of a fluent API), not 13 independent debts. Decide it once \u2014 at the type or project level, or by fixing the underlying pattern \u2014 rather than occurrence-by-occurrence. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/CircuitBreaker/CircuitBreakerResilienceStrategy.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"4429240ea96f881459a75d8a31a0c625ce3af07add5598848a97d68a816f2c15"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S107 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/CircuitBreaker/Controller/CircuitStateController.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c1cc6bb6275612ea6a975d25f76bb7f7db19cc6e7f5c3d07f3465e43d6e4e0"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2012 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/CircuitBreaker/Controller/CircuitStateController.cs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2f4baefc7264781001d1d56e01a8a2a888515792beb153b06cb927a911d63cf"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S1226 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/CircuitBreaker/Controller/CircuitStateController.cs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"242d5dba234d24ff72239a8ff0eedc1bc684a1ecdae83b44c7bfdfda717081a5"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated across 12 files: The identical BarePragmaDisable (\u0060#pragma warning disable CA1031 // Do not catch general exception types\u0060) appears in 12 files (12 occurrences) \u2014 a single repo-wide policy (e.g. a Directory.Build.props decision or an idiomatic suppression), not 12 independent debts. Decide it once centrally rather than file-by-file. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/CircuitBreaker/Controller/ScheduledTaskExecutor.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"d99a360055983c2e9359f3e3f476eddc199c075a10d983e8402b2610e0fe7ea8"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2225 // Operator overloads have named alternates \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/PredicateBuilder.Operators.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"dead1b3181da3095df320cd7ac4671fa078ed7aa656be591c95d403822b3be30"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2225 // Operator overloads have named alternates \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Simmy/Fault/FaultGenerator.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7d9c41b7316062088f82ff9567a0d4aa574cc1e89024c9382406526c257d035"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2225 // Operator overloads have named alternates \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Simmy/Outcomes/OutcomeGenerator.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"96ad15f4d830dfc710a47a2b419de70a02261ec5634c114ddbbf80ba0b4c0363"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0026 // Do not add multiple public overloads with optional parameters \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/ResilienceContextPool.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5ab25c8cbf3a483aa3e52aeef7b6856bb4aa6e9f728604eac359edc160904a7"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0026 // Do not add multiple public overloads with optional parameters \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Simmy/Fault/FaultGenerator.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"a573936f79382de6d8de2a1e69f3df75cc2d269535f1aee9e88affc96348e5f3"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0026 // Do not add multiple public overloads with optional parameters \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Simmy/Outcomes/OutcomeGenerator.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"a472fd3d6c4b09b11edec10b411eadc7048d028be3a517d188ad8c9e1217aa85"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1716 // Identifiers should not match keywords \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/ResilienceContextPool.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"cea32a178554a173a684d15cba109a5752304bb482d17902a1641df8112ec3ff"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1716 // Identifiers should not match keywords \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Utils/CancellationTokenSourcePool.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"03895b6d6b0496774710b111ca040e80a3b1c36a82236d024894135dd482358a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0027 // API with optional parameter(s) should have the most parameters amongst its public overloads \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/ResiliencePipeline.Async.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe462c5ad0dbafd9df265a95f94a647f9b1d65eafd940b0d9f0abe956b26f9c8"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0027 // API with optional parameter(s) should have the most parameters amongst its public overloads \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/ResiliencePipeline.AsyncT.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"55c098f8435f3732bb0214ff6c0ff83b1eebed9fab63ee07b6b9c2f99b14a1ec"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0027 // API with optional parameter(s) should have the most parameters amongst its public overloads \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/ResiliencePipeline.Sync.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ce2ef675cd9aee014db9991a0f1ffddcf6a7cd27e6e0b88729a23b9d2eab0a5"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0027 // API with optional parameter(s) should have the most parameters amongst its public overloads \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/ResiliencePipeline.SyncT.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"b37940910a73cfef7aa2f69d70684b8a8bfd8b029d0ac877be985db8fc75731f"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0027 // API with optional parameter(s) should have the most parameters amongst its public overloads \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/ResiliencePipelineT.Async.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2a42216667b366e9ff2e5eade45806ad1e327faa16a1847805a415c5f4835f6"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0027 // API with optional parameter(s) should have the most parameters amongst its public overloads \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/ResiliencePipelineT.Sync.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac7f7a2e42c7d547efa24e9d402e0b54dcecce4dd790d0873a4c3fce22483fd0"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S6966 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Timeout/TimeoutResilienceStrategy.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4919776a7a7245303a598df14e4ed9359284b7bf6a137c462dc846e451c0807"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S6966 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.RateLimiting.Tests/RateLimiterResilienceStrategyTests.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"a73303c0cb1b5fbc488ea3eb4d107a03984131592cee49cf8a119f94f5f11af8"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Narrow the catch to the exception you actually expect, record it through whatever this codebase already uses to report problems, or \u2014 where swallowing really is correct, as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 write down WHY in a comment on the catch. The comment has to give the reason: a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all and leaves this row in place. Any of the three makes the decision reviewable; all three clear this row."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Utils/DisposeHelper.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"199bc2e603d31abf54fa4c21faefec86fbac160b10f2ff19065f5c629f5c9022"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA5394 // Do not use insecure randomness \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Utils/RandomUtil.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d9267a9dfbe90a53f5ac47d06d4d59b9336163c4fa887c2423d43cf912e9bbb"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA5394 // Do not use insecure randomness \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Docs/Chaos.Fault.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e271d1d84a8a34019135f2e6a79e22989cb400e2a437af1d3b04bd53f2c8fa9"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA5394 // Do not use insecure randomness \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Docs/Chaos.Outcome.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5da41dfff38bda0cf14ed74ca106df1c504ac8ab9020e8e784d7d6682558d05"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S2245 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Utils/RandomUtil.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"22bcd26e7f424dd816cb40f1bd1b348f64dd4149243f7b5d94e584ac9b3945d7"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3236 // Remove this argument from the method call; it hides the caller information. \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Utils/TaskHelper.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"de1497e7dc8664f634f80a67e5164b0b8e7dc752a648e24e9b311cbffabb9b5e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated 25 times in 5 files: The identical BarePragmaDisable (\u0060#pragma warning disable CA1068\u0060) appears 25 times in 5 files \u2014 one decision applied repeatedly (e.g. the same rule silenced on every overload of a fluent API), not 25 independent debts. Decide it once \u2014 at the type or project level, or by fixing the underlying pattern \u2014 rather than occurrence-by-occurrence. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/AsyncPolicy.GenericImplementation.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"c772ab999cb7deb35ab732d03b8a301671f1f207ccc4a72c6160afa6d7ee7f51"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1063 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/AsyncBulkheadPolicy.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c77a42832c9920561238d761e5d1d84d74dea051d17ad38adf0e104bc6838b3"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1063 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/AsyncBulkheadPolicy.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"b499481505a8059293872c5d871deecf588e9b149d06e0a9ba284015eaee664b"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1063 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/AsyncBulkheadPolicy.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe7a6b1faec20798039ee3b8abc6fc0bab4a90aa0137cb338cb176a0f41bf75d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1063 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/AsyncBulkheadPolicy.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"fea2ea51ec8671333c81e5d3f796daf539ee7b36aa1d683e8051b28a4cda11ca"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1063 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/BulkheadPolicy.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"483cd8921a351756b44c0178bf269cb306c930f554d746d03da617cf86ea8bfb"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1063 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/BulkheadPolicy.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"061ccd6aaf596a9559062a373ce56a150bc15c5804a1ee63bca2c400df763f79"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1063 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/BulkheadPolicy.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b8a7b1cbb0bf4d0b3a16432c46bba283f32037c00d5a41ca0a179cb979ac57f"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1063 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/BulkheadPolicy.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d5f3a6598ec7f518fe6a4662082d6e74cb6dd166e2c960a4f52f9fbd66d0205"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1724 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Bulkhead/AsyncBulkheadSyntax.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"f12a9c6fe2ae3eed7e85ef08e30bc8e39979b29c0ab373fb8e556ac5a51db056"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1724 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Policy.ContextAndKeys.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdd71684843a3aeda497aba8f6bca19f1f0c4acf98b56cb85fcb867669c17651"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1414 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Caching/IAsyncCacheProvider.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a787ec9261468224211c0314a17c3b02fa6b7b0e686334f0182ab42e6a0e2af"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1414 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Caching/IAsyncCacheProvider.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"341739ab99b27fde55d9225c95f2a73948ccae148d10ef29624b5de63ce6a41e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1414 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Caching/ISyncCacheProvider.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"104b565959604a4701a6cc36dba78b46c80db8d079c52697a987b4f100c4904a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1414 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Caching/ISyncCacheProvider.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"6793d5b234f02f09032de9d3ff3aa87307dd818bd785a17c6c5c99ae09e256ad"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3246 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Caching/ITtlStrategy.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"e63f1aad8b351e5328dc284e738ffb765f1c992d0b9263eae715acb668bd10fc"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable S3246 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/CircuitBreaker/ICircuitBreakerPolicy.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"7515fdab41872e70fce97f1eb15e97320d4a991ce82e75abe0633b7d08f8d8d3"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE1006 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Caching/NonSlidingTtl.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"e16d3640d8322a6f1074ed54e228c4bada07fe9ce3859cb75d54c5f9587a390c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE1006 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/IsPolicy.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"94c69bac192c366ad4dac49c92204bb33d26558dd73e8af2c289d3294626719a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE1006 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/PolicyBase.ContextAndKeys.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3cfba9afce05352175726142f430c6c047506fe38ee2a655334a86ef2daa671"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1010, CA1710 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Context.Dictionary.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"90d85878de58fd61844b86feef4195363a9178207f179465ab214b8be9d7cff0"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0016 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Properties/AssemblyInfo.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec2599d22b9d3ae7147e27d6bfe04a2e9306ec2dcc9a2ae0ec533b869f027d3a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1805 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/RateLimit/LockFreeTokenBucketRateLimiter.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1be37b1bd7c540e7c2de08c18616244d80400d894563c8b7a611de05532848"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable RS0016 // Add public types and members to the declared API \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/RateLimit/RateLimitRejectedException.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"61fb47ea1d3bcc6b7c0224b9008936ea0592f3316369b4e347f0b102161f8996"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated 12 times in 2 files: The identical BarePragmaDisable (\u0060#pragma warning disable S3872\u0060) appears 12 times in 2 files \u2014 one decision applied repeatedly (e.g. the same rule silenced on every overload of a fluent API), not 12 independent debts. Decide it once \u2014 at the type or project level, or by fixing the underlying pattern \u2014 rather than occurrence-by-occurrence. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Timeout/TimeoutSyntax.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcd5742fd21432f66c7b5a66ac034b88df8086a096e8424d029115f5c3a65d0e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Shared/DebuggerDisableUserUnhandledExceptionsAttribute.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dad5c00e44a046da7bf9325b944a0cf1e22ecae6aa0d7e52e2a6fa2115fa7c58"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2234 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Docs/HttpClientIntegrations.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a327b28c24b275e5f776a9767f7b95705e5a21ce950abad948b36c8bbfd3bb5"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE0290 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Docs/Testing.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eaaa7f4cd963e8c239e5d63d28bee514ebe9170832dd3846953dd2692f9fcda"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated across 12 files: The identical BarePragmaDisable (\u0060#pragma warning disable IDE0028\u0060) appears in 12 files (12 occurrences) \u2014 a single repo-wide policy (e.g. a Directory.Build.props decision or an idiomatic suppression), not 12 independent debts. Decide it once centrally rather than file-by-file. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResiliencePipelineBuilderTests.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"56d3170abda8e997a7510f9b4028873fd8f10f6f54c7ad79499dc7da31aff16e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1031 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Core.Tests/CircuitBreaker/Controller/ScheduledTaskExecutorTests.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"7df9eaf5a211484e91ad5ad8ad46b98c41f8d13a103fa5fe97c399a7604e6c42"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1031 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Core.Tests/CircuitBreaker/Controller/ScheduledTaskExecutorTests.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca83df371c26395b39cb6e3502a3a97a9c68822ae67369064ffa702362142050"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1031 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Extensions.Tests/Issues/IssuesTests.PartitionedRateLimiter_1365.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a49fb254953c29c81dbaf12433284115090a1a40a9171860d8ccb5ea8aaeddc"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1031 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Specs/CircuitBreaker/CircuitBreakerTResultAsyncSpecs.cs"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f0b647b8f095c2ca132c8297932a80aa963904f0656610dfd58badc53fbf2bc"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1031 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Specs/CircuitBreaker/CircuitBreakerTResultAsyncSpecs.cs"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab1f8066377566d434c7afd1587401c5af6a42c19bad2235d06cca6d12eff42"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1031 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Specs/CircuitBreaker/CircuitBreakerTResultAsyncSpecs.cs"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"1021c7d054d3fe04fd6d3597bd1c0e9c91fe2d30440f8ef021f2ba5ec20e5649"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1044 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Core.Tests/ResiliencePipelineTTests.Sync.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"5760877c8bc4c85babf128a67eb6599f2ad65aab4c9aed11de49c4dd4d3c5928"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1045 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Core.Tests/Utils/Pipeline/PipelineComponentFactoryTests.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"937ae2eadc1ce4ff37a8daaf85fbf9230dc374289f5ccf27523a5c51acbccb43"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1045 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Core.Tests/Utils/Pipeline/PipelineComponentFactoryTests.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c811ada7fc90b6a7dfb7b312dfa55a2d28218c2198f17bc4a477779aa3783c3"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable xUnit1045 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.RateLimiting.Tests/RateLimiterResiliencePipelineBuilderExtensionsTests.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc3bf646ed9877d4ebfd44f267780de4ec0dd89ac6f9b01917da74d99196f8c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2025 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Extensions.Tests/Issues/IssuesTests.PartitionedRateLimiter_1365.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"165089acc549b22f47f0fdaf2908cb225ac270a05c72b58e908bdbdd95761716"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2025 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Specs/Bulkhead/BulkheadSpecsBase.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"7814d919ee293004df7a6ae973db35607081bbbab005f1f16950887db3cf9e11"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2025 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Specs/Helpers/PolicyExtensionsAsync.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"802fe931025518d266f55d653babd49b9067901169a1aac9b6a52c96a4a707cc"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2025 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Specs/Helpers/PolicyExtensionsAsync.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"8978d247e1fed7511c51ba2ea038ea5b19ec09930b06d754c118a113509c6bba"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1121 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.TestUtils/FakeTelemetryListener.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"c962e18c60fcbb3c09fa15c9e6a06b9d8f9ed49f04e937382ae65cbf5ab679dd"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: S6966 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/Polly.Core.Tests/Polly.Core.Tests.csproj"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"c19ef98c4d8183645cbc10813513c5b77e40e3c7b71da632c76fe11196f6018c"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CS1998 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aff48c75d6bf55988595b2950ecf3483cd891778b029365cff8ac545f253260"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0017 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56602144d75edefb079869984e126333cc57589945a89471b2827d659466873"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0021 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"047b18e6d7b488f2e5d1a63c43efb192e05c4b2b7d3707425b4c13dcc1b6a0f3"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0022 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f98a0dd9df6470301ef06beb20ce01b7e6707849f52d73c2b57371aa34a8a55"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0028 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"b53833ae5a89a2cfc2cbd31dac8545fabfc73aadc2495ab280c95e73598368a9"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0060 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"433d1568593f9032ec75c37c0e8aa6b400c5ae84fbea0d9df33b3e855bf27c34"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: IDE0060 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"bench/Polly.Benchmarks/Polly.Benchmarks.csproj"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"584efcbfaca1a551575c056e23b3054f061ac785bb8d38ab52fc9f826e8eeb02"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: RS0016 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"b517c4138ea5d0a057fed5cd35d9262c63f02d9d11137ede5cf7cf9e30a4e6de"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: RS0037 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"c51d0bd8be6ce7af19e65360267e7d4aeedf5f90e61dcd10fd3b321b9c293016"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: RS0037 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Polly.csproj"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"b80bada6d0c9bae9894abeeeb4c793bbaf25f08c42aef3e0d41bc00a18f8726e"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: S3257 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"3329eaeb717bbe3031a8af8869f2372c49c1cfd0960dbb00dfc853284b061b1d"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: SA1123 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3095888e45e6b2c14813bd6661679b376aecaf1c9972f42aec95d73715cc055"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: SA1204 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb029b3cf0aaf93363eff1b0469450fbdedeb282df6a0793179818050e379dce"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: SA1402 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"93d5ffad31ab1380cf918c0431e20aa684fe0ca8df376d9d0610788756282d4d"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: SA1515 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bfd5b77c1ddf93c4df9114cd3352341cdd2bdbde611196cfd2019fc491282ce"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: SA1600 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Snippets.csproj"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"de284ee5012909eea99d097f13cec1cc6b900f5e185109a3a6f540229b17834c"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: SA1600 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"eng/Benchmark.targets"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6fa8189abd1a5923bcb7e673ce28adb1988a5d6d173fbd12715db140a6adeb8"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1510 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/Polly.csproj"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f055f8ac73d173b16b03ddd25a7d0c0573f60e7c30872f9b5fe6cb8d0e5cb2"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1822 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"bench/Polly.Benchmarks/Polly.Benchmarks.csproj"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2677c95e7f8bacddac528cb7f0223a7a62a1fc013c8ccbd17214c4cd73b81a7"}},{"ruleId":"D18","level":"warning","message":{"text":"Monorepo: only 1 of 2 solutions was scored: This repository contains 2 .NET solutions, but a scan analyzes ONE. Every score, lens, and finding here reflects only \u0060Polly.slnx\u0060 \u2014 the other 1 (\u0060samples/Samples.slnx\u0060) were not analyzed and are not represented in the headline. To cover them, scan each solution as its own target and group them in a Solution or Product for a portfolio roll-up. If a secondary solution is an archived or vendored tree, declare it \u2014 \u0060.gitattributes\u0060 (\u0060path/** linguist-vendored\u0060) or \u0060.editorconfig\u0060 (\u0060[path/**] generated_code = true\u0060) \u2014 to exclude it from discovery the same way generated code is."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a714c749a7ed0270f25ef54f0d77846abefb01ce5214d0fe8c64e4324d302faf"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found at common paths; consider documenting architectural decisions in Docs/ADL/ or similar."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D23","level":"note","message":{"text":"Bounded contexts not declared: At 35k LoC across 47 projects the codebase is both large and multi-module, so explicit bounded contexts are warranted. Name this codebase\u0027s bounded contexts (\u22652 module groups, e.g. per subsystem) so cross-boundary type coupling can be assessed. Declare them in \u0060.codehealth/config.yaml\u0060 at the repository root (create it if absent), mapping each context name to the module-path or namespace prefixes that belong to it \u2014 e.g. \u0060architecture:\u0060 \u2192 \u0060contexts:\u0060 \u2192 \u0060Billing: [\u0022src/billing\u0022, \u0022Acme.Billing\u0022]\u0060, \u0060Catalog: [\u0022src/catalog\u0022, \u0022Acme.Catalog\u0022]\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1c7e276c9c682731f01819ed5378b90ca320cde1b583c90920172911598362b3"}},{"ruleId":"D26","level":"note","message":{"text":"Split Polly.Core: A large catch-all name that is itself a single cohesive library whose many namespaces are all facets of the same policy engine. Suggested: by namespace: Polly.Caching, Polly.Concurrency, Polly.ExceptionHandling"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a9f877fd550e8b0cdfa985ea57f698d538be7cfa861616c3d9323eeffed806ca"}},{"ruleId":"D26","level":"note","message":{"text":"Split Polly(net6.0): A catch-all name that is itself a single cohesive library whose many namespaces are all facets of the same policy engine. Suggested: by namespace: Polly.Caching, Polly.Concurrency, Polly.ExceptionHandling"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c9a8e9075d721536ed58b858dd99004e2f96a2edede14452b76a8991448552ff"}},{"ruleId":"D27","level":"note","message":{"text":"Scattered collaborators: 82 % of calls cross a namespace and only 52 % of collaborators are co-located \u2014 group each feature\u0027s code into a vertical slice so a call\u0027s collaborators sit together."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5aad4a4530bac3928d3a065a664be89d023ecfc865f9bf79ac05754b3bffe322"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5b8f11381d61a58459ffc7c595fd52d09c03c711894a63a9578043d2338412b"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D34","level":"note","message":{"text":"knowledge concentrated in recent work \u2014 freshness signal contradicted by repo activity: File-level freshness contradicts repo activity: 90 commits in the last 90 days, yet 133 of 152 significant files carry no living knowledge. Those two readings cannot both be true, so the per-file recency signal is treated as unreliable here and freshness is not scored for this run."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6e461071eb7c3d0d8a5f27dee27c23fcaef1256b0b0ff28c50eb743e940dbe9d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: CircuitBreaker.cs \u2194 Fallback.cs: \u0060src/Snippets/Docs/CircuitBreaker.cs\u0060 and \u0060src/Snippets/Docs/Fallback.cs\u0060 change together 69% of the time (9 of the 13 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Docs/CircuitBreaker.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bcdd4424b2c2aab1a3bba0fdcf86f9ee6baed02bc24b4cc4bac5aa22d4a5778"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: Log.cs \u2194 ResilienceTelemetryTags.cs: \u0060src/Polly.Extensions/Telemetry/Log.cs\u0060 and \u0060src/Polly.Extensions/Telemetry/ResilienceTelemetryTags.cs\u0060 change together 67% of the time (8 of the 12 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Extensions/Telemetry/Log.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"35008ee35654306b4f8dc34f3f83d172626ca48d234386578e59ae7d9d5ebf2a"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: FallbackResiliencePipelineBuilderExtensions.cs \u2194 HedgingResiliencePipelineBuilderExtensions.cs: \u0060src/Polly.Core/Fallback/FallbackResiliencePipelineBuilderExtensions.cs\u0060 and \u0060src/Polly.Core/Hedging/HedgingResiliencePipelineBuilderExtensions.cs\u0060 change together 62% of the time (13 of the 21 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in different directories, but in this ecosystem the namespace is declared in the FILE, not by the folder \u2014 so the two may well share one namespace and reference each other with no import for this pass to see. Read the pair before acting: if one derives from or overrides the other, the dependency is explicit in the type declaration and the co-change is definitional; if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE and the thing to add is a comment saying so; if they simply belong together, co-locate them; if none of these holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Fallback/FallbackResiliencePipelineBuilderExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78643e75100b5adf8f135a4bd02bebc6d450867e895b8cf3b520bac21de5d6a4"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: Fallback.cs \u2194 Hedging.cs: \u0060src/Snippets/Docs/Fallback.cs\u0060 and \u0060src/Snippets/Docs/Hedging.cs\u0060 change together 60% of the time (6 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Snippets/Docs/Fallback.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"487c99323f71699ea05cda1506ee2be28feb72b09d28f1b8005a064d4cbd0224"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling clique: CircuitBreakerPredicateArguments.cs, OnCircuitClosedArguments.cs, OnCircuitHalfOpenedArguments.cs, OnCircuitOpenedArguments.cs: 4 files \u2014 \u0060src/Polly.Core/CircuitBreaker/CircuitBreakerPredicateArguments.cs\u0060, \u0060src/Polly.Core/CircuitBreaker/OnCircuitClosedArguments.cs\u0060, \u0060src/Polly.Core/CircuitBreaker/OnCircuitHalfOpenedArguments.cs\u0060, \u0060src/Polly.Core/CircuitBreaker/OnCircuitOpenedArguments.cs\u0060 \u2014 all change together with no explicit dependency: a fully-connected co-change clique, not 6 separate couplings. They share one concern (thin parallel siblings over a common abstraction), so extract the shared part into ONE unit and the whole clique\u0027s coupling clears at once \u2014 you do not need to break each pair individually."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/CircuitBreaker/CircuitBreakerPredicateArguments.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc0ce4a813e372834612556bc294f6777e36e9a71a5ce702d7c7156ea270f2a1"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: RetryResiliencePipelineBuilderExtensions.cs \u2194 TimeoutResiliencePipelineBuilderExtensions.cs: \u0060src/Polly.Core/Retry/RetryResiliencePipelineBuilderExtensions.cs\u0060 and \u0060src/Polly.Core/Timeout/TimeoutResiliencePipelineBuilderExtensions.cs\u0060 change together 56% of the time (9 of the 16 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in different directories, but in this ecosystem the namespace is declared in the FILE, not by the folder \u2014 so the two may well share one namespace and reference each other with no import for this pass to see. Read the pair before acting: if one derives from or overrides the other, the dependency is explicit in the type declaration and the co-change is definitional; if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE and the thing to add is a comment saying so; if they simply belong together, co-locate them; if none of these holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly.Core/Retry/RetryResiliencePipelineBuilderExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e086f12e5469e9b4a71798a2264467d3645ffe4cfd1f5e221bea8c3bedbbd9d0"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: AsyncCircuitBreakerSyntax.cs \u2194 CircuitBreakerSyntax.cs: \u0060src/Polly/CircuitBreaker/AsyncCircuitBreakerSyntax.cs\u0060 and \u0060src/Polly/CircuitBreaker/CircuitBreakerSyntax.cs\u0060 change together 50% of the time (26 of the 52 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/CircuitBreaker/AsyncCircuitBreakerSyntax.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7132c981c23772924e62330dbb272731b1d540f09934a84b2df000603717dd41"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: AsyncCircuitBreakerEngine.cs \u2194 CircuitBreakerEngine.cs: \u0060src/Polly/CircuitBreaker/AsyncCircuitBreakerEngine.cs\u0060 and \u0060src/Polly/CircuitBreaker/CircuitBreakerEngine.cs\u0060 change together 50% of the time (19 of the 38 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Polly/CircuitBreaker/AsyncCircuitBreakerEngine.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8efe6790ee599f417eea9e6d60f8b130a7f9e6da3b6758c770eef94daa9f103"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":1,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}