{"$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":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"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":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"id":"D23","name":"Boundary Type-Coupling","shortDescription":{"text":"Boundary Type-Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D23"},{"id":"D24","name":"Comment Value","shortDescription":{"text":"Comment Value"},"helpUri":"https://codehealth.canine.dev/dimensions/D24"},{"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":"D32","name":"Data Compliance (PII/GDPR)","shortDescription":{"text":"Data Compliance (PII/GDPR)"},"helpUri":"https://codehealth.canine.dev/dimensions/D32","relationships":[{"target":{"id":"CWE-359","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-312","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-200","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-359","CWE-312","CWE-200"]}},{"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"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"IntrinsicTemplateExpander.TryGetOrGenerateIntrinsicsDefinition (cyclomatic 133): IntrinsicTemplateExpander.TryGetOrGenerateIntrinsicsDefinition has cyclomatic complexity 133 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/IntrinsicTemplateExpander.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa01dcc9f3da714b46a75e4e1b763d8c45affbaab21fb9e75819056d05bc2c18"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderCompiler.Compile (cyclomatic 121): ShaderCompiler.Compile has cyclomatic complexity 121 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/Direct3D/ShaderCompiler.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"5959c50fa33a68dcc3989f2de2ddf8c3663625e22850c931d68fa84412d1625d"}},{"ruleId":"D1","level":"warning","message":{"text":"AccessorChainExpression.CompileHelper (cyclomatic 108): AccessorChainExpression.CompileHelper has cyclomatic complexity 108 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":789}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f21d3ee756a98450520a3527f64a3fe13d510bce7ac8d7e27901be25d470e21"}},{"ruleId":"D1","level":"warning","message":{"text":"EffectCompiler.Compile (cyclomatic 88): EffectCompiler.Compile has cyclomatic complexity 88 (threshold 15). Of this number, 81 points are the body\u0027s own statements and 7 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/EffectCompiler.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e63522df95bd0d477f7fee7aff4f5e2879b485e643f421387f2376342889c55"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderClass.ProcessNameAndTypes (cyclomatic 88): ShaderClass.ProcessNameAndTypes has cyclomatic complexity 88 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6428676cd963da3aaa27e047dfd83f3c8edd2ed37f20502819131910fe6cda9"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.MergeClassInBuffers (cyclomatic 80): ShaderMixer.MergeClassInBuffers has cyclomatic complexity 80 (threshold 15). Of this number, 79 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"123a747bbd6aeec2d96f33debd975852c68a028adfe6a70e4418b851dfd8ff15"}},{"ruleId":"D1","level":"warning","message":{"text":"EntryPointWrapperGenerator.GenerateWrapper (cyclomatic 74): EntryPointWrapperGenerator.GenerateWrapper has cyclomatic complexity 74 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Generation/EntryPointWrapperGenerator.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"83e27a19bad2438e6549213846c1e6eab305f9117edf2f330a68a0ac12fb33b0"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.Convert (cyclomatic 72): SpirvBuilder.Convert has cyclomatic complexity 72 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"085b2d7ee9b0fad878402ea3551fbfc38a51d2febf5a83cf34907c4367d27b2f"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvContext.TryGetConstantValue (cyclomatic 72): SpirvContext.TryGetConstantValue has cyclomatic complexity 72 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.Constants.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0708f9ef8fa033151c7d36059941ec758ee0566509b1582d83f3c0c4c4b9006"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetPropertyPasteProcessor.Paste (cyclomatic 69): AssetPropertyPasteProcessor.Paste has cyclomatic complexity 69 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/CopyPasteProcessors/AssetPropertyPasteProcessor.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf774d0f8c5ccec453a16bf4115dadc4ed641334b41f9e61a4ce7615d297fe88"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.PreLoadPackageDependencies (cyclomatic 66): PackageSession.PreLoadPackageDependencies has cyclomatic complexity 66 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0c4467ae78319a025aa245f497e58a4121ea2b08c32818187f370f6aa1c9cba"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstantExpression.ParseInstruction (cyclomatic 63): ConstantExpression.ParseInstruction has cyclomatic complexity 63 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/ConstantExpression.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd8ae7c71d9ef4baf95a52547ae27a98932ac91b6c288543dd10b66492dde5ea"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageBuilderApp.Run (cyclomatic 59): PackageBuilderApp.Run has cyclomatic complexity 59 (threshold 15). Of this number, 50 points are the body\u0027s own statements and 9 belong to 3 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilderApp.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"d794671d916c0b1fff62a7ceb1d3c1909233e62d8d339d3e6d85a7785a5da22c"}},{"ruleId":"D1","level":"warning","message":{"text":"InterfaceProcessor.Process (cyclomatic 58): InterfaceProcessor.Process has cyclomatic complexity 58 (threshold 15). Of this number, 55 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/InterfaceProcessor.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"57029dd4269348afe93a89064b56b9cd40ba3dc30759e16e4fd855e4cabb8113"}},{"ruleId":"D1","level":"warning","message":{"text":"ReadWriteAnalyzer.AnalyzeStreamReadWrites (cyclomatic 57): ReadWriteAnalyzer.AnalyzeStreamReadWrites has cyclomatic complexity 57 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Analysis/ReadWriteAnalyzer.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"58392ed9a55d03feee7eefb8c3be172b064fe2cfeb2d08c8015cb0245451e700"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.CleanupUnnecessaryInstructions (cyclomatic 56): ShaderMixer.CleanupUnnecessaryInstructions has cyclomatic complexity 56 (threshold 15). Most of this is not in the body itself: 12 of the 56 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 1239, 1317). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":1207}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bcf0cdae574e1c3e67b20374a39ab556f04f939b03074b5691a1b85fe51c2df"}},{"ruleId":"D1","level":"warning","message":{"text":"BinaryOpExpr.TryEvaluate (cyclomatic 56): BinaryOpExpr.TryEvaluate has cyclomatic complexity 56 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/ConstantExpression.cs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"5815222a087c54d6a23b5897a2b3544ea208d02f949efb8d47dd8a30c8cba851"}},{"ruleId":"D1","level":"warning","message":{"text":"ImportModelCommand.ExportAnimation (cyclomatic 52): ImportModelCommand.ExportAnimation has cyclomatic complexity 52 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Animation.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b150009868502c3f77777ab53bcc4f5aeac309af4b7265556ee3b9e275acb92"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetRegistry.RegisterAssetAssembly (cyclomatic 51): AssetRegistry.RegisterAssetAssembly has cyclomatic complexity 51 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetRegistry.cs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a097dbe5ae2d7a68581a9245ec3d66f01d545259c7fe095f2f05352d1cd8a4d"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.CanConvertScore (cyclomatic 50): SpirvBuilder.CanConvertScore has cyclomatic complexity 50 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"66fde5c41438cc47e8a16de294c402c92402158b7f9bb3da110c5ea5e5011891"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvContext.RegisterType (cyclomatic 50): SpirvContext.RegisterType has cyclomatic complexity 50 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/SpirvContext.Types.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"751b5a3dd4fb5b4c3a54f4dc0107a254c57c697126a4489312851cfd6fd21931"}},{"ruleId":"D1","level":"warning","message":{"text":"StreamAccessPatcher.PatchStreamsAccesses (cyclomatic 48): StreamAccessPatcher.PatchStreamsAccesses has cyclomatic complexity 48 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Transformation/StreamAccessPatcher.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8fc103a3b07107bdac6a5ce1a5d8cadf911077c81a53f2cd9b36b247459b45"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionViewModel.DeleteItems (cyclomatic 48): SessionViewModel.DeleteItems has cyclomatic complexity 48 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1677}}}],"partialFingerprints":{"codehealthFindingId/v1":"474b4784b69909e2bf5d2b5191e2bea62e0b87c9080d1f42d4774f0cacee45bd"}},{"ruleId":"D1","level":"warning","message":{"text":"HeightmapConvertCommand.DoCommandOverride (cyclomatic 48): HeightmapConvertCommand.DoCommandOverride has cyclomatic complexity 48 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Physics/HeightmapAssetCompiler.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"17e666176d55cbe777a49517d4033a6a850db6ffcb7711d08b03ab46364baebd"}},{"ruleId":"D1","level":"warning","message":{"text":"DeadCodeRemover.RemoveUnreferencedCode (cyclomatic 47): DeadCodeRemover.RemoveUnreferencedCode has cyclomatic complexity 47 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Cleanup/DeadCodeRemover.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f33b168d397229bdcb85f491d89d3066ae7dfbd2d883117911afe6426054d4d"}},{"ruleId":"D1","level":"warning","message":{"text":"PostProcessingEffects.DrawCore (cyclomatic 46): PostProcessingEffects.DrawCore has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/PostProcessingEffects.cs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c8f3d6b05357b652e030d64131d3919bad5d79e1cedde6563450a4a0401662"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.ProcessMemberAccessAndForeach (cyclomatic 45): ShaderMixer.ProcessMemberAccessAndForeach has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"781b8bd0010dc2adfa8be6ebfc9aa144c5a8dfb9b300686e1e0ece229750c397"}},{"ruleId":"D1","level":"warning","message":{"text":"VisitorGenerator.GenerateVisitorsBase (cyclomatic 45): VisitorGenerator.GenerateVisitorsBase has cyclomatic complexity 45 (threshold 15). Of this number, 41 points are the body\u0027s own statements and 4 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"de732b1ca5a8d1f556269baca4e25afbf7ce1d7efab4cb1022057c62340970b1"}},{"ruleId":"D1","level":"warning","message":{"text":"EditorGameEntityCameraService.UpdateCameraBase (cyclomatic 45): EditorGameEntityCameraService.UpdateCameraBase has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b867cf64f32d0934bfe23c0a802ed2d1df7055c953031719a6b4b12de5b54d9"}},{"ruleId":"D1","level":"warning","message":{"text":"Predicates.Orient3dAdapt (cyclomatic 44): Predicates.Orient3dAdapt has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"de50838547b4d3075cf75a1e9feb5ae3dc52905726eaf102e90429059123bda7"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.ProcessReflection (cyclomatic 44): ShaderMixer.ProcessReflection has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.Reflection.cs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3df16f2ea7d7639d033fa6229cb66bb204036df6f3991abce859738ff808455"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionExtensions.TryFoldConstantOp (cyclomatic 44): ExpressionExtensions.TryFoldConstantOp has cyclomatic complexity 44 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/ExpressionExtensions.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6b23d552c054e178721bfdf3dfe67dff6ecb85cbcdc91789be55b64d37ea75c"}},{"ruleId":"D1","level":"warning","message":{"text":"Scanner.FetchNextToken (cyclomatic 44): Scanner.FetchNextToken has cyclomatic complexity 44 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad9e0d69f1633ebddccdfd9d5adbd158b8b663c5b3cfcea530e0bccd28648970"}},{"ruleId":"D1","level":"warning","message":{"text":"RootEffectRenderFeature.PrepareEffectPermutations (cyclomatic 43): RootEffectRenderFeature.PrepareEffectPermutations has cyclomatic complexity 43 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 19 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c9c268734e8cc6775c8623ab0f4a0a130f1a780431c02f163d4dff0c9c1cecd"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMethod.Compile (cyclomatic 43): ShaderMethod.Compile has cyclomatic complexity 43 (threshold 15). Of this number, 42 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.MethodOrMember.cs"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecb4fb8ba6505f54716807ce2a7551227f1818c4057ad6b4a01b5b7380c82787"}},{"ruleId":"D1","level":"warning","message":{"text":"Emitter.AnalyzeScalar (cyclomatic 43): Emitter.AnalyzeScalar has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c3ae7f6f43229c9c2d3b72addd8062a60248be4e39a588b0c102c7dfdd59bd1"}},{"ruleId":"D1","level":"warning","message":{"text":"ImportModelCommand.ExportModel (cyclomatic 43): ImportModelCommand.ExportModel has cyclomatic complexity 43 (threshold 15). Of this number, 40 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Model.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"84cd1d9c8c2889c6ba25ae8054c8092a56b07c4787715505498d092d84ea8d50"}},{"ruleId":"D1","level":"warning","message":{"text":"SpriteStudioAnimationAssetCommand.DoCommandOverride (cyclomatic 42): SpriteStudioAnimationAssetCommand.DoCommandOverride has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Offline/SpriteStudioAnimationAssetCompiler.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"868886227be00b79b28c0d6a33d624a5111eda501547e72e13b85a3d06522f48"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.AddRequiredCapabilities (cyclomatic 41): ShaderMixer.AddRequiredCapabilities has cyclomatic complexity 41 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"e429d055f8bba6ad65298335032cc00f428a6bb4b1cd4b7bb4a499e28756ddb0"}},{"ruleId":"D1","level":"warning","message":{"text":"BundlePacker.Build (cyclomatic 41): BundlePacker.Build has cyclomatic complexity 41 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/BundlePacker.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce55ab2ca8853022cbb4994f758a6574647e3f101f80bad3a17c45f82e9a4ca2"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetPropertyGraph.ReconcileWithBaseNode (cyclomatic 41): AssetPropertyGraph.ReconcileWithBaseNode has cyclomatic complexity 41 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":728}}}],"partialFingerprints":{"codehealthFindingId/v1":"7accd34784203e9e072a28ef793f0fce6b7244f33102350445d6e62167fd1a3a"}},{"ruleId":"D1","level":"warning","message":{"text":"UpdateEngine.Run (cyclomatic 40): UpdateEngine.Run has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ccf96ea76cfbcd8ea9be64d8e303b6a7a3cf0ebc825e038c128bf37535b5f87"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.MergeCBuffers (cyclomatic 39): ShaderMixer.MergeCBuffers has cyclomatic complexity 39 (threshold 15). Of this number, 38 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"53b968a942d214e8bef13d384f165d195bc2482874d9cb07c22aca404839bd4f"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorConverter.Convert (cyclomatic 39): ColorConverter.Convert has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/ValueConverters/ColorConverter.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"262e916694df13be6260d0b396cdf423e11c9dd0dea83c7d309f8de1a0198277"}},{"ruleId":"D1","level":"warning","message":{"text":"AssemblyRecompiler.Recompile (cyclomatic 39): AssemblyRecompiler.Recompile has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"08336a421d476a04cd3b67362b7d09b58068e2d8971238caa81f047560dbd7e2"}},{"ruleId":"D1","level":"warning","message":{"text":"MeshConverter.ProcessMesh (cyclomatic 39): MeshConverter.ProcessMesh has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd0dbf9a90e45142f9d45827a2d77106a7bc3fd698b8be4f2a57d3222c8fec1b"}},{"ruleId":"D1","level":"warning","message":{"text":"NavigationMeshBuilder.BuildInput (cyclomatic 38): NavigationMeshBuilder.BuildInput has cyclomatic complexity 38 (threshold 15). Most of this is not in the body itself: 3 of the 38 points are its own statements and the rest belongs to one function literal inside it that branches (line 405). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationMeshBuilder.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7f3fae60003e118716825ae9b371fdd86fbe1d2e3088767626b95c01f1eca9"}},{"ruleId":"D1","level":"warning","message":{"text":"StreamAnalyzer.Analyze (cyclomatic 38): StreamAnalyzer.Analyze has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Analysis/StreamAnalyzer.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"713cba5e22835ded537557390105c3d9a73d4cdd7315c185ffa3325c6979c6f8"}},{"ruleId":"D1","level":"warning","message":{"text":"BundleOdbBackend.CreateBundle (cyclomatic 37): BundleOdbBackend.CreateBundle has cyclomatic complexity 37 (threshold 15). Of this number, 36 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Storage/BundleOdbBackend.cs"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"01b0a26f4ba6da0fbf01688c2c885f6699acbf5d6983dee19d5289f054dc4bdf"}},{"ruleId":"D1","level":"warning","message":{"text":"SwapChainGraphicsPresenter.CreateSwapChain (cyclomatic 37): SwapChainGraphicsPresenter.CreateSwapChain has cyclomatic complexity 37 (threshold 15). Of this number, 35 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"99292efb19bf525e5a133872690d2db497717a0972d691cde9f1ed7288c395e7"}},{"ruleId":"D1","level":"warning","message":{"text":"NavigationMeshBuilder.Build (cyclomatic 37): NavigationMeshBuilder.Build has cyclomatic complexity 37 (threshold 15). Of this number, 36 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationMeshBuilder.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6c62c697716b79798e6f0ac51fc6555482f136377f9e7a96f526cc529e10c5a"}},{"ruleId":"D1","level":"warning","message":{"text":"Grid.MeasureOverride (cyclomatic 37): Grid.MeasureOverride has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Panels/Grid.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff13b87cdf368c150e5c80c45793c16169082c33934279725e5c527e22969591"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeName.TryResolveType (cyclomatic 37): TypeName.TryResolveType has cyclomatic complexity 37 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Literals.cs"},"region":{"startLine":678}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d40436f20857bf52439c46140ea9c2542732cfd74b9b39971ae082377ceddb"}},{"ruleId":"D1","level":"warning","message":{"text":"Scanner.ScanFlowScalar (cyclomatic 37): Scanner.ScanFlowScalar has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1566}}}],"partialFingerprints":{"codehealthFindingId/v1":"5458c5b37d172ff493a9baeb552cd956388098ca9bdbbc938f89a141b7f29d39"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.GenerateDefaultCBuffer (cyclomatic 36): ShaderMixer.GenerateDefaultCBuffer has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cf42e428111ff95bfb70572bf3c1c274b409092952338af6230bbb976cede06"}},{"ruleId":"D1","level":"warning","message":{"text":"UILayoutHelper.UpdateElementLayout (cyclomatic 36): UILayoutHelper.UpdateElementLayout has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UILayoutHelper.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe9e45283e96d0a562022e5c4448ad32adb480c39320477d0e4dba4ed1aded50"}},{"ruleId":"D1","level":"warning","message":{"text":"ForwardRenderer.BakeLightProbes (cyclomatic 35): ForwardRenderer.BakeLightProbes has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.LightProbes.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"e47c244a5c0e5ddb28a2da9880e5b94d472ceedf9e317c08b29c6c389404578c"}},{"ruleId":"D1","level":"warning","message":{"text":"IntrinsicCallHelper.TryResolveIntrinsic (cyclomatic 35): IntrinsicCallHelper.TryResolveIntrinsic has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/IntrinsicCall.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"de068a612c20a158358ebee22769d5731286293cb7681f115be16a1dfaf39280"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderClass.Compile (cyclomatic 35): ShaderClass.Compile has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cdb97d6b085b994047c49178d34cf0d29ede156c41fac8bf9625e677daa27e0"}},{"ruleId":"D1","level":"warning","message":{"text":"TextureHelper.DetermineOutputFormat (cyclomatic 35): TextureHelper.DetermineOutputFormat has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"1313d4e968b72469e47263344531d688ec303573c5bdc874293a5c5cda96b77e"}},{"ruleId":"D1","level":"warning","message":{"text":"OperationComparer.Compare (cyclomatic 34): OperationComparer.Compare has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0e158ccfcd18513db4208bcc4a7c25e7855d3411b9fa888e3fcfaad1eccf1c1"}},{"ruleId":"D1","level":"warning","message":{"text":"PackAssetsHelper.Run (cyclomatic 34): PackAssetsHelper.Run has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/Tasks/PackAssets.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fa8e604a57dd2fb24aed7e33c09fbbe16fabf69ba9d006bcf5bac509cc566fe"}},{"ruleId":"D1","level":"warning","message":{"text":"DebuggingViewModel.BuildProjectCore (cyclomatic 34): DebuggingViewModel.BuildProjectCore has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/ViewModels/DebuggingViewModel.cs"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fb0f3c4db63d5d9a20cfa35f26697297d6fd8e671d3a95f05f41675edae1418"}},{"ruleId":"D1","level":"warning","message":{"text":"Effect.UpdateValueBindingKey (cyclomatic 33): Effect.UpdateValueBindingKey has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Effects/Effect.cs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d3cb6fb69ca2f5ffb4874ea30e2f08ca09426c01d40b24cd789bccb4a4178b4"}},{"ruleId":"D1","level":"warning","message":{"text":"MaterialRenderFeature.PrepareEffectPermutations (cyclomatic 33): MaterialRenderFeature.PrepareEffectPermutations has cyclomatic complexity 33 (threshold 15). Most of this is not in the body itself: 1 of the 33 points is its own statement and the rest belongs to one function literal inside it that branches (line 145). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialRenderFeature.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bc857dec7e67774bc0700397b42aa6363be7d526c6d812d3c7988e6b56015a0"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.ProcessLinks (cyclomatic 33): ShaderMixer.ProcessLinks has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.Reflection.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9f1a4dc38b046ea5e164228e5521c8467c28fa2c426624ee80a440b4cac20f8"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.InstantiateGenericShader (cyclomatic 33): SpirvBuilder.InstantiateGenericShader has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b5f072a411528dd39d5799fc23e0e99a71372b85746a5ede26e829f8ea62442"}},{"ruleId":"D1","level":"warning","message":{"text":"FpsTestCamera.UpdateCamera (cyclomatic 33): FpsTestCamera.UpdateCamera has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/FpsTestCamera.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"68f2a2ae4811e990b4e13dd037a2d68d3c3e2768cdd9c3ba363e33d52edc7311"}},{"ruleId":"D1","level":"warning","message":{"text":"ObjectDescriptor.PrepareMember (cyclomatic 33): ObjectDescriptor.PrepareMember has cyclomatic complexity 33 (threshold 15). Of this number, 31 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/TypeDescriptors/ObjectDescriptor.cs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"24d9f40f12e324c37797158ad9f0ae9215b4b4be3447926166f67f1ed4430662"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetCollectionViewModel.InvokeAddAssetTemplate (cyclomatic 33): AssetCollectionViewModel.InvokeAddAssetTemplate has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaf27613b0d0411e78cf1861b4994c802598094796788d7066686aa7ee93aba8"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphicsDeviceManager.RankDevices (cyclomatic 32): GraphicsDeviceManager.RankDevices has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e1b2e69f957c2dd55e05dff3fff2c5af0fd373849f8effb3d0be638a03edf67"}},{"ruleId":"D1","level":"warning","message":{"text":"EditText.InterpretKey (cyclomatic 32): EditText.InterpretKey has cyclomatic complexity 32 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/EditText.Direct.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"24c9e49b3308bc366251db38ac03c283703136454419277d61acfb9fc59d98ba"}},{"ruleId":"D1","level":"warning","message":{"text":"PanelViewModel.ChangeLayoutType (cyclomatic 32): PanelViewModel.ChangeLayoutType has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c22168c0aaa71e73f178b462ddf4a4b79adfc9fd864aea3b40746cebe332710"}},{"ruleId":"D1","level":"warning","message":{"text":"MeshConverter.GenerateBoneToNodeMap (cyclomatic 32): MeshConverter.GenerateBoneToNodeMap has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"de37662ce8560f5bd82bdf591d67b6c43900bff5e8886f21098f188331903a88"}},{"ruleId":"D1","level":"warning","message":{"text":"UpdateEngine.Compile (cyclomatic 31): UpdateEngine.Compile has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b1587d825a55bd3aee9121aa814c878cbef93a351aaa93c5641e13758e90d06"}},{"ruleId":"D1","level":"warning","message":{"text":"InterfaceProcessor.GenerateStreamVariables (cyclomatic 31): InterfaceProcessor.GenerateStreamVariables has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/InterfaceProcessor.cs"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfbfbfc1046d78ce4f95ed10778d06edec6d85e60aa2d63dbdfd8536afbe6ca2"}},{"ruleId":"D1","level":"warning","message":{"text":"Emitter.SelectScalarStyle (cyclomatic 31): Emitter.SelectScalarStyle has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1442}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f8ca858a74153498bc8057d15ee1b6feae340c2ef4cb5ff74d0350eed350f23"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.Save (cyclomatic 31): PackageSession.Save has cyclomatic complexity 31 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 6 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"91aeb8d5b2389c09359cf5c69e8bd9b59820fb65f7f3503436f2032be4268d35"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicsGizmo.Update (cyclomatic 31): PhysicsGizmo.Update has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb2fd56af4e04ef6f17ca1be59dba1534a23227a56745c5e27d2b1aafd87c48d"}},{"ruleId":"D1","level":"warning","message":{"text":"StrideTexLibrary.Export (cyclomatic 31): StrideTexLibrary.Export has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/StrideTexLibrary.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c7e3d71602822885800b15fd96815bba042f84c3dc8ad58472c6becf8242e3b"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicSoundSource.Worker (cyclomatic 30): DynamicSoundSource.Worker has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio/DynamicSoundSource.cs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f76ce50e77dcafce7f3ad55111d0fbac06b571e386b364e4207034c8a55c9c"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteralValue.UpdateMemory (cyclomatic 30): LiteralValue.UpdateMemory has cyclomatic complexity 30 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Literals/LiteralValue.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3589c12d5e9d597b07d2cc15ce38c562c25d47079c7c84fc18f39c224579368"}},{"ruleId":"D1","level":"warning","message":{"text":"Emitter.WriteDoubleQuotedScalar (cyclomatic 30): Emitter.WriteDoubleQuotedScalar has cyclomatic complexity 30 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1183}}}],"partialFingerprints":{"codehealthFindingId/v1":"b99d7df7c323b5efce758e306cda9f3a2f15a8cdce43fc0eba3da4fc3a12aaa4"}},{"ruleId":"D1","level":"warning","message":{"text":"Scanner.ScanPlainScalar (cyclomatic 30): Scanner.ScanPlainScalar has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1808}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bcde8cfff8034c5d8108ebaad9e858af5079dc508ce1d8aa08e90a52083be97"}},{"ruleId":"D1","level":"warning","message":{"text":"EncodeVideoFileCommand.DoCommandOverride (cyclomatic 30): EncodeVideoFileCommand.DoCommandOverride has cyclomatic complexity 30 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Media/VideoAssetCompiler.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"3da70b9ed1ff084c549a82bb83ee1846097e1ed0cde76ca36733156bd28a490a"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationProcessor.Draw (cyclomatic 29): AnimationProcessor.Draw has cyclomatic complexity 29 (threshold 15). Most of this is not in the body itself: 1 of the 29 points is its own statement and the rest belongs to one function literal inside it that branches (line 64). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationProcessor.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"30feb55eaed7df21b7a452c60c59ef55470b95ccf5427e0ed42883463d69233d"}},{"ruleId":"D1","level":"warning","message":{"text":"OpDataEnumerator.MoveNext (cyclomatic 29): OpDataEnumerator.MoveNext has cyclomatic complexity 29 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Parsing/OpDataEnumerator.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9a4ce18eb8c8ce1f4c2da9a6c5d5d4e6c902276dcbbe5a92a4dbfad5064359a"}},{"ruleId":"D1","level":"warning","message":{"text":"UPath.Normalize (cyclomatic 29): UPath.Normalize has cyclomatic complexity 29 (threshold 15). Of this number, 27 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/IO/UPath.cs"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e99fa2517cafa2b0a8adb2e90784518b3c43392f249b26eae7e38045f73c2ca"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.RemapIds (cyclomatic 28): SpirvBuilder.RemapIds has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"c224d7cdb451693036b6e598c9d34fe23d39638f179b6f238b83f0f39701db4e"}},{"ruleId":"D1","level":"warning","message":{"text":"Scanner.ScanBlockScalar (cyclomatic 28): Scanner.ScanBlockScalar has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1307}}}],"partialFingerprints":{"codehealthFindingId/v1":"8da2d6682fe584157d1da6ae821408173762ef6dd0e3319bbbd87eb35e915371"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetCompositeHierarchyPropertyGraph.FindBestInsertIndex (cyclomatic 28): AssetCompositeHierarchyPropertyGraph.FindBestInsertIndex has cyclomatic complexity 28 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 5 belong to 5 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"a91243dc1c3166e9cb36ff287ea4d83d44e6e758f9173b4b770087a6b3100a06"}},{"ruleId":"D1","level":"warning","message":{"text":"PanelViewModel.ChangeChildElementLayoutProperties (cyclomatic 28): PanelViewModel.ChangeChildElementLayoutProperties has cyclomatic complexity 28 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7bf2a635a5a8a7434e30a4c3c806b4cd03d59c7eca3f758c01f2fca1feca156"}},{"ruleId":"D1","level":"warning","message":{"text":"ScrollViewer.Update (cyclomatic 27): ScrollViewer.Update has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/ScrollViewer.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfdb75ef64ff612034c3131662ef87a6edfdf4fd24a22e22562a8bde32d1c843"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.ConvertBoolCBufferMembers (cyclomatic 27): ShaderMixer.ConvertBoolCBufferMembers has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ff8f08de04528fbd46e36fc2cccf8f2987d7dcc7725fdaf231fda6ebf14637"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.ConvertOperandName (cyclomatic 27): SPVGenerator.ConvertOperandName has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae3d179cb6b2e971b952877ff6e5f5edca75a16d5d5ad5ab51e03faab4923728"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.ToTypeFieldAndOperandName (cyclomatic 27): SPVGenerator.ToTypeFieldAndOperandName has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Instructions.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"701d27791209b02fee5831708f0f4803a19580dd480e9361af1f34d32bc3cfea"}},{"ruleId":"D1","level":"warning","message":{"text":"Parser.ParseNode (cyclomatic 27): Parser.ParseNode has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Parser.cs"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"87f790b2982b29f944335b8809fc80df0f8cc18dfcdc986e5cbdcdf743471665"}},{"ruleId":"D1","level":"warning","message":{"text":"CodeUpgrades.GetArgumentNameColons (cyclomatic 27): CodeUpgrades.GetArgumentNameColons has cyclomatic complexity 27 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/CodeUpgrade/CodeUpgrades.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"923e3e33a1e079dcbf2083c770462b0246078e3d4df608f53041d35ccda83149"}},{"ruleId":"D1","level":"warning","message":{"text":"ForwardRenderer.DrawCore (cyclomatic 26): ForwardRenderer.DrawCore has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"529c1ccf05d2721e991bed901720a1244081c9f2ba8b8f2a9cc319e704f34507"}},{"ruleId":"D1","level":"warning","message":{"text":"SpriteRenderFeature.Draw (cyclomatic 26): SpriteRenderFeature.Draw has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Sprites/SpriteRenderFeature.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0e65767c40b5ade67e146d1ae12cc3813ccc2c9379c5d3a0a4b2a7ca0887548"}},{"ruleId":"D1","level":"warning","message":{"text":"SpriteStudioRenderFeature.Draw (cyclomatic 26): SpriteStudioRenderFeature.Draw has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe8ff3d830631544cdf1125fbcabcc115a100fe793fddd4b389c1ea9370ba8c2"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderDefinition.ImportSymbol (cyclomatic 26): ShaderDefinition.ImportSymbol has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/SymbolTypes.cs"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"b71b5aaad6ebfb68acae1e38b296d19346ba7e14395fe8a199cc70d7c0708be4"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvContext.InsertWithoutDuplicates (cyclomatic 26): SpirvContext.InsertWithoutDuplicates has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.ExtractBuffers.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"9be197e5af29013f30b59464a5e6742530715784bed6987047dd6a2260e7c6b7"}},{"ruleId":"D1","level":"warning","message":{"text":"PrimitiveSerializer.ConvertFrom (cyclomatic 26): PrimitiveSerializer.ConvertFrom has cyclomatic complexity 26 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializers/PrimitiveSerializer.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ffad027f4adc21e553eee51a0f2e63d74f64f60e46c00e7a981eeb0a9c73821"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLogViewer.AppendText (cyclomatic 26): TextLogViewer.AppendText has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TextLogViewer.cs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"6574e0ea9f98fa7eb29287884efd7d7091d83e2de7cfb43f2b43c7d7f6f17f82"}},{"ruleId":"D1","level":"warning","message":{"text":"Vector4Editor.UpdateValueFromComponent (cyclomatic 26): Vector4Editor.UpdateValueFromComponent has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Vector4Editor.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e392a82f8cd1389ee59829e5ea74ce9dc91cde875a04a8d8c5b9d0b2a1ac3b4"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationBlender.Blend (cyclomatic 25): AnimationBlender.Blend has cyclomatic complexity 25 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationBlender.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"b60a9423acd77f7cb24a28775fe8b845430c0de74048d5a57a9861bc3bfb2f30"}},{"ruleId":"D1","level":"warning","message":{"text":"Image.Initialize (cyclomatic 25): Image.Initialize has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Graphics/Image.cs"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f57a67ce8ab68a67261e2d09ad34c9718c2f58ab3e496fc8476bfa2ad5e548c"}},{"ruleId":"D1","level":"warning","message":{"text":"Texture.InitializeFromImpl (cyclomatic 25): Texture.InitializeFromImpl has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"84b1d784f27c0abd64c65c39f3914926171a960387ded156ad4ff7bf0c6ae543"}},{"ruleId":"D1","level":"warning","message":{"text":"UIRenderFeature.DrawInternal (cyclomatic 25): UIRenderFeature.DrawInternal has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"f296d9275e698494f62946342c4e03b181ae072675077b853292e3e4252dede3"}},{"ruleId":"D1","level":"warning","message":{"text":"YamlAssetPath.ToMemberPath (cyclomatic 25): YamlAssetPath.ToMemberPath has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/YamlAssetPath.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"721e7ad3e0ee020235cb6f525c2a9dc0e06906defefd06365a22e059db98d9de"}},{"ruleId":"D1","level":"warning","message":{"text":"TilePanelNavigationBehavior.OnAssociatedObjectKeyDown (cyclomatic 25): TilePanelNavigationBehavior.OnAssociatedObjectKeyDown has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/TilePanelNavigationBehavior.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cf867859316422116883234c13d2203c9a1dc7bd7ba48e90a09964b06bd3ab7"}},{"ruleId":"D1","level":"warning","message":{"text":"HorizontalAndVerticalAxisRenderer.RenderMajorItems (cyclomatic 25): HorizontalAndVerticalAxisRenderer.RenderMajorItems has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/Axes/HorizontalAndVerticalAxisRenderer.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"54e182faaeb87248e4fab230da5899ade06ccfc31e2150ee5adcd1d97029cbc1"}},{"ruleId":"D1","level":"warning","message":{"text":"TemplatePreprocessor.DumbPruneUnreachableAssets (cyclomatic 25): TemplatePreprocessor.DumbPruneUnreachableAssets has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"981db133572faa6cf182eed28731d8782725ca265870432bd55a8bdefde27795"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicsShapesRenderingService.CreateChildEntity (cyclomatic 24): PhysicsShapesRenderingService.CreateChildEntity has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsShapesRenderingService.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3770aaa0e988526e1963bf120005143b9b1436e865b6abc7fcee17997248f5b"}},{"ruleId":"D1","level":"warning","message":{"text":"CharacterControllers.AnalyzeContactsForCharacterRegion (cyclomatic 24): CharacterControllers.AnalyzeContactsForCharacterRegion has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/Characters/CharacterControllers.cs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d9fa8873a50518ed673b5d5f335dafa3e6c0656ce767c066e18e94ca1e08fb3"}},{"ruleId":"D1","level":"warning","message":{"text":"CompositeLiteral.CompileImpl (cyclomatic 24): CompositeLiteral.CompileImpl has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Literals.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b615cf85167591e3ecb5497c2e12361e1827c6f8c92aa26435edd32906262e3"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderClass.CreateShaderType (cyclomatic 24): ShaderClass.CreateShaderType has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"770fbf1dcfdd62f0b3e77873b817d2021c5d664eea706cac82d23c1434f5a341"}},{"ruleId":"D1","level":"warning","message":{"text":"Parsers.VariableModifiers (cyclomatic 24): Parsers.VariableModifiers has cyclomatic complexity 24 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbda63108aab5c0c97bc8334c790935662411f50d77ccfa5e80991e27866a54a"}},{"ruleId":"D1","level":"warning","message":{"text":"NumberParser.Float (cyclomatic 24): NumberParser.Float has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/NumberParsers.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"b45fa95c31d0f278497b63cd02b542ccd0d26dd2f6369301ca794b76ccdf8aef"}},{"ruleId":"D1","level":"warning","message":{"text":"NamespaceParsers.Match (cyclomatic 24): NamespaceParsers.Match has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderFileParsers.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3de5e69e423211c68b911a15689adb4ed32bb321ff8c0d28d2235e094e4e4cd"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.BinaryOperation (cyclomatic 24): SpirvBuilder.BinaryOperation has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"681ce50655eef776819003699c4bf7678e3ab305bfd0ce954beb7b8fb4920267"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.CreateOperation (cyclomatic 24): SPVGenerator.CreateOperation has cyclomatic complexity 24 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Buffers.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a176471ed56b28eb7c5ccb0dd10452e74de036c53001acd0f165943bc42c3d4"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.GenerateEnumerantParameterSingle (cyclomatic 24): SPVGenerator.GenerateEnumerantParameterSingle has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce95e888c7cacff9e8ec704d3eade4d0d4b11e7794c9a3198193cf200e9b9e0e"}},{"ruleId":"D1","level":"warning","message":{"text":"ImageTester.CompareImage (cyclomatic 24): ImageTester.CompareImage has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/ImageTester.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"43233a04a369a1433c29400dc9e0c401f8e72dc46e19bc5f15d1c6da0198cab4"}},{"ruleId":"D1","level":"warning","message":{"text":"MemberPath.Apply (cyclomatic 24): MemberPath.Apply has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/MemberPath.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2b1512cdeb20309a345200d8e1e699a22fbc9bce2cc26330105afc25f745348"}},{"ruleId":"D1","level":"warning","message":{"text":"TagTypeSerializer.ReadYaml (cyclomatic 24): TagTypeSerializer.ReadYaml has cyclomatic complexity 24 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializers/TagTypeSerializer.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b2897810ac49322751e7e340cbc7377461bbcc01c9dc41503915fdb1789190"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetCollision.Clean (cyclomatic 24): AssetCollision.Clean has cyclomatic complexity 24 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetCollision.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e9e45bc618cc5c9d896387133497f3675821f77c834a01fff4341276ed13e6"}},{"ruleId":"D1","level":"warning","message":{"text":"TreeViewItem.OnKeyDown (cyclomatic 24): TreeViewItem.OnKeyDown has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeViewItem.cs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"7476fdd9a33f0f4387851aa62fe877502d506238e586d94ed048cec9b96ead08"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityHierarchyItemViewModel.CanAddOrInsertChildren (cyclomatic 24): EntityHierarchyItemViewModel.CanAddOrInsertChildren has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ea5739d768f7932ef8cb5503822ea487002a8510baf723f2cf83aeea766fd9"}},{"ruleId":"D1","level":"warning","message":{"text":"VisualScriptMethodViewModel.UpdateSlots (cyclomatic 24): VisualScriptMethodViewModel.UpdateSlots has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"afa9f36e0db2181129d37efa86e131a4ae5470695928dc969b0a0e12ebde95f8"}},{"ruleId":"D1","level":"warning","message":{"text":"TextureHelper.ImportTextureImageRaw (cyclomatic 24): TextureHelper.ImportTextureImageRaw has cyclomatic complexity 24 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e1eba5553e69680a6c5dfed4158d20b0be706d2848405e0e782dcd778b6e586"}},{"ruleId":"D1","level":"warning","message":{"text":"SpriteStudioModelAssetCommand.DoCommandOverride (cyclomatic 24): SpriteStudioModelAssetCommand.DoCommandOverride has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Offline/SpriteStudioModelAssetCompiler.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"b60c2adb83bf4ac1dbf52069b6377525f2712eb36f446a191aac01256211128f"}},{"ruleId":"D1","level":"warning","message":{"text":"Scheduler.Run (cyclomatic 23): Scheduler.Run has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.MicroThreading/Scheduler.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff6e7c29cb742c165189eb8617c8278c892ad5dfdd084d6e2ccc08fa17b46f35"}},{"ruleId":"D1","level":"warning","message":{"text":"MediaSynchronizer.Update (cyclomatic 23): MediaSynchronizer.Update has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Media/MediaSynchronizer.cs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"46131a005ffc9d33b0ab3be5c07e1a6ba159b218bc749e9f20d9fc989c53e385"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphicsDeviceManager.ChangeOrCreateDevice (cyclomatic 23): GraphicsDeviceManager.ChangeOrCreateDevice has cyclomatic complexity 23 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1153}}}],"partialFingerprints":{"codehealthFindingId/v1":"feb8367399d4e0c224a1eb2420c457abec912fae62cd3141f4d6acf945fb76a6"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandList.TransitionBoundResources (cyclomatic 23): CommandList.TransitionBoundResources has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcb7530a791768ac481086022f907f352cace76e812f199bd9929ab3cf6c1276"}},{"ruleId":"D1","level":"warning","message":{"text":"MaterialGeneratorContext.ProcessIntermediateLayer (cyclomatic 23): MaterialGeneratorContext.ProcessIntermediateLayer has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialGeneratorContext.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"091825130983a3802ff716a02e196cfcf6b6b7a394b19f763e00a225f228b635"}},{"ruleId":"D1","level":"warning","message":{"text":"CharacterControllers.TryReportContacts (cyclomatic 23): CharacterControllers.TryReportContacts has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/Characters/CharacterControllers.cs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"065d8d09f63a10ca960be72d9bb8a6e05176f713bf5b4133219d1fc57564b3aa"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstraintGizmo.Update (cyclomatic 23): ConstraintGizmo.Update has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ConstraintGizmo.cs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5ee086d7f6a5824647441c88eafdd09be191f36183beae06df3b8a742cb507c"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.PreProcessOperands (cyclomatic 23): SPVGenerator.PreProcessOperands has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebc666ff713e4c102994e6ecee9c7d2c7c1bb94eb3b14f5a8f27590a75440ccd"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteralValue.LiteralValue.ctor (cyclomatic 23): LiteralValue.LiteralValue.ctor has cyclomatic complexity 23 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Literals/LiteralValue.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"af87a9f7d8ed1488674a40e390b704aeb85599ba60956706804dabcb9ca16e5e"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderSourceToCode.ToCode (cyclomatic 23): ShaderSourceToCode.ToCode has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders/ShaderSourceToCode.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d2c3af743682ca0594d8edc4e5de2f42a787b811209bf1cd5aaa7c5cec2f0c0"}},{"ruleId":"D1","level":"warning","message":{"text":"AssemblyContainer.LoadAssemblyFromPathInternal (cyclomatic 23): AssemblyContainer.LoadAssemblyFromPathInternal has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"b496f995697b8190cc54f21fc6253e48053e379e8c68c84498d47f4ea5aa9d15"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetObjectNodeExtended.OnItemChanged (cyclomatic 23): AssetObjectNodeExtended.OnItemChanged has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/Internal/AssetObjectNodeExtended.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f1d2e5abfff39e42edbeb2dfafd56ba8470f4306f2aa10f8edb4b41803adcf0"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.LoadFromBuildManifest (cyclomatic 23): PackageSession.LoadFromBuildManifest has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"216a2b4a5e8aa02e75bf671e935ea87a0b8b53f8ec1100b1a7e5f2fe31529206"}},{"ruleId":"D1","level":"warning","message":{"text":"Trimming.ProcessTrimming (cyclomatic 23): Trimming.ProcessTrimming has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Trimming.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"e11aad5896f1302cc6b4d459fb30b8bc1d3cfcd53864ea62cf80345f2f3b6d12"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualizingTreePanel.MeasureOverride (cyclomatic 23): VirtualizingTreePanel.MeasureOverride has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VirtualizingTreePanel.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"79e468149c61498a89d835e7e4ac02b684b1d8bc23c77e03184979508603d9ba"}},{"ruleId":"D1","level":"warning","message":{"text":"ViewportGridGizmo.UpdateGrids (cyclomatic 23): ViewportGridGizmo.UpdateGrids has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ViewportGridGizmo.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9c0b7735e860ce5ba9598f3615d7abfe809a08af1f907d847489d2f7ba34443"}},{"ruleId":"D1","level":"warning","message":{"text":"EditorContentLoader.AssetPropertiesChanged (cyclomatic 23): EditorContentLoader.AssetPropertiesChanged has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/ContentLoader/EditorContentLoader.cs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f3e2761299bb9e3e3c1d9abca8119d267d77f7f80e24eeb2f3f51058f182f95"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityExtensions.CalculateBoundSphere (cyclomatic 23): EntityExtensions.CalculateBoundSphere has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Engine/EntityExtensions.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cab3e17f80fdca4ad4ce43e3a159b639e466612810795c3c4e38542b75617d6"}},{"ruleId":"D1","level":"warning","message":{"text":"PrefabModelAssetCompileCommand.DoCommandOverride (cyclomatic 23): PrefabModelAssetCompileCommand.DoCommandOverride has cyclomatic complexity 23 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/PrefabModelAssetCompiler.cs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c09da761d64d0872da78d367229b716aedc359b9d065257a55ddc5789477c87"}},{"ruleId":"D1","level":"warning","message":{"text":"StridePackageUpgrader.UpgradeProjectTo44 (cyclomatic 23): StridePackageUpgrader.UpgradeProjectTo44 has cyclomatic complexity 23 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 4 belong to 3 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/StridePackageUpgrader.cs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2a8475454a5806c23babd5a9561b9926e74672db5e02a6384e7d06197c743c6"}},{"ruleId":"D1","level":"warning","message":{"text":"CameraProcessor.Draw (cyclomatic 22): CameraProcessor.Draw has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Processors/CameraProcessor.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"54a15398386e5e2af96dab04cda4a8f254da5ae9d1a7e2a857d717faecda530e"}},{"ruleId":"D1","level":"warning","message":{"text":"VertexHelper.GenerateTangentBinormal (cyclomatic 22): VertexHelper.GenerateTangentBinormal has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ee2fa96923245e3f597899c9c196d31403c2c1c8f3956f157a269b7bccd1686"}},{"ruleId":"D1","level":"warning","message":{"text":"BowyerWatsonTetrahedralization.AddVertex (cyclomatic 22): BowyerWatsonTetrahedralization.AddVertex has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"c356057f1e3d0bef75c5176177ebcde71ee450b2e129784398cdb678322c12f4"}},{"ruleId":"D1","level":"warning","message":{"text":"ForwardLightingRenderFeature.PrepareEffectPermutations (cyclomatic 22): ForwardLightingRenderFeature.PrepareEffectPermutations has cyclomatic complexity 22 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 6 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9833bcf2328644cb938b530d96bec5532fd8de685593c05e88db2e60f3ed967"}},{"ruleId":"D1","level":"warning","message":{"text":"RenderSystem.Draw (cyclomatic 22): RenderSystem.Draw has cyclomatic complexity 22 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 4 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderSystem.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e4626f86b7f910ce8263ff8259344a1420b3df652a0c553b1a11b3aff964f3"}},{"ruleId":"D1","level":"warning","message":{"text":"UIRenderFeature.UpdateTouchEvents (cyclomatic 22): UIRenderFeature.UpdateTouchEvents has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.Picking.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"5faf262af24b3bc2eb8eb6905b25d260331644d60b63d9cbf13db2c4a566f7a0"}},{"ruleId":"D1","level":"warning","message":{"text":"ContactEventsManager.RunManifoldEvent (cyclomatic 22): ContactEventsManager.RunManifoldEvent has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Contacts/ContactEventsManager.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"2da1305d0de93600c45d726999076588b7673475bd323e82c5eb723a83474f26"}},{"ruleId":"D1","level":"warning","message":{"text":"IntrinsicsGenerator.GenerateIntrinsicsCall (cyclomatic 22): IntrinsicsGenerator.GenerateIntrinsicsCall has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/IntrinsicGenerator.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"125b6c415bc060a62e45134e8f9791bbf232e0ab42f22888b1ee7ba872ea5894"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.AnalyzeBinaryOperation (cyclomatic 22): SpirvBuilder.AnalyzeBinaryOperation has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"235abc5d5467a050a9ccd1083a3c382fbd630fbb1d659937b4034d1d02cdb148"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeDuplicateHelper.ProcessSortedInstructions (cyclomatic 22): TypeDuplicateHelper.ProcessSortedInstructions has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"cffe188880b8c4b5d663809e0cea751a998f8f72a4be7da79a253eed02e06465"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.PreProcessInstructions (cyclomatic 22): SPVGenerator.PreProcessInstructions has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Preprocessing.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a5eaa7207d601bc6a938c68f40bc8f90359393b7b97d5280d8cdde9bf2554a8"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandIOMonitor.CommandEnded (cyclomatic 22): CommandIOMonitor.CommandEnded has cyclomatic complexity 22 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 5 belong to 5 function literals inside it that branch. To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/CommandIOMonitor.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bdad2082797011e6201be9e1c6c12f993894f4b2a889db2bf26df20505025dd"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.ContributeManifest (cyclomatic 22): PackageSession.ContributeManifest has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"56ca7ea1f6cdb800cfafcc975e59eab80fb9bfcfe9c703326364c2606b02bc10"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.UpdateDependencies (cyclomatic 22): PackageSession.UpdateDependencies has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"860c6dbd8dd19cdb52801ce396c3abafdab54c4ab30d75d629b0a5b6790c4146"}},{"ruleId":"D1","level":"warning","message":{"text":"EditorGameMaterialHighlightService.Update (cyclomatic 22): EditorGameMaterialHighlightService.Update has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameMaterialHighlightService.cs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"82db5fdb5674651e0a4e65595e52b3895b6559fc8e2367bc494b5d494993d3ae"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolSearchHelper.GenerateSymbolSearchValues (cyclomatic 22): SymbolSearchHelper.GenerateSymbolSearchValues has cyclomatic complexity 22 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 8 belong to 4 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc535aaef90d5e138a8d490a9e506c569397019a3561668dfd08664a8df98317"}},{"ruleId":"D1","level":"warning","message":{"text":"DirectoryBaseViewModel.CanAddChildren (cyclomatic 22): DirectoryBaseViewModel.CanAddChildren has cyclomatic complexity 22 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 3 belong to 3 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/DirectoryBaseViewModel.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"e25dfa11a60f12d9f214482708fa7e4747e523241c146a5aa069ef6aa01ca220"}},{"ruleId":"D1","level":"warning","message":{"text":"ReferenceSerializer.Serialize (cyclomatic 21): ReferenceSerializer.Serialize has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ReferenceSerializer.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"5805390c886d23a7509a49c9e833d21e2793cd7566f700953bb6980699655e51"}},{"ruleId":"D1","level":"warning","message":{"text":"AudioEmitterProcessor.Draw (cyclomatic 21): AudioEmitterProcessor.Draw has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Audio/AudioEmitterProcessor.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"882ddcdd50ed3f13b75432ac22227895b133486641dbe51a73b2026b219ee104"}},{"ruleId":"D1","level":"warning","message":{"text":"ParameterCollection.UpdateLayout (cyclomatic 21): ParameterCollection.UpdateLayout has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Rendering/ParameterCollection.cs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdde262571e2a8d4d6875e36200bcec21e68450d9352194bfdc2a22106636560"}},{"ruleId":"D1","level":"warning","message":{"text":"Texture.GetImageView (cyclomatic 21): Texture.GetImageView has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7586aad67006424267c759d16bd4994f4331b1923e8ba999b5bfe93a347640a"}},{"ruleId":"D1","level":"warning","message":{"text":"NavigationBuilder.BuildNavmesh (cyclomatic 21): NavigationBuilder.BuildNavmesh has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationBuilder.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"146e6635dbd1ef4b56732448e71b44cd071b1dca82ba1deb5ae1be209b0e0d91"}},{"ruleId":"D1","level":"warning","message":{"text":"Simulation.SendEvents (cyclomatic 21): Simulation.SendEvents has cyclomatic complexity 21 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7ad5f189c9381f59070b9b975853183587e479dc2a490b762ceed3d0011cc4"}},{"ruleId":"D1","level":"warning","message":{"text":"MergeExtensions.MergeDrawData (cyclomatic 21): MergeExtensions.MergeDrawData has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/MergeExtensions.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"83ca7846a16e348e56f656450ec443173cf5b942e65a1960159a7ba6d70dc602"}},{"ruleId":"D1","level":"warning","message":{"text":"RootEffectRenderFeature.Prepare (cyclomatic 21): RootEffectRenderFeature.Prepare has cyclomatic complexity 21 (threshold 15). Most of this is not in the body itself: 3 of the 21 points are its own statements and the rest belongs to one function literal inside it that branches (line 728). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"421174d1e3a5e8493a752ae370ad0c08a3286c143311aa881cd136729bed6567"}},{"ruleId":"D1","level":"warning","message":{"text":"EffectCompilerCache.Compile (cyclomatic 21): EffectCompilerCache.Compile has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/Compiler/EffectCompilerCache.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"dab3d8bc4d3f7b1b48359e42077fe4e5e88325d129c84151bb8a6d212bcc24cf"}},{"ruleId":"D1","level":"warning","message":{"text":"Identifier.IsMatrixSwizzle (cyclomatic 21): Identifier.IsMatrixSwizzle has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Literals.cs"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"58f91a8337975815e37d6f957d0ad1b8c33af629ec4da6a7888f7e512c490edb"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderClassParser.Match (cyclomatic 21): ShaderClassParser.Match has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderClassParser.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"d298691353688ec3def7808f4e26bb29897ba8ac90435f1f13ff359cff55c3bf"}},{"ruleId":"D1","level":"warning","message":{"text":"ImageThreshold.Resolve (cyclomatic 21): ImageThreshold.Resolve has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/ImageThreshold.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"45bf075d2551c4092d00c8ec0efaa930833cfc9d2a305df5254d479b8a88186a"}},{"ruleId":"D1","level":"warning","message":{"text":"PrimitiveSerializer.ConvertTo (cyclomatic 21): PrimitiveSerializer.ConvertTo has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializers/PrimitiveSerializer.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"46958430e742488c226daa2d22c4778c7bd11e29774c112747cf7e7f2223e929"}},{"ruleId":"D1","level":"warning","message":{"text":"TreeSet.Remove (cyclomatic 21): TreeSet.Remove has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/SortedDictionary.cs"},"region":{"startLine":1181}}}],"partialFingerprints":{"codehealthFindingId/v1":"67b17e55a0e0e2c0690d0f0fc200741e61c29dacb4d83e1007f23c7a8142bc02"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.LoadPackageDependenciesFromLockFile (cyclomatic 21): PackageSession.LoadPackageDependenciesFromLockFile has cyclomatic complexity 21 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"008705ccb0022274febf2d9859b8a4926348acb4f58da1fd693ae00b8e341336"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.TryLoadAssemblies (cyclomatic 21): PackageSession.TryLoadAssemblies has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1557}}}],"partialFingerprints":{"codehealthFindingId/v1":"8137e76d390e59cd0427cf1317fe2e923fa1e31262fc6a1ed931386d2936a815"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeViewModel.CheckDynamicMemberConsistency (cyclomatic 21): NodeViewModel.CheckDynamicMemberConsistency has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"da89a255d2260bbdf1268b9a372377ac337e6e10bf993a7c06da2c1f8e6ec727"}},{"ruleId":"D1","level":"warning","message":{"text":"Vector3Editor.UpdateValueFromComponent (cyclomatic 21): Vector3Editor.UpdateValueFromComponent has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Vector3Editor.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f372ed9047aab9642597e3018b5d3b151a316fd73a18ddd5f6b10c5a8b2436b"}},{"ruleId":"D1","level":"warning","message":{"text":"CrashReportHelper.SendReport (cyclomatic 21): CrashReportHelper.SendReport has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Helpers/CrashReportHelper.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a97847ade8501878f4196bb778dfc73d259a3b6ba8c7aacce59e6eb15cc359b"}},{"ruleId":"D1","level":"warning","message":{"text":"ColliderShapeCombineCommand.DoCommandOverride (cyclomatic 21): ColliderShapeCombineCommand.DoCommandOverride has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Physics/ColliderShapeAssetCompiler.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"5503fb0ac030aa186b20e0f1e7de4ca25bbf0af189b1fad491b7c3415105d4e1"}},{"ruleId":"D1","level":"warning","message":{"text":"TexImage.Equals (cyclomatic 21): TexImage.Equals has cyclomatic complexity 21 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TexImage.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"84cbd3bdac3c6a3528d61358030f5cbc2f7a0c06c7fa6f4ae6e95fe67804d23f"}},{"ruleId":"D1","level":"warning","message":{"text":"GameProfilingSystem.ReadEventsAsync (cyclomatic 20): GameProfilingSystem.ReadEventsAsync has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Profiling/GameProfilingSystem.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"03ea4aa2ffa76c9754e9192f649d50eac25882842a2e508d5e9b3458c66a7d9b"}},{"ruleId":"D1","level":"warning","message":{"text":"Plane.New (cyclomatic 20): Plane.New has cyclomatic complexity 20 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Plane.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bfb479a584fac66e4a3a567b9509229f334c9250d107581d25700ca26ccc013"}},{"ruleId":"D1","level":"warning","message":{"text":"VertexBufferHelper.Copy (cyclomatic 20): VertexBufferHelper.Copy has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexBufferHelper.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef10cd66b13024c5a2895d1be5865c0edaf59756ba5a7e7795cfb7de635c33cd"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandList.Copy (cyclomatic 20): CommandList.Copy has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"6633228d8d095f156b8954adda5da86c10e5ebee61ff8a30fef163a2e3b9b605"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandList.CopyRegion (cyclomatic 20): CommandList.CopyRegion has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1244}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ee612f06cfcb6e84bdc79816a54b580ee492fda0f04cae170207d4765b7614e"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandList.MapSubResource (cyclomatic 20): CommandList.MapSubResource has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1631}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ac3752f15ec93ae67f43a29daa842157799f52e1caef3fc48c4c1e97cecbe73"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphicsAdapterFactoryInstance.DebugReport (cyclomatic 20): GraphicsAdapterFactoryInstance.DebugReport has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapterFactory.Vulkan.cs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e365a6fc8a95ec8fe54c483c5b75d88c1fe6c8512f4cb09886d4331c3ce540d"}},{"ruleId":"D1","level":"warning","message":{"text":"GamePadLayout.MapInputEvent (cyclomatic 20): GamePadLayout.MapInputEvent has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Input/GamePadLayouts/GamePadLayout.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a2a65479cc8b54319d4f62199b7fded79bc7ca62d04c7ebd433019a07adcb5c"}},{"ruleId":"D1","level":"warning","message":{"text":"InitialDefaultFields.Initialize (cyclomatic 20): InitialDefaultFields.Initialize has cyclomatic complexity 20 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"5af0c3a5a603673fe852c322a320e24b2d41bf108d847b3e4cc550e6a76c70a3"}},{"ruleId":"D1","level":"warning","message":{"text":"LightShafts.DrawCore (cyclomatic 20): LightShafts.DrawCore has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/LightShafts/LightShafts.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"661610cfe011dfe8067e68dfced53a2e0ed8f48f18f7a7fb7fa8e9b1508bbb50"}},{"ruleId":"D1","level":"warning","message":{"text":"ImageSizeHelper.CalculateImageSizeFromAvailable (cyclomatic 20): ImageSizeHelper.CalculateImageSizeFromAvailable has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/ImageSizeHelper.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a4f440ea38b13afdb36d552067a1378351827c1b2bb82be1d035f393bc5528"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultSliderRenderer.RenderColor (cyclomatic 20): DefaultSliderRenderer.RenderColor has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec64800763d7dc7f34cb0f06da8f59e5105891e0c6940708e2f90dbf49553f8"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvTranslator.Translate (cyclomatic 20): SpirvTranslator.Translate has cyclomatic complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SpirvTranslator.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce83fa9cb6dd3774ce08a9f0f3cf46effed3d1bcca2cada8c0cc3be895672796"}},{"ruleId":"D1","level":"warning","message":{"text":"IntrinsicsGenerator.GenerateIntrinsicsData (cyclomatic 20): IntrinsicsGenerator.GenerateIntrinsicsData has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/IntrinsicGenerator.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"738c15f9229c009232a51d9b3876037fe50b1b52e9f77a543cf31ae49cebea91"}},{"ruleId":"D1","level":"warning","message":{"text":"MethodCall.CompileImpl (cyclomatic 20): MethodCall.CompileImpl has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4701c032de54191fe0ef3f611a69165897b9e4bf4d7ce8e6595507e8933bd63"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMember.ProcessSymbol (cyclomatic 20): ShaderMember.ProcessSymbol has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.MethodOrMember.cs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d4ed1e85d8d28e104aea6db0e9ef63c83c38b588585de65280a59f18e5c4ecf"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.GenerateImplicitCasting (cyclomatic 20): SPVGenerator.GenerateImplicitCasting has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"14aaacd94527adea520a216c8ceace184c150391cf4cd194681f7bc6de840bcc"}},{"ruleId":"D1","level":"warning","message":{"text":"OperandEnumerator.MoveNext (cyclomatic 20): OperandEnumerator.MoveNext has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Parsing/OperandEnumerator.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb2a8f4b813c0bccbf0e9fdc9f09ac08baee851fe0fb60e251fa6fe3b65e9c1b"}},{"ruleId":"D1","level":"warning","message":{"text":"SpvOperand.To (cyclomatic 20): SpvOperand.To has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/SpvLiteral.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"60b61822bdf770dc7a5773c8a1ada18745c603dc0b324e237b94aafe020b910e"}},{"ruleId":"D1","level":"warning","message":{"text":"Project.GetDependencies (cyclomatic 20): Project.GetDependencies has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Solutions/Project.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bc7afb273de432edb10f9d8c00397d1eb63aa926ece1183a481214ddb9aa55a"}},{"ruleId":"D1","level":"warning","message":{"text":"Emitter.WriteFoldedScalar (cyclomatic 20): Emitter.WriteFoldedScalar has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1084}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad771b7e566b38ba9ced0ba05013a9aa4f35085cc3b8b4ce88b60040a0ffffbe"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityHierarchyItemViewModel.MoveChildren (cyclomatic 20): EntityHierarchyItemViewModel.MoveChildren has cyclomatic complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a4015933ca24abdb1aa7a39982a65e630d47be3ac3ae72bb854b24078362bd8"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformationGizmo.TransformSceneEntityBase (cyclomatic 20): TransformationGizmo.TransformSceneEntityBase has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TransformationGizmo.cs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"30bc1552aaba8f9139a998a98981709a8b4ca11d3aa4b1da65eb664632355979"}},{"ruleId":"D1","level":"warning","message":{"text":"EditorContentLoader.CheckAssetsToReload (cyclomatic 20): EditorContentLoader.CheckAssetsToReload has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 1 of the 20 points is its own statement and the rest belongs to 2 function literals inside it that branch (lines 330, 414). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/ContentLoader/EditorContentLoader.cs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"4132279f26ce1e3fdb8c8514388a4fd04716e8656db6ed351cce764f0dc26293"}},{"ruleId":"D1","level":"warning","message":{"text":"RoslynHelper.AnalyzeBlockFlow (cyclomatic 20): RoslynHelper.AnalyzeBlockFlow has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/RoslynHelper.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"229bb049c45e7a2433560b40c6d0d7a143eded8d8484e1e3c60abd067d4dea3e"}},{"ruleId":"D1","level":"warning","message":{"text":"XamlExtractor.ParseLocalizeExtension (cyclomatic 20): XamlExtractor.ParseLocalizeExtension has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Extractors/XamlExtractor.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba3d8a34cdf2cbe2d92bf5fa49df21ed1f64c0bd26a9418756af31c2f6244716"}},{"ruleId":"D1","level":"warning","message":{"text":"NuGetAssemblyResolver.SetupNuGet (cyclomatic 20): NuGetAssemblyResolver.SetupNuGet has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 6 of the 20 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 76, 100). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shared/Stride.NuGetResolver/NuGetAssemblyResolver.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"a424f919207b1793ca4a1886a1289b023ca038fcc5236820565b4d44854e6d2e"}},{"ruleId":"D1","level":"warning","message":{"text":"DxtTexLib.Export (cyclomatic 20): DxtTexLib.Export has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/DxtTexLib.cs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"21b2bd5f2b859fadd7c0577c5bcae26f2f4f581a892e7463c0a862d9803bf97e"}},{"ruleId":"D1","level":"warning","message":{"text":"CompressedSoundSource.ExtractAndFillData (cyclomatic 19): CompressedSoundSource.ExtractAndFillData has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio/CompressedSoundSource.cs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de91e203c0aa31f83a5d20c204cd3f05302cb203817463ceb9c856f7ea41e0f"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphicsAdapterFactoryInstance.GraphicsAdapterFactoryInstance.ctor (cyclomatic 19): GraphicsAdapterFactoryInstance.GraphicsAdapterFactoryInstance.ctor has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapterFactory.Vulkan.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee9508734b426c1b5482367b22ac03165fe9fa5e586c0a45b21e8c961991e84e"}},{"ruleId":"D1","level":"warning","message":{"text":"ParticleEmitter.SimulationSpaceChanged (cyclomatic 19): ParticleEmitter.SimulationSpaceChanged has cyclomatic complexity 19 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleEmitter.cs"},"region":{"startLine":1028}}}],"partialFingerprints":{"codehealthFindingId/v1":"51033187ad6499dc898136305398fa34d290463a9d9820dffa0bb54ceba7da53"}},{"ruleId":"D1","level":"warning","message":{"text":"Simulation.CreateConstraintInternal (cyclomatic 19): Simulation.CreateConstraintInternal has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"03c26463d9f5faf175fbf1cca297cb8701f8c6ab7f3ca222076b91b9e55e0822"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalReflections.DrawCore (cyclomatic 19): LocalReflections.DrawCore has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/LocalReflections/LocalReflections.cs"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8cffd39f61d56bdaf88769f1ca081707150aa6dc6bbf10a467561ed541e1eae"}},{"ruleId":"D1","level":"warning","message":{"text":"FFmpegVideoBackend.Update (cyclomatic 19): FFmpegVideoBackend.Update has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/Backends/FFmpegVideoBackend.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7f5733fa78e957ac0e6288df6bbbf98a197d968bbc20815d35cb2b9b596a737"}},{"ruleId":"D1","level":"warning","message":{"text":"SDSLC.Compile (cyclomatic 19): SDSLC.Compile has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/SDSLC.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ae3ff0c52e9ebc1adfe71cfac2140179e47b466f4000f7e200ac8eec0ef92de"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.BuildTypesAndMethodGroups (cyclomatic 19): ShaderMixer.BuildTypesAndMethodGroups has cyclomatic complexity 19 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"1abf623d384fec6ad47c9b9c6960e2b350698b82b5a6bfb4fd305bcda4e2c3e7"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.RenameVariables (cyclomatic 19): ShaderMixer.RenameVariables has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.Reflection.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7c160f8c3fd1d02d95d5d857954882d7195bfaa46fd95817f35beb88edf2da9"}},{"ruleId":"D1","level":"warning","message":{"text":"PrefixExpression.CompileImpl (cyclomatic 19): PrefixExpression.CompileImpl has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"e823063a552e9f11c05dd23112b6b93168b5a9b12a10975376b96f575bb3cf93"}},{"ruleId":"D1","level":"warning","message":{"text":"MatrixParser.Match (cyclomatic 19): MatrixParser.Match has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/LiteralParsers.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c7eb5c974b1a1f27fadcd955efb7ea2a964a8ca074c76eae9cb6c639b45516a"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.BuildInheritanceListWithoutSelf (cyclomatic 19): SpirvBuilder.BuildInheritanceListWithoutSelf has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"e473cd5904edee8f808f7525be957c0af3eb687c73e00338bf71de8d7ff4b65c"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.PreProcessEnumerants (cyclomatic 19): SPVGenerator.PreProcessEnumerants has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Preprocessing.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"e468fcb2c33508bd2891a9bd7358dded6bd5009b6c0fc34753914932ec9162de"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.GenerateInstructionStructsSingle (cyclomatic 19): SPVGenerator.GenerateInstructionStructsSingle has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Instructions.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"35ae9caef496fdcfde045ed63daa8a99ab28744930a4809501c0d2939f56a963"}},{"ruleId":"D1","level":"warning","message":{"text":"GameTestBase.SaveImage (cyclomatic 19): GameTestBase.SaveImage has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"55266ebdc3e4da7392539658aeee11b463a7a0f6b5e004c24ce20434a91a8346"}},{"ruleId":"D1","level":"warning","message":{"text":"UPath.MakeRelative (cyclomatic 19): UPath.MakeRelative has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/IO/UPath.cs"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"716b734a62a4aa156726b548edcc293610b13a7a20e329586c9587f99bcf226f"}},{"ruleId":"D1","level":"warning","message":{"text":"Emitter.EmitDocumentStart (cyclomatic 19): Emitter.EmitDocumentStart has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"f98df4da87bb504ba7e33fa62af3f987466bde7dce1318c26b9a54c26b9a124a"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetMigration.MigrateAssetIfNeeded (cyclomatic 19): AssetMigration.MigrateAssetIfNeeded has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetMigration.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cbb91ed1b239b5c54b9904ae4ed92f97df679c42fba310bb75800c206b23469"}},{"ruleId":"D1","level":"warning","message":{"text":"DateTimeEditor.UpdateValueFromComponent (cyclomatic 19): DateTimeEditor.UpdateValueFromComponent has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/DateTimeEditor.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d5c8562173e4b3e92c450be5717d46e93c17bdb243e78ba881ddfec0e1a4f4d"}},{"ruleId":"D1","level":"warning","message":{"text":"ScaleBar.AdjustUnitIntervalWithUnitSystem (cyclomatic 19): ScaleBar.AdjustUnitIntervalWithUnitSystem has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/ScaleBar.cs"},"region":{"startLine":842}}}],"partialFingerprints":{"codehealthFindingId/v1":"56b80fd28b9f68c84e65ead6553bda4516f5a6a6399f4677d3df5a27c25abcbf"}},{"ruleId":"D1","level":"warning","message":{"text":"TemplateProviderBase.CompareTo (cyclomatic 19): TemplateProviderBase.CompareTo has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/View/TemplateProviderBase.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"b21d30fe0ff5b13e15ea6d0f32af2acd848ac10b804995e3770d0f609ea63575"}},{"ruleId":"D1","level":"warning","message":{"text":"ReferenceEnumerable.Refresh (cyclomatic 19): ReferenceEnumerable.Refresh has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/References/ReferenceEnumerable.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"21ab30435b22a8e5b33e82fd900345da1be8f2d61ccbfc731a5a74b2f8c4aec5"}},{"ruleId":"D1","level":"warning","message":{"text":"EditorGameEntityCameraService.UpdateCamera (cyclomatic 19): EditorGameEntityCameraService.UpdateCamera has cyclomatic complexity 19 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"91251e789c8335a94c0b769e4d0a403d7a945a8a7ed994a4dee4f07b80f0dbfd"}},{"ruleId":"D1","level":"warning","message":{"text":"ThicknessEditor.UpdateValueFromComponent (cyclomatic 19): ThicknessEditor.UpdateValueFromComponent has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Views/ThicknessEditor.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb93a9ab9a1c6c6b35a3127e1856e888577c423875fc935af8a82f02cab24af"}},{"ruleId":"D1","level":"warning","message":{"text":"MaterialViewModel.OnAssetPropertyChanged (cyclomatic 19): MaterialViewModel.OnAssetPropertyChanged has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/MaterialViewModel.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"739d5559dc516081db510f9016c5be5c2f7e5e0a71caa6bae5bbbfcf55889f2e"}},{"ruleId":"D1","level":"warning","message":{"text":"ParticleSystemComponentViewModel.FinalizeNodePresenterTree (cyclomatic 19): ParticleSystemComponentViewModel.FinalizeNodePresenterTree has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/ParticleSystemComponentViewModel.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c67f74e1855a12658745398b4a19d3f9c7cde25b883c75783b1aac6028f0594"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetCollectionViewModel.AddChildren (cyclomatic 19): AssetCollectionViewModel.AddChildren has cyclomatic complexity 19 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1638}}}],"partialFingerprints":{"codehealthFindingId/v1":"45717b2e0e606978fe190408abae6401c8edb5b9123089e8639fd1ef969e62fb"}},{"ruleId":"D1","level":"warning","message":{"text":"HullDecomposition.DoCommandOverride (cyclomatic 19): HullDecomposition.DoCommandOverride has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/BepuPhysics/HullAssetCompiler.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ead4149fa3f081f31f48d6b4a345276404aba336ba7f9fcb2d3c444d188c990"}},{"ruleId":"D1","level":"warning","message":{"text":"TextureTool.FindSpriteRegion (cyclomatic 19): TextureTool.FindSpriteRegion has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TextureTool.cs"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"96a83d4a10581dd9df3e16720f5b43dd541adc0de55c823819229263ae773eea"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualFileSystem.ResolveAbsolutePath (cyclomatic 18): VirtualFileSystem.ResolveAbsolutePath has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/VirtualFileSystem.cs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"8258bab2c5bbc2d7e85ba5140da6de46c51267f7628dce7c9a3155d919361a97"}},{"ruleId":"D1","level":"warning","message":{"text":"NativeLibraryHelper.PreloadLibrary (cyclomatic 18): NativeLibraryHelper.PreloadLibrary has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Native/NativeLibraryHelper.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"c798d10cd2a85185e87e68b2f03baeff01dd849a96366895d5cec8753ab20c45"}},{"ruleId":"D1","level":"warning","message":{"text":"Internals.Wait (cyclomatic 18): Internals.Wait has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Threading/ThreadPool.SemaphoreW.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6540ef7fe6a0439448115b5245e51e828e20779df5839e9699a7264e9d5056"}},{"ruleId":"D1","level":"warning","message":{"text":"SceneSystem.Draw (cyclomatic 18): SceneSystem.Draw has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/SceneSystem.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"24919db4b9e0090b5bd38cb574810c7424d4e0b6a293dd1a318056c834c24466"}},{"ruleId":"D1","level":"warning","message":{"text":"ForwardRenderer.CollectCore (cyclomatic 18): ForwardRenderer.CollectCore has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"690cb346f4e30607af04d17e2ce5502b7340701b8a3fb4e9a54b7c043415c4da"}},{"ruleId":"D1","level":"warning","message":{"text":"OculusTouchController.IsPressedDown (cyclomatic 18): OculusTouchController.IsPressedDown has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OculusOVR/OculusTouchController.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"be9b4125158a204b89ce2bc804e613993957ce1224f2ad37cb0b36a374470d7e"}},{"ruleId":"D1","level":"warning","message":{"text":"OculusTouchController.IsTouchedDown (cyclomatic 18): OculusTouchController.IsTouchedDown has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OculusOVR/OculusTouchController.cs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"039db8e90cc4a7721dd4d63a1d6b38a1c9ef7fad37ace7044cf374871d1b58f2"}},{"ruleId":"D1","level":"warning","message":{"text":"OculusTouchController.IsPressReleased (cyclomatic 18): OculusTouchController.IsPressReleased has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OculusOVR/OculusTouchController.cs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"30360e313e255de37b2ebfd561fe56d96df3a77465065d5ac610c96962acdf28"}},{"ruleId":"D1","level":"warning","message":{"text":"OculusTouchController.IsTouchReleased (cyclomatic 18): OculusTouchController.IsTouchReleased has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OculusOVR/OculusTouchController.cs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"602b2eef99bd8aad24dfb97ff8d72e8f97691312e50203e27ac8a5a71f1b6947"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.ProcessClasses (cyclomatic 18): ShaderMixer.ProcessClasses has cyclomatic complexity 18 (threshold 15). Of this number, 11 points are the body\u0027s own statements and 7 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.ShaderSourceEvaluator.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"19025ac00923752c921637e50f0f1195eee514eaa3db9ade1b92df8ac3cc7709"}},{"ruleId":"D1","level":"warning","message":{"text":"MixinParser.Match (cyclomatic 18): MixinParser.Match has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDFX/Parsers/EffectStatementParsers.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"237427e9a9e41f22f48392f68e6097b1ca6c70864c1e274ff01c1c497d23a856"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteralsParser.Vector (cyclomatic 18): LiteralsParser.Vector has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/LiteralParsers.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"10ed688c6f29a4fc693883faaefc6be3920c7ec8f6d536ca0ad8d30ed84561dd"}},{"ruleId":"D1","level":"warning","message":{"text":"Builder.ScheduleBuildStep (cyclomatic 18): Builder.ScheduleBuildStep has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 6 of the 18 points are its own statements and the rest belongs to one function literal inside it that branches (line 606). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Builder.cs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba02a8b8c2efb1150d269f4fd393967e91c4a5c8bf3b0cd4532bb11854e26941"}},{"ruleId":"D1","level":"warning","message":{"text":"Package.LoadAssemblyReferenceInternal (cyclomatic 18): Package.LoadAssemblyReferenceInternal has cyclomatic complexity 18 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"94e7a87c31bfd0a67dd1c5580da551f7b6e30c7576e587cca18a599e1a53b060"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageAssetCollection.CheckCanAdd (cyclomatic 18): PackageAssetCollection.CheckCanAdd has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageAssetCollection.cs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d5d42ebf9fa6a8b2dc47d2e57564c763626061f05135334f6dd5986ce1c190b"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageContainer.Save (cyclomatic 18): PackageContainer.Save has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"b31c7bc398b44a616aa8300a340067a31d1b825b25e8a5cc573c678fc38c1bb5"}},{"ruleId":"D1","level":"warning","message":{"text":"EditorGameEntitySelectionService.Execute (cyclomatic 18): EditorGameEntitySelectionService.Execute has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntitySelectionService.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"37008d06aa00d6c8299dd9cdfb48af6743e038b8d6a73498729a22a7b8b75aac"}},{"ruleId":"D1","level":"warning","message":{"text":"DotNetNewTemplateParametersWindow.Humanize (cyclomatic 18): DotNetNewTemplateParametersWindow.Humanize has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/DotNetNewTemplateParametersWindow.xaml.cs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"2216d992dd532cf34905304129346e4bbb0fee9441a4c351e870da834ea8724e"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetEditorsManager.OpenAssetEditorWindow (cyclomatic 18): AssetEditorsManager.OpenAssetEditorWindow has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/AssetsEditors/AssetEditorsManager.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"63864bd7bd3048e35115d6388405dfddf851b4b552be7acc4192b59455025b36"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolRewriteEngine.ApplyAsync (cyclomatic 18): SymbolRewriteEngine.ApplyAsync has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/CodeUpgrade/SymbolRewriteEngine.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"67cf3250d314ffd5d00be68619245117bbb7dbd3f4c5e929b462b31335aec34d"}},{"ruleId":"D1","level":"warning","message":{"text":"MeshConverter.GenerateOneTextureTypeLayers (cyclomatic 18): MeshConverter.GenerateOneTextureTypeLayers has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1375}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d52b7519897564fdd23387596d5a4af48e994b8e724e68427e40c30ba26c516"}},{"ruleId":"D1","level":"warning","message":{"text":"Program.Run (cyclomatic 18): Program.Run has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/Console/Program.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"539a5d864c6473c458dc533a6aaf787587ffae01667736cf06aaa1f296cad0ff"}},{"ruleId":"D1","level":"warning","message":{"text":"TextureTool.GetAlphaLevels (cyclomatic 18): TextureTool.GetAlphaLevels has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TextureTool.cs"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a4f85e26bfbac09546bf88bf09f6e45cf7e73d4d87a75e90f779d0fbf78612"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationBlender.CreateEvaluator (cyclomatic 17): AnimationBlender.CreateEvaluator has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationBlender.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"44076537ffd74e3643b918729cc0d3816b843074d515fda5477579a6d3acbfbd"}},{"ruleId":"D1","level":"warning","message":{"text":"GameBase.RawTickProducer (cyclomatic 17): GameBase.RawTickProducer has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GameBase.cs"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bb54913a822d63a50b89f1234d0fa304115d59961f541d9ff1a5debcfe979f4"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandList.BindDescriptorSets (cyclomatic 17): CommandList.BindDescriptorSets has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"703299de1e6778ecbbeeb031a20067cb86599e5c0a04da0ffcb54d8d5d2fec1d"}},{"ruleId":"D1","level":"warning","message":{"text":"SplitExtensions.SplitMesh (cyclomatic 17): SplitExtensions.SplitMesh has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/SplitExtensions.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"bab300a2c75b6a6fd6ed1706e17b7082fa9bce234f50c015ad9b4d55daa0634d"}},{"ruleId":"D1","level":"warning","message":{"text":"RadiancePrefilteringGGXNoCompute.DrawCore (cyclomatic 17): RadiancePrefilteringGGXNoCompute.DrawCore has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGXNoCompute.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a06b9cec83c96d8bb80580d416a2eedc969e91265557b399fce0ad19761d72"}},{"ruleId":"D1","level":"warning","message":{"text":"LightShafts.DrawBoundingVolumes (cyclomatic 17): LightShafts.DrawBoundingVolumes has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/LightShafts/LightShafts.cs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccba80501c33bc3b3338506e6a9e38a9f522bed052e8c2580e95d701770d5e82"}},{"ruleId":"D1","level":"warning","message":{"text":"ForwardLightingRenderFeature.Prepare (cyclomatic 17): ForwardLightingRenderFeature.Prepare has cyclomatic complexity 17 (threshold 15). Of this number, 11 points are the body\u0027s own statements and 6 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"c04f0564a5e13fdc015bac63dd4d264f0b6a76d91aac6286f82f876996feb9d8"}},{"ruleId":"D1","level":"warning","message":{"text":"PointLightShaderGroupData.ComputeViewParameter (cyclomatic 17): PointLightShaderGroupData.ComputeViewParameter has cyclomatic complexity 17 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"d22fc25fa6b2242bce1a387681d85936b97199fddacbdc09cd3ed990e3b4b267"}},{"ruleId":"D1","level":"warning","message":{"text":"PointLightShaderGroupData.ComputeViewsParameter (cyclomatic 17): PointLightShaderGroupData.ComputeViewsParameter has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dfcd8d336863bb6af9fca956459bc42e49e271c14b1999a30f0a9225bf946e6"}},{"ruleId":"D1","level":"warning","message":{"text":"LightSpotGroupRenderer.ProcessLights (cyclomatic 17): LightSpotGroupRenderer.ProcessLights has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ccdd3e297bf03022ff6a1e436bb22ab3a01bd463055ccbcef36fed77117c5ac"}},{"ruleId":"D1","level":"warning","message":{"text":"ComputeShaderClassBase.GenerateShaderSource (cyclomatic 17): ComputeShaderClassBase.GenerateShaderSource has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeShaderClassBase.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"228f00d2150e395c2318f4d88cea2253cbfe350b40ce28cf6c4686ff0d98026e"}},{"ruleId":"D1","level":"warning","message":{"text":"Grid.RebuildMeasureCacheData (cyclomatic 17): Grid.RebuildMeasureCacheData has cyclomatic complexity 17 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Panels/Grid.cs"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7b8e6a0cf3a5612d8e5e9615107a556d6a02a54205688c907558b8ce3d85095"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.ExpandForeach (cyclomatic 17): ShaderMixer.ExpandForeach has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":812}}}],"partialFingerprints":{"codehealthFindingId/v1":"109f24927d8c3f9914de99fd6917d02c0d5f38cf3e38d3e029859eeee6aaf804"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderMixer.OffsetIds (cyclomatic 17): ShaderMixer.OffsetIds has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"64c4ce04f32edd8bdc109a17f4bf9141def458e1d15ec6bcfe6cd39bd0d547cd"}},{"ruleId":"D1","level":"warning","message":{"text":"MethodCall.ProcessInputArguments (cyclomatic 17): MethodCall.ProcessInputArguments has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"9512a4960b7d3d53a5bf96ab5462c72b0ddcdd9bbce02fa0d870896bb22ead1c"}},{"ruleId":"D1","level":"warning","message":{"text":"TextureMethodsImplementations.CompileGetDimensions (cyclomatic 17): TextureMethodsImplementations.CompileGetDimensions has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f7c26030519433b6a000aad1afbac9e502b68afd2cb775286d1fa40ad655f55"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionDefineDirectiveParser.Match (cyclomatic 17): FunctionDefineDirectiveParser.Match has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveParsers.cs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"4667a9e9347587a38f0928b74367523af72e1c6f8612fcbc4a23468b98e2e94e"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.InstantiateMemberNames (cyclomatic 17): SpirvBuilder.InstantiateMemberNames has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"c59662be4e9127ec448eb306b1c906e87d1a1da961889197c5b05b0c4f77ab65"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeDuplicateHelper.ReplaceRefs (cyclomatic 17): TypeDuplicateHelper.ReplaceRefs has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2ef59ea470a0895df9b982b387b1b5dfe795a5d43d4f118c27838e19416a0f0"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteralArray.From (cyclomatic 17): LiteralArray.From has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Literals/LiteralArray.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9771ebafbdec7e26f28531c2f284146e699310fb0a5f9842d844e784e5bd33e"}},{"ruleId":"D1","level":"warning","message":{"text":"VisualStudioVersions.BuildIDEInfos (cyclomatic 17): VisualStudioVersions.BuildIDEInfos has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/CodeEditorSupport/VisualStudio/VisualStudioVersions.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"080584c3cd067e8aa252d2b42e27638e981bfd9380b6f809c9d8b8db82f1d608"}},{"ruleId":"D1","level":"warning","message":{"text":"TransactionStack.CompleteTransaction (cyclomatic 17): TransactionStack.CompleteTransaction has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Transactions/TransactionStack.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"73e71e0f29796c8e29134dcf46c9af2a73c5487f6aa2a45ca1409982b0974e32"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeConverterHelper.TryConvert (cyclomatic 17): TypeConverterHelper.TryConvert has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/TypeConverters/TypeConverterHelper.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2443977cc48917cb81fc679c68306fe62b2943648d96778eaf898aa178d49d"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageBuilder.SaveBuildUpToDateFile (cyclomatic 17): PackageBuilder.SaveBuildUpToDateFile has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilder.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c9d43d53da8b556219f994dfc175287e04f8cc5d283e24308c1d18825ad9b3"}},{"ruleId":"D1","level":"warning","message":{"text":"AssetPropertyGraph.ResolveObjectPath (cyclomatic 17): AssetPropertyGraph.ResolveObjectPath has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"58bcfa6e9d117bb70222cfb898b121abf89060b0ff3a09e8f03814a19de335ab"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.LoadMissingDependencies (cyclomatic 17): PackageSession.LoadMissingDependencies has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8cf47cf8991d7ff9c66ad0c4db400231cbce6211225693ad916c16f80e3dc57"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractObjectInstantiator.InitializeTypeBuilderFromType (cyclomatic 17): AbstractObjectInstantiator.InitializeTypeBuilderFromType has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Reflection/AbstractObjectInstantiator.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2e4365d08cde00195d108c8d765302efaf88b2c52684aaacb4a4cf68693c447"}},{"ruleId":"D1","level":"warning","message":{"text":"SourceFilesCollector.VisitObjectMember (cyclomatic 17): SourceFilesCollector.VisitObjectMember has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Tracking/SourceFilesCollector.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0049a5db2ffcc78a21657506ff7733204206d226464a6b378b25b38fe1c23c1"}},{"ruleId":"D1","level":"warning","message":{"text":"NugetStore.SyncLocalFolderSources (cyclomatic 17): NugetStore.SyncLocalFolderSources has cyclomatic complexity 17 (threshold 15). Most of this is not in the body itself: 7 of the 17 points are its own statements and the rest belongs to one function literal inside it that branches (line 391). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Packages/NugetStore.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e8db405a38b25b74636506c7956e61683a8164ddb4ace375878c56ad298295c"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoUpdatingSortedObservableCollection.ItemPropertyChanged (cyclomatic 17): AutoUpdatingSortedObservableCollection.ItemPropertyChanged has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation/Collections/AutoUpdatingSortedObservableCollection.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"60e20fc6d195e50d47095e976df226d79c2bb2dea9f2f9d27338cd2fba96016c"}},{"ruleId":"D1","level":"warning","message":{"text":"VisualScriptEditorViewModel.TriggerBackgroundCompilation (cyclomatic 17): VisualScriptEditorViewModel.TriggerBackgroundCompilation has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.Diagnostics.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f099811362ab11eedec909d9e00ff4baef8b47de7c48656200da891180bfc6"}},{"ruleId":"D1","level":"warning","message":{"text":"Color4CurveViewModel.UpdateMaxMin (cyclomatic 17): Color4CurveViewModel.UpdateMaxMin has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"26832fdac8800245442c9c96f08060bb369f1d43e9312c2fc6ce2322d0598996"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyFrameCurveViewModel.UpdateMaxMin (cyclomatic 17): KeyFrameCurveViewModel.UpdateMaxMin has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/KeyFrameCurveViewModel.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"a81e1c67acd7fd170373ba9c0e737a5bb2e397b9714dc26d450479d9be3e0a57"}},{"ruleId":"D1","level":"warning","message":{"text":"RotationCurveViewModel.UpdateMaxMin (cyclomatic 17): RotationCurveViewModel.UpdateMaxMin has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/RotationCurveViewModel.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2b7435f83d04db1c5657921e3153164c2f0c803524a490682317cae0dd40500"}},{"ruleId":"D1","level":"warning","message":{"text":"Vector2CurveViewModel.UpdateMaxMin (cyclomatic 17): Vector2CurveViewModel.UpdateMaxMin has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"24c80041a1b382dc1c3aea37ea61b1d7914c84f8499df58534810003aba95103"}},{"ruleId":"D1","level":"warning","message":{"text":"Vector3CurveViewModel.UpdateMaxMin (cyclomatic 17): Vector3CurveViewModel.UpdateMaxMin has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"04030af4ee17e64fd46ee8f9a0351ba4e7963c991e64f2c690df9e244cccf355"}},{"ruleId":"D1","level":"warning","message":{"text":"Vector4CurveViewModel.UpdateMaxMin (cyclomatic 17): Vector4CurveViewModel.UpdateMaxMin has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6238bdb26707d5b00f904b18f8a0eba24f47772408422aff645a3cb5882e903"}},{"ruleId":"D1","level":"warning","message":{"text":"DotNetNewTemplateParametersWindow.BuildOneRow (cyclomatic 17): DotNetNewTemplateParametersWindow.BuildOneRow has cyclomatic complexity 17 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/DotNetNewTemplateParametersWindow.xaml.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"05622a847e1cc74f36886eb2db3f6b14c42bc49413e8f739a19a79745a27567d"}},{"ruleId":"D1","level":"warning","message":{"text":"Program.Run (cyclomatic 17): Program.Run has cyclomatic complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Program.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c2e8488049efa36c6b9678c1287f1b484a4396f420600ecbbad26f27b1c22f2"}},{"ruleId":"D1","level":"warning","message":{"text":"DebuggingViewModel.ReloadAssemblies (cyclomatic 17): DebuggingViewModel.ReloadAssemblies has cyclomatic complexity 17 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 5 belong to 4 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/ViewModels/DebuggingViewModel.cs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe192b28babf1e503f838d7e04f767c29f3dbc6cb53376f3ab1fa530008f6993"}},{"ruleId":"D1","level":"warning","message":{"text":"NavmeshBuildCommand.EnsureClonedSceneAndHash (cyclomatic 17): NavmeshBuildCommand.EnsureClonedSceneAndHash has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Navigation/NavigationMeshAssetCompiler.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d7009703bef89df4723565f8100edf16ab124d4efbbda2cd97608b614cba03"}},{"ruleId":"D1","level":"warning","message":{"text":"AtlasTextureFactory.CreateTextureAtlas (cyclomatic 17): AtlasTextureFactory.CreateTextureAtlas has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/Packing/AtlasTextureFactory.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"f536f247f1ea7dc472e0645b26a4031376453249a1500aa09f66848b5c2d0b6a"}},{"ruleId":"D1","level":"warning","message":{"text":"MeshConverter.BuildLayeredSurface (cyclomatic 17): MeshConverter.BuildLayeredSurface has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1279}}}],"partialFingerprints":{"codehealthFindingId/v1":"a65da8c1d8787ab84ca98b6f3e4143dceb29c4a8f89e60d6d726ffa007b9fd1f"}},{"ruleId":"D1","level":"warning","message":{"text":"CollisionHelper.ClosestPointPointTriangle (cyclomatic 16): CollisionHelper.ClosestPointPointTriangle has cyclomatic complexity 16 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c46a21ac8c7d506d3a5b340ab5532eb573f215f33288bf191455e48c0695aa0"}},{"ruleId":"D1","level":"warning","message":{"text":"CollisionHelper.RayIntersectsRectangle (cyclomatic 16): CollisionHelper.RayIntersectsRectangle has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8650c226fbd1fd0e47b726cdf3e0fb27513e7e6e371e1158be8222eebdda30d"}},{"ruleId":"D1","level":"warning","message":{"text":"CollisionHelper.RayIntersectsBox (cyclomatic 16): CollisionHelper.RayIntersectsBox has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b467efd76ea821dea8522b333f0fc5c0eb9c29332509b2e327f207d2ecdfb3"}},{"ruleId":"D1","level":"warning","message":{"text":"ContentManager.DeserializeObject (cyclomatic 16): ContentManager.DeserializeObject has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"1969bda848680c25764d31a85b3fa06239060e6246085f64f7859c1fa15279cc"}},{"ruleId":"D1","level":"warning","message":{"text":"ConsoleLogListener.OnLog (cyclomatic 16): ConsoleLogListener.OnLog has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Diagnostics/ConsoleLogListener.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"90d9bad3fb381ccd5cb401784e1f33f171f6628a31474c9700919b8a78d643dc"}},{"ruleId":"D1","level":"warning","message":{"text":"Cone.New (cyclomatic 16): Cone.New has cyclomatic complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Cone.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"68894d35c6fd6bfce6fc2264fff97566b29c5782382d664ebe7823c63d5b2474"}},{"ruleId":"D1","level":"warning","message":{"text":"PipelineStateDescription.Equals (cyclomatic 16): PipelineStateDescription.Equals has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/PipelineStateDescription.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"4947bd9235d10e77e580ecf8f6b84ab203c2e5437ee2f0d57c02b451303bb626"}},{"ruleId":"D1","level":"warning","message":{"text":"Texture.SetData (cyclomatic 16): Texture.SetData has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1437}}}],"partialFingerprints":{"codehealthFindingId/v1":"eea6f8225afc98f339da2a145bb81688480ba79636df729e16f2e814565a0428"}},{"ruleId":"D1","level":"warning","message":{"text":"VertexElement.ConvertTypeToFormat (cyclomatic 16): VertexElement.ConvertTypeToFormat has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexElement.cs"},"region":{"startLine":595}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5a237eea78f4abcad5449a3b1feaa71555086e8f9d83ac2fc7e79e1aa3fce0b"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandList.EnsureRenderPass (cyclomatic 16): CommandList.EnsureRenderPass has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1739}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc2cc6ea9413688efd74f8e36ae95186c386989d36179ec88b33d999d3e4b161"}},{"ruleId":"D1","level":"warning","message":{"text":"ParticleSystem.Update (cyclomatic 16): ParticleSystem.Update has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleSystem.cs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"456bb2bffb5de76d680819b5c52d9c802ef05c50f4cdb2119a5526cd7570d0b2"}},{"ruleId":"D1","level":"warning","message":{"text":"StaticMeshColliderShape.BuildAndShareMeshes (cyclomatic 16): StaticMeshColliderShape.BuildAndShareMeshes has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Shapes/StaticMeshColliderShape.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"90cb5d490129f556eb4af31c7b98f09e2d45308612d24e5e16b700d212d0f5c4"}},{"ruleId":"D1","level":"warning","message":{"text":"RadiancePrefilteringGGX.DrawCore (cyclomatic 16): RadiancePrefilteringGGX.DrawCore has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGX.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"dee8596e82158fc7f38d3ba7c960080a63fb154e52122935e9d78c28af70fd3a"}},{"ruleId":"D1","level":"warning","message":{"text":"Predicates.fast_expansion_sum_zeroelim (cyclomatic 16): Predicates.fast_expansion_sum_zeroelim has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"839f2185bd45790ffb9bae74af338994ecfb57db1a5f12b5df3ba57cd514ebc3"}},{"ruleId":"D1","level":"warning","message":{"text":"LightGroupRendererShadow.ProcessLights (cyclomatic 16): LightGroupRendererShadow.ProcessLights has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightGroupRendererShadow.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf64070701effdb37a80cbfec679b940ef4768175fdb3d7f5f476e0e9475151"}},{"ruleId":"D1","level":"warning","message":{"text":"PrimitiveProceduralModelBase.Generate (cyclomatic 16): PrimitiveProceduralModelBase.Generate has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/ProceduralModels/PrimitiveProceduralModelBase.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"0381fc2c3fd2bb419257a87a6700ba7a863b0e9f4c88a3f8078a31fa4f03dfb6"}},{"ruleId":"D1","level":"warning","message":{"text":"UIElement.Measure (cyclomatic 16): UIElement.Measure has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/UIElement.cs"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"408a3888a4e08f0b39d6b18cea17637d627cbd79e184f1b0ddca51a46b523068"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenXRInput.GetAction (cyclomatic 16): OpenXRInput.GetAction has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OpenXR/OpenXRInput.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"b07961097d77d02bca8aac7e5609d13af73f24a67c79ccda2f8bee1ce671c02b"}},{"ruleId":"D1","level":"warning","message":{"text":"ShaderSamplerState.Compile (cyclomatic 16): ShaderSamplerState.Compile has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.MethodOrMember.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ee678e7fa5929bf4d72eec1a4d87a2ce1fea888cffa35cdaed2a200425a4c76"}},{"ruleId":"D1","level":"warning","message":{"text":"Parsers.TypeNameIdentifierArraySizeValue (cyclomatic 16): Parsers.TypeNameIdentifierArraySizeValue has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"33d73fb3b38e1cfc90d8f6f92a4035dae0e724000567c2b54785a020b46d52b3"}},{"ruleId":"D1","level":"warning","message":{"text":"MethodParser.Match (cyclomatic 16): MethodParser.Match has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderMethodParsers.cs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"f67ce61f217bdb9453f0717b74103406107519739f39d970f4ee4fce4fec087b"}},{"ruleId":"D1","level":"warning","message":{"text":"FlowParsers.ForEach (cyclomatic 16): FlowParsers.ForEach has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/StatementParsers/StatementParsers.Flow.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d68020162cda6b6a7278ae50564e8d6659d4af2fd8aabe474e3cbf076bc6cc3"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvBuilder.ContainIds (cyclomatic 16): SpirvBuilder.ContainIds has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":651}}}],"partialFingerprints":{"codehealthFindingId/v1":"51abb73862f95bd939432bb17d9bac4e2ceb083b4931c8b63d72f4e57ce273e1"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvContext.ExtractConstantFromBuffer (cyclomatic 16): SpirvContext.ExtractConstantFromBuffer has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.ExtractBuffers.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f4678d2581aea0db166f60b547d89c5ce74ce2a3a3e45aaa4be16afbb93bc33"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeDuplicateHelper.MergeTypeDecorations (cyclomatic 16): TypeDuplicateHelper.MergeTypeDecorations has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"040355d76dfdd3eca0a134330015d4a19b4973105972d6703a066361159c0d45"}},{"ruleId":"D1","level":"warning","message":{"text":"SPVGenerator.ConvertOperandsToParameters (cyclomatic 16): SPVGenerator.ConvertOperandsToParameters has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"acc3aed4859925093277dea954c1704771f50edd8e7cf5cc190dc88a01426466"}},{"ruleId":"D1","level":"warning","message":{"text":"OpData.ToString (cyclomatic 16): OpData.ToString has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Buffers/OpData.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"529fe2bab80cf437033bb173b317fbf464207cceb8be0995d80d101a87b87466"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageVersionRange.ToPrettyPrint (cyclomatic 16): PackageVersionRange.ToPrettyPrint has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/PackageVersionRange.cs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"da1048269f77ab942e17cb3f44afd487f5050af9a19fb5e4661514b5c228ac9a"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageBuilder.BuildMaster (cyclomatic 16): PackageBuilder.BuildMaster has cyclomatic complexity 16 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilder.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"01cabf55a5e89b4826b1973ce473162437ed9287a272ecfffcb573d57f658733"}},{"ruleId":"D1","level":"warning","message":{"text":"BuildAssetNode.Analyze (cyclomatic 16): BuildAssetNode.Analyze has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/BuildAssetNode.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e0545b6b8b00626f1e9afdce89684092daf76a8603ad72ed1839700437af457"}},{"ruleId":"D1","level":"warning","message":{"text":"PackageSession.Load (cyclomatic 16): PackageSession.Load has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"036c4b1ce790f55e6682e8530caed8a69fed73abe8de303538c985b139c654d6"}},{"ruleId":"D1","level":"warning","message":{"text":"ErrorRecoverySerializer.ReadYaml (cyclomatic 16): ErrorRecoverySerializer.ReadYaml has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/ErrorRecoverySerializer.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e13062365bf97d329ed748e6c34d66fd55685e4a51cd98aa3a9edb313be1dd0"}},{"ruleId":"D1","level":"warning","message":{"text":"FilteringComboBox.EditableTextBoxPreviewKeyDown (cyclomatic 16): FilteringComboBox.EditableTextBoxPreviewKeyDown has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/FilteringComboBox.cs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ea6ab0ec0e799c6a3d7a88f5450d192061da43fc3aefc127df3d719efa5dbd1"}},{"ruleId":"D1","level":"warning","message":{"text":"Vector2Editor.UpdateValueFromComponent (cyclomatic 16): Vector2Editor.UpdateValueFromComponent has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Vector2Editor.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"b76e22aaf15f6b02b3c79f8837266c9ecb84d1885fb0854ff41504290aafd481"}},{"ruleId":"D1","level":"warning","message":{"text":"MarginAdorner.Update (cyclomatic 16): MarginAdorner.Update has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Adorners/MarginAdorner.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"dffaaa20ee9a8003c960ff6aa6f90a5102389bf7de82ff94c8fa9eea7e6afdf1"}},{"ruleId":"D1","level":"warning","message":{"text":"UIEditorGameCameraService.UpdateCamera (cyclomatic 16): UIEditorGameCameraService.UpdateCamera has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameCameraService.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec6534b89b7b5ad16086163a682230d9a0f4cf39ae80b9a49c62940e3c7ae4a2"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionViewModel.Explore (cyclomatic 16): SessionViewModel.Explore has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":811}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4e0381543fb29eafb58b00c21c5a6110153f8713d902b091c6415249f694a5d"}},{"ruleId":"D1","level":"warning","message":{"text":"GameSettingsAssetCompiler.SetPlatformOrientation (cyclomatic 16): GameSettingsAssetCompiler.SetPlatformOrientation has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/GameSettingsAssetCompiler.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e600506c57386a04ae2eae55e1645f1bb0e9163a18a3549011a0ec5d6204c95"}},{"ruleId":"D1","level":"warning","message":{"text":"SpriteSheetCommand.DoCommandOverride (cyclomatic 16): SpriteSheetCommand.DoCommandOverride has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Sprite/SpriteSheetAssetCompiler.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f06e63bcb89d97875bbf2ef0357d896b91d09781b7ebdbca041c72109307b65"}},{"ruleId":"D1","level":"warning","message":{"text":"FreeTypeFontImporter.ImportGlyph (cyclomatic 16): FreeTypeFontImporter.ImportGlyph has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/Compiler/FreeTypeFontImporter.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a672a49be38b622af455d80d1c351a292dbabfc43e293de03b32361aeb0141"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpExtractor.ExtractPattern (cyclomatic 16): CSharpExtractor.ExtractPattern has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Extractors/CSharpExtractor.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"5807358550b8ee0b61521aff1503921627b4c012bc64c52959d2012b074c1d7d"}},{"ruleId":"D1","level":"warning","message":{"text":"Materials.ConvertAssimpStackCppToCs (cyclomatic 16): Materials.ConvertAssimpStackCppToCs has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/Material/Materials.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8c4c20eaa8a405f88d8f4f9eb6a80bafbf61a2c35063a989291477be135f0e7"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetPropertyPasteProcessor.Paste (cognitive 238): AssetPropertyPasteProcessor.Paste has cognitive complexity 238 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/CopyPasteProcessors/AssetPropertyPasteProcessor.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce89e1f5ff2c9412103b11ea89a7a4ee7d1947659a7093a6bd09b928a8f1bfad"}},{"ruleId":"D2","level":"warning","message":{"text":"AccessorChainExpression.CompileHelper (cognitive 223): AccessorChainExpression.CompileHelper has cognitive complexity 223 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":789}}}],"partialFingerprints":{"codehealthFindingId/v1":"efaa2f76f1fb783ce8a85b64e351db37ef0208adfed159bb46615b486be04829"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.MergeClassInBuffers (cognitive 200): ShaderMixer.MergeClassInBuffers has cognitive complexity 200 (threshold 15). Of this number, 192 points are the body\u0027s own statements and 8 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"878a306c8da8bfcee0bf08375247c019f4ec7f810b17d0a4f7f1028ac1c4bebb"}},{"ruleId":"D2","level":"warning","message":{"text":"EffectCompiler.Compile (cognitive 199): EffectCompiler.Compile has cognitive complexity 199 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/EffectCompiler.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"124c53e75183f9f6765614e927e5f0c8728ec76d6e8132e92a9d57bbe986b9db"}},{"ruleId":"D2","level":"warning","message":{"text":"IntrinsicTemplateExpander.TryGetOrGenerateIntrinsicsDefinition (cognitive 184): IntrinsicTemplateExpander.TryGetOrGenerateIntrinsicsDefinition has cognitive complexity 184 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/IntrinsicTemplateExpander.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"2337908e76128ab42847b16d4af173cda353bdc0d2f84462826be7abafb69887"}},{"ruleId":"D2","level":"warning","message":{"text":"ImportModelCommand.ExportAnimation (cognitive 183): ImportModelCommand.ExportAnimation has cognitive complexity 183 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Animation.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"b289053ed8a46e7c1d83bbeb10cd32270489c2fef352bdff10ff2e40d99951ea"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetRegistry.RegisterAssetAssembly (cognitive 162): AssetRegistry.RegisterAssetAssembly has cognitive complexity 162 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetRegistry.cs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"63c96a18b96a446ca3d3408bacfb37943bdfd825ccb7521fabddb373af73957c"}},{"ruleId":"D2","level":"warning","message":{"text":"InterfaceProcessor.Process (cognitive 157): InterfaceProcessor.Process has cognitive complexity 157 (threshold 15). Of this number, 156 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/InterfaceProcessor.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"41fcecd00a62f8f078a1ce5a3dcc11da9493c90afd6457e9f3c4e894471a2c24"}},{"ruleId":"D2","level":"warning","message":{"text":"ReadWriteAnalyzer.AnalyzeStreamReadWrites (cognitive 141): ReadWriteAnalyzer.AnalyzeStreamReadWrites has cognitive complexity 141 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Analysis/ReadWriteAnalyzer.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"89ece6fd474864bf0c7b56a0762c22a194c472fce7bc9a960fd9e98bb10846de"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.PreLoadPackageDependencies (cognitive 134): PackageSession.PreLoadPackageDependencies has cognitive complexity 134 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"346ac4b72c92ea5dc91783992ccceb183a8f0c413f20eb3615cf1d35af17e76c"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetPropertyGraph.ReconcileWithBaseNode (cognitive 120): AssetPropertyGraph.ReconcileWithBaseNode has cognitive complexity 120 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":728}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d9c2bf3e0506758fef11cd20802f954143bcec00ca6f10d705a485ab2762a17"}},{"ruleId":"D2","level":"warning","message":{"text":"MeshConverter.GenerateBoneToNodeMap (cognitive 120): MeshConverter.GenerateBoneToNodeMap has cognitive complexity 120 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb09689b927c49d99bd294349c11bf18df9b66d33fd13b4a82204f849df9feb5"}},{"ruleId":"D2","level":"warning","message":{"text":"EntryPointWrapperGenerator.GenerateWrapper (cognitive 118): EntryPointWrapperGenerator.GenerateWrapper has cognitive complexity 118 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Generation/EntryPointWrapperGenerator.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"e58c908acf23abf18d2036ea13195aae4f8d7a627b7bdcfbd2170e48989e9250"}},{"ruleId":"D2","level":"warning","message":{"text":"UpdateEngine.Compile (cognitive 115): UpdateEngine.Compile has cognitive complexity 115 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"88021b8ffaec90b172b7b89b93bd05a17a6c6decb612c33248d090ac98aeccb9"}},{"ruleId":"D2","level":"warning","message":{"text":"RootEffectRenderFeature.PrepareEffectPermutations (cognitive 113): RootEffectRenderFeature.PrepareEffectPermutations has cognitive complexity 113 (threshold 15). Of this number, 78 points are the body\u0027s own statements and 35 belong to 2 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"71cfe75e3e66542d434a16654b515220d3203a3a2c1f9e4ff4693336cc446b1a"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderClass.ProcessNameAndTypes (cognitive 112): ShaderClass.ProcessNameAndTypes has cognitive complexity 112 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac1fe489d16edf2b6808689d5d5cea6fda0ec4c4139f6e31373629db4e054ce5"}},{"ruleId":"D2","level":"warning","message":{"text":"VisitorGenerator.GenerateVisitorsBase (cognitive 111): VisitorGenerator.GenerateVisitorsBase has cognitive complexity 111 (threshold 15). Of this number, 109 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ffbcbaeaff64b39d3235d7efa8bf6555f5b4e1a468e8594aa0726b0ffaa70dd"}},{"ruleId":"D2","level":"warning","message":{"text":"Grid.MeasureOverride (cognitive 106): Grid.MeasureOverride has cognitive complexity 106 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Panels/Grid.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"da5aeae62fe75a8bd023cf8ccfbd655de76e6ffea2854cf813a3b4867f751bbb"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteStudioAnimationAssetCommand.DoCommandOverride (cognitive 102): SpriteStudioAnimationAssetCommand.DoCommandOverride has cognitive complexity 102 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Offline/SpriteStudioAnimationAssetCompiler.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"92abcab34f7497520f7f616643a4892193f99b96ce1e78f89240c0c718320d32"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.ProcessMemberAccessAndForeach (cognitive 100): ShaderMixer.ProcessMemberAccessAndForeach has cognitive complexity 100 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"59bbce5f1893938ed2d70bc53c7fb9991867ec2eb269532cca6d2c5bc6a2b1e6"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.MergeCBuffers (cognitive 97): ShaderMixer.MergeCBuffers has cognitive complexity 97 (threshold 15). Of this number, 96 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"e488328bd040936f67ba3c6e3ab15d15ea7e85a438c6aa0dbdb039d073bffe94"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageBuilderApp.Run (cognitive 96): PackageBuilderApp.Run has cognitive complexity 96 (threshold 15). Of this number, 78 points are the body\u0027s own statements and 18 belong to 3 function literals inside it that branch. 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":"sources/assets/Stride.AssetCompiler/PackageBuilderApp.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a5ed9c80af00333170daf18412cb06a8bda76f7f0e4b820b21cc44a038ba01a"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamAccessPatcher.PatchStreamsAccesses (cognitive 91): StreamAccessPatcher.PatchStreamsAccesses has cognitive complexity 91 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Transformation/StreamAccessPatcher.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"394641f186a73951c0e0c2c92cc6d3112bec4131bebf392c40a50f765156b92e"}},{"ruleId":"D2","level":"warning","message":{"text":"DeadCodeRemover.RemoveUnreferencedCode (cognitive 87): DeadCodeRemover.RemoveUnreferencedCode has cognitive complexity 87 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Cleanup/DeadCodeRemover.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb2131c7ffe49b6c0fc862e65df7af62a195413f3a1d8a17e8a8e1412f21309a"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetCollectionViewModel.InvokeAddAssetTemplate (cognitive 87): AssetCollectionViewModel.InvokeAddAssetTemplate has cognitive complexity 87 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"f501c8788d2caf0d39377ba17c95e073c59eb6028d67049da1ac7853c69d133c"}},{"ruleId":"D2","level":"warning","message":{"text":"Scanner.ScanFlowScalar (cognitive 86): Scanner.ScanFlowScalar has cognitive complexity 86 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1566}}}],"partialFingerprints":{"codehealthFindingId/v1":"7398c3b5a7b7dc05c3c240271c96972c395e362a39358d979fe5e7bc65353b24"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationMeshBuilder.Build (cognitive 85): NavigationMeshBuilder.Build has cognitive complexity 85 (threshold 15). Of this number, 83 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationMeshBuilder.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"015d0a0ca84c7d63d095691ae0d70cf5e0de3248ce1421d42ec1aa675a6ae76e"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionViewModel.DeleteItems (cognitive 84): SessionViewModel.DeleteItems has cognitive complexity 84 (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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1677}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c55ee39f01d7fd7f2e79133e2a334497c0c1920a48936c0d80584fb994dc91d"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyRecompiler.Recompile (cognitive 82): AssemblyRecompiler.Recompile has cognitive complexity 82 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"1abfd5605f23c030bfc36612cd6ec58a2210a10ace9caf2e1a145758ada60ae2"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderCompiler.Compile (cognitive 81): ShaderCompiler.Compile has cognitive complexity 81 (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":"sources/shaders/Stride.Shaders.Compilers/Direct3D/ShaderCompiler.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fc72a693fc56acbf7d7f48c95eb257e02b36a64b3c4208223b2b604c3c2d6f5"}},{"ruleId":"D2","level":"warning","message":{"text":"PackAssetsHelper.Run (cognitive 81): PackAssetsHelper.Run has cognitive complexity 81 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/Tasks/PackAssets.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"773bd29d21caa2c7f92f9b45eb70f5a9a141e6b24359bd1fca02127519a2bfd3"}},{"ruleId":"D2","level":"warning","message":{"text":"ImportModelCommand.ExportModel (cognitive 81): ImportModelCommand.ExportModel has cognitive complexity 81 (threshold 15). Of this number, 80 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Model.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"b55a9f9ee8e559995337c98560e28da691dbed316d50775ca26d5f6d5c596253"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationMeshBuilder.BuildInput (cognitive 80): NavigationMeshBuilder.BuildInput has cognitive complexity 80 (threshold 15). Most of this is not in the body itself: 2 of the 80 points are its own statements and the rest belongs to one function literal inside it that branches (line 405). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationMeshBuilder.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b857e84bcbe38c741e0dcdd76def3238f62adebc274e2315da3196e6652a100"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLogViewer.AppendText (cognitive 80): TextLogViewer.AppendText has cognitive complexity 80 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TextLogViewer.cs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bf3d4bfccd8d574a2d50a06a4f7e9dae8060716a7f0ed8714f1d6f7bc02d69d"}},{"ruleId":"D2","level":"warning","message":{"text":"CharacterControllers.TryReportContacts (cognitive 77): CharacterControllers.TryReportContacts has cognitive complexity 77 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/Characters/CharacterControllers.cs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"85f8bb6caf89b81f65e67e2e825ce79515bdf83398cb9d96ffb437584fb06825"}},{"ruleId":"D2","level":"warning","message":{"text":"Emitter.AnalyzeScalar (cognitive 77): Emitter.AnalyzeScalar has cognitive complexity 77 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f0a589e1d63ffb5df6de2f4edae9058c32c0c09165a6a8cb46e0210ffe97ac4"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvBuilder.InstantiateGenericShader (cognitive 73): SpirvBuilder.InstantiateGenericShader has cognitive complexity 73 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f86562ee2e5bc35042f8f0d6e3130a0a7b77a8c21a11de363b8e5f965a25f7d"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.UpdateDependencies (cognitive 72): PackageSession.UpdateDependencies has cognitive complexity 72 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"74de9d54bd5413a9d118ac11fbc92510fb626c4c45c83e9aff039bb05fe6655c"}},{"ruleId":"D2","level":"warning","message":{"text":"BundleOdbBackend.CreateBundle (cognitive 70): BundleOdbBackend.CreateBundle has cognitive complexity 70 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Storage/BundleOdbBackend.cs"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"c646d160d17c99c1c989cd146c34ceb1634762479d2297a10ceec8130f9f2f84"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameEntityCameraService.UpdateCameraBase (cognitive 70): EditorGameEntityCameraService.UpdateCameraBase has cognitive complexity 70 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"def7c8eada8bd0e321a67db5921d7c0274a3508f1bffde7e0a4526848996d158"}},{"ruleId":"D2","level":"warning","message":{"text":"Predicates.Orient3dAdapt (cognitive 69): Predicates.Orient3dAdapt has cognitive complexity 69 (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":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"82149239a467f363bbda6bb66a1e11df90c156c795cd8c854e419dbbd7cf0799"}},{"ruleId":"D2","level":"warning","message":{"text":"BundlePacker.Build (cognitive 69): BundlePacker.Build has cognitive complexity 69 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/BundlePacker.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"49901a5fd45f980a24d907b41703e75ba89ff2e753d52d8d8c527d3e3ecb3366"}},{"ruleId":"D2","level":"warning","message":{"text":"AudioEmitterProcessor.Draw (cognitive 68): AudioEmitterProcessor.Draw has cognitive complexity 68 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Audio/AudioEmitterProcessor.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaf349eb593c21d906749a1c3fa35b496caf8034ccb9676f4842fe95db6103e0"}},{"ruleId":"D2","level":"warning","message":{"text":"Scanner.ScanPlainScalar (cognitive 68): Scanner.ScanPlainScalar has cognitive complexity 68 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1808}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb675ff5eeaecc11650f883b78afcb20e498676b0bc3894fdf579932617f944"}},{"ruleId":"D2","level":"warning","message":{"text":"YamlAssetPath.ToMemberPath (cognitive 68): YamlAssetPath.ToMemberPath has cognitive complexity 68 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/YamlAssetPath.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"12256db76a1d4dcd357bd700f04828bfb13f9986dd82c092a28575f4def9fc59"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorConverter.Convert (cognitive 68): ColorConverter.Convert has cognitive complexity 68 (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":"sources/presentation/Stride.Core.Presentation.Wpf/ValueConverters/ColorConverter.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c08527cc86044a225802a4046afc50b55ec780f145832d1ba2efd52cd43c0a6"}},{"ruleId":"D2","level":"warning","message":{"text":"MeshConverter.ProcessMesh (cognitive 68): MeshConverter.ProcessMesh has cognitive complexity 68 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"150f60c6c32f5f71d1324c550164dcf06851cdae408cdb9520472241757ee7a7"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyContainer.LoadAssemblyFromPathInternal (cognitive 66): AssemblyContainer.LoadAssemblyFromPathInternal has cognitive complexity 66 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"80acff3e2fc9b31c6374a6fc91b978804d3f20dbe0b7d194230968c3d349068f"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingTreePanel.MeasureOverride (cognitive 66): VirtualizingTreePanel.MeasureOverride has cognitive complexity 66 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VirtualizingTreePanel.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb1fa89134482663f6c2978505e54a559bba66e9a0063b58b05935a5f6a22aa8"}},{"ruleId":"D2","level":"warning","message":{"text":"CharacterControllers.AnalyzeContactsForCharacterRegion (cognitive 65): CharacterControllers.AnalyzeContactsForCharacterRegion has cognitive complexity 65 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/Characters/CharacterControllers.cs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"86c4ce0036e9269ddc331eb9a5448af175fb4b0c9211f191ae3b827dbe13b625"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.ProcessReflection (cognitive 65): ShaderMixer.ProcessReflection has cognitive complexity 65 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.Reflection.cs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aaea455fb04f5cda6814987ac8f94e144bacb978fca0029173235e9917e43b1"}},{"ruleId":"D2","level":"warning","message":{"text":"ColliderShapeCombineCommand.DoCommandOverride (cognitive 65): ColliderShapeCombineCommand.DoCommandOverride has cognitive complexity 65 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Physics/ColliderShapeAssetCompiler.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6128b548b527d34e65655c38b7cbf4f719a9e5cd37ab2763146373652b1ec8c"}},{"ruleId":"D2","level":"warning","message":{"text":"StrideTexLibrary.Export (cognitive 65): StrideTexLibrary.Export has cognitive complexity 65 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/StrideTexLibrary.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"459fcf96366d45edf621b65da163afaf8fcb56b938651768736254c2c203332c"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationProcessor.Draw (cognitive 64): AnimationProcessor.Draw has cognitive complexity 64 (threshold 15). Most of this is not in the body itself: 0 of the 64 points are its own statements and the rest belongs to one function literal inside it that branches (line 64). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationProcessor.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"1456c91b0bf872ce6660884b695331072d6fef3c520cba1e39cd1eb5e281e2ac"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderDefinition.ImportSymbol (cognitive 64): ShaderDefinition.ImportSymbol has cognitive complexity 64 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/SymbolTypes.cs"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"9af91c0f10fb86444da23751288b788f2f3a2417c09c1e7b01da6844b54423fe"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMethod.Compile (cognitive 64): ShaderMethod.Compile has cognitive complexity 64 (threshold 15). Of this number, 63 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.MethodOrMember.cs"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"43c98dd35a4ec84df89ec9e1a717c5adc69fdf4d90fbd6345a9a242b1bc0b16b"}},{"ruleId":"D2","level":"warning","message":{"text":"NavmeshBuildCommand.EnsureClonedSceneAndHash (cognitive 64): NavmeshBuildCommand.EnsureClonedSceneAndHash has cognitive complexity 64 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Navigation/NavigationMeshAssetCompiler.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"e17e739ee5a55bf0ab2ad1e5555a60cd350fb13a79dd03a8c31cea63d9a47949"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicSoundSource.Worker (cognitive 63): DynamicSoundSource.Worker has cognitive complexity 63 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio/DynamicSoundSource.cs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ba87172f1d81215ab1cb754cc8b79e1a072bca20c1c075d0dde001d97ce4573"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.CleanupUnnecessaryInstructions (cognitive 62): ShaderMixer.CleanupUnnecessaryInstructions has cognitive complexity 62 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 44 belong to 2 function literals inside it that branch. 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":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":1207}}}],"partialFingerprints":{"codehealthFindingId/v1":"acc25de6dfef3a3ae2d421567e93307e4333d1ad65dcea0ce9ae625c2d5af818"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamAnalyzer.Analyze (cognitive 62): StreamAnalyzer.Analyze has cognitive complexity 62 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Analysis/StreamAnalyzer.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"899ff77c52e93fcd52cd06dfbb1b935b6e72a68715e8b902a0917e3f37da3f77"}},{"ruleId":"D2","level":"warning","message":{"text":"HullDecomposition.DoCommandOverride (cognitive 62): HullDecomposition.DoCommandOverride has cognitive complexity 62 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/BepuPhysics/HullAssetCompiler.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f5fe923f6fd192091b19a274a79a88c527a03d99ee09a60f4055988ca88e80d"}},{"ruleId":"D2","level":"warning","message":{"text":"InterfaceProcessor.GenerateStreamVariables (cognitive 61): InterfaceProcessor.GenerateStreamVariables has cognitive complexity 61 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/InterfaceProcessor.cs"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"de1d37ea3c61bc274ecedec158fff03bc0b9b5d295c421c555295560933434c4"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicsGizmo.Update (cognitive 60): PhysicsGizmo.Update has cognitive complexity 60 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c111027e06e271eaa6952c68a940de0baad2a3cd6afa3bcf3386a2141e8d65f"}},{"ruleId":"D2","level":"warning","message":{"text":"ScrollViewer.Update (cognitive 59): ScrollViewer.Update has cognitive complexity 59 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/ScrollViewer.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"2003995da8ccdab0c3013278c6ff4a041b981a71cb92dfb0922b0cc35d4ec72a"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.ProcessLinks (cognitive 59): ShaderMixer.ProcessLinks has cognitive complexity 59 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.Reflection.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"b434f774ad6e6397e9e59c5f47e3fd9c9f3c61d10b1bd1ae567a0b9a982c5464"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetCompositeHierarchyPropertyGraph.FindBestInsertIndex (cognitive 59): AssetCompositeHierarchyPropertyGraph.FindBestInsertIndex has cognitive complexity 59 (threshold 15). Of this number, 54 points are the body\u0027s own statements and 5 belong to 5 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9d7cfff889744c579dcee15d282ce72521ed7f9ad52df6683109b9e902eb25e"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityHierarchyItemViewModel.CanAddOrInsertChildren (cognitive 59): EntityHierarchyItemViewModel.CanAddOrInsertChildren has cognitive complexity 59 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"2df5c062dfa397a683297769b7df49032dbd53185076009bf1eef09b3f7a4fc3"}},{"ruleId":"D2","level":"warning","message":{"text":"Effect.UpdateValueBindingKey (cognitive 58): Effect.UpdateValueBindingKey has cognitive complexity 58 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Effects/Effect.cs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ba5656a30dd13d49a869195ec4ee5dae07442cfd1abb81b6ae1091f31c1b521"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterialRenderFeature.PrepareEffectPermutations (cognitive 58): MaterialRenderFeature.PrepareEffectPermutations has cognitive complexity 58 (threshold 15). Most of this is not in the body itself: 0 of the 58 points are its own statements and the rest belongs to one function literal inside it that branches (line 145). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialRenderFeature.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a4ab96a3e135d40680a54a18914f4758753eb96a3b657a4e608940ded666fb"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.GenerateDefaultCBuffer (cognitive 58): ShaderMixer.GenerateDefaultCBuffer has cognitive complexity 58 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"60160384776e4ab2351a5fe9a22f3dcee0c3027e8febfc0141a19ec6b05d344d"}},{"ruleId":"D2","level":"warning","message":{"text":"IntrinsicsGenerator.GenerateIntrinsicsCall (cognitive 58): IntrinsicsGenerator.GenerateIntrinsicsCall has cognitive complexity 58 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/IntrinsicGenerator.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"431ecb3fad6b186f7db55180845f1306aa72b394c014b81e55941b51af823bb7"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureHelper.DetermineOutputFormat (cognitive 58): TextureHelper.DetermineOutputFormat has cognitive complexity 58 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"c369724b3634bf9ebcadfb04e9021c27e75083a417487190acd6bf4365007bf4"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteRenderFeature.Draw (cognitive 57): SpriteRenderFeature.Draw has cognitive complexity 57 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Sprites/SpriteRenderFeature.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"24ca8528e7c3147b708242fef9c5d7c2f0c56cb59fb12277f6fd197f2a51a866"}},{"ruleId":"D2","level":"warning","message":{"text":"ParticleSystemComponentViewModel.FinalizeNodePresenterTree (cognitive 57): ParticleSystemComponentViewModel.FinalizeNodePresenterTree has cognitive complexity 57 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/ParticleSystemComponentViewModel.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f80669e78e8a882fbf31f6e258949b512172c06b5c254762976eb769beaeb60"}},{"ruleId":"D2","level":"warning","message":{"text":"Scheduler.Run (cognitive 56): Scheduler.Run has cognitive complexity 56 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.MicroThreading/Scheduler.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"5195854fefe85f9dafd634f34f9f1ed8c172993360ba0c6c162f83fd0e18b13c"}},{"ruleId":"D2","level":"warning","message":{"text":"PostProcessingEffects.DrawCore (cognitive 56): PostProcessingEffects.DrawCore has cognitive complexity 56 (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":"sources/engine/Stride.Rendering/Rendering/Images/PostProcessingEffects.cs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3c4171b9730bbd90e16f4ca01fb686dc98f3811b2c960195c981b63097531cb"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderClass.Compile (cognitive 56): ShaderClass.Compile has cognitive complexity 56 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"d888e2eb23374911a0dbe547298e438c77e9b8b6c3f7eee1a886deb45bfaf272"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggingViewModel.BuildProjectCore (cognitive 56): DebuggingViewModel.BuildProjectCore has cognitive complexity 56 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/ViewModels/DebuggingViewModel.cs"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce27381b7abf4acde4d2c9ebfc6a14667c52b2327dc0acde0f7e0066db8024fd"}},{"ruleId":"D2","level":"warning","message":{"text":"ReferenceSerializer.Serialize (cognitive 55): ReferenceSerializer.Serialize has cognitive complexity 55 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ReferenceSerializer.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"790fb0883d66dddbcbf7172e42e4ab494900b3ccdcfa97b8c59e88db0f166172"}},{"ruleId":"D2","level":"warning","message":{"text":"ForwardRenderer.BakeLightProbes (cognitive 54): ForwardRenderer.BakeLightProbes has cognitive complexity 54 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.LightProbes.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"123a4261a998e4e1e57e6ceb62b8850505a590aec9ada3027044a8f2a9ee2b4b"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolSearchHelper.GenerateSymbolSearchValues (cognitive 54): SymbolSearchHelper.GenerateSymbolSearchValues has cognitive complexity 54 (threshold 15). Of this number, 34 points are the body\u0027s own statements and 20 belong to 4 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7b0cf5ad6c6edb1e44e28e478c079366970527c6f5554e1e3d318182eda741"}},{"ruleId":"D2","level":"warning","message":{"text":"BowyerWatsonTetrahedralization.AddVertex (cognitive 53): BowyerWatsonTetrahedralization.AddVertex has cognitive complexity 53 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e3972a4f665eee12ed42f26b7aae64bf36b5f8c19830ede2e9457fd484fc72e"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.BuildTypesAndMethodGroups (cognitive 53): ShaderMixer.BuildTypesAndMethodGroups has cognitive complexity 53 (threshold 15). Of this number, 52 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"10d3b3028ac19d371990f998c196cfa4523c3ba2af1516b606fe49b70de46654"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeSet.Remove (cognitive 53): TreeSet.Remove has cognitive complexity 53 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/SortedDictionary.cs"},"region":{"startLine":1181}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7360eed83c03ca5de7f2fecc5b848bfc3b44108cc9991fe67e3954d3aff5693"}},{"ruleId":"D2","level":"warning","message":{"text":"UpdateEngine.Run (cognitive 52): UpdateEngine.Run has cognitive complexity 52 (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":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd5b2552ba517208aae2aa1d257238fea8a8bd9ec5cd9ab7d30ed1ff8921077a"}},{"ruleId":"D2","level":"warning","message":{"text":"UPath.Normalize (cognitive 52): UPath.Normalize has cognitive complexity 52 (threshold 15). Of this number, 51 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/IO/UPath.cs"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"65e8070389836b47d6918e1f72ab5192485565611d8af899ade3bb29ad2c661c"}},{"ruleId":"D2","level":"warning","message":{"text":"PanelViewModel.ChangeLayoutType (cognitive 52): PanelViewModel.ChangeLayoutType has cognitive complexity 52 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"48b79749790833e2e57fbd3712931267f0a8fe212715f715c9f4addb35b985ea"}},{"ruleId":"D2","level":"warning","message":{"text":"GamePadLayout.MapInputEvent (cognitive 51): GamePadLayout.MapInputEvent has cognitive complexity 51 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Input/GamePadLayouts/GamePadLayout.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad959da10fe90bfe4af73c7d676465bfacfa12ff4482e54ba4475ccd69ce5e24"}},{"ruleId":"D2","level":"warning","message":{"text":"LightShafts.DrawBoundingVolumes (cognitive 51): LightShafts.DrawBoundingVolumes has cognitive complexity 51 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/LightShafts/LightShafts.cs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"015543fc5b5f8bc9f49a59799c1176f495ad027bc87aebfb49dd03f094fff2be"}},{"ruleId":"D2","level":"warning","message":{"text":"EffectPriorityScheduler.QueueTask (cognitive 51): EffectPriorityScheduler.QueueTask has cognitive complexity 51 (threshold 15). Most of this is not in the body itself: 9 of the 51 points are its own statements and the rest belongs to one function literal inside it that branches (line 110). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/Compiler/EffectPriorityScheduler.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"70e8ce6ff072f0af58736926368fdd27bd42c06968bc3a6da7a4faa93ec63ead"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.Save (cognitive 51): PackageSession.Save has cognitive complexity 51 (threshold 15). Of this number, 47 points are the body\u0027s own statements and 4 belong to 2 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c2bfea976cf7daf80e84bfd153066037791f2a38710bafad6ac914f395d3852"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectoryBaseViewModel.CanAddChildren (cognitive 51): DirectoryBaseViewModel.CanAddChildren has cognitive complexity 51 (threshold 15). Of this number, 48 points are the body\u0027s own statements and 3 belong to 3 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/DirectoryBaseViewModel.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e0cb7480f8cfe9d7a6d0699735890e3a97577c378e52e277e42618137ad168e"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderClassParser.Match (cognitive 50): ShaderClassParser.Match has cognitive complexity 50 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderClassParser.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"27f7827f6036279afbb6952293e24eecceef330fa002a06ab3f1b57b6bd7a671"}},{"ruleId":"D2","level":"warning","message":{"text":"Vector4Editor.UpdateValueFromComponent (cognitive 50): Vector4Editor.UpdateValueFromComponent has cognitive complexity 50 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Vector4Editor.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6b47dbcdbdfb235fc023d5a0b5eaca1fdeddf1ca42326c9ef21fedfee939ed9"}},{"ruleId":"D2","level":"warning","message":{"text":"UILayoutHelper.UpdateElementLayout (cognitive 50): UILayoutHelper.UpdateElementLayout has cognitive complexity 50 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UILayoutHelper.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b93f86c424847d417ace19a91171662561393e0ef5a4709c6cc66eff93a9af8"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderSourceManager.LoadShaderSource (cognitive 49): ShaderSourceManager.LoadShaderSource has cognitive complexity 49 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/ShaderSourceManager.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d7eba458659cf43559ff034261ab64acf6d33f3672a8c5d928e76f16e6b0e6"}},{"ruleId":"D2","level":"warning","message":{"text":"ForwardRenderer.DrawCore (cognitive 47): ForwardRenderer.DrawCore has cognitive complexity 47 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"3386b9001b008b8ad7fc6e87ab5f014a14195e890e533dd66262e6cd7896546a"}},{"ruleId":"D2","level":"warning","message":{"text":"Texture.InitializeFromImpl (cognitive 47): Texture.InitializeFromImpl has cognitive complexity 47 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3be26b7bc58af6b030d5db1c2426d4a260a503b346cb5501b68c2e968ed872b"}},{"ruleId":"D2","level":"warning","message":{"text":"RootEffectRenderFeature.Prepare (cognitive 47): RootEffectRenderFeature.Prepare has cognitive complexity 47 (threshold 15). Most of this is not in the body itself: 2 of the 47 points are its own statements and the rest belongs to one function literal inside it that branches (line 728). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e42dd3aff36362f04e25441b7673eb745de6d26ae83bf80ee7c07ff10ef92c2"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvBuilder.RemapIds (cognitive 47): SpirvBuilder.RemapIds has cognitive complexity 47 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b29dd07c13a12879857c5cada652142880b5e7fa2f2a615f3b219121d3fe14"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvContext.TryGetConstantValue (cognitive 47): SpirvContext.TryGetConstantValue has cognitive complexity 47 (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":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.Constants.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"9898fe1324dcbbffb5b8efbd02d879b0fdd3a0884ceed16b6c922ba901fb5606"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeViewModel.CheckDynamicMemberConsistency (cognitive 47): NodeViewModel.CheckDynamicMemberConsistency has cognitive complexity 47 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"80674e6947a76f1171cb501c91ccc774ddd7652a65dfc5edd03601e9d02f1749"}},{"ruleId":"D2","level":"warning","message":{"text":"GameProfilingSystem.ReadEventsAsync (cognitive 46): GameProfilingSystem.ReadEventsAsync has cognitive complexity 46 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Profiling/GameProfilingSystem.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd83b9e8b38db5cecbc6486c2159d4736d1da28e751fb49325942e5215976865"}},{"ruleId":"D2","level":"warning","message":{"text":"ParameterCollection.UpdateLayout (cognitive 46): ParameterCollection.UpdateLayout has cognitive complexity 46 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Rendering/ParameterCollection.cs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"87bc5a3a927e351ad4be344151aa35c885bc8bc64be67fc24b7b4ca3e06c984c"}},{"ruleId":"D2","level":"warning","message":{"text":"SDSLC.Compile (cognitive 46): SDSLC.Compile has cognitive complexity 46 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/SDSLC.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e2925be157cd39ee014f46346af91dddd1889fd24225d15b0ca66cf30f3b856"}},{"ruleId":"D2","level":"warning","message":{"text":"ReferenceEnumerable.Refresh (cognitive 46): ReferenceEnumerable.Refresh has cognitive complexity 46 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/References/ReferenceEnumerable.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8fe6ce45f07fb09020bda96181fc2f0cbee01435505507251c23d78e3f6ff67"}},{"ruleId":"D2","level":"warning","message":{"text":"DxtTexLib.Export (cognitive 46): DxtTexLib.Export has cognitive complexity 46 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/DxtTexLib.cs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"075c4a61276712f59208f13e971a27233493ad077ad04fea5d5f8940fd199531"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteStudioRenderFeature.Draw (cognitive 45): SpriteStudioRenderFeature.Draw has cognitive complexity 45 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"966218ad53fece6b37b9450938f83d483432ed1ee22519ea1f19787c325e83a1"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.ConvertBoolCBufferMembers (cognitive 45): ShaderMixer.ConvertBoolCBufferMembers has cognitive complexity 45 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"f128eda16a07a54be28acd37d969452206977501ebf7f42b3054747c70eb2aca"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.PreProcessInstructions (cognitive 45): SPVGenerator.PreProcessInstructions has cognitive complexity 45 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Preprocessing.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"9341bdd559cd712c93fa91a56f65f407beadcb674ac76f34c86aed4931a5f839"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderSourceToCode.ToCode (cognitive 45): ShaderSourceToCode.ToCode has cognitive complexity 45 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders/ShaderSourceToCode.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea8ff994d132792938d471aa3e973b7860a57c21c6c33e6a853ca7f50ae4fa5"}},{"ruleId":"D2","level":"warning","message":{"text":"PrefabModelAssetCompileCommand.ProcessMaterial (cognitive 45): PrefabModelAssetCompileCommand.ProcessMaterial has cognitive complexity 45 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/PrefabModelAssetCompiler.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"26e6ab9016fd45ee4b51a8ee97a8989e4a3846d16869af5d2fbddb8f9e2a4c08"}},{"ruleId":"D2","level":"warning","message":{"text":"ParticleEmitter.SimulationSpaceChanged (cognitive 44): ParticleEmitter.SimulationSpaceChanged has cognitive complexity 44 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleEmitter.cs"},"region":{"startLine":1028}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b97166247bea9608308a1013d5d83dec8bf85fba85f1aa6f90f48554db87cfe"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterialGeneratorContext.ProcessIntermediateLayer (cognitive 44): MaterialGeneratorContext.ProcessIntermediateLayer has cognitive complexity 44 (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":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialGeneratorContext.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"45da40972a8275504bd6ac7baf462e109fd7ce1a33f7e60f0fddc9eabe628dfc"}},{"ruleId":"D2","level":"warning","message":{"text":"ContactEventsManager.RunManifoldEvent (cognitive 44): ContactEventsManager.RunManifoldEvent has cognitive complexity 44 (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":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Contacts/ContactEventsManager.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4a02ec1604f067eea8d0e433afe77aa7901dfd442b445b530e967c1a0a62af"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvContext.InsertWithoutDuplicates (cognitive 44): SpirvContext.InsertWithoutDuplicates has cognitive complexity 44 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.ExtractBuffers.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1d2368ec2f4fb95c72289f79e905e637b3a87966c3a87e4eff127c6fd72dbb2"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageTester.CompareImage (cognitive 44): ImageTester.CompareImage has cognitive complexity 44 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/ImageTester.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"de52bd15700f9381a3cfeec7d867bdcef49e23e0fcd44319436ac1a789239998"}},{"ruleId":"D2","level":"warning","message":{"text":"GameStudioAssemblyReloader.PostAssemblyReloading (cognitive 44): GameStudioAssemblyReloader.PostAssemblyReloading has cognitive complexity 44 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e3683571c8603a572d52a5d319531fc82f8222cbeb18aeb94472b17ad347b24"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureContentSerializer.Serialize (cognitive 43): TextureContentSerializer.Serialize has cognitive complexity 43 (threshold 15). Of this number, 38 points are the body\u0027s own statements and 5 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Data/TextureContentSerializer.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"b77837d153f6c34a4551afd7903120f938374b6db5b350a8729146e41892bbad"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandList.Copy (cognitive 43): CommandList.Copy has cognitive complexity 43 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"00489c02e4d3030262f166268099b0e0a888b809f4c8b702a4836eab57a12e9f"}},{"ruleId":"D2","level":"warning","message":{"text":"NumberParser.Float (cognitive 43): NumberParser.Float has cognitive complexity 43 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/NumberParsers.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"9534a9f893f99a1a7ee41a4b9e4d22760948710e48abca935fb7dafc2d7bc4fb"}},{"ruleId":"D2","level":"warning","message":{"text":"FpsTestCamera.UpdateCamera (cognitive 43): FpsTestCamera.UpdateCamera has cognitive complexity 43 (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":"sources/engine/Stride.Graphics.Regression/FpsTestCamera.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"61706c85e2ad9d97c1ff4a3a8307640be771a15a24ae3bf2f82b580ed9d7e74b"}},{"ruleId":"D2","level":"warning","message":{"text":"Parser.ParseNode (cognitive 43): Parser.ParseNode has cognitive complexity 43 (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":"sources/core/Stride.Core.Yaml/Parser.cs"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9964a794a112d444f7804332dc70338d73f0165ff386853a3cf1bbc13d93b54"}},{"ruleId":"D2","level":"warning","message":{"text":"GameEditorChangePropagator.PropagatorTask (cognitive 43): GameEditorChangePropagator.PropagatorTask has cognitive complexity 43 (threshold 15). Of this number, 34 points are the body\u0027s own statements and 9 belong to 3 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d882020ce7169bf5592eceb86593b9f1e7b8af4ca99e89dc64a29d4a6309377"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolRewriteEngine.ApplyAsync (cognitive 43): SymbolRewriteEngine.ApplyAsync has cognitive complexity 43 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/CodeUpgrade/SymbolRewriteEngine.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e367f9d239b22a768cd6f1d710648700b83a3d7b1af26dc9f3d7c712902b528"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteStudioXmlImport.FillNodeData (cognitive 43): SpriteStudioXmlImport.FillNodeData has cognitive complexity 43 (threshold 15). Of this number, 40 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Offline/SpriteStudioXmlImport.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cd155d83ffe410eac80721d39d174d8fc4b7377d27ce0f82b77306c04512671"}},{"ruleId":"D2","level":"warning","message":{"text":"NuGetAssemblyResolver.SetupNuGet (cognitive 43): NuGetAssemblyResolver.SetupNuGet has cognitive complexity 43 (threshold 15). Most of this is not in the body itself: 6 of the 43 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 76, 100). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shared/Stride.NuGetResolver/NuGetAssemblyResolver.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"226d025e3bd7771785ec8a1f4164f571ff1e0842ff83d688e6092b7f3d557453"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderClass.CreateShaderType (cognitive 42): ShaderClass.CreateShaderType has cognitive complexity 42 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"71aaff9206ca333d371431f747a341523ff5fa1b3e6963ca8593f2eccc62ec46"}},{"ruleId":"D2","level":"warning","message":{"text":"NamespaceParsers.Match (cognitive 42): NamespaceParsers.Match has cognitive complexity 42 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderFileParsers.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"1957742fb45721007e2d6996914ff8251a942f67c77b290a0d1e1b796388d510"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvBuilder.Convert (cognitive 42): SpirvBuilder.Convert has cognitive complexity 42 (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":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2b8a47b3610789fbe9fdfd74ad7e2e348db94c20b114085ac6da4898ef2e26f"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjectDescriptor.PrepareMember (cognitive 42): ObjectDescriptor.PrepareMember has cognitive complexity 42 (threshold 15). Of this number, 37 points are the body\u0027s own statements and 5 belong to one function literal inside it that branches. 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":"sources/core/Stride.Core.Reflection/TypeDescriptors/ObjectDescriptor.cs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"72b338ccb01f9494582427623f332ef9e192d395def7a4fe9403e79eb1250868"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetMigration.MigrateAssetIfNeeded (cognitive 42): AssetMigration.MigrateAssetIfNeeded has cognitive complexity 42 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetMigration.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffc1cacd966215f766444f830168111f00ed6a948775dad9163825b24eb38d4d"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectWatcher.BatchChanges (cognitive 42): ProjectWatcher.BatchChanges has cognitive complexity 42 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef05675edfcffe36b08eaa57d6e85585fe52451f3f0f8d25c4f5eeb834df4891"}},{"ruleId":"D2","level":"warning","message":{"text":"MergeExtensions.MergeDrawData (cognitive 41): MergeExtensions.MergeDrawData has cognitive complexity 41 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/MergeExtensions.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c2e27f89cf91f292590ef68ff47e836786ba26b75ef485ab0f88785f0974769"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.LoadFromBuildManifest (cognitive 41): PackageSession.LoadFromBuildManifest has cognitive complexity 41 (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":"sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"d99b837c003db651c945f0161aee6eec128d1eb4d41ec537c1ec9cb5457324a0"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptMethodViewModel.UpdateSlots (cognitive 41): VisualScriptMethodViewModel.UpdateSlots has cognitive complexity 41 (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":"sources/editor/Stride.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"087c1d5ed130008944196b2be68af24ee4cc970386094e63a0102dffe293d238"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorContentLoader.CheckAssetsToReload (cognitive 41): EditorContentLoader.CheckAssetsToReload has cognitive complexity 41 (threshold 15). Most of this is not in the body itself: 0 of the 41 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 330, 414). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/ContentLoader/EditorContentLoader.cs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"098731be55a00a5cbedd6faab60701be18a08589300b78c1a7edc76b709721f8"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityExtensions.CalculateBoundSphere (cognitive 41): EntityExtensions.CalculateBoundSphere has cognitive complexity 41 (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":"sources/editor/Stride.Editor/Engine/EntityExtensions.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"b29044ce729f008f894ce3254e30519f00aaf3a19228da583ec12d204c4de9cb"}},{"ruleId":"D2","level":"warning","message":{"text":"TemplatePreprocessor.DumbPruneUnreachableAssets (cognitive 41): TemplatePreprocessor.DumbPruneUnreachableAssets has cognitive complexity 41 (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":"sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f98e3bc4e6f7e3fe4347bfe84304b3a539cb396c8333647c833144f5f95a553"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationBlender.CreateEvaluator (cognitive 40): AnimationBlender.CreateEvaluator has cognitive complexity 40 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationBlender.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"a046237e447ab41a32bbc6d8b8caf34f2e615ed29fd4198e3498e9e34afb0954"}},{"ruleId":"D2","level":"warning","message":{"text":"EditText.InterpretKey (cognitive 40): EditText.InterpretKey has cognitive complexity 40 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/EditText.Direct.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b6052d140d703fa7510e9b502488f9a0dbf954ea36ed03218d29f553ddd05fb"}},{"ruleId":"D2","level":"warning","message":{"text":"UIRenderFeature.DrawInternal (cognitive 40): UIRenderFeature.DrawInternal has cognitive complexity 40 (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":"sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"676b0cd47a8c8418a5b6c5a45be27cd81c752ba77b596776b840b1bfcc28ed2e"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.AddRequiredCapabilities (cognitive 40): ShaderMixer.AddRequiredCapabilities has cognitive complexity 40 (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":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"c82677f99ccfc72e951216a32fa91652e77932ade3594389b04c77c1215ff49e"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteralsParser.Vector (cognitive 40): LiteralsParser.Vector has cognitive complexity 40 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/LiteralParsers.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"19851660dea1872a665ab40598c9914d55c3924ef45670530714dfb777c8ff1c"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.PreProcessOperands (cognitive 40): SPVGenerator.PreProcessOperands has cognitive complexity 40 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb33700bfae74dacf6f68f40e3b0e2afadb781161c143235ab70d5797cd79544"}},{"ruleId":"D2","level":"warning","message":{"text":"Scanner.ScanBlockScalar (cognitive 40): Scanner.ScanBlockScalar has cognitive complexity 40 (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":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1307}}}],"partialFingerprints":{"codehealthFindingId/v1":"954e6dd686ef8288424f49952a1472a8befed61bf2e25f0830c9ee12365de265"}},{"ruleId":"D2","level":"warning","message":{"text":"ViewportGridGizmo.UpdateGrids (cognitive 40): ViewportGridGizmo.UpdateGrids has cognitive complexity 40 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ViewportGridGizmo.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"000f2ec2480ed2765ffe945e8549a87bccf4e76cfb1677fe1a068063cee23f5e"}},{"ruleId":"D2","level":"warning","message":{"text":"CameraProcessor.Draw (cognitive 39): CameraProcessor.Draw has cognitive complexity 39 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Processors/CameraProcessor.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"968d03fda01392d295388ab3c5daad6ce93bbdb6cedb8b1bbfced79a790a4b3e"}},{"ruleId":"D2","level":"warning","message":{"text":"Grid.RebuildMeasureCacheData (cognitive 39): Grid.RebuildMeasureCacheData has cognitive complexity 39 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Panels/Grid.cs"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9f9d5e9f159206e060e7326221fc1ee29e0d9d4ea93dc2c01998a675f6889e6"}},{"ruleId":"D2","level":"warning","message":{"text":"GameTestBase.SaveImage (cognitive 39): GameTestBase.SaveImage has cognitive complexity 39 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"361022695d4e97b72fa19441d2ca74e75131311f6c56752cab75eb6e84a44b7d"}},{"ruleId":"D2","level":"warning","message":{"text":"Vector3Editor.UpdateValueFromComponent (cognitive 39): Vector3Editor.UpdateValueFromComponent has cognitive complexity 39 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Vector3Editor.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f79e8cfc5f3b1dd8906baa8f08cc5861029dbcf77f7e219c265c4aecc5ea664"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandList.CopyRegion (cognitive 38): CommandList.CopyRegion has cognitive complexity 38 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1244}}}],"partialFingerprints":{"codehealthFindingId/v1":"6084d8d6e6e2bce2dc1e11e243ea9842556b174a33626b5117f8d0299be08fdc"}},{"ruleId":"D2","level":"warning","message":{"text":"SwapChainGraphicsPresenter.CreateSwapChain (cognitive 38): SwapChainGraphicsPresenter.CreateSwapChain has cognitive complexity 38 (threshold 15). Of this number, 37 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"89652bbe35ce455a17fdcfcf36e3f3ce1e8110e3054d14b42e055648ca0b407d"}},{"ruleId":"D2","level":"warning","message":{"text":"ForwardLightingRenderFeature.Prepare (cognitive 38): ForwardLightingRenderFeature.Prepare has cognitive complexity 38 (threshold 15). Of this number, 26 points are the body\u0027s own statements and 12 belong to one function literal inside it that branches. 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":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"00188b51a520ed92a14433fe0dc0907deacff09ad490e583d7e098e87262e6db"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.MergeMixinNode (cognitive 38): ShaderMixer.MergeMixinNode has cognitive complexity 38 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab09bf17d075489440284e977bbef15558a80aa24616055e55e36d997866f6ef"}},{"ruleId":"D2","level":"warning","message":{"text":"MethodCall.ProcessInputArguments (cognitive 38): MethodCall.ProcessInputArguments has cognitive complexity 38 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b9ba44762acbc66024264c498207d67ab671ffcfa508c8d2dceb4da725b7556"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetCollision.Clean (cognitive 38): AssetCollision.Clean has cognitive complexity 38 (threshold 15). Of this number, 36 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetCollision.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"9883aee18ba94eebfd5fecbd81fc57a348025b0dab95061a975e97107e65f7b6"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageContainer.Save (cognitive 38): PackageContainer.Save has cognitive complexity 38 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"35d69559f05fa88fa0bddc535d9d3604b9e67437891b397b1dadfdaa59fb37ff"}},{"ruleId":"D2","level":"warning","message":{"text":"Trimming.ProcessTrimming (cognitive 38): Trimming.ProcessTrimming has cognitive complexity 38 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Trimming.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f97d47019c41790c1fe2352f27fa517ec55ed0e2f81d31796a51dbf50c0fecca"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorContentLoader.AssetPropertiesChanged (cognitive 38): EditorContentLoader.AssetPropertiesChanged has cognitive complexity 38 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/ContentLoader/EditorContentLoader.cs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a10f6276641569850f02dd0fff420e911823999b403fc60811e7b5b26ca8137"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationMeshAssetCompiler.GetInputFiles (cognitive 38): NavigationMeshAssetCompiler.GetInputFiles has cognitive complexity 38 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Navigation/NavigationMeshAssetCompiler.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f256a545cdcf4f8fdf9fbfc04b8f6295ef30abf3097b15bbf7f2c1c1ba7aacd"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphicsDeviceManager.RankDevices (cognitive 37): GraphicsDeviceManager.RankDevices has cognitive complexity 37 (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":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8dc30bb47e593848c9defcbeb310e76e8b0e8d281824f41ccc7104321d02055"}},{"ruleId":"D2","level":"warning","message":{"text":"InitialPositionParent.Initialize (cognitive 37): InitialPositionParent.Initialize has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"201fb7d02bf61c56842eacaf058fa0e8f49cbed17198327770454b3ee65e0672"}},{"ruleId":"D2","level":"warning","message":{"text":"RenderSystem.Draw (cognitive 37): RenderSystem.Draw has cognitive complexity 37 (threshold 15). Of this number, 29 points are the body\u0027s own statements and 8 belong to one function literal inside it that branches. 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":"sources/engine/Stride.Rendering/Rendering/RenderSystem.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba1bd5750b0e9dce1468c4836e6ae87e18db2d717b0d7f1ff9462a20de3943ae"}},{"ruleId":"D2","level":"warning","message":{"text":"MethodParser.Match (cognitive 37): MethodParser.Match has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderMethodParsers.cs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4763b39e61d9ea8ce356e9aa537423994b680e76ec8a344021d9f21b118403f"}},{"ruleId":"D2","level":"warning","message":{"text":"FlowParsers.ForEach (cognitive 37): FlowParsers.ForEach has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/StatementParsers/StatementParsers.Flow.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"247f96bd967d2ccde38f61ca34921a06697c346a8aa8da6ac9eef9146cfadba0"}},{"ruleId":"D2","level":"warning","message":{"text":"OperationComparer.Compare (cognitive 37): OperationComparer.Compare has cognitive complexity 37 (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":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6cf5fa6ece62baa4c90c1ff86fcca93a374df7aba022dbc0fefd08b9803ca13"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.GenerateEnumerantParameterSingle (cognitive 37): SPVGenerator.GenerateEnumerantParameterSingle has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"2299b3db78bd3c230fbf6c51c172dfe25f94a87a310f6d2a4b104ad6992c5627"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetPropertyGraph.ResolveObjectPath (cognitive 37): AssetPropertyGraph.ResolveObjectPath has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"639b63ab24fc0a5b9d15d470886649a8eac3b14bee9c3f2398a0eb091e5606e1"}},{"ruleId":"D2","level":"warning","message":{"text":"ErrorRecoverySerializer.ReadYaml (cognitive 37): ErrorRecoverySerializer.ReadYaml has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/ErrorRecoverySerializer.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbc18641a965ec96fa380d7ec954cc337fcdca04eafc53ceb5c2a0953287096e"}},{"ruleId":"D2","level":"warning","message":{"text":"NugetStore.SyncLocalFolderSources (cognitive 37): NugetStore.SyncLocalFolderSources has cognitive complexity 37 (threshold 15). Most of this is not in the body itself: 11 of the 37 points are its own statements and the rest belongs to one function literal inside it that branches (line 391). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Packages/NugetStore.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"79c5487cbf9ff53e2eb30e4be01c284ec028dfe3577cbb358346e65497e98348"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameEntitySelectionService.Execute (cognitive 37): EditorGameEntitySelectionService.Execute has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntitySelectionService.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ba68ee2c80992309e3ce2ec8c1141c4490aea971d99aabbd7c314e00f386457"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterialViewModel.OnAssetPropertyChanged (cognitive 37): MaterialViewModel.OnAssetPropertyChanged has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/MaterialViewModel.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"351f0061ca4880af69bd02be55e6897379d6a3aef0567d2b985a648fa1a3c49c"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetEditorsManager.OpenAssetEditorWindow (cognitive 37): AssetEditorsManager.OpenAssetEditorWindow has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/AssetsEditors/AssetEditorsManager.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f51e4e10531b081cbd821faa896a384daa2ba473dc9ccc31ecd1128f6efc73e"}},{"ruleId":"D2","level":"warning","message":{"text":"EncodeVideoFileCommand.DoCommandOverride (cognitive 37): EncodeVideoFileCommand.DoCommandOverride has cognitive complexity 37 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Media/VideoAssetCompiler.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"4456da9f7a73b2b008a56f28b0a55385cc4ce48cafbf539fcfc61b4f6d7c2abf"}},{"ruleId":"D2","level":"warning","message":{"text":"RoslynHelper.AnalyzeBlockFlow (cognitive 37): RoslynHelper.AnalyzeBlockFlow has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/RoslynHelper.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9ee45951f20cb2583f1bff59caa4aac19df6bae8206ef420e6175f483623e9a"}},{"ruleId":"D2","level":"warning","message":{"text":"AtlasTextureFactory.CreateTextureAtlas (cognitive 37): AtlasTextureFactory.CreateTextureAtlas has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/Packing/AtlasTextureFactory.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63b7f24b946e81487cfd45d493d8fce3b80a1922302ca2cdfab69a452152ed5"}},{"ruleId":"D2","level":"warning","message":{"text":"LightShafts.DrawCore (cognitive 36): LightShafts.DrawCore has cognitive complexity 36 (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":"sources/engine/Stride.Rendering/Rendering/Images/LightShafts/LightShafts.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"083f770063d618a57e84c22f957dbcb88928a44ef6e86e8098d7dea8cba8511b"}},{"ruleId":"D2","level":"warning","message":{"text":"LightSpotGroupRenderer.ProcessLights (cognitive 36): LightSpotGroupRenderer.ProcessLights has cognitive complexity 36 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d5393aec7017b366d10b0ddd8fdff192c08c6d83417ffbdb7057f7e6fb09c7f"}},{"ruleId":"D2","level":"warning","message":{"text":"EffectCompilerCache.Compile (cognitive 36): EffectCompilerCache.Compile has cognitive complexity 36 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/Compiler/EffectCompilerCache.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"565c4fe5a1fbab3eb7c637cd4199fa7193e8cb77626c39159718b046e917a6c9"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsersExtensions.IntrinsicDeclaration (cognitive 36): ParsersExtensions.IntrinsicDeclaration has cognitive complexity 36 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/Intrinsics/Parser.cs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7888035e3b73f564ef0f80de4cb58aa0ce065e14173489f2cbb601ec313dd03"}},{"ruleId":"D2","level":"warning","message":{"text":"OperandEnumerator.MoveNext (cognitive 36): OperandEnumerator.MoveNext has cognitive complexity 36 (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":"sources/shaders/Stride.Shaders.Spirv/Parsing/OperandEnumerator.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbe09f6173709c74333e084d27f717512628c0c86af1f5ca5d77479be68dcff8"}},{"ruleId":"D2","level":"warning","message":{"text":"Builder.ScheduleBuildStep (cognitive 36): Builder.ScheduleBuildStep has cognitive complexity 36 (threshold 15). Most of this is not in the body itself: 10 of the 36 points are its own statements and the rest belongs to one function literal inside it that branches (line 606). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Builder.cs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"9abf2a1bb77f73cf9c3dcd64d5a32284ac8892337f9e0314508c0a20295b0774"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetObjectNodeExtended.OnItemChanged (cognitive 36): AssetObjectNodeExtended.OnItemChanged has cognitive complexity 36 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/Internal/AssetObjectNodeExtended.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"85109687b3bf6f2d4446c096c221c6672931a4b8334e58a7d19466be75196062"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.TryLoadAssemblies (cognitive 36): PackageSession.TryLoadAssemblies has cognitive complexity 36 (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":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1557}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d91540fe091d92625e5b4db2ad58a6014fdb1b583992cd1df2a1bbe5506b755"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityManager.CollectNewProcessorsByComponentType (cognitive 35): EntityManager.CollectNewProcessorsByComponentType has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/EntityManager.cs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"432943bbe810d9a7c24538f01626767e4293e551ebc2bb82d55a6be13766e907"}},{"ruleId":"D2","level":"warning","message":{"text":"BowyerWatsonTetrahedralization.CleanupUnusedTetrahedra (cognitive 35): BowyerWatsonTetrahedralization.CleanupUnusedTetrahedra has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"f67fb644bf8b96cd6df827b788b3b504dbcddc0504a37c0fcf6ea598ae4f50c8"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.ConvertOperandsToParameters (cognitive 35): SPVGenerator.ConvertOperandsToParameters has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"43f761778ee5c32484803270a1f46b23001800aac97f046cf5e2840fe0d965bb"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandIOMonitor.CommandEnded (cognitive 35): CommandIOMonitor.CommandEnded has cognitive complexity 35 (threshold 15). Of this number, 30 points are the body\u0027s own statements and 5 belong to 5 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/CommandIOMonitor.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e51eeb3ae01fd8719a333bc87ece23381c2ac04756929258749a84f742fbfb2"}},{"ruleId":"D2","level":"warning","message":{"text":"Project.GetDependencies (cognitive 35): Project.GetDependencies has cognitive complexity 35 (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":"sources/core/Stride.Core.Design/Solutions/Project.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"f37b0de74ccf77ab8ee8c37b5572226d7153b795e8c86ba656af553dedf3892e"}},{"ruleId":"D2","level":"warning","message":{"text":"Scanner.FetchNextToken (cognitive 35): Scanner.FetchNextToken has cognitive complexity 35 (threshold 15). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"64a3734167df9813e967937919c82e7e1df773c1f1d8dd77506e54fe07f0b3c7"}},{"ruleId":"D2","level":"warning","message":{"text":"SourceFilesCollector.VisitObjectMember (cognitive 35): SourceFilesCollector.VisitObjectMember has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Tracking/SourceFilesCollector.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8af2cadd299fa5c3ca56534bc25a8081b08b930adbc5cef947a66e588f61b4c"}},{"ruleId":"D2","level":"warning","message":{"text":"ScaleBar.AdjustUnitIntervalWithUnitSystem (cognitive 35): ScaleBar.AdjustUnitIntervalWithUnitSystem has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/ScaleBar.cs"},"region":{"startLine":842}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9ef10f33e9b7fe92d6a406bd0575f85e50fa784b324fb2c61cbf16512e54216"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetCollectionViewModel.AddChildren (cognitive 35): AssetCollectionViewModel.AddChildren has cognitive complexity 35 (threshold 15). Of this number, 34 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1638}}}],"partialFingerprints":{"codehealthFindingId/v1":"85d1fdc56e89eee7a03cc82e50b9228dcd499cff103547c385ae7e06d5c05d4f"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggingViewModel.ReloadAssemblies (cognitive 35): DebuggingViewModel.ReloadAssemblies has cognitive complexity 35 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 11 belong to 4 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/ViewModels/DebuggingViewModel.cs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"add383d79e2c9e344797dc93c18053c4162618f2ba166852d5cc3be260131dcb"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlExtractor.ParseLocalizeExtension (cognitive 35): XamlExtractor.ParseLocalizeExtension has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Extractors/XamlExtractor.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe8271fa4749ca437103a4e5e7739d17316b3803e0a6509d90f292da19e8a9f"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureTool.GetAlphaLevels (cognitive 35): TextureTool.GetAlphaLevels has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TextureTool.cs"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9a99d06ccc44041034266359cfe8ba3d909e2e8dd64912e39615b68c12b49c4"}},{"ruleId":"D2","level":"warning","message":{"text":"Internals.Wait (cognitive 34): Internals.Wait has cognitive complexity 34 (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":"sources/core/Stride.Core/Threading/ThreadPool.SemaphoreW.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"66142a4e73ed270f947b9c033cb6f11e7dd5f701d1a887c3ec7a09f989f40a2c"}},{"ruleId":"D2","level":"warning","message":{"text":"ForwardRenderer.InitializeCore (cognitive 34): ForwardRenderer.InitializeCore has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a22e38e34020cd367cbb0e0f56037fedc8df0e120f0608f7b7c6f9b1c790593"}},{"ruleId":"D2","level":"warning","message":{"text":"ForwardRenderer.CollectCore (cognitive 34): ForwardRenderer.CollectCore has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"9828288b0d191f530c8b4bf2b3fab81aba44099975d062257112cb1a32ab00ae"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulation.SendEvents (cognitive 34): Simulation.SendEvents has cognitive complexity 34 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"0df7847981eef3a3916e342e4d6beb810b345096fafec41d00548de9a3f608aa"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.OffsetIds (cognitive 34): ShaderMixer.OffsetIds has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"605b15a21eecb62310d33ada764c73aa8a25babcf82587a35f0813e399720ed4"}},{"ruleId":"D2","level":"warning","message":{"text":"MethodCall.CompileImpl (cognitive 34): MethodCall.CompileImpl has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"80701f4015af4d66f0a1c64616cc51f65260802a66edbd88a38bc21b44aad4d9"}},{"ruleId":"D2","level":"warning","message":{"text":"Emitter.SelectScalarStyle (cognitive 34): Emitter.SelectScalarStyle has cognitive complexity 34 (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":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1442}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bf8cf016498370b7e4d3e25f9e0c6c73aee9a445238b8cb08052a8a93492bf8"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.LoadPackageDependenciesFromLockFile (cognitive 34): PackageSession.LoadPackageDependenciesFromLockFile has cognitive complexity 34 (threshold 15). Of this number, 33 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"e787946e6de39c61b1c3739e5238fd6bd274009f71b1fa16488d7b246263c426"}},{"ruleId":"D2","level":"warning","message":{"text":"displayTestResults (cognitive 34): displayTestResults has cognitive complexity 34 (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":"sources/engine/Stride.Graphics.Regression/Web/tableBuilder.js"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e9048772f76632989684788c3175d234c2481774723daab5f3dad927a62e6e"}},{"ruleId":"D2","level":"warning","message":{"text":"ForwardLightingRenderFeature.PrepareEffectPermutations (cognitive 33): ForwardLightingRenderFeature.PrepareEffectPermutations has cognitive complexity 33 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 9 belong to one function literal inside it that branches. 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":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c642518fdc7d82792ae6b1fb9d41e020e4bb59f9caffc66ed5b91bb1881714a"}},{"ruleId":"D2","level":"warning","message":{"text":"MeshRenderFeature.Draw (cognitive 33): MeshRenderFeature.Draw has cognitive complexity 33 (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":"sources/engine/Stride.Rendering/Rendering/MeshRenderFeature.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"a22232313ca10133090f24c5050dae63d5e2e4b8cfd80e81e02dccc52b10a2e0"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeDuplicateHelper.MergeTypeDecorations (cognitive 33): TypeDuplicateHelper.MergeTypeDecorations has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"43cb9b4602d2c6ad6fa50ecf407e31e672c5e227315b43154906c490b3f3f773"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeDuplicateHelper.ProcessSortedInstructions (cognitive 33): TypeDuplicateHelper.ProcessSortedInstructions has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"685c01f98d08ed64e23e87ef6947d6ed6defcc8e72601274624044640e5f273b"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.PreProcessGrammar (cognitive 33): SPVGenerator.PreProcessGrammar has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Preprocessing.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"5429ae99b98320fb15683e59dd8997bb9f6776e1aeb8baf1894683bc037ea2b9"}},{"ruleId":"D2","level":"warning","message":{"text":"BuildAssetNode.Analyze (cognitive 33): BuildAssetNode.Analyze has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/BuildAssetNode.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"89da1e36df89666ea6f64b6201be4c8dcd92a78caa0e36a2ef54aee136ca627c"}},{"ruleId":"D2","level":"warning","message":{"text":"DotNetNewTemplateParametersWindow.BuildOneRow (cognitive 33): DotNetNewTemplateParametersWindow.BuildOneRow has cognitive complexity 33 (threshold 15). Of this number, 28 points are the body\u0027s own statements and 5 belong to 2 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/DotNetNewTemplateParametersWindow.xaml.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"52c6c3382eabbc79e9a75de131415128293ab6364f511756a00ad233e880ce15"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeUpgrades.RemoveUnusedUsings (cognitive 33): CodeUpgrades.RemoveUnusedUsings has cognitive complexity 33 (threshold 15). Most of this is not in the body itself: 0 of the 33 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 225, 253). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/CodeUpgrade/CodeUpgrades.cs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ab9bb0322c41651f802cd2a9666ba85d169afeea37e2d7b828ac8b165ee9b4c"}},{"ruleId":"D2","level":"warning","message":{"text":"HeightmapConvertCommand.DoCommandOverride (cognitive 33): HeightmapConvertCommand.DoCommandOverride has cognitive complexity 33 (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":"sources/engine/Stride.Assets/Physics/HeightmapAssetCompiler.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3792482456acdb22711224684a637b25901cf160886ae2e00ca3499245687ec"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteSheetCommand.DoCommandOverride (cognitive 33): SpriteSheetCommand.DoCommandOverride has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Sprite/SpriteSheetAssetCompiler.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"7738175164ac6df732a27769012bb0413253303b35196673375c743688293d1a"}},{"ruleId":"D2","level":"warning","message":{"text":"Program.Run (cognitive 33): Program.Run has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/Console/Program.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"81fbe64fcdbda18a3ad4c97c452c2ea40baf32614b0f488b480b3fff3a4ccae9"}},{"ruleId":"D2","level":"warning","message":{"text":"CompressedSoundSource.ExtractAndFillData (cognitive 32): CompressedSoundSource.ExtractAndFillData has cognitive complexity 32 (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":"sources/engine/Stride.Audio/CompressedSoundSource.cs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6b3db124eec8f7b95f3f16dacc33b3a86f147b20287ddd4f4a6529114f7b0eb"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandList.TransitionBoundResources (cognitive 32): CommandList.TransitionBoundResources has cognitive complexity 32 (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":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"1721aadf7467d0aba9ffb4f078b917c7b446cb4322db39d7c3eed15c5dd39bc1"}},{"ruleId":"D2","level":"warning","message":{"text":"CharacterControllers.AnalyzeContacts (cognitive 32): CharacterControllers.AnalyzeContacts has cognitive complexity 32 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/Characters/CharacterControllers.cs"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec65660417665eede99d2f2f26618faced4a7559c602064e5a1a300f43bddac9"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeName.TryResolveType (cognitive 32): TypeName.TryResolveType has cognitive complexity 32 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Literals.cs"},"region":{"startLine":678}}}],"partialFingerprints":{"codehealthFindingId/v1":"d54fd35c760edb752378a0b5789572e4cb53270a6802cb88f26507afb6fb9aaf"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeConverterHelper.TryConvert (cognitive 32): TypeConverterHelper.TryConvert has cognitive complexity 32 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/TypeConverters/TypeConverterHelper.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9cdb8dc0ed8f561ed812d4dda1831801255eb0163c89bf25948b4af5d4f6289"}},{"ruleId":"D2","level":"warning","message":{"text":"Scanner.ScanUriEscapes (cognitive 32): Scanner.ScanUriEscapes has cognitive complexity 32 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":2151}}}],"partialFingerprints":{"codehealthFindingId/v1":"3450b4786c9e07a71c1fa9fe29a86f3727c5d4de8f9c30f27e706a8a3cf9e9e4"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractObjectInstantiator.InitializeTypeBuilderFromType (cognitive 32): AbstractObjectInstantiator.InitializeTypeBuilderFromType has cognitive complexity 32 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Reflection/AbstractObjectInstantiator.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"9286bf1c84b6d55fa3ae9ac7a1e93e473312ecaa052e6941c29c816b03cd3c5c"}},{"ruleId":"D2","level":"warning","message":{"text":"CrashReportHelper.SendReport (cognitive 32): CrashReportHelper.SendReport has cognitive complexity 32 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Helpers/CrashReportHelper.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bbfd180576ff581b0a1c2936dab6f161ee880941bec656c0843dd0ae830c43f"}},{"ruleId":"D2","level":"warning","message":{"text":"Materials.ConvertAssimpStackCppToCs (cognitive 32): Materials.ConvertAssimpStackCppToCs has cognitive complexity 32 (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":"sources/tools/Stride.Importer.3D/Material/Materials.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d984e424fc187bf201430c134574eb000d13bdd630d64b800ec7a15d78f6dc"}},{"ruleId":"D2","level":"warning","message":{"text":"MediaSynchronizer.Update (cognitive 31): MediaSynchronizer.Update has cognitive complexity 31 (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":"sources/engine/Stride.Foundation/Media/MediaSynchronizer.cs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"852f832f91db7a5d66bc5b1a8a2baac1dd1683755dc0e2066bff84eeec40d093"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandList.MapSubResource (cognitive 31): CommandList.MapSubResource has cognitive complexity 31 (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":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1631}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c2fcbf807584b0c4ed622c16d6c7346ec6decd44d3b5cac7973b951b41ecf2f"}},{"ruleId":"D2","level":"warning","message":{"text":"PipelineState.RecreateInner (cognitive 31): PipelineState.RecreateInner has cognitive complexity 31 (threshold 15). Of this number, 30 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/engine/Stride.Graphics/Vulkan/PipelineState.Vulkan.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"b77c108d2503fa28c41a253bf837f85fc4e23132469afcb27f192310cd1983a2"}},{"ruleId":"D2","level":"warning","message":{"text":"ParticleSystem.Update (cognitive 31): ParticleSystem.Update has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleSystem.cs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"e418568887e3200ca5065933fdf9db958b500e01555fa4f8ea86d5f7fa23b51f"}},{"ruleId":"D2","level":"warning","message":{"text":"EffectSystem.GetShaderFromParameters (cognitive 31): EffectSystem.GetShaderFromParameters has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dab50d0176cb8f1bea87d616c66f18282a28e5b77564c24a35597ee0b5ed5b5"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvBuilder.BuildInheritanceListWithoutSelf (cognitive 31): SpirvBuilder.BuildInheritanceListWithoutSelf has cognitive complexity 31 (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":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d47807568e2daf0dc47a9b2136f4a86c36e414fc3a9b068a6c37868bc4868a"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvBuilder.BinaryOperation (cognitive 31): SpirvBuilder.BinaryOperation has cognitive complexity 31 (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":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e6d2c211537bb1119abe315ddde1efc764d719455a5449ac8be1b4002ae4ffe"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeDuplicateHelper.ReplaceRefs (cognitive 31): TypeDuplicateHelper.ReplaceRefs has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ecb927a66d90e9c1adf982434be354392eecd0924ced5720c5c535c4e84916d"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.CreateOperation (cognitive 31): SPVGenerator.CreateOperation has cognitive complexity 31 (threshold 15). Of this number, 30 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Buffers.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7515ec37d3622acb522f957e2426326202b41a4c661b7acca369603c15c2590"}},{"ruleId":"D2","level":"warning","message":{"text":"Emitter.EmitDocumentStart (cognitive 31): Emitter.EmitDocumentStart has cognitive complexity 31 (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":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc90f1191cf07cee8e08a3c46ff9d510898de93a7ef0806753bfa4b5426f1d5"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageBuilder.WriteContentAliases (cognitive 31): PackageBuilder.WriteContentAliases has cognitive complexity 31 (threshold 15). Of this number, 29 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilder.cs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"02c8e37637b9225bba30311032b7ba85e5a0c43dc65061a053629155a45c0b65"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetQuantumRegistry.RegisterAssembly (cognitive 31): AssetQuantumRegistry.RegisterAssembly has cognitive complexity 31 (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":"sources/assets/Stride.Core.Assets.Quantum/AssetQuantumRegistry.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"98258b5136d71ca0b93186989a422a7707bda985dd3ff68331dcbb58c5b6610a"}},{"ruleId":"D2","level":"warning","message":{"text":"Package.ListAssetFiles (cognitive 31): Package.ListAssetFiles has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1231}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6976c7278e75852288e06301efb62b15cd228bfc6e1a9150e89f6a4733ec1bb"}},{"ruleId":"D2","level":"warning","message":{"text":"HorizontalAndVerticalAxisRenderer.RenderMajorItems (cognitive 31): HorizontalAndVerticalAxisRenderer.RenderMajorItems has cognitive complexity 31 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/Axes/HorizontalAndVerticalAxisRenderer.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"90946fe5bd1cbb125287d5185f097791a75caa4859ef287e3fd68c3a4f573d4d"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureTool.ExecuteRequest (cognitive 31): TextureTool.ExecuteRequest has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TextureTool.cs"},"region":{"startLine":1436}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f3a324fc72b438cca9e633b64ef0fa307380629b27d3fa84be258620f49bd9f"}},{"ruleId":"D2","level":"warning","message":{"text":"ProcessorManager.RemoveComponent (cognitive 30): ProcessorManager.RemoveComponent has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/FlexibleProcessing/ProcessorManager.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cf05c0acd4b63f05612cdbb9a803aec061671de68dae6fa9757767b9217bca2"}},{"ruleId":"D2","level":"warning","message":{"text":"Texture.SetData (cognitive 30): Texture.SetData has cognitive complexity 30 (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":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1437}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c7e072368a08b2ab8fa5924b7b0386ff4e7a8e16b3292fd5cf5865dd654736"}},{"ruleId":"D2","level":"warning","message":{"text":"InitialDefaultFields.Initialize (cognitive 30): InitialDefaultFields.Initialize has cognitive complexity 30 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3545c29962e93123f716c5412a015105a129a7b7f56e5737cd61b9b3eae7761"}},{"ruleId":"D2","level":"warning","message":{"text":"UIRenderFeature.UpdateTouchEvents (cognitive 30): UIRenderFeature.UpdateTouchEvents has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.Picking.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"325e4f95f45a11542b44ac30ad6f32b004bfc24a4750fde4b72eb728cdeb416d"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.ProcessClasses (cognitive 30): ShaderMixer.ProcessClasses has cognitive complexity 30 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 15 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.ShaderSourceEvaluator.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"8adefe5d6e318e9bead5caf2dba48df99314bad2f83ad9c7e2fccccffa203325"}},{"ruleId":"D2","level":"warning","message":{"text":"BinaryOpExpr.TryEvaluate (cognitive 30): BinaryOpExpr.TryEvaluate has cognitive complexity 30 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/ConstantExpression.cs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"39edf7a540ae1baf137dde361aa1dd66481ce385f29cd5bbabed4ed559600b08"}},{"ruleId":"D2","level":"warning","message":{"text":"CBuffer.ProcessAttributes (cognitive 30): CBuffer.ProcessAttributes has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.cs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"104055d3d2c67a15fa29a8ee89b18899f4d7234ad9794796d1ce7a4542648ab5"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.GenerateInstructionStructsSingle (cognitive 30): SPVGenerator.GenerateInstructionStructsSingle has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Instructions.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"63d3510dd139ab5cea96c7ffe8b025635ad2471786ecc1cd113088a5b46fd47d"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteralValue.LiteralValue.ctor (cognitive 30): LiteralValue.LiteralValue.ctor has cognitive complexity 30 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Literals/LiteralValue.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"252d15839c883b239be388d2cb3eb9f76d2b9b8988f5c9357ce115a9ab563a11"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualStudioVersions.BuildIDEInfos (cognitive 30): VisualStudioVersions.BuildIDEInfos has cognitive complexity 30 (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":"sources/core/Stride.Core.Design/CodeEditorSupport/VisualStudio/VisualStudioVersions.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1424f87505d1b96590d3447fd6fe6fc227592361d632c31ecc1318c05e21ad8"}},{"ruleId":"D2","level":"warning","message":{"text":"Emitter.WriteFoldedScalar (cognitive 30): Emitter.WriteFoldedScalar has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1084}}}],"partialFingerprints":{"codehealthFindingId/v1":"39b954d433a2f94f2df4d639081aefc2c9e99fcc0ecc6d173f262b30c1fac529"}},{"ruleId":"D2","level":"warning","message":{"text":"YamlAssemblyRegistry.RegisterAssembly (cognitive 30): YamlAssemblyRegistry.RegisterAssembly has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/YamlAssemblyRegistry.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"1126005f9043b4a8ca5ee98766316fd7a7e06c9ac6d6b1e003defe8db625a068"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.ContributeManifest (cognitive 30): PackageSession.ContributeManifest has cognitive complexity 30 (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":"sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e3e354e095d51481a3b5111ea92f43b3e8d28ef88a6ec99052180d7b75f4029"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameLightProbeGizmoService.UpdateLightProbeWireframe (cognitive 30): EditorGameLightProbeGizmoService.UpdateLightProbeWireframe has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"66c1ca9a2cee229516c10bece8ed3ed4f6ba43093847112451ed7881a7f0e410"}},{"ruleId":"D2","level":"warning","message":{"text":"RemoteFacilities.Launch (cognitive 30): RemoteFacilities.Launch has cognitive complexity 30 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 8 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Remote/RemoteFacilities.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec6aa3e68a1376cd1a0437381f8a390ff0ecae05370d2e536a146d4ae20b1504"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptCompilerContext.GenerateExpression (cognitive 30): VisualScriptCompilerContext.GenerateExpression has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/VisualScriptCompiler.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"c44825248cbde0ae1ee37b0dd8aa870a0094057fce817b3e49c965e076c59885"}},{"ruleId":"D2","level":"warning","message":{"text":"StridePackageUpgrader.UpgradeProjectTo44 (cognitive 30): StridePackageUpgrader.UpgradeProjectTo44 has cognitive complexity 30 (threshold 15). Of this number, 26 points are the body\u0027s own statements and 4 belong to 3 function literals inside it that branch. 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":"sources/engine/Stride.Assets/StridePackageUpgrader.cs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3287f69d2fd93f02d2fdd5d673b9cb51544f24ae7633d27b752031d6a7213dd"}},{"ruleId":"D2","level":"warning","message":{"text":"Image.CalculateImageArray (cognitive 29): Image.CalculateImageArray has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Graphics/Image.cs"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"9968b776c027efec4a090802b5418e7f9a1b71cd51cfaa0276dda94bf1b9874a"}},{"ruleId":"D2","level":"warning","message":{"text":"Cone.New (cognitive 29): Cone.New has cognitive complexity 29 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Cone.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2bd15fff1054a6ea9406dc4f72f85fc28c73f248390d55247ae713e6ad1285b"}},{"ruleId":"D2","level":"warning","message":{"text":"Buffer.Recreate (cognitive 29): Buffer.Recreate has cognitive complexity 29 (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":"sources/engine/Stride.Graphics/Vulkan/Buffer.Vulkan.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"11c5a3880c73389d9585335af8b7a4b80f08c98bd885290e644018355dd4ef36"}},{"ruleId":"D2","level":"warning","message":{"text":"ParticleSystem.TryGetDebugDrawShape (cognitive 29): ParticleSystem.TryGetDebugDrawShape has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleSystem.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"3134a361ae81249af3e51346f1ef30797ec9a6223d51d6412da5247c6a8bc48c"}},{"ruleId":"D2","level":"warning","message":{"text":"StaticMeshColliderShape.BuildAndShareMeshes (cognitive 29): StaticMeshColliderShape.BuildAndShareMeshes has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Shapes/StaticMeshColliderShape.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab19eb8ace1a8c3a2afac0306a77ff0eb9719712f5a8dfee3b1a02a16cc21023"}},{"ruleId":"D2","level":"warning","message":{"text":"PointLightShaderGroupData.ComputeViewParameter (cognitive 29): PointLightShaderGroupData.ComputeViewParameter has cognitive complexity 29 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"dece2f16d3701ef4fc19c43cc21a7a13a34b44f0acb356bd08757f9aee16c0a6"}},{"ruleId":"D2","level":"warning","message":{"text":"LightGroupRendererShadow.ProcessLights (cognitive 29): LightGroupRendererShadow.ProcessLights has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightGroupRendererShadow.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"1954b2e7bd712a13d4a4224723dc36b4fe5ebfa90baf94ed34addcbcfd1ebd52"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvTranslator.Translate (cognitive 29): SpirvTranslator.Translate has cognitive complexity 29 (threshold 15). Of this number, 28 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/shaders/Stride.Shaders.Compilers/SpirvTranslator.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ce8e087b954d2598344284e8578e8f4efacd5e2ae9eb4f77027109c9d8926ae"}},{"ruleId":"D2","level":"warning","message":{"text":"MatrixParser.Match (cognitive 29): MatrixParser.Match has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/LiteralParsers.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd85337cc9dc9bbf6bdacf14cf8c65ba54b08368528a999793bd3adbc0ecad4d"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvBuilder.InstantiateMemberNames (cognitive 29): SpirvBuilder.InstantiateMemberNames has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"51a7b4eb748a7f2ba59f648510b8e7897fc0a2655b41bb0eb366fc87fa514b20"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.ConvertOperandsToParameterNames (cognitive 29): SPVGenerator.ConvertOperandsToParameterNames has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"452b98017ce3f8bd035d80436901a048b6472bb8719134167881e33c36322cbb"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageThreshold.Resolve (cognitive 29): ImageThreshold.Resolve has cognitive complexity 29 (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":"sources/engine/Stride.Graphics.Regression/ImageThreshold.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c2679da4bb97d4966567b5e7ef312b9064d93db5782c197b715a659b52eb0c6"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeViewItem.OnKeyDown (cognitive 29): TreeViewItem.OnKeyDown has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeViewItem.cs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c0dde4082353049d019f0f7457956b1fa0e62ecce3b69f1e38a046bbc155c8"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameRenderModeService.Update (cognitive 29): EditorGameRenderModeService.Update has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameRenderModeService.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e029e098d54da573e8e28acb8637f72bc7d3c6de098b477108315efd3a5610e"}},{"ruleId":"D2","level":"warning","message":{"text":"ImportModelCommand.IsSubsetOf (cognitive 29): ImportModelCommand.IsSubsetOf has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e95d29274e5a9f229f93b52cc73e7ba27e0f02b8b63fa6ebcac373da2c417ca"}},{"ruleId":"D2","level":"warning","message":{"text":"RestoreHelper.ListAssemblies (cognitive 29): RestoreHelper.ListAssemblies has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shared/Stride.NuGetResolver/RestoreHelper.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"266a07d7a0e545660aee7be9ce8f686adcf1911b5e2f243c750898d4d4a1d06b"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetUrlConstantsGenerator.CollectAssetTypes (cognitive 28): AssetUrlConstantsGenerator.CollectAssetTypes has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Generators/AssetUrlConstantsGenerator.cs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e1aaf75d08c13c250d26ba677fb61bea8f6d2e9a50ea69ec8e2980b65eeaa66"}},{"ruleId":"D2","level":"warning","message":{"text":"VertexHelper.GenerateTangentBinormal (cognitive 28): VertexHelper.GenerateTangentBinormal has cognitive complexity 28 (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":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a7683c51a3708b1b7cfbe2ad5978fa1498ea935003296b0fc4e283feff87f84"}},{"ruleId":"D2","level":"warning","message":{"text":"InitialOrderParent.Initialize (cognitive 28): InitialOrderParent.Initialize has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialOrderParent.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e64d3509df7fa458f76aac0b6aef729d97eb07458081bb42d2da7a4dfe13201"}},{"ruleId":"D2","level":"warning","message":{"text":"IntrinsicCallHelper.CompileIntrinsic (cognitive 28): IntrinsicCallHelper.CompileIntrinsic has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/IntrinsicCall.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"271f53bfcb221899cd9dc3c85ed97042716f5d2cf95bd74e67ed7ed40c268a30"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureMethodsImplementations.CompileGetDimensions (cognitive 28): TextureMethodsImplementations.CompileGetDimensions has cognitive complexity 28 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2700f816d7819f448c9fdab4b85c151a19356daf0a936827f736deb0f2b4075"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionExtensions.TryFoldConstantOp (cognitive 28): ExpressionExtensions.TryFoldConstantOp has cognitive complexity 28 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/ExpressionExtensions.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"4712820cafb4c3da8ef6f8d5c022cd92333a228d2e8c319a4666d3ff28a03f8d"}},{"ruleId":"D2","level":"warning","message":{"text":"OpData.ToString (cognitive 28): OpData.ToString has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Buffers/OpData.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"620ad4e1097d94e64523de25447ba58d3b8d64ff9eeabfed35b4d46fc3c10613"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetCompositeHierarchyPropertyGraph.UpdateAssetPartBases (cognitive 28): AssetCompositeHierarchyPropertyGraph.UpdateAssetPartBases has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"006b97aea5b7e8ff8122678bbe12e34a296452000ce75b47601c13aa9a70bfc9"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetNodeMetadataCollectorBase.ConvertPath (cognitive 28): AssetNodeMetadataCollectorBase.ConvertPath has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/Visitors/AssetNodeMetadataCollectorBase.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd5d2e7f9ad107693fcccd8bebad9013e5d7e3855678b2023876fd5744d00a91"}},{"ruleId":"D2","level":"warning","message":{"text":"IdentifiableObjectAnalysis.Visit (cognitive 28): IdentifiableObjectAnalysis.Visit has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/IdentifiableObjectAnalysis.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"809dcc6711051fdc3bbaf2d64571b892c95e86c5637b1efdbbbf6a64cb25c672"}},{"ruleId":"D2","level":"warning","message":{"text":"MovePackageInsideProject.UpgradeAsset (cognitive 28): MovePackageInsideProject.UpgradeAsset has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1355}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2c8493af77a52cb312b423059b4e807db1ec89429d2ec4dbce7425cdfc3d01f"}},{"ruleId":"D2","level":"warning","message":{"text":"TilePanelNavigationBehavior.OnAssociatedObjectKeyDown (cognitive 28): TilePanelNavigationBehavior.OnAssociatedObjectKeyDown has cognitive complexity 28 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/TilePanelNavigationBehavior.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"758eb8d386870bc960260ac69c7c5f8b17944455a0785d393b0d5df803ba5500"}},{"ruleId":"D2","level":"warning","message":{"text":"Vector2Editor.UpdateValueFromComponent (cognitive 28): Vector2Editor.UpdateValueFromComponent has cognitive complexity 28 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Vector2Editor.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"cda7f3d85a5417df770f776e0fbe8686741a363e323421e4f6df0a714f8aa824"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingTreePanel.ArrangeOverride (cognitive 28): VirtualizingTreePanel.ArrangeOverride has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VirtualizingTreePanel.cs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d4c5ec118ad7ce03f108b8b3cc6abbb8b140ecfdbfa3572a0ca1c4348cc7241"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameMaterialHighlightService.Update (cognitive 28): EditorGameMaterialHighlightService.Update has cognitive complexity 28 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameMaterialHighlightService.cs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ead4b79aff264ab92ec1ab935f3f60946429d939d746d3342748a83bb2252a7"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityHierarchyItemViewModel.MoveChildren (cognitive 28): EntityHierarchyItemViewModel.MoveChildren has cognitive complexity 28 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. 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":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bd4ed348dac8c640e0c6ca8bed245432c6cae8a7e72ce23bb2d744c65804f38"}},{"ruleId":"D2","level":"warning","message":{"text":"CollisionHelper.RayIntersectsBox (cognitive 27): CollisionHelper.RayIntersectsBox has cognitive complexity 27 (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":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"5424b780d867b350228c0e7b60667fdfebf9c16b3db94216d96e231d6b33aae7"}},{"ruleId":"D2","level":"warning","message":{"text":"ProcessorManager.IntroduceComponent (cognitive 27): ProcessorManager.IntroduceComponent has cognitive complexity 27 (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":"sources/engine/Stride.Engine/Engine/FlexibleProcessing/ProcessorManager.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"bebd7f679dea8fb9a5566182d90e9eb004a99b7de955657ab8d9782c6748a261"}},{"ruleId":"D2","level":"warning","message":{"text":"Image.SetupImageArray (cognitive 27): Image.SetupImageArray has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Graphics/Image.cs"},"region":{"startLine":1069}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5ef869d53586a32d44f1360e04fe91f869af91aeab4084adf614e27405f9cf8"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandList.EnsureRenderPass (cognitive 27): CommandList.EnsureRenderPass has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1739}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fbe1058f8adac73cf6f3b6ac8627190213b29809e04aa13685b52351cf57623"}},{"ruleId":"D2","level":"warning","message":{"text":"ConvexHullColliderShapeDesc.CreateShape (cognitive 27): ConvexHullColliderShapeDesc.CreateShape has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Data/ConvexHullColliderShapeDesc.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5961c26613ce97c2e98f0cdcc51628d0324bdaa1ba6b7211d1eef7b37c263c0"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulation.ClearCollisionDataOf (cognitive 27): Simulation.ClearCollisionDataOf has cognitive complexity 27 (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":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"79efc245f8ac150665a2c48a4366676b20250fc5fc43bcf3f24687ffaddc5f0c"}},{"ruleId":"D2","level":"warning","message":{"text":"Predicates.fast_expansion_sum_zeroelim (cognitive 27): Predicates.fast_expansion_sum_zeroelim has cognitive complexity 27 (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":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeb13f5fc8272aa3673e225294f424dc3acfa3288120bfeaff1c2adc72c22bd3"}},{"ruleId":"D2","level":"warning","message":{"text":"ComputeTextureBase.GenerateShaderSource (cognitive 27): ComputeTextureBase.GenerateShaderSource has cognitive complexity 27 (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":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeTextureBase.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"39720c200f12e7f7afceda9798d521118c6591ecf6a46fb7a3dfd6e254c87675"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvBuilder.ContainIds (cognitive 27): SpirvBuilder.ContainIds has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":651}}}],"partialFingerprints":{"codehealthFindingId/v1":"591f3780d8f04076333f29c87ce27860e18663da18815979ad2733836bec35e1"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageBuilder.SaveBuildUpToDateFile (cognitive 27): PackageBuilder.SaveBuildUpToDateFile has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilder.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"07d482abc4bade9a1dbc222693153f603ff3c72be825559410f378a20c5b6d63"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameEntityTransformService.Update (cognitive 27): EditorGameEntityTransformService.Update has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityTransformService.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d3493a1d336690a44e2ba0c94714854725d3d0a6aeac4962679c5549592df09"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameCameraOrientationService.Update (cognitive 27): EditorGameCameraOrientationService.Update has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/Game/EditorGameCameraOrientationService.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f2657be2360f31e49278cff4fd42d18d0e96d0a7fcb1733f599464e394a13d5"}},{"ruleId":"D2","level":"warning","message":{"text":"CameraOrientationGizmo.Create (cognitive 27): CameraOrientationGizmo.Create has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/CameraOrientationGizmo.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"50211d6718f2e558075ded97d387fd3ea04518c709623fba6470d3e00af0c791"}},{"ruleId":"D2","level":"warning","message":{"text":"UIEditorGameAdornerService.TouchMove (cognitive 27): UIEditorGameAdornerService.TouchMove has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameAdornerService.Events.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cdc37e450b2873a936891804a5a101a9abe517c5c0991bffb6850d1d6ea114a"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptEditorViewModel.TriggerBackgroundCompilation (cognitive 27): VisualScriptEditorViewModel.TriggerBackgroundCompilation has cognitive complexity 27 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.Diagnostics.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"52040637fd72f8e7df8326956ce45a666127eb300ed34c4c4420a593a1f266dd"}},{"ruleId":"D2","level":"warning","message":{"text":"PrefabModelAssetCompileCommand.DoCommandOverride (cognitive 27): PrefabModelAssetCompileCommand.DoCommandOverride has cognitive complexity 27 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"sources/engine/Stride.Assets.Models/PrefabModelAssetCompiler.cs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"5035be9e252eeb14f8e5dd2d45306fea23d996aaa661058265076ed933611328"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeUpgrades.GetArgumentNameColons (cognitive 27): CodeUpgrades.GetArgumentNameColons has cognitive complexity 27 (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":"sources/engine/Stride.Assets/CodeUpgrade/CodeUpgrades.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfa5a434ba718b8d8283b36283d982ddd7c76be1511195f6c98ae8f7c956ea42"}},{"ruleId":"D2","level":"warning","message":{"text":"ConvexHullDecompositionParametersUpgrader.UpgradeAsset (cognitive 27): ConvexHullDecompositionParametersUpgrader.UpgradeAsset has cognitive complexity 27 (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":"sources/engine/Stride.Assets/Physics/ColliderShapeAsset.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"25a9c09794124504d4844423dc7f9ca55fdd839ba893314e3ea4e6cb3c0035bb"}},{"ruleId":"D2","level":"warning","message":{"text":"MeshConverter.GenerateOneTextureTypeLayers (cognitive 27): MeshConverter.GenerateOneTextureTypeLayers has cognitive complexity 27 (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":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1375}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ca232d047a153296d4449b668dfd40ce0f1b82cc2e7c7240c0cbf7ccbbc4d25"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyContainer.Set (cognitive 26): PropertyContainer.Set has cognitive complexity 26 (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":"sources/core/Stride.Core/PropertyContainer.cs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"f63f64fbb6885f083c544400f7f94bfc1da434d3f148e659cdd6b1acb9d6e478"}},{"ruleId":"D2","level":"warning","message":{"text":"Dispatcher.SortOnThread (cognitive 26): Dispatcher.SortOnThread has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Threading/Dispatcher.cs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d4d4179cf628d776db7b98a3875e96188c61c37098e3c1b79a65126c1b151a6"}},{"ruleId":"D2","level":"warning","message":{"text":"GamePlatform.FindBestDevices (cognitive 26): GamePlatform.FindBestDevices has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GamePlatform.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"07ea8dd50faaf8f7b459c6c615bcb2950600ba99e0e2277f9f2c06d74b1060f4"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphicsDeviceManager.ChangeOrCreateDevice (cognitive 26): GraphicsDeviceManager.ChangeOrCreateDevice has cognitive complexity 26 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1153}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1e19c043bc66b1c228689ae121cf97a595aa8b95480b2533dee9639150043ff"}},{"ruleId":"D2","level":"warning","message":{"text":"GeoSphereData.Create (cognitive 26): GeoSphereData.Create has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.GeoSphere.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d343fd84c5bbfd969ef3045ca7e0b5481f79aa28145e8b6a6fffd0ff4eb2263"}},{"ruleId":"D2","level":"warning","message":{"text":"PipelineState.CreatePipelineLayout (cognitive 26): PipelineState.CreatePipelineLayout has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/PipelineState.Vulkan.cs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d7db4cdd1e6f4821cb4c00ff30acfbbc70d436d42683d108fde9b5655526dc"}},{"ruleId":"D2","level":"warning","message":{"text":"Ribbonizer.Ribbonize (cognitive 26): Ribbonizer.Ribbonize has cognitive complexity 26 (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":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderTrail.cs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"01ab6d9475d3ba6323df74d026f490b42604213972863ddfbf0f60d4b3eaeb0b"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicsShapesRenderingService.CreateChildEntity (cognitive 26): PhysicsShapesRenderingService.CreateChildEntity has cognitive complexity 26 (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":"sources/engine/Stride.Physics/Engine/PhysicsShapesRenderingService.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"22f35a44ce4566e83ab0222f470a5739629e31e9c0d560ac57ae63b181642f86"}},{"ruleId":"D2","level":"warning","message":{"text":"SplitExtensions.SplitMesh (cognitive 26): SplitExtensions.SplitMesh has cognitive complexity 26 (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":"sources/engine/Stride.Rendering/Extensions/SplitExtensions.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"02bafadd9d96584a1c04c134168f5d95129fe0164742373d900b75fa433783c8"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.RenameVariables (cognitive 26): ShaderMixer.RenameVariables has cognitive complexity 26 (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":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.Reflection.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"54275a4213449d16493098470ac75c133e26a25e10646430de956c6fdbafefcb"}},{"ruleId":"D2","level":"warning","message":{"text":"IntrinParser.Parse (cognitive 26): IntrinParser.Parse has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/Intrinsics/Parser.cs"},"region":{"startLine":475}}}],"partialFingerprints":{"codehealthFindingId/v1":"66c317e471f842d149bcbc7df10ec978fd85ebc79b67b878f672f0af03d472b2"}},{"ruleId":"D2","level":"warning","message":{"text":"YamlAssemblyRegistry.GetGenericArgumentsAndArrayDimension (cognitive 26): YamlAssemblyRegistry.GetGenericArgumentsAndArrayDimension has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/YamlAssemblyRegistry.cs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f2cd8cca81d3c6d64e797626f19fe76d0add6fd2500be3b844f402e8e111dac"}},{"ruleId":"D2","level":"warning","message":{"text":"SortedObservableCollection.SortedObservableCollection.ctor (cognitive 26): SortedObservableCollection.SortedObservableCollection.ctor has cognitive complexity 26 (threshold 15). Most of this is not in the body itself: 12 of the 26 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 52, 71). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation/Collections/SortedObservableCollection.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc8dbb715d988310dc26249db1b82ce2762477ab67c0c4f6f3d11737566fd27a"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetCompositeHierarchyEditorViewModel.CreateAssetFromSelectedParts (cognitive 26): AssetCompositeHierarchyEditorViewModel.CreateAssetFromSelectedParts has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"57b2ed36016da11ba8ca395f28ba66878fe353ed95d63a42e23b1a950a3f9982"}},{"ruleId":"D2","level":"warning","message":{"text":"Color4CurveViewModel.UpdateMaxMin (cognitive 26): Color4CurveViewModel.UpdateMaxMin has cognitive complexity 26 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b3a2d14e92a3211e8e8a80054e3079611d2b938edc88a1041a329fb9ff7d2d9"}},{"ruleId":"D2","level":"warning","message":{"text":"RotationCurveViewModel.UpdateMaxMin (cognitive 26): RotationCurveViewModel.UpdateMaxMin has cognitive complexity 26 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/RotationCurveViewModel.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eb9388342f98de536c4be31784b0c357a3add253e80698ba07217e3fe8185f3"}},{"ruleId":"D2","level":"warning","message":{"text":"Vector2CurveViewModel.UpdateMaxMin (cognitive 26): Vector2CurveViewModel.UpdateMaxMin has cognitive complexity 26 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"253beeaba8ef92a25d2a6c6d8cf4f90b49639f6ff802f33919ffb2f709c43a3d"}},{"ruleId":"D2","level":"warning","message":{"text":"Vector3CurveViewModel.UpdateMaxMin (cognitive 26): Vector3CurveViewModel.UpdateMaxMin has cognitive complexity 26 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"89b79ebb6fc5cea524a158419ae55163db2622d538c7e4374b832a3ef31731c2"}},{"ruleId":"D2","level":"warning","message":{"text":"Vector4CurveViewModel.UpdateMaxMin (cognitive 26): Vector4CurveViewModel.UpdateMaxMin has cognitive complexity 26 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"7228f5ff983d861d82ab562865232c606f5f2bf2769945f401ca67fee314649d"}},{"ruleId":"D2","level":"warning","message":{"text":"RoslynCodeUpgradeRunner.RunAsync (cognitive 26): RoslynCodeUpgradeRunner.RunAsync has cognitive complexity 26 (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":"sources/engine/Stride.Assets/CodeUpgrade/RoslynCodeUpgradeRunner.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"128cd9980d4836149009f69792d63330cd832ad3fc6a28dd78d261773294e0c0"}},{"ruleId":"D2","level":"warning","message":{"text":"ColliderShapeAssetCompiler.GetInputFiles (cognitive 26): ColliderShapeAssetCompiler.GetInputFiles has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Physics/ColliderShapeAssetCompiler.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"35d774c877b1a31e383b70ef439f0711f720d599861b14546c3f0fa4f36524b4"}},{"ruleId":"D2","level":"warning","message":{"text":"FreeTypeFontImporter.ImportGlyph (cognitive 26): FreeTypeFontImporter.ImportGlyph has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/Compiler/FreeTypeFontImporter.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"56feafcf115abdb6952234f8cbea03048143439441eaafbf3a7a483da92c3db0"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpExtractor.ExtractPattern (cognitive 26): CSharpExtractor.ExtractPattern has cognitive complexity 26 (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":"sources/tools/Stride.Core.Translation.Extractor/Extractors/CSharpExtractor.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7e04578aeae7d55c796790195125ef03bb553de7c250495dbbcc8f61b636319"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureTool.FindSpriteRegion (cognitive 26): TextureTool.FindSpriteRegion has cognitive complexity 26 (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":"sources/tools/Stride.TextureConverter/Frontend/TextureTool.cs"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d471208b81f9fd189a31d3adb96fd95f4a4007a4ab81c1ada3cff1e20dd4428"}},{"ruleId":"D2","level":"warning","message":{"text":"Matrix.ReducedRowEchelonForm (cognitive 25): Matrix.ReducedRowEchelonForm has cognitive complexity 25 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1783}}}],"partialFingerprints":{"codehealthFindingId/v1":"65ee19171b62ecf96a739b72f0964d2e867c3f7b9e36dbcf6cdf360fb959a47a"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationBlender.Blend (cognitive 25): AnimationBlender.Blend has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationBlender.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"319c7ccfa17bf2e4c0301502d6e184f6e28defdff19a7edddfb5ed9120f111ef"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationProcessor.DynamicNavigationMeshSystemOnNavigationMeshUpdatedUpdated (cognitive 25): NavigationProcessor.DynamicNavigationMeshSystemOnNavigationMeshUpdatedUpdated has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/Processors/NavigationProcessor.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a3965677c967c64e411d64edde2977c6e1758cd66ec2dea55075e9b7b5d89e7"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageMultiScaler.PrepareScaling (cognitive 25): ImageMultiScaler.PrepareScaling has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageScaler/ImageMultiScaler.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ec15c1f7ffdf4fb7d933b5a0c7cbbc991c04bafab3772333969d90c7dd60f08"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalReflections.DrawCore (cognitive 25): LocalReflections.DrawCore 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":"sources/engine/Stride.Rendering/Rendering/Images/LocalReflections/LocalReflections.cs"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"146faf8dc5be8052d1ddf6313147d416578eab13d47192e8a423a55b9ebcf99c"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterialNormalMapFeature.GenerateShader (cognitive 25): MaterialNormalMapFeature.GenerateShader has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialNormalMapFeature.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"977f655a17f2ec39a85d7d5efaabd9bd71574117115b7b2118c322921b2aa833"}},{"ruleId":"D2","level":"warning","message":{"text":"LightDirectionalShadowMapRenderer.Collect (cognitive 25): LightDirectionalShadowMapRenderer.Collect 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":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"f020744f276b4321be9bffe25ecf61c897e310efa4807b0a55c8a77341931e26"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultSliderRenderer.RenderColor (cognitive 25): DefaultSliderRenderer.RenderColor 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":"sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"f59bc260066de04b912087d324d81ca43b89dd10f6f1cddd18f219ec531d4651"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenXRInput.Initialize (cognitive 25): OpenXRInput.Initialize has cognitive complexity 25 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OpenXR/OpenXRInput.cs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"47d8c0d7246335760cee42ee217d9cf804b3d565ec0506d134c70ea77b53607e"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.ExpandForeach (cognitive 25): ShaderMixer.ExpandForeach has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":812}}}],"partialFingerprints":{"codehealthFindingId/v1":"62f9191bda31b90e255800dc72b2af4773a0039afbefe4f8d4cae9e552690aba"}},{"ruleId":"D2","level":"warning","message":{"text":"Parsers.VariableModifiers (cognitive 25): Parsers.VariableModifiers has cognitive complexity 25 (threshold 15). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"54fe9983904fa397be8857f7a31f277d48a2f88460e8cee168b909f6cca24d19"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferParsers.CBuffer (cognitive 25): BufferParsers.CBuffer has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"2072d18ed331c72fa1764169c1d09e3d062b150b8a4e39f1991495fa3f0e3d7c"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferParsers.RGroup (cognitive 25): BufferParsers.RGroup has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4f72e5b2cffbfb1cd4a928091fbdb1c45e4354d48e6cc1e26ce20e14e4a4086"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvBuilder.CanConvertScore (cognitive 25): SpirvBuilder.CanConvertScore has cognitive complexity 25 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"71768033feff70a1113bde7f1bd2f965bc006ae2e01421cf0763381a901ba13f"}},{"ruleId":"D2","level":"warning","message":{"text":"SettingsContainer.ChangeCurrentProfile (cognitive 25): SettingsContainer.ChangeCurrentProfile has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Settings/SettingsContainer.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"a319c36f1295b1510c410f400f6a2c58a9489091b85c1f22ae143a7016fc6914"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberPath.Apply (cognitive 25): MemberPath.Apply 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":"sources/core/Stride.Core.Reflection/MemberPath.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"121bf6dd184565366831b9b39bd7cd338b97c193ca2817c39d33e97e04006407"}},{"ruleId":"D2","level":"warning","message":{"text":"TagTypeSerializer.ReadYaml (cognitive 25): TagTypeSerializer.ReadYaml has cognitive complexity 25 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializers/TagTypeSerializer.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"b705029c70501483df9dd6184c36f2a172deb4a7fd724028d055ce499ea13d8b"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetDependenciesCompiler.Prepare (cognitive 25): AssetDependenciesCompiler.Prepare has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Compiler/AssetDependenciesCompiler.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"04f6517e96d69dbfcd5988108632e27d9543736ecfac3a9ddcda1f09bd63d276"}},{"ruleId":"D2","level":"warning","message":{"text":"BindableSelectedItemsBehavior.CollectionSelectionChanged (cognitive 25): BindableSelectedItemsBehavior.CollectionSelectionChanged 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":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/BindableSelectedItemsBehavior.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa9273d7ac9fdfcc98a7327cd4fea0bedd924dbbb4c0af785601d3fa6dfb77b"}},{"ruleId":"D2","level":"warning","message":{"text":"UserDocumentationService.CacheAssemblyDocumentation (cognitive 25): UserDocumentationService.CacheAssemblyDocumentation has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Services/UserDocumentationService.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c5646a16daa8e32a896c08ba451fb99fd90c91ea61840bcacd40e18a75dbfaf"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptCompilerContext.BuildGlobalConnectivityCache (cognitive 25): VisualScriptCompilerContext.BuildGlobalConnectivityCache has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/VisualScriptCompiler.cs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"153e11c3fb8ca0f492d1da51f32b6bb52989fcfefa05416212bdfd16b221a5e7"}},{"ruleId":"D2","level":"warning","message":{"text":"Effect.HasParameter (cognitive 24): Effect.HasParameter has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Effects/Effect.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"5529422b7e92331fadf517136370c080273974671aaee47581b09fbf19621adb"}},{"ruleId":"D2","level":"warning","message":{"text":"VertexElementValidator.Validate (cognitive 24): VertexElementValidator.Validate has cognitive complexity 24 (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":"sources/engine/Stride.Graphics/VertexElementValidator.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f2b0df66b6df32366bf3914d48fa88635f305047859e36253b3d7046c50c7f6"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphicsAdapterFactoryInstance.GraphicsAdapterFactoryInstance.ctor (cognitive 24): GraphicsAdapterFactoryInstance.GraphicsAdapterFactoryInstance.ctor has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapterFactory.Vulkan.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"7108073efccbd91a7d4b9e8318eb8aaf1dc27d498ea2d96c64c899cea0bad0b0"}},{"ruleId":"D2","level":"warning","message":{"text":"ParticleEmitter.MoveAndDeleteParticles (cognitive 24): ParticleEmitter.MoveAndDeleteParticles has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleEmitter.cs"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"10220a5813446e5bb71e56ba160bb8031e1d329d5b2927b55b66faebd20f819c"}},{"ruleId":"D2","level":"warning","message":{"text":"ComputeShaderClassBase.GenerateShaderSource (cognitive 24): ComputeShaderClassBase.GenerateShaderSource has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeShaderClassBase.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"3669fa54dd537a5e4842799a451906c475cc52c0a39aecd9f297a9e1be668bd2"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformRenderFeature.Prepare (cognitive 24): TransformRenderFeature.Prepare has cognitive complexity 24 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 10 belong to one function literal inside it that branches. 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":"sources/engine/Stride.Rendering/Rendering/TransformRenderFeature.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4a6ae101e527634466d6e9a3c06e86d1162c41e2c2ee7daba225eb04d35f5e3"}},{"ruleId":"D2","level":"warning","message":{"text":"TextBlock.UpdateWrappedText (cognitive 24): TextBlock.UpdateWrappedText has cognitive complexity 24 (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":"sources/engine/Stride.UI/Controls/TextBlock.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a3ac569ae92d1aea69f493fb9f7f8feacae56013368f78bd6c109c390b0dc89"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferParsers.TBuffer (cognitive 24): BufferParsers.TBuffer has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"704f6570ecdbb22e67508a26ef59ce49692063857fda2fbf97f2ced6f98ea1da"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageBuilderApp.FindContainingSolution (cognitive 24): PackageBuilderApp.FindContainingSolution has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilderApp.cs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"e708cdb21f828bb9270011b39a8b3e4691e970ccd816d2c0e45eece7bbe831d3"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetReplacementAnalysis.TryCollect (cognitive 24): AssetReplacementAnalysis.TryCollect has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetReplacementAnalysis.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"6440a5da30a887b3e04357010cfb1c586f4666377ce7135b4a0afedd10a186f7"}},{"ruleId":"D2","level":"warning","message":{"text":"FileVersionManager.ComputeFileHashAsyncRunner (cognitive 24): FileVersionManager.ComputeFileHashAsyncRunner has cognitive complexity 24 (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":"sources/assets/Stride.Core.Assets/FileVersionManager.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfb5140b3ba7cc000f377141076184259453df393382977e9970d7fc78daa74b"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageAssetCollection.CheckCanAdd (cognitive 24): PackageAssetCollection.CheckCanAdd has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageAssetCollection.cs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"9afa64465b13d7bd94d6e1a00e6e3cc52985dd36402acc675cf9f1cb50168ab3"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.Load (cognitive 24): PackageSession.Load has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"869c4445722c39937e584f1a24d07dfaffb01fd551d0cb320b03a716ce038e2d"}},{"ruleId":"D2","level":"warning","message":{"text":"DateTimeEditor.UpdateValueFromComponent (cognitive 24): DateTimeEditor.UpdateValueFromComponent has cognitive complexity 24 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/DateTimeEditor.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a8d504a886fcee7f5e0172436c27bc9d95c0afe54d6c5b81664fec0463a541e"}},{"ruleId":"D2","level":"warning","message":{"text":"UILayoutHelper.ExtractRects (cognitive 24): UILayoutHelper.ExtractRects has cognitive complexity 24 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UILayoutHelper.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6c1e788e2911e53b89f23e0e5f89f8b5f937c578a133cb2ab913c75ca4cf447"}},{"ruleId":"D2","level":"warning","message":{"text":"ThicknessEditor.UpdateValueFromComponent (cognitive 24): ThicknessEditor.UpdateValueFromComponent has cognitive complexity 24 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Views/ThicknessEditor.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e0bd0cd0d03b485c8673f49565f977b3923bcaba224a04bdefca2a96930f798"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureHelper.ImportTextureImageRaw (cognitive 24): TextureHelper.ImportTextureImageRaw has cognitive complexity 24 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfeabf7f4a0511c557fb160aff7d6e386fb94707dc06fc7ec8697dfb6a2e4a00"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualFileSystem.ResolveAbsolutePath (cognitive 23): VirtualFileSystem.ResolveAbsolutePath has cognitive complexity 23 (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":"sources/core/Stride.Core.IO/VirtualFileSystem.cs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"264d002f257758e54a73e5494f15f6595d83d4479b165387402fbc59112b69a5"}},{"ruleId":"D2","level":"warning","message":{"text":"ContentManager.CollectUnreferencedCycles (cognitive 23): ContentManager.CollectUnreferencedCycles has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.ReferenceCounting.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea7da03765e2cb0b131fc0ffda1552685def95b411ed288c0bdfb3bcd5239d33"}},{"ruleId":"D2","level":"warning","message":{"text":"NativeLibraryHelper.PreloadLibrary (cognitive 23): NativeLibraryHelper.PreloadLibrary has cognitive complexity 23 (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":"sources/core/Stride.Core/Native/NativeLibraryHelper.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c5f68cf73f0979a3fe6bf635402ff37b645290233aca93206fd5db989b5ebb9"}},{"ruleId":"D2","level":"warning","message":{"text":"SerializerSelector.UpdateDataSerializers (cognitive 23): SerializerSelector.UpdateDataSerializers has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/SerializerSelector.cs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"133f21f725f673be05936fd8ed866d12ddeb4229821997787f0294d5e5d90283"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityManager.CheckEntityComponentWithProcessors (cognitive 23): EntityManager.CheckEntityComponentWithProcessors has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/EntityManager.cs"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"7394e29e231bc5f95e19a9b95fd4bd8dd986ebb9b941a12023ba0dd5b8480f2b"}},{"ruleId":"D2","level":"warning","message":{"text":"SceneSystem.Draw (cognitive 23): SceneSystem.Draw has cognitive complexity 23 (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":"sources/engine/Stride.Engine/Engine/SceneSystem.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fef6d6ca2bec46254bfac112a24568d34bbc15a5b7e2f70ba4a50d1447c9ed8"}},{"ruleId":"D2","level":"warning","message":{"text":"Plane.New (cognitive 23): Plane.New has cognitive complexity 23 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Plane.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"3066b42712335e8f9dfa0816b4891acd65f3d4c4469cd377c02023c33890be1d"}},{"ruleId":"D2","level":"warning","message":{"text":"Texture.GetImageView (cognitive 23): Texture.GetImageView has cognitive complexity 23 (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":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a30f45882d57872d139daf7bb9f9132f2cda820c7fcec1608c090e95fda8f75"}},{"ruleId":"D2","level":"warning","message":{"text":"InitialVelocityParent.Initialize (cognitive 23): InitialVelocityParent.Initialize has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialVelocityParent.cs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"99d6919b9aef25dd236171227c2503b7e10af71430d999bf7e337852ddb933bf"}},{"ruleId":"D2","level":"warning","message":{"text":"RadiancePrefilteringGGXNoCompute.DrawCore (cognitive 23): RadiancePrefilteringGGXNoCompute.DrawCore has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGXNoCompute.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"a928263df0a5be56d517184cd097121f1bc02d866baddf867dfa9c908640886e"}},{"ruleId":"D2","level":"warning","message":{"text":"VRDeviceSystem.OnEnabledChanged (cognitive 23): VRDeviceSystem.OnEnabledChanged has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/VRDeviceSystem.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb9228c77251b59cfd71387ede9ced3b58db32c655663d77d53e584b7db2f92b"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.GenerateImplicitCasting (cognitive 23): SPVGenerator.GenerateImplicitCasting has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"cedf8550d3f902d15d12c7b8b7ed0c7da3d60430805f31a377469f3afa9e0bd5"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteralArray.From (cognitive 23): LiteralArray.From has cognitive complexity 23 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Literals/LiteralArray.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"8648f3725ce45e7b4645c71ca129da470819ddc66eeb7b770f2c3c40780f824c"}},{"ruleId":"D2","level":"warning","message":{"text":"UPath.MakeRelative (cognitive 23): UPath.MakeRelative has cognitive complexity 23 (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":"sources/core/Stride.Core.Design/IO/UPath.cs"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"63082b21a2673f7d8a75da9e13d1c8e74ac8ddad0abd29c7742501075e734eaa"}},{"ruleId":"D2","level":"warning","message":{"text":"TransactionStack.CompleteTransaction (cognitive 23): TransactionStack.CompleteTransaction has cognitive complexity 23 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Transactions/TransactionStack.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fef5b38de0580bf14424568df2329b359091c616454d41462cddab94b677401"}},{"ruleId":"D2","level":"warning","message":{"text":"Emitter.WriteDoubleQuotedScalar (cognitive 23): Emitter.WriteDoubleQuotedScalar has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1183}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e22eb7e7a21f605f6388dd0c9daf49d0dcd948c313876f66def41a53ecdb9c0"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetBaseAnalysis.ValidateAssetBase (cognitive 23): AssetBaseAnalysis.ValidateAssetBase has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetBaseAnalysis.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"da76d8a99fbbc6782070fcfbd35698a80ad5a052a45e7b8012f0aba003c4655b"}},{"ruleId":"D2","level":"warning","message":{"text":"Package.LoadAssemblyReferenceInternal (cognitive 23): Package.LoadAssemblyReferenceInternal has cognitive complexity 23 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"16f0523335c6da065c43f454c1d8159b4fd55dce0a71074bd6adae7d3a09de84"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.DetectPendingCodeUpgrades (cognitive 23): PackageSession.DetectPendingCodeUpgrades has cognitive complexity 23 (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":"sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbb55388136f478cf20bec6aa8ad50b450e6eafc117fa14071764ad4855ca48a"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSessionHelper.GetPackageVersion (cognitive 23): PackageSessionHelper.GetPackageVersion has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSessionHelper.Solution.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dda29989d397f2dea3a0e8553ff1ee973352e91cc1aeab5f560730333fe460a"}},{"ruleId":"D2","level":"warning","message":{"text":"NodePresenterFactory.CreateItems (cognitive 23): NodePresenterFactory.CreateItems has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/Presenters/NodePresenterFactory.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe4467e87ea3c0c90a9d9be1157af88ca8bdcaa3cb148d2ca13cee628a7ba7a9"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlMarkdown.Normalize (cognitive 23): XamlMarkdown.Normalize has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/XamlMarkdown.cs"},"region":{"startLine":914}}}],"partialFingerprints":{"codehealthFindingId/v1":"78bbcf413f3be54829c8008031af03606232f4d84384bc061fd87fcbe0235312"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoUpdatingSortedObservableCollection.ItemPropertyChanged (cognitive 23): AutoUpdatingSortedObservableCollection.ItemPropertyChanged has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation/Collections/AutoUpdatingSortedObservableCollection.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"300ad54759ba07b8ffa05648e1abd724e96bfe7894a2a8c91060c6a75d3bb20d"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameNavigationMeshService.CreateDebugVisual (cognitive 23): EditorGameNavigationMeshService.CreateDebugVisual has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameNavigationMeshService.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"abd6f673eb78805a2a8eda561c132ce5c2758a349edf284bbc8ec354dcebf09b"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformationGizmo.TransformSceneEntityBase (cognitive 23): TransformationGizmo.TransformSceneEntityBase has cognitive complexity 23 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TransformationGizmo.cs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"82dd5c95016509544c4d361f09531fd3d145fd7b89cd77efd7e2f3316bbc6468"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyFrameCurveViewModel.UpdateMaxMin (cognitive 23): KeyFrameCurveViewModel.UpdateMaxMin has cognitive complexity 23 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/KeyFrameCurveViewModel.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"5530deec0bab9825adccbc96b989e639318c757a37192f60a7bb6703bdef0a05"}},{"ruleId":"D2","level":"warning","message":{"text":"DotNetNewTemplateParametersWindow.Humanize (cognitive 23): DotNetNewTemplateParametersWindow.Humanize has cognitive complexity 23 (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":"sources/editor/Stride.Assets.Presentation/Templates/DotNetNewTemplateParametersWindow.xaml.cs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"68767d353f9a5a1f4d1f673be2cdab95fb47c0302b445c9d6571b69f92de032c"}},{"ruleId":"D2","level":"warning","message":{"text":"DebugAssetChildNodeViewModel.UpdateChildren (cognitive 23): DebugAssetChildNodeViewModel.UpdateChildren has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"4292c89c4a7c6d6733d6eca9380198495b60be57940b3f9490dbc0379237687e"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionViewModel.CreateNewFolderInDirectories (cognitive 23): SessionViewModel.CreateNewFolderInDirectories has cognitive complexity 23 (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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1502}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebd14146ce6d8f2b8eeaad67f5fbcb5b9b6b7148ccc1acca01e5c7b2ac35b62e"}},{"ruleId":"D2","level":"warning","message":{"text":"StrideEditorPlugin.CollectBuildCache (cognitive 23): StrideEditorPlugin.CollectBuildCache has cognitive complexity 23 (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":"sources/editor/Stride.GameStudio/Plugin/StrideEditorPlugin.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9906483090cc66d761012977290942b1c089e54f72e31bcbd52e8a339eb6fd1"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptAsset.ContainsPart (cognitive 23): VisualScriptAsset.ContainsPart has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/VisualScriptAsset.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cdf90cab60161f4f15360739c451452b0a155248e56bc22b5a9574cd0b680e0"}},{"ruleId":"D2","level":"warning","message":{"text":"DotNetNewTemplateBridge.RegisterProjectTemplates (cognitive 23): DotNetNewTemplateBridge.RegisterProjectTemplates has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Templates/DotNetNewTemplateBridge.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"141bc7e680327bf565a4ab2a401b9434bd68663082c1a4f545d5972ea80bb2e0"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteStudioXmlImport.ParseModel (cognitive 23): SpriteStudioXmlImport.ParseModel has cognitive complexity 23 (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":"sources/engine/Stride.SpriteStudio.Offline/SpriteStudioXmlImport.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de09675008efeab075e3c61d06b6e66d455cfa9b7cf29ee4836d3e6b4901fff"}},{"ruleId":"D2","level":"warning","message":{"text":"TemplatePreprocessor.CollapseProjectReferences (cognitive 23): TemplatePreprocessor.CollapseProjectReferences has cognitive complexity 23 (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":"sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"4071321ccb43d70f4e06441b97dc4445b702b8af66b10b336bc960a82fb716cd"}},{"ruleId":"D2","level":"warning","message":{"text":"LZ4Stream.AcquireNextChunk (cognitive 22): LZ4Stream.AcquireNextChunk has cognitive complexity 22 (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":"sources/core/Stride.Core.Serialization/Serialization/LZ4/LZ4Stream.cs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c58af9f35b4c6a3f3c3b40356b00bbfaa37b728066e1bb81ccded1a0cf201e0"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelComponent.Update (cognitive 22): ModelComponent.Update has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/ModelComponent.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"f17e93a908a8ab5f49efecb85a646b5ea6a49d861e98f5e5a0ade14bf22684ea"}},{"ruleId":"D2","level":"warning","message":{"text":"SceneInstance.Add (cognitive 22): SceneInstance.Add has cognitive complexity 22 (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":"sources/engine/Stride.Engine/Engine/SceneInstance.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b1e69a9a96d18db220d4ace4995a55a7f53648c7d6c143795149ae7d9c212b0"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphicsAdapterFactoryInstance.DebugReport (cognitive 22): GraphicsAdapterFactoryInstance.DebugReport has cognitive complexity 22 (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":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapterFactory.Vulkan.cs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"db6692deaa5a52ef4c9490edf6a92e6ef401fe3b56ce9cfff9f3c2aa84617486"}},{"ruleId":"D2","level":"warning","message":{"text":"Texture.InitializeData (cognitive 22): Texture.InitializeData has cognitive complexity 22 (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":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"0763deb260176015dbb84bb5e2f54361e210276c25e71727de51fbc8c1b974dc"}},{"ruleId":"D2","level":"warning","message":{"text":"InitialSizeParent.Initialize (cognitive 22): InitialSizeParent.Initialize has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialSizeParent.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"03cd380f767a8d756cdd93be8a87b3914fa65b5ddfaf8c9c2fc8b53d52c9e42b"}},{"ruleId":"D2","level":"warning","message":{"text":"LightStreak.DrawCore (cognitive 22): LightStreak.DrawCore has cognitive complexity 22 (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":"sources/engine/Stride.Rendering/Rendering/Images/LightStreak/LightStreak.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"24da58765c42f539aca9aaf6c19babb618d8552890ed95506249ea8cef9ac3d8"}},{"ruleId":"D2","level":"warning","message":{"text":"ForwardLightingRenderFeature.CollectVisibleLights (cognitive 22): ForwardLightingRenderFeature.CollectVisibleLights has cognitive complexity 22 (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":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"64583ebb6d974169f56f9a058f8036a7b872ab62385a420170ed4527edd6506c"}},{"ruleId":"D2","level":"warning","message":{"text":"PrimitiveProceduralModelBase.Generate (cognitive 22): PrimitiveProceduralModelBase.Generate has cognitive complexity 22 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/ProceduralModels/PrimitiveProceduralModelBase.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5c84e73e9802d62f1466571f45b60a3cd2d9decc01bd5d9134e8f7488fb18fd"}},{"ruleId":"D2","level":"warning","message":{"text":"FFmpegMedia.ExtractNextImage (cognitive 22): FFmpegMedia.ExtractNextImage has cognitive complexity 22 (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":"sources/engine/Stride.Video/FFmpeg/FFmpegMedia.cs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"75e1ce30be192e416483abbe19d7c6d89bd9a5052b60bc20a4e0d7097b8fda47"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderLoaderBase.ValidateCachedHashes (cognitive 22): ShaderLoaderBase.ValidateCachedHashes has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/ShaderLoaderBase.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c39476182fabba82fd3f9d43b5b27532b405a44a75161b36e305f546ecc4455"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderDefinition.TryResolveSymbolNoRecursion (cognitive 22): ShaderDefinition.TryResolveSymbolNoRecursion has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/SymbolTypes.cs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa3d30de0ea9778888157b9450207946fdac533346660f761cd063bf0783bb81"}},{"ruleId":"D2","level":"warning","message":{"text":"AccessorChainExpression.SetValue (cognitive 22): AccessorChainExpression.SetValue has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"df0c81ef074e6a1c7967520c761ada546c1aa44f9c67e95da0a48e3fac7ecb46"}},{"ruleId":"D2","level":"warning","message":{"text":"ConditionalFlow.Compile (cognitive 22): ConditionalFlow.Compile has cognitive complexity 22 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Control.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"04e1f9abc7b963068f86fe425f80a5c5444c880d42b485e8b880a585d9bd8fd4"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectiveRelationalParser.Match (cognitive 22): DirectiveRelationalParser.Match has cognitive complexity 22 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"31ce90af33343ceb3051a75c5bcab21c94e8df9a7b45f4719d46f306a15ba67a"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionExtensions.CompileConstantValue (cognitive 22): ExpressionExtensions.CompileConstantValue has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/ExpressionExtensions.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"612a9a11ad2ae4291e2499055d98ed4d4c7b45381ac568215037fdced619485c"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.PreProcessEnumerants (cognitive 22): SPVGenerator.PreProcessEnumerants has cognitive complexity 22 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Preprocessing.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2316284c3f9de5923f3eb9f6e38463b7f8167279f7d168a3aa34b0c0f8374e5"}},{"ruleId":"D2","level":"warning","message":{"text":"SpvOperand.To (cognitive 22): SpvOperand.To has cognitive complexity 22 (threshold 15). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/SpvLiteral.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"bedbe591adb4fefd4bfdefc5cf6a22283595627977dff572f9f0003dc15a33fe"}},{"ruleId":"D2","level":"warning","message":{"text":"OldCollectionDescriptor.OldCollectionDescriptor.ctor (cognitive 22): OldCollectionDescriptor.OldCollectionDescriptor.ctor has cognitive complexity 22 (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":"sources/core/Stride.Core.Reflection/TypeDescriptors/OldCollectionDescriptor.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b8476b1d996a9e885d5beb15e4d7a002dc967dc5853da5d1cbfa58166714238"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetSourceTracker.Assets_CollectionChanged (cognitive 22): AssetSourceTracker.Assets_CollectionChanged has cognitive complexity 22 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Tracking/AssetSourceTracker.cs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2fba8121a61fb538f5fef7e350514d4d4da1b7b2a2668dbd6d5af7646730410"}},{"ruleId":"D2","level":"warning","message":{"text":"SizesCache.AddOrChange (cognitive 22): SizesCache.AddOrChange has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VirtualizingTreePanel.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e1f55adb176730c05b645e386407dde34499e9b4cdae9b6535f0a5d5672b3c5"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoUpdatingSortedObservableCollection.GetReorderingIndex (cognitive 22): AutoUpdatingSortedObservableCollection.GetReorderingIndex has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation/Collections/AutoUpdatingSortedObservableCollection.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"4322ac1794d3eba7787317a6dc78352f9b92b6a4d4e54348d1b88422ce01d7f8"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameEntitySelectionService.SelectedContentChanged (cognitive 22): EditorGameEntitySelectionService.SelectedContentChanged has cognitive complexity 22 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntitySelectionService.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"68c94b766b3ff0a2c5be29ee4e795b9fc2ebb53fc6b3c9c604ec4bde2a217e14"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityHierarchyItemViewModel.FolderCollectionChanged (cognitive 22): EntityHierarchyItemViewModel.FolderCollectionChanged has cognitive complexity 22 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"56e9e03f0a37acafd783e17e6eb5e3e9b04ce5e6514d9ca8acf24418408e77e8"}},{"ruleId":"D2","level":"warning","message":{"text":"DragDropBehavior.OnDragOver (cognitive 22): DragDropBehavior.OnDragOver has cognitive complexity 22 (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":"sources/editor/Stride.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropBehavior.cs"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"726deb177abd223119fdc1db84057f6880671ce6f434be2807a4fd7f810d5827"}},{"ruleId":"D2","level":"warning","message":{"text":"DragDropBehavior.OnDrop (cognitive 22): DragDropBehavior.OnDrop has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropBehavior.cs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"59cf826bdac0f150f46d3f1a08966f23583ed702f2488f2677ad893b347006bc"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetSourceTrackerViewModel.PullSourceFileChanges (cognitive 22): AssetSourceTrackerViewModel.PullSourceFileChanges has cognitive complexity 22 (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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetSourceTrackerViewModel.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e47555165c6b434142315159be8e600a78af076a78a47a07352e45d41eec6e"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectoryBaseViewModel.AddChildren (cognitive 22): DirectoryBaseViewModel.AddChildren has cognitive complexity 22 (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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/DirectoryBaseViewModel.cs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"57704335c1f3de438273e2279e331982af0a7896294e25220ee9444fd754e69f"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptAsset.FindPart (cognitive 22): VisualScriptAsset.FindPart has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/VisualScriptAsset.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d3b69bb278e0ed522f2ef1b2253b696a82ba3e14702105151e172d3ebba28ac"}},{"ruleId":"D2","level":"warning","message":{"text":"MeshConverter.ProcessAnimations (cognitive 22): MeshConverter.ProcessAnimations has cognitive complexity 22 (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":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1d8dad40229292068de815dc82e5f5ef09fca2df9c8e741ea4782b4c0985a24"}},{"ruleId":"D2","level":"warning","message":{"text":"RestoreHelper.Restore (cognitive 22): RestoreHelper.Restore has cognitive complexity 22 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shared/Stride.NuGetResolver/RestoreHelper.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3d0b0cf004788c8018274c361920c9718b49de2e67e98e71cd0d6bb01a568f1"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorKeyTexLibrary.ApplyColorKey (cognitive 22): ColorKeyTexLibrary.ApplyColorKey has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/ColorKeyTexLibrary.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"26793ece87711d633e49fae9f8244007a7034f5ca6626800d2aba0d455b1ff61"}},{"ruleId":"D2","level":"warning","message":{"text":"NativeLockFile.UnixLock (cognitive 21): NativeLockFile.UnixLock has cognitive complexity 21 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/NativeLockFile.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb84ebf02f4e686d6cb28b6de4753f68112e9f763a13eea11dd15d489b63e232"}},{"ruleId":"D2","level":"warning","message":{"text":"ContentManager.DeserializeObject (cognitive 21): ContentManager.DeserializeObject 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":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"8736c3862918e2acc1e0d444c7d8cbd6639dc264eba906ac23444aed23a05fbb"}},{"ruleId":"D2","level":"warning","message":{"text":"NativeLibraryHelper.StripPlatformNativeExtension (cognitive 21): NativeLibraryHelper.StripPlatformNativeExtension has cognitive complexity 21 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Native/NativeLibraryHelper.cs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cb3b1ef611db8d565ed23a10fed33eff6f68ea7167068a8ad695a48d9ec61d7"}},{"ruleId":"D2","level":"warning","message":{"text":"ScriptSystem.Update (cognitive 21): ScriptSystem.Update 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":"sources/engine/Stride.Engine/Engine/Processors/ScriptSystem.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5412d0e69e8e6c39900bd060651a47f54450f058d1ad420994135c16ddc576c"}},{"ruleId":"D2","level":"warning","message":{"text":"Image.Initialize (cognitive 21): Image.Initialize 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":"sources/engine/Stride.Foundation/Graphics/Image.cs"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"1110d2f17f497c5c427e13b3b94ef2401060eb33097764928ba883b4cb875871"}},{"ruleId":"D2","level":"warning","message":{"text":"GameBase.RawTickProducer (cognitive 21): GameBase.RawTickProducer 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":"sources/engine/Stride.Games/GameBase.cs"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"703093ad2fd208691060f1120d1ab0af411c11a346b0aebdecff51a156df5c5a"}},{"ruleId":"D2","level":"warning","message":{"text":"Texture.GetData (cognitive 21): Texture.GetData has cognitive complexity 21 (threshold 15). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1223}}}],"partialFingerprints":{"codehealthFindingId/v1":"e90026ed354a2ce1113e134549f00a5b9a73ba3a9e75d16454b72b8fd580e19d"}},{"ruleId":"D2","level":"warning","message":{"text":"InitialPositionSeed.Initialize (cognitive 21): InitialPositionSeed.Initialize 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":"sources/engine/Stride.Particles/Initializers/InitialPositionSeed.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"9414ed26689a44f74a79918d64b155c78e2ba0032133437f8040ea55ca05971c"}},{"ruleId":"D2","level":"warning","message":{"text":"Ribbonizer.Ribbonize (cognitive 21): Ribbonizer.Ribbonize 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":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e8cae8bac0e2ddbe0ad8d1c3cbf60d42f39dcd480605500fabd8d4c08167f15"}},{"ruleId":"D2","level":"warning","message":{"text":"BowyerWatsonTetrahedralization.CheckConnectivity (cognitive 21): BowyerWatsonTetrahedralization.CheckConnectivity has cognitive complexity 21 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"12a3c5d88a3ce37ed4bfa91f1f79a239bc72254f895b660a9da85b487c73e620"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.ProcessCompositions (cognitive 21): ShaderMixer.ProcessCompositions 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":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.ShaderSourceEvaluator.cs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"b175bf32ec4686eb8426b2eef3cc289e1363212d5bb11d5b687d32634a480253"}},{"ruleId":"D2","level":"warning","message":{"text":"Identifier.IsMatrixSwizzle (cognitive 21): Identifier.IsMatrixSwizzle has cognitive complexity 21 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Literals.cs"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"b319d58acdf8034f2a1243949fa67bbb7435c7318f825b1c73543a6b1b872cb4"}},{"ruleId":"D2","level":"warning","message":{"text":"Parsers.TypeNameIdentifierArraySizeValue (cognitive 21): Parsers.TypeNameIdentifierArraySizeValue 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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f0096c2eae4309a813c816d4a778f63e6bf4b40caaf4e7ca3b2ddcf777bf4fd"}},{"ruleId":"D2","level":"warning","message":{"text":"MethodDuplicator.DuplicateMethodIfNecessary (cognitive 21): MethodDuplicator.DuplicateMethodIfNecessary has cognitive complexity 21 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Transformation/MethodDuplicator.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"e888c323fc6386e869bc677952a63b21d11ac3a909b3059f05b135f269b1a089"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandBuildStep.Clean (cognitive 21): CommandBuildStep.Clean has cognitive complexity 21 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/CommandBuildStep.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31db378984b6a1c89e5818cbb5e96a23acfb8dd0ad016a7ffbedecbf01b9f4a"}},{"ruleId":"D2","level":"warning","message":{"text":"ListBuildStep.CompleteCommands (cognitive 21): ListBuildStep.CompleteCommands has cognitive complexity 21 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/ListBuildStep.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"044775042ff460b22ba02d59969d0d41b5cd10933045663c6b66b206de4d49c7"}},{"ruleId":"D2","level":"warning","message":{"text":"UPath.Decode (cognitive 21): UPath.Decode 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":"sources/core/Stride.Core.Design/IO/UPath.cs"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"774541dfec84dbce036b0f0c3d412d09becb891aea7a155c61267a7df676b53c"}},{"ruleId":"D2","level":"warning","message":{"text":"Program.RealMain (cognitive 21): Program.RealMain 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":"sources/core/Stride.Core.Tasks/Program.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"4be5b48f1811286fac437e32f486d3206637b35a02603683aceb7c4cdc6d5d23"}},{"ruleId":"D2","level":"warning","message":{"text":"CommonAnalysis.UpdatePaths (cognitive 21): CommonAnalysis.UpdatePaths 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":"sources/assets/Stride.Core.Assets/Analysis/CommonAnalysis.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d6604f0478c953a6cae9de436b4112d29e529424430664df05fcd420552fe9"}},{"ruleId":"D2","level":"warning","message":{"text":"FilteringComboBox.EditableTextBoxPreviewKeyDown (cognitive 21): FilteringComboBox.EditableTextBoxPreviewKeyDown 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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/FilteringComboBox.cs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8348bfba45e3377cd01f5d9db3b8987c36d696dab3a95bf904b4cb42b8c6ebc"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityHierarchyItemViewModel.AddEntitiesFromAssets (cognitive 21): EntityHierarchyItemViewModel.AddEntitiesFromAssets has cognitive complexity 21 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"40c78775243d9058855ed87f17c52d10cbc43a4de4cadb30d03c70cb41e17f2c"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionViewModel.Explore (cognitive 21): SessionViewModel.Explore 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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":811}}}],"partialFingerprints":{"codehealthFindingId/v1":"494cde2fbaccf8385c1ac3e4f19174a6039ac9c54f6ac65efc40db43dc8e2167"}},{"ruleId":"D2","level":"warning","message":{"text":"PluginService.RegisterSession (cognitive 21): PluginService.RegisterSession has cognitive complexity 21 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Services/PluginService.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"49bd5f57c7ad49c8e0bec859c9f94c3f2f604252272cf992a1c1ccf155855fd7"}},{"ruleId":"D2","level":"warning","message":{"text":"AndroidDeviceEnumerator.ListAndroidDevices (cognitive 21): AndroidDeviceEnumerator.ListAndroidDevices has cognitive complexity 21 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shared/Process/AndroidDeviceEnumerator.cs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a352276258617e07db56dd5ae58926b6dc166d28a739a8a987eddc122e58fe"}},{"ruleId":"D2","level":"warning","message":{"text":"MeshConverter.BuildLayeredSurface (cognitive 21): MeshConverter.BuildLayeredSurface has cognitive complexity 21 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1279}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5c856ad112681fd1e6d29d636ee20e138647a3bfb431289f9625fc830665e4"}},{"ruleId":"D2","level":"warning","message":{"text":"TexImage.TexImage.ctor (cognitive 21): TexImage.TexImage.ctor has cognitive complexity 21 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TexImage.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"330d6bb10a2fb5655cf12501e8b201100300fecb0d2033f51381362c10e56978"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteAnimationSystem.Draw (cognitive 20): SpriteAnimationSystem.Draw has cognitive complexity 20 (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":"sources/engine/Stride.Engine/Rendering/Sprites/SpriteAnimationSystem.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"8252cddfc952738940d317425a3084b1f411921fe2258b0d3d6318aa81a133ed"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositionCopier.Compile (cognitive 20): CompositionCopier.Compile has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Rendering/ParameterCollection.cs"},"region":{"startLine":937}}}],"partialFingerprints":{"codehealthFindingId/v1":"463734d4ce9d752433baad49d223cffacbb18b867f0f89cd7b582d89d62b0790"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationBuilder.BuildNavmesh (cognitive 20): NavigationBuilder.BuildNavmesh has cognitive complexity 20 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationBuilder.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"959a627fba5add897ff02d81501a74792257d90587152d379644067af240f28f"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageEffect.SetRenderTargets (cognitive 20): ImageEffect.SetRenderTargets has cognitive complexity 20 (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":"sources/engine/Stride.Rendering/Rendering/Images/ImageEffect.cs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"46ab4e00d82688b0c55a3d4cd504bbb080352b38e824b6049308ec539d34c189"}},{"ruleId":"D2","level":"warning","message":{"text":"MeshVelocityRenderFeature.Prepare (cognitive 20): MeshVelocityRenderFeature.Prepare has cognitive complexity 20 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/MeshVelocityRenderFeature.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d9c5797a5f26ef4855e9b07a85a1b9ae41c61dd638c7362d27b62453aa7674"}},{"ruleId":"D2","level":"warning","message":{"text":"FFmpegVideoBackend.Update (cognitive 20): FFmpegVideoBackend.Update has cognitive complexity 20 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/Backends/FFmpegVideoBackend.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc570eda7d9e879602d41b28661e6cf7671bda8d4bfcbf42b8bba19599833b18"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.PopulateShaderInfo (cognitive 20): ShaderMixer.PopulateShaderInfo has cognitive complexity 20 (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":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.ShaderInfo.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f2376a59f30c4596bac754246c129fd326cea76437ca7685d7b49c9c266ac20"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsersExtensions.TypeMatching (cognitive 20): ParsersExtensions.TypeMatching has cognitive complexity 20 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/Intrinsics/Parser.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f3073c5d1f8fe3860cd1852a5fe417a66639dde7c9021b537b9a24381c34de"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolTable.TryResolveSymbol (cognitive 20): SymbolTable.TryResolveSymbol has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/Analysis/SymbolTable.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"5937f3aabf7ed1e4f2a588716334753476e724f8527f3a87e2a42fec101a608a"}},{"ruleId":"D2","level":"warning","message":{"text":"Parsers.Repeat (cognitive 20): Parsers.Repeat has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"47f4a7b0c834aa7736e71b58291fa18f3cb06fb8a59c4b8029a6175f42710270"}},{"ruleId":"D2","level":"warning","message":{"text":"FlowParsers.While (cognitive 20): FlowParsers.While has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/StatementParsers/StatementParsers.Flow.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"2118ab825bd01f1b368f21b18bffc2035b1e43ca4ad7202f4edbef5c0a806247"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvContext.ExtractConstantFromBuffer (cognitive 20): SpirvContext.ExtractConstantFromBuffer has cognitive complexity 20 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.ExtractBuffers.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f7c6dd4782f647ab4af1f661001c4a233040f3009ade8d1cec1e4b89628cda0"}},{"ruleId":"D2","level":"warning","message":{"text":"GameTestBase.ResolveRepoAndBranch (cognitive 20): GameTestBase.ResolveRepoAndBranch has cognitive complexity 20 (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":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7cf7ddd628c014ff24840309b7a62c30a6be622453dd6134a04e3682d65131"}},{"ruleId":"D2","level":"warning","message":{"text":"UPath.TrimParentAndSelfPath (cognitive 20): UPath.TrimParentAndSelfPath has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/IO/UPath.cs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"711ed0eef922d1c55d68c7f362429ac598247749b1a4ac6c72d6fee531fa9c34"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageVersionRange.Contains (cognitive 20): PackageVersionRange.Contains has cognitive complexity 20 (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":"sources/core/Stride.Core.Design/PackageVersionRange.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f9c30ed9e5faac9bdc922ee0dea60e59b6da3ba550cfe3a8aefff832f36efc8"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeExtensions.GetInterface (cognitive 20): TypeExtensions.GetInterface has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/TypeExtensions.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fdbcabd95728c826e6919011ec995c1915f79fab7316ec25e4819771417658a"}},{"ruleId":"D2","level":"warning","message":{"text":"Emitter.WriteSingleQuotedScalar (cognitive 20): Emitter.WriteSingleQuotedScalar has cognitive complexity 20 (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":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1309}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b22b184fd3e1492f73a9b141cad59dd3f6cb3d05b6dcbec2db387ccca64b1b"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetAnalysis.UpdateAssetReferences (cognitive 20): AssetAnalysis.UpdateAssetReferences has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetAnalysis.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b59b328d5aa4fb93e6540f2bb898de56f72a7a3219ccc53434e45d115eab08e"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetRegistry.RegisterEngineAssembly (cognitive 20): AssetRegistry.RegisterEngineAssembly has cognitive complexity 20 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetRegistry.cs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff50ef23e1b1489a9b9e0b4a92d035a9cb51c8e7463fdc414856d0a41cda517"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageSession.LoadMissingDependencies (cognitive 20): PackageSession.LoadMissingDependencies has cognitive complexity 20 (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":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"007be67f3413a08df5ab0947823f23b30801321c7c6f86a585c61bec8bb7f98a"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeViewModel.FinishInitialization (cognitive 20): NodeViewModel.FinishInitialization has cognitive complexity 20 (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":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"52db7ed3565001e6579e5692435e363a549ca890ba7cd337da741bc0dd476aa6"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeView.OnSelectedItemsChanged (cognitive 20): TreeView.OnSelectedItemsChanged has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeView.cs"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"33794946e113563b8410c1f028552184a293be27f9da35b01be05884a29896b1"}},{"ruleId":"D2","level":"warning","message":{"text":"TemplateProviderBase.CompareTo (cognitive 20): TemplateProviderBase.CompareTo has cognitive complexity 20 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/View/TemplateProviderBase.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"737c1e2c54d2ddf49856772ac60d21cb11427bff520d10d60dd78018089842bb"}},{"ruleId":"D2","level":"warning","message":{"text":"ContentReferenceViewModel.CanAddChildren (cognitive 20): ContentReferenceViewModel.CanAddChildren has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ContentReferenceViewModel.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"831acfc0f3a58011aabee54603767c43dec4bbd29aabfa315bf61ace9a0b5739"}},{"ruleId":"D2","level":"warning","message":{"text":"VhacdV4Upgrader.UpgradeAsset (cognitive 20): VhacdV4Upgrader.UpgradeAsset has cognitive complexity 20 (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":"sources/engine/Stride.Assets/Physics/ColliderShapeAsset.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2ba1196e6b7ced4de72e279359cd84efd7f0e12765baa05d1f7d7c709808df6"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteSheetCommand.CreateAtlasTextures (cognitive 20): SpriteSheetCommand.CreateAtlasTextures has cognitive complexity 20 (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":"sources/engine/Stride.Assets/Sprite/SpriteSheetAssetCompiler.cs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"88835d103f1fcf865ddf7fd56aa0006d0952f1c530dce3da94742d5a40a86d44"}},{"ruleId":"D2","level":"warning","message":{"text":"Matrix.UpperTriangularForm (cognitive 19): Matrix.UpperTriangularForm has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1542}}}],"partialFingerprints":{"codehealthFindingId/v1":"763d243fdd6e6637b14afda6ff28eb46eb7ca3803a9c24652ebe6b4d48405ff2"}},{"ruleId":"D2","level":"warning","message":{"text":"Matrix.LowerTriangularForm (cognitive 19): Matrix.LowerTriangularForm has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1621}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9ce492a65f4b05e37af5ada5ef78d94ddf83842aa44a6b8ea7c8ad832215213"}},{"ruleId":"D2","level":"warning","message":{"text":"Matrix.RowEchelonForm (cognitive 19): Matrix.RowEchelonForm has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1698}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec954f269fdc37beaedbf8da33017e866861d8740134567643e2f9b6a13d1824"}},{"ruleId":"D2","level":"warning","message":{"text":"Internals.WaitForSignal (cognitive 19): Internals.WaitForSignal has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Threading/ThreadPool.SemaphoreW.cs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f4c3bd5cd490cc47e0004ebb59e85330dc8db5cc6b28649395c671542da3a9c"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationData.FromAnimationChannels (cognitive 19): AnimationData.FromAnimationChannels has cognitive complexity 19 (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":"sources/engine/Stride.Engine/Animations/AnimationData.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"06c7b8ea372abb05bc677882ee6ed9e17b37ec941d4dad5e3d586ebfa7d9b173"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityComponentCollection.ValidateItem (cognitive 19): EntityComponentCollection.ValidateItem has cognitive complexity 19 (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":"sources/engine/Stride.Engine/Engine/EntityComponentCollection.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"24aa46ee2431bbfc7c98f80fb068d44e0f2ee7ca429bb3ad8e50f97cfe81bd8b"}},{"ruleId":"D2","level":"warning","message":{"text":"SocketMessageLayer.MessageLoop (cognitive 19): SocketMessageLayer.MessageLoop has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Network/SocketMessageLayer.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"974ebdf7a0fc8be7b8622e50d9497858074a8f98abba9ab67c3607c63c304aa7"}},{"ruleId":"D2","level":"warning","message":{"text":"StandardImageHelper.CreateImage (cognitive 19): StandardImageHelper.CreateImage has cognitive complexity 19 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Graphics/StandardImageHelper.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c46834e7f002f0df4c664562f544c7cb9c9cfcc4811cc2ee9f3f7a5ef5e6ccd"}},{"ruleId":"D2","level":"warning","message":{"text":"Copier.Copy (cognitive 19): Copier.Copy has cognitive complexity 19 (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":"sources/engine/Stride.Foundation/Rendering/ParameterCollection.cs"},"region":{"startLine":783}}}],"partialFingerprints":{"codehealthFindingId/v1":"abd131a0b514a43f8cd4601bd50b1a314e52cc8947a7bd275391849ba4ae368e"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferPool.Allocate (cognitive 19): BufferPool.Allocate has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/BufferPool.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"a76ed436b95cc658194f81f84607f170c85b6cfd7904046041cd389f467c41c2"}},{"ruleId":"D2","level":"warning","message":{"text":"InitialColorParent.Initialize (cognitive 19): InitialColorParent.Initialize has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialColorParent.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"389700dc17d591638771060a1bbec6bad91c5c71fa3491f45a915fc677af551f"}},{"ruleId":"D2","level":"warning","message":{"text":"Simulation.CreateConstraintInternal (cognitive 19): Simulation.CreateConstraintInternal has cognitive complexity 19 (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":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"d948252c8b341f0ce23198ad7d1475d1ed325e9a70bca5914c8063439794fc4d"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexExtensions.GenerateIndexBufferAEN (cognitive 19): IndexExtensions.GenerateIndexBufferAEN has cognitive complexity 19 (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":"sources/engine/Stride.Rendering/Extensions/IndexExtensions.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1a24006d8edcf02ea51364e01be9d8bb792e52c0ba115c801b503ff71b4a77e"}},{"ruleId":"D2","level":"warning","message":{"text":"InstancingRenderFeature.Prepare (cognitive 19): InstancingRenderFeature.Prepare has cognitive complexity 19 (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":"sources/engine/Stride.Rendering/Rendering/InstancingRenderFeature.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"13862ac84f0adbcadaf28625520fb8c72dc03a81290ec1c94b0630179dad5f81"}},{"ruleId":"D2","level":"warning","message":{"text":"BowyerWatsonTetrahedralization.GenerateFaces (cognitive 19): BowyerWatsonTetrahedralization.GenerateFaces has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"14230956fbca9da056db7386abd3c1125e18a98024067873044c94c89fe19c70"}},{"ruleId":"D2","level":"warning","message":{"text":"LightDirectionalShadowMapRenderer.ComputeCascadeSplits (cognitive 19): LightDirectionalShadowMapRenderer.ComputeCascadeSplits has cognitive complexity 19 (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":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"40d2475875ae21a399bf381f479e65f73af0e8edca103f1025bc02a90158de9b"}},{"ruleId":"D2","level":"warning","message":{"text":"Grid.CalculateStarStripSize (cognitive 19): Grid.CalculateStarStripSize has cognitive complexity 19 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Panels/Grid.cs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd201b172bfea36992ff56d06f3533f47da93f7a8e27c4968cb88f741e590a73"}},{"ruleId":"D2","level":"warning","message":{"text":"StackPanel.UpdateAndArrangeVisibleChildren (cognitive 19): StackPanel.UpdateAndArrangeVisibleChildren has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Panels/StackPanel.cs"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ab48f59bcd2ae3a7c061cef109a1503a053a6e5f572dfd7ab43059c1075c047"}},{"ruleId":"D2","level":"warning","message":{"text":"FFmpegMedia.IsStereoscopicVideo (cognitive 19): FFmpegMedia.IsStereoscopicVideo has cognitive complexity 19 (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":"sources/engine/Stride.Video/FFmpeg/FFmpegMedia.cs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc3a7bd71e681d689dd5ac2a907b93293d0db9f8d3fa26c599707583be2537ed"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.PropagateMacrosRecursively (cognitive 19): ShaderMixer.PropagateMacrosRecursively has cognitive complexity 19 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.ShaderSourceEvaluator.cs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"dac756d2ba1ab02ef03c89d163ca4bf21fbae85624917a977adcc7df8474a599"}},{"ruleId":"D2","level":"warning","message":{"text":"MonoGamePreProcessor.Run (cognitive 19): MonoGamePreProcessor.Run has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/PreProcessing/MacroPreProcessor.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d304af551f691ce0030582c09cf36fd562ed1064464b8459ecfc20637eb8ef6"}},{"ruleId":"D2","level":"warning","message":{"text":"MixinParser.Match (cognitive 19): MixinParser.Match has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDFX/Parsers/EffectStatementParsers.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"187f227a9e4ded1f913494004b4e1eb9c44e281ca52b10c6c32a73eb80309ec5"}},{"ruleId":"D2","level":"warning","message":{"text":"ParameterParser.Match (cognitive 19): ParameterParser.Match has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDFX/Parsers/ParamsParsers.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c00047fae05e491d3ee8a6df5793548d083e44f90355115956ee52e443ed2ac9"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMethod.ProcessSymbol (cognitive 19): ShaderMethod.ProcessSymbol has cognitive complexity 19 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.MethodOrMember.cs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"a26c73005c11d3ff5688f0424ed9fab45e2e8c09a981cd241e35490145cd5a0c"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionDefineDirectiveParser.Match (cognitive 19): FunctionDefineDirectiveParser.Match has cognitive complexity 19 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveParsers.cs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fea606b7c791233f044888fe070d62efc0e363fce73c8dc7af6ce4a68aafb90"}},{"ruleId":"D2","level":"warning","message":{"text":"FlowParsers.For (cognitive 19): FlowParsers.For has cognitive complexity 19 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/StatementParsers/StatementParsers.Flow.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"e54c2b4985afb2665e3639ecea869be6556d6dcdcdf47a645f4d247fc5d76233"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyContainer.TryResolveDevRedirect (cognitive 19): AssemblyContainer.TryResolveDevRedirect has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"f04d0de7c599cee053fea10c64a2f2dc96cd6c9180295dde09d9b7c78848bd88"}},{"ruleId":"D2","level":"warning","message":{"text":"Emitter.WritePlainScalar (cognitive 19): Emitter.WritePlainScalar has cognitive complexity 19 (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":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1365}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ea4a3562a0d6351230d3675f691f5a0bc41287f90e36d6605e5728755cae5d6"}},{"ruleId":"D2","level":"warning","message":{"text":"Parser.ProcessDirectives (cognitive 19): Parser.ProcessDirectives has cognitive complexity 19 (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":"sources/core/Stride.Core.Yaml/Parser.cs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"536da971a89127b18810baab641c1e5be71b7fb4837cde1689ddf428de615e65"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetBaseToDerivedRegistry.RegisterBaseToDerived (cognitive 19): AssetBaseToDerivedRegistry.RegisterBaseToDerived has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetBaseToDerivedRegistry.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5c542cca220517c7823bc53f4c0eb8c899f25f841183dc3ebdb9d407b901c8b"}},{"ruleId":"D2","level":"warning","message":{"text":"Package.UpdateSourceFolders (cognitive 19): Package.UpdateSourceFolders has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"87573c3cf0be28d3480e1676583f0042c1e4a52c7110d8ce9c9e0b6bf07be2a8"}},{"ruleId":"D2","level":"warning","message":{"text":"ScaleBar.OnRender (cognitive 19): ScaleBar.OnRender has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/ScaleBar.cs"},"region":{"startLine":706}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcf2889530c555ff646486416b3672ef50883264f234f08c749bc735d27467ab"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeView.BringItemToView (cognitive 19): TreeView.BringItemToView has cognitive complexity 19 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeView.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"99c7f99ab11288909fcab58d1f258473e47e4e5cf10a55669e7f1235552e637a"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeViewElementFinder.FindNext (cognitive 19): TreeViewElementFinder.FindNext has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeViewElementFinder.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"67eed39e24923974943bb9ff80f7be991396c69918175416621a54ad0d025c05"}},{"ruleId":"D2","level":"warning","message":{"text":"CanvasRenderer.DrawTexts (cognitive 19): CanvasRenderer.DrawTexts has cognitive complexity 19 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Drawing/CanvasRenderer.cs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"72cedfddf588bd1b26da32e296e8c0539ddd4f58cebbcaab716cce4688755948"}},{"ruleId":"D2","level":"warning","message":{"text":"CanvasRenderer.DrawPolylineBalanced (cognitive 19): CanvasRenderer.DrawPolylineBalanced has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Drawing/CanvasRenderer.cs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"528f8b04f0fb46b4f8025bd2b961c20b01378e4695fb6af7801a0e297b97702e"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptMethodEditorViewModel.Diagnostics_CollectionChanged (cognitive 19): VisualScriptMethodEditorViewModel.Diagnostics_CollectionChanged has cognitive complexity 19 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptMethodEditorViewModel.cs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ae1631694975d7768b29d40142ecdce65d576b0c6720210787e810268f31790"}},{"ruleId":"D2","level":"warning","message":{"text":"HorizontalAndVerticalAxisRenderer.RenderMinorItems (cognitive 19): HorizontalAndVerticalAxisRenderer.RenderMinorItems has cognitive complexity 19 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/Axes/HorizontalAndVerticalAxisRenderer.cs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d6331c3b3c3e10d7a86d839a79dfbc65c2ce983d3d1fa23a4ab8363df788837"}},{"ruleId":"D2","level":"warning","message":{"text":"FloatCurveViewModel.UpdateMaxMin (cognitive 19): FloatCurveViewModel.UpdateMaxMin has cognitive complexity 19 (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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/FloatCurveViewModel.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"1346b8677768772e9a3b1a27e3084cf7f8b092bb34adaa8f65c061f5d7bc1554"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetTemplateGenerator.Run (cognitive 19): AssetTemplateGenerator.Run has cognitive complexity 19 (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":"sources/editor/Stride.Assets.Presentation/Templates/AssetTemplateGenerator.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"e181a31d9b960ae5c4ddc9c491ec74820c890afae4e696e65286ee8bb9149d1a"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionViewModel.DoUpdateSessionState (cognitive 19): SessionViewModel.DoUpdateSessionState has cognitive complexity 19 (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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1617}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c84a67a7adc4e976d13d9fe1431aa9322b291731aea9a507526cfac48d2d130"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptCompiler.Generate (cognitive 19): VisualScriptCompiler.Generate has cognitive complexity 19 (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":"sources/engine/Stride.Assets/Scripts/VisualScriptCompiler.cs"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"02c146b37496f6b1d8951d9c62f1651d4d06a63d4d9a301c86a44a04825ffccd"}},{"ruleId":"D2","level":"warning","message":{"text":"MaxRectanglesBinPack.FindPositionForNewNodeBestShortSideFit (cognitive 19): MaxRectanglesBinPack.FindPositionForNewNodeBestShortSideFit has cognitive complexity 19 (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":"sources/engine/Stride.Assets/Textures/Packing/MaxRectanglesBinPack.cs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ceed25644126269f7679db644c3821fba04a24c197bc20a36db610dc0decc45"}},{"ruleId":"D2","level":"warning","message":{"text":"MaxRectanglesBinPack.FindPositionForNewNodeBottomLeft (cognitive 19): MaxRectanglesBinPack.FindPositionForNewNodeBottomLeft has cognitive complexity 19 (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":"sources/engine/Stride.Assets/Textures/Packing/MaxRectanglesBinPack.cs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"e36edbdd8441734df04cfb2ce98ef705df5a2ab0fce693e98d256372bdb564dd"}},{"ruleId":"D2","level":"warning","message":{"text":"MaxRectanglesBinPack.FindPositionForNewNodeBestLongSideFit (cognitive 19): MaxRectanglesBinPack.FindPositionForNewNodeBestLongSideFit has cognitive complexity 19 (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":"sources/engine/Stride.Assets/Textures/Packing/MaxRectanglesBinPack.cs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"243ce319f06e29c568dc92199c35d7c5916bc37532e80b88186bb72a0b1896ad"}},{"ruleId":"D2","level":"warning","message":{"text":"MaxRectanglesBinPack.FindPositionForNewNodeBestAreaFit (cognitive 19): MaxRectanglesBinPack.FindPositionForNewNodeBestAreaFit has cognitive complexity 19 (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":"sources/engine/Stride.Assets/Textures/Packing/MaxRectanglesBinPack.cs"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"871d424e71a9cfcd1eee1f991194b00c2aef3c61e005f6b3a8105f6e72f4893a"}},{"ruleId":"D2","level":"warning","message":{"text":"TexturePacker.PackTextures (cognitive 19): TexturePacker.PackTextures has cognitive complexity 19 (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":"sources/engine/Stride.Assets/Textures/Packing/TexturePacker.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e4fc4aac97f365644b71135cdc73126158ac3165abccbb4b55de569803a347e"}},{"ruleId":"D2","level":"warning","message":{"text":"SpriteStudioModelAssetCommand.DoCommandOverride (cognitive 19): SpriteStudioModelAssetCommand.DoCommandOverride has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Offline/SpriteStudioModelAssetCompiler.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"c87f26e1d08c97cf93e9582d540af50da015b1da93242215ee1c330d6cdf118d"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationChannel.Fitting (cognitive 18): AnimationChannel.Fitting has cognitive complexity 18 (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":"sources/engine/Stride.Engine/Animations/AnimationChannel.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"c427c1090d3f301c34a07dbb206f27b5e0b55334cab4e9a5c1dca0b4dac15a61"}},{"ruleId":"D2","level":"warning","message":{"text":"CloneSerializer.PreSerialize (cognitive 18): CloneSerializer.PreSerialize has cognitive complexity 18 (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":"sources/engine/Stride.Engine/Engine/Design/CloneSerializer.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c33434fc1f5c62b8914f24cd7ca021d67d7ce6bf1282b5fe418c3a9dd39fb12"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphicsCompositor.DrawCore (cognitive 18): GraphicsCompositor.DrawCore has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/GraphicsCompositor.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fd9c42583809205d2ed0946cc9fbff6c34d75e0f030d67ae392be9e0b0fb58b"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelRenderProcessor.CheckMeshes (cognitive 18): ModelRenderProcessor.CheckMeshes has cognitive complexity 18 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/ModelRenderProcessor.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6fffae43c08f72bfd4009dd4c03ea2a463edeadbe8e1ddb26a25d9e2c0ea24f"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureSerializationData.Write (cognitive 18): TextureSerializationData.Write has cognitive complexity 18 (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":"sources/engine/Stride.Graphics/Data/TextureSerializationData.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"b375d7530c7b90d8e5e3f3599f5a14dec4323e7f5b8e48a9787989f93a7f0d1c"}},{"ruleId":"D2","level":"warning","message":{"text":"CharacterBitmap.CopyAndAddBordersFromMono (cognitive 18): CharacterBitmap.CopyAndAddBordersFromMono has cognitive complexity 18 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Font/CharacterBitmap.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"c09bb70f13ad85ed5787472412ed980e264bfb5760700b3447072923260e641e"}},{"ruleId":"D2","level":"warning","message":{"text":"Teapot.CreatePatchVertices (cognitive 18): Teapot.CreatePatchVertices has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Teapot.cs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"74408d79fbc075968facd3ded250989c2dd073cf8043f2d120e44f5b4e74908e"}},{"ruleId":"D2","level":"warning","message":{"text":"EffectParameterUpdater.Update (cognitive 18): EffectParameterUpdater.Update has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Rendering/EffectParameterUpdater.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"92320294acad623df089743a93dcb47549d3f33ee05960245d6231572fde676c"}},{"ruleId":"D2","level":"warning","message":{"text":"ResourceGroupBufferUploader.Apply (cognitive 18): ResourceGroupBufferUploader.Apply has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/ResourceGroupBufferUploader.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fe5f6a5c9f999b5dcd06e88eff9fc5ba855ded6aa0dd28b0c87783ccaf6cbd9"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicsComponent.ComposeShape (cognitive 18): PhysicsComponent.ComposeShape has cognitive complexity 18 (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":"sources/engine/Stride.Physics/Engine/PhysicsComponent.cs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"41c289bbb6de389c375562d6147afb3499fd3657250d797c9bbc7ffa6859d3df"}},{"ruleId":"D2","level":"warning","message":{"text":"HalfBufferExtensions.CompactHalf (cognitive 18): HalfBufferExtensions.CompactHalf has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/HalfBufferExtensions.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"e00ecdbf5ecc8cc4632dc00bd1103e1ef361448ebb6f20ff898de98c75271770"}},{"ruleId":"D2","level":"warning","message":{"text":"RadiancePrefilteringGGX.DrawCore (cognitive 18): RadiancePrefilteringGGX.DrawCore has cognitive complexity 18 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGX.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"e748c9a1d83f2c5ffd843f2759d08977b0989a341f4bcffc3defb435c3f632d2"}},{"ruleId":"D2","level":"warning","message":{"text":"DepthOfField.SetupTechnique (cognitive 18): DepthOfField.SetupTechnique has cognitive complexity 18 (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":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/DepthOfField.cs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1d23ccecd79d29413e35cdd801cbf170922dd08aeb811c53a833b12dcc819e1"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageEffectShader.DrawCore (cognitive 18): ImageEffectShader.DrawCore has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageEffectShader.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"df6514fa7296018dc57af75b00d1768dfe190ddd215d8d96fe9e558549de3a45"}},{"ruleId":"D2","level":"warning","message":{"text":"BowyerWatsonTetrahedralization.RemoveSuperTetrahedron (cognitive 18): BowyerWatsonTetrahedralization.RemoveSuperTetrahedron has cognitive complexity 18 (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":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f0d5b13772884b1256931196eeb04a762d133abab806f2d3c657046c20768d"}},{"ruleId":"D2","level":"warning","message":{"text":"RenderSystem.Extract (cognitive 18): RenderSystem.Extract has cognitive complexity 18 (threshold 15). Of this number, 10 points are the body\u0027s own statements and 8 belong to 2 function literals inside it that branch. To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderSystem.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a66fe503642c9bde1f272708db42e86d63b7f1d954ff8db06a0f649b76dd7d5"}},{"ruleId":"D2","level":"warning","message":{"text":"RenderSystemResourceGroupLayout.CreateLogicalGroup (cognitive 18): RenderSystemResourceGroupLayout.CreateLogicalGroup has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderSystemResourceGroupLayout.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"914a88e0abcebfe92d51ee635cb9f6560f513217fa42c8de6bb79d319a450007"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.ComputeCBufferReflection (cognitive 18): ShaderMixer.ComputeCBufferReflection has cognitive complexity 18 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"82a10ee828a42b200befe1af57a7b4c5367e402d19f64f3226506a3955aa67d0"}},{"ruleId":"D2","level":"warning","message":{"text":"Scanner.ReadString (cognitive 18): Scanner.ReadString has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/Scanners/Scanner.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b036f20e5578644b1b197209b51e7e1bfa2900f24abae05d0ba8ea148dbfe18"}},{"ruleId":"D2","level":"warning","message":{"text":"Scanner.ReadString (cognitive 18): Scanner.ReadString has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/Scanners/ScannerGeneric.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"b31df272e00626286c2f373e73f4b66b910a7bc10bae8cbecafd062709a94b58"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamsParsers.Match (cognitive 18): ParamsParsers.Match has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDFX/Parsers/ParamsParsers.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"c747474f6bc2ebedba5f252881e4032a08bef67927930709bf98ebbefaff5797"}},{"ruleId":"D2","level":"warning","message":{"text":"PostfixParser.Match (cognitive 18): PostfixParser.Match has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/UnaryParsers.Postfix.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e5d0c970bd4a29c62acdc3317186579002986edd6ef0c1fc3ea62c1f6075c1"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteralsParser.TypeName (cognitive 18): LiteralsParser.TypeName has cognitive complexity 18 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/LiteralParsers.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"42deeea99acd5ccc0064ff06c0655fde0adb9342949e8598aac3a6c71b8987d5"}},{"ruleId":"D2","level":"warning","message":{"text":"DisData.ComputeIdOffset (cognitive 18): DisData.ComputeIdOffset has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Tools/Dis.cs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdec232bc3b0b8c62f65e63c91228303e0373d537bcdadfa56aebd16e976eb48"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvTools.Validate (cognitive 18): SpirvTools.Validate has cognitive complexity 18 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Tools/SpirvTools.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7202406a285d02803889326a95672a3011d05b698a574de318c5d5afa6ffe8a"}},{"ruleId":"D2","level":"warning","message":{"text":"GameTestBase.RunGameTest (cognitive 18): GameTestBase.RunGameTest has cognitive complexity 18 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c43014e8f3694e5b437c97b6e7a62538e06d6203b9bdc28fa6543a89782dd89"}},{"ruleId":"D2","level":"warning","message":{"text":"HostEnvironment.ResolveCpuName (cognitive 18): HostEnvironment.ResolveCpuName has cognitive complexity 18 (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":"sources/engine/Stride.Graphics.Regression/HostEnvironment.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6781d4baac6281c014e5eb8de1843fd92e8b5da3000a4f4f671958e04ce3a1f"}},{"ruleId":"D2","level":"warning","message":{"text":"TestCamera.UpdateCamera (cognitive 18): TestCamera.UpdateCamera has cognitive complexity 18 (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":"sources/engine/Stride.Graphics.Regression/TestCamera.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3cb97b8f933d332df2769d3ed3dda2968386348136403c672a25af85b80aefa"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandBuildStep.StartCommand (cognitive 18): CommandBuildStep.StartCommand has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/CommandBuildStep.cs"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae6965cb21b2e7fb4633e2b7b623e71dbb5f2c365798b5a80159b18a800bd306"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyContainer.LoadAssemblyByName (cognitive 18): AssemblyContainer.LoadAssemblyByName has cognitive complexity 18 (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":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd05453aa3d504a0a54beb934d94009ca2e063ea6ede2beda0dbf62945949f11"}},{"ruleId":"D2","level":"warning","message":{"text":"DataVisitorBase.Visit (cognitive 18): DataVisitorBase.Visit has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Reflection/DataVisitorBase.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83c6156414fd7314c808bf969aae6a73fee49bb4998ca832788df002cc391b0"}},{"ruleId":"D2","level":"warning","message":{"text":"SolutionSerialization.Reconcile (cognitive 18): SolutionSerialization.Reconcile has cognitive complexity 18 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"sources/core/Stride.Core.Design/Solutions/SolutionSerialization.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"d58f941da37be4457ae137c8cd392f57a181012d6d92ba177279a99edeb7ccc4"}},{"ruleId":"D2","level":"warning","message":{"text":"BundlePacker.ValidateReferenceRooting (cognitive 18): BundlePacker.ValidateReferenceRooting has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/BundlePacker.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b711fd5473d455e8c1343f30928833f705b0b9bd586166eb6f49df8304f58f8"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetFileChangedEventSquasher.Squash (cognitive 18): AssetFileChangedEventSquasher.Squash has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetFileChangedEventSquasher.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"78159155fcd3b6c035f7ecd864896c8ad388c9e740b0e16231a972ca79011c02"}},{"ruleId":"D2","level":"warning","message":{"text":"TrackedAsset.UpdateAssetImportPathsTracked (cognitive 18): TrackedAsset.UpdateAssetImportPathsTracked has cognitive complexity 18 (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":"sources/assets/Stride.Core.Assets/Tracking/TrackedAsset.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f5b3f0f0fa6e3977fd836bfe94296a4ca6be643a7c6da07bcf9a06ff7b1d763"}},{"ruleId":"D2","level":"warning","message":{"text":"YamlAssetPath.FromMemberPath (cognitive 18): YamlAssetPath.FromMemberPath has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/YamlAssetPath.cs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"78b3e0708c5fb7fc606dec74e732daa515a5a35cb0a0527484729cbb39a9ff93"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphSelectionBehavior.OnSelectedVerticesChanged (cognitive 18): GraphSelectionBehavior.OnSelectedVerticesChanged has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8f08d73b7d8cb79a3cb4443f90839c54c95429c7718bce64b7e423a71462bc7"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphSelectionBehavior.OnSelectedEdgesChanged (cognitive 18): GraphSelectionBehavior.OnSelectedEdgesChanged has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"957e905c204aad2252afee83e95561a278094622132ac917ce10643dc2b2b61c"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeGraphSelectionBehavior.OnSelectedLinkItemsChanged (cognitive 18): NodeGraphSelectionBehavior.OnSelectedLinkItemsChanged has cognitive complexity 18 (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":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphSelectionBehavior.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c155c8f7dc22567e68f2ae5a657672e434d7eecbf5ca56b69ee54bf9a237807"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingTilePanel.MeasureOverride (cognitive 18): VirtualizingTilePanel.MeasureOverride has cognitive complexity 18 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VirtualizingTilePanel.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"01e2df93aacfa46cccb84a77a67b7330dbfc53848acee45f85c66f9da5340251"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityViewModel.TransformChildrenChanged (cognitive 18): EntityViewModel.TransformChildrenChanged has cognitive complexity 18 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7e1bdb37ec35fef82f0a16358361d381f8acf7b5b0bd454f88c16c21a20572a"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphicsCompositorEditorViewModel.ComputeSelectionName (cognitive 18): GraphicsCompositorEditorViewModel.ComputeSelectionName has cognitive complexity 18 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorEditorViewModel.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad011875545ad77c87f580d359f900b48736b96a56ac7c23adc3663e6e64a5dc"}},{"ruleId":"D2","level":"warning","message":{"text":"MarginAdorner.Update (cognitive 18): MarginAdorner.Update has cognitive complexity 18 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Adorners/MarginAdorner.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a168f367d4d4e7f87f474ac6e69c28bbc427c1373171c5a1fd7019a7311c8fa"}},{"ruleId":"D2","level":"warning","message":{"text":"UIEditorGameCameraService.UpdateCamera (cognitive 18): UIEditorGameCameraService.UpdateCamera has cognitive complexity 18 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameCameraService.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"86b4267d53e1ad6e875e44c29b17e6c75c88694e2c2cdae4897fcb8bc8a8f72e"}},{"ruleId":"D2","level":"warning","message":{"text":"PanelViewModel.ChangeChildElementLayoutProperties (cognitive 18): PanelViewModel.ChangeChildElementLayoutProperties has cognitive complexity 18 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"74decce077bd1288fd04a4693592038a0f1789ee54b0e6a11e4429c601e164ed"}},{"ruleId":"D2","level":"warning","message":{"text":"UIHierarchyItemViewModel.MoveChildren (cognitive 18): UIHierarchyItemViewModel.MoveChildren has cognitive complexity 18 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIHierarchyItemViewModel.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac62a1f98967c34bd5e8371fc15d999b7a07496e9b776566bab46f3db0eeda49"}},{"ruleId":"D2","level":"warning","message":{"text":"UIHierarchyItemViewModel.CanAddOrInsertChildrenPrivate (cognitive 18): UIHierarchyItemViewModel.CanAddOrInsertChildrenPrivate has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIHierarchyItemViewModel.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c1d1f6a7a35cb47c62a1b9ae153ac5c7d8c6c6dc8137b0a1b50780654ff563"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationAssetNodeUpdater.UpdateNode (cognitive 18): AnimationAssetNodeUpdater.UpdateNode has cognitive complexity 18 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/AnimationAssetNodeUpdater.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ff22db1e3a201b693e0189ff92bbc75bd25d23134119d20afd1d1dac6b9beee"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityHierarchyAssetNodeUpdater.UpdateNode (cognitive 18): EntityHierarchyAssetNodeUpdater.UpdateNode has cognitive complexity 18 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. 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":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/EntityHierarchyAssetNodeUpdater.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ead40ada6bd58ee9f0e7a6bbd007c5889e197d026af6456fff69f95d2d5ccee"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeViewModel.UpdateProjects (cognitive 18): CodeViewModel.UpdateProjects has cognitive complexity 18 (threshold 15). Most of this is not in the body itself: 2 of the 18 points are its own statements and the rest belongs to one function literal inside it that branches (line 135). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/CodeViewModel.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"20b5e4b432e4ff0c314a9dc4e7ff8810265605306a50dcf52eb0bec03e67cacb"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyPasteService.CopyFromAssets (cognitive 18): CopyPasteService.CopyFromAssets has cognitive complexity 18 (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":"sources/editor/Stride.Core.Assets.Editor/Services/CopyPaste/CopyPasteService.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"2429c9b1cc462b0cc12027a837c154aa2f8b435d84bee21a285fc9bc43570ae6"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetCollectionViewModel.AssetsCollectionInDirectoryChanged (cognitive 18): AssetCollectionViewModel.AssetsCollectionInDirectoryChanged has cognitive complexity 18 (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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"708735980fd2de086abe439c4a462d0448501f1b56057163fe9aed502f82a537"}},{"ruleId":"D2","level":"warning","message":{"text":"Program.Run (cognitive 18): Program.Run has cognitive complexity 18 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Program.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed507c78623f5cee89b1c657313ba7a02891dc7e76fddcc71737f8f1416a1006"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptCompilerContext.ProcessCodeToGenerate (cognitive 18): VisualScriptCompilerContext.ProcessCodeToGenerate has cognitive complexity 18 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"sources/engine/Stride.Assets/Scripts/VisualScriptCompiler.cs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ce8e6c98ab02eb288b21a5ded0cc9473d163bf0c9bbc5dfa585e2a1ef9e8ecc"}},{"ruleId":"D2","level":"warning","message":{"text":"RouterHelper.EnsureRouterLaunched (cognitive 18): RouterHelper.EnsureRouterLaunched has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/RouterHelper.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"196928cec6e53221e8733815433b72208ab05665824b175027d684c2978133c6"}},{"ruleId":"D2","level":"warning","message":{"text":"MeshConverter.ConvertAssimpScene (cognitive 18): MeshConverter.ConvertAssimpScene has cognitive complexity 18 (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":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fb006708ced4c206ca135170819acc4976b1b5c6aab43bb9ac673c133f101ac"}},{"ruleId":"D2","level":"warning","message":{"text":"extractJsonInformations (cognitive 18): extractJsonInformations has cognitive complexity 18 (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":"sources/engine/Stride.Graphics.Regression/Web/tableBuilder.js"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e51eabefecf33c4eec63f78fb8f0ebe87fd2613e4c7f73babfe0d804d715675"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualFileSystem.ResolveProviderUnsafe (cognitive 17): VirtualFileSystem.ResolveProviderUnsafe has cognitive complexity 17 (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":"sources/core/Stride.Core.IO/VirtualFileSystem.cs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"fea31323966d1c5445efee3b035103033b72abdba75d3be76a04b2540cd6a72e"}},{"ruleId":"D2","level":"warning","message":{"text":"Scheduler.ScheduleUnsafe (cognitive 17): Scheduler.ScheduleUnsafe has cognitive complexity 17 (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":"sources/core/Stride.Core.MicroThreading/Scheduler.cs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"d45790c04453cb3f8d8a69d2a5a0a26982affde22e874be1e8d53a11a8b2337c"}},{"ruleId":"D2","level":"warning","message":{"text":"FileOdbBackend.EnumerateObjects (cognitive 17): FileOdbBackend.EnumerateObjects has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Storage/FileOdbBackend.cs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6ced69ef63a60af63e9eafeaf69e17557a58c87408cca62b4159cdeaae06d75"}},{"ruleId":"D2","level":"warning","message":{"text":"Game.PrepareContext (cognitive 17): Game.PrepareContext has cognitive complexity 17 (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":"sources/engine/Stride.Engine/Engine/Game.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"a324024e66c74987f1976162fe6e07df00a66c2b3512c5f7f5a471494c5e212b"}},{"ruleId":"D2","level":"warning","message":{"text":"ForwardRenderer.DrawView (cognitive 17): ForwardRenderer.DrawView has cognitive complexity 17 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9128fe9478566afad36dd0c562c03729e3a33391c90bc7425964c3a63730103"}},{"ruleId":"D2","level":"warning","message":{"text":"UpdateEngine.ProcessMember (cognitive 17): UpdateEngine.ProcessMember has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"85fa845bcacdf53a25fe7e3ecab6439ab52d8b9162fe8702640a32af45120cce"}},{"ruleId":"D2","level":"warning","message":{"text":"VertexHelper.GenerateMultiTextureCoordinates (cognitive 17): VertexHelper.GenerateMultiTextureCoordinates has cognitive complexity 17 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e9b82a7f01c2a4493f1af85488dc1489f0d505a211860b370949d49257f8f5c"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandList.BindDescriptorSets (cognitive 17): CommandList.BindDescriptorSets has cognitive complexity 17 (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":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"93d2ff5736e925ce6abe3fdb36a36c60992c297180b20afde1f1c232628566ab"}},{"ruleId":"D2","level":"warning","message":{"text":"ParticleSystemRenderProcessor.CheckEmitters (cognitive 17): ParticleSystemRenderProcessor.CheckEmitters has cognitive complexity 17 (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":"sources/engine/Stride.Particles/Rendering/ParticleSystemRenderProcessor.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"19b7d25bcba88b4033567576c05df2f33ca577380504a583f8588f31b2fad093"}},{"ruleId":"D2","level":"warning","message":{"text":"EffectSystem.CreateEffect (cognitive 17): EffectSystem.CreateEffect has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3098ed442a81596af6202e56074a50720bd2b3b4db4ad9932139bce1c71da42"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamingManager.Update (cognitive 17): StreamingManager.Update has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Streaming/StreamingManager.cs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"1773c723b2cf9a3764d4aa8cd66046d5cc9a996ab01563b32366f8ddca55658a"}},{"ruleId":"D2","level":"warning","message":{"text":"ScrollViewer.ArrangeOverride (cognitive 17): ScrollViewer.ArrangeOverride has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/ScrollViewer.cs"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"9084ddf66ba3a1c5f80997519bb0c0794a0990c8f759c73a3ea4394ff05328f8"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultTextBlockRenderer.RenderColor (cognitive 17): DefaultTextBlockRenderer.RenderColor has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Renderers/DefaultTextBlockRenderer.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e06a64af638aeff2e7fe2f8712daffe6d88c5bed9ceeaee1ade7b740cff3787"}},{"ruleId":"D2","level":"warning","message":{"text":"DebugRenderProcessor.Draw (cognitive 17): DebugRenderProcessor.Draw has cognitive complexity 17 (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":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics.Debug/DebugRenderProcessor.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f4fb2572c5ce179591664ff2eafa75014b5f1a37bdcbb279cae174b18ee41c"}},{"ruleId":"D2","level":"warning","message":{"text":"DxilHash.ComputeHashRetail (cognitive 17): DxilHash.ComputeHashRetail has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/Direct3D/DxilHash.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"eddb11e9a43fab74bf0e5b6480e26093693c77b949beb21a66534af0858abbd8"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMixer.SimplifyNotSupportedConstantsInShader (cognitive 17): ShaderMixer.SimplifyNotSupportedConstantsInShader has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ef2e58d0cb30149d3a70bf1c74f06536d089ad63e867049effa0d5b266c7cf0"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsersExtensions.NamespaceDeclaration (cognitive 17): ParsersExtensions.NamespaceDeclaration has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/Intrinsics/Parser.cs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c3229a70630fc7ed8aaa180dd53921fd390595fee0eb8eabf1cfed19aca7bb2"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeLiteral.CompileImpl (cognitive 17): CompositeLiteral.CompileImpl has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Literals.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1591f0730990e598b6b52aab0466d6099ed6f20948a3f7d81fcbbbe6de8b3f1"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchStatement.Compile (cognitive 17): SwitchStatement.Compile has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Control.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"1037f76489ebab8b2416b1ee17f62a5e9aeb23e8b669a481827a61680d92df60"}},{"ruleId":"D2","level":"warning","message":{"text":"ConditionalDirectivesParser.Match (cognitive 17): ConditionalDirectivesParser.Match has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveParsers.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d2d2005e38392ebd4ddeba81d8bba83f4a5b05d21a73e28933c8296f4ee763e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.Add (cognitive 17): ExpressionParser.Add has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"42c5e9be09486b7868e40c68a35c3ece1d541e373a9260e454cdae93e8c418af"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.Mul (cognitive 17): ExpressionParser.Mul has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4c645aa8a53bea519714088a4c52b59bd47da6ead9db6718f821018dbcca914"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.Shift (cognitive 17): ExpressionParser.Shift has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"46edeac7772b6e896b42ee2bd64a132c2acc8af95aaa305e6b3d94f7b14e023b"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.Relation (cognitive 17): ExpressionParser.Relation has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6049a1f7b2122260a793a0cc173e419c0abda5bb6f3c4b7c2d8dddff252b2cb"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.BAnd (cognitive 17): ExpressionParser.BAnd has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d54b315b42ff4e8c8c76c9d96559d992d812ee4b3d88cdacc6a7addf1bf293"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.BOr (cognitive 17): ExpressionParser.BOr has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b54520eba1216c6e358ab41f40e6530e70afe046cab23c3b5d898e3bb41561e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.XOr (cognitive 17): ExpressionParser.XOr has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"af97e77424c3cf6cbb49cf4c5cb3474befba7b47c975b2c5183f53a673c4668a"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvContext.RemoveNameAndDecorations (cognitive 17): SpirvContext.RemoveNameAndDecorations has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.cs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfdaf4ed68862f12442bcdf67f3bd6699b1b93230341ba6b06b2ba17e9dd3c96"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvTools.ResolveSourceLocation (cognitive 17): SpirvTools.ResolveSourceLocation has cognitive complexity 17 (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":"sources/shaders/Stride.Shaders.Parsers/Spirv/Tools/SpirvTools.cs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"f99b56d9e68b620754ca0ce900c320e94156362935e79ba8543652426a67e7d8"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.GenerateSDSLSpecification (cognitive 17): SPVGenerator.GenerateSDSLSpecification has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Specification.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf341ff814c87b38c446c3507d3a42d42284cd387346a35b6d8234c2be8313da"}},{"ruleId":"D2","level":"warning","message":{"text":"YamlMappingNode.ResolveAliases (cognitive 17): YamlMappingNode.ResolveAliases has cognitive complexity 17 (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":"sources/core/Stride.Core.Yaml/Serialization/YamlMappingNode.cs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"1afa736127369115ee0aeb24a0b931e2dccd1697adca1bbc523fedc68ea7a7e8"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetQuantumRegistry.GetDefinition (cognitive 17): AssetQuantumRegistry.GetDefinition has cognitive complexity 17 (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":"sources/assets/Stride.Core.Assets.Quantum/AssetQuantumRegistry.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"69449cb974642a1506b6c7f852f8b01cc70a6b5ff984c150496d5f54bb6d047c"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicYamlMapping.ParseOverrides (cognitive 17): DynamicYamlMapping.ParseOverrides has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Yaml/DynamicYaml/DynamicYamlMapping.cs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"e947e2f6b7d65bf736cbfa8c85a37a035d66ce9996023136d1bdd7eeaeb9dcba"}},{"ruleId":"D2","level":"warning","message":{"text":"NugetStore.SourceSearch (cognitive 17): NugetStore.SourceSearch has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Packages/NugetStore.cs"},"region":{"startLine":853}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fd2b8dccdbd846252fb89d3179621c9228f98f259431d5c40bce2872bf8742a"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeGraphSelectionBehavior.OnSelectedLinksChanged (cognitive 17): NodeGraphSelectionBehavior.OnSelectedLinksChanged has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphSelectionBehavior.cs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"2441d0bb95a5d305e6bdf9a3559355e27e5a8f10f18ea6981fb32676c97a7396"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityComponentSourceCodeResolver.AnalyzeProject (cognitive 17): EntityComponentSourceCodeResolver.AnalyzeProject has cognitive complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityComponentSourceCodeResolver.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b89350204e3aa47b982a90402dee9f7a4e1580f4bd100c95229d4fea797b4f1"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityHierarchyItemViewModel.CanInsertChildren (cognitive 17): EntityHierarchyItemViewModel.CanInsertChildren has cognitive complexity 17 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceb75660d080d88ec85e9fd2c57bc7a3b8b4affdd8a2840a9703e794ed92856e"}},{"ruleId":"D2","level":"warning","message":{"text":"SceneRootViewModel.OnLoadingRequested (cognitive 17): SceneRootViewModel.OnLoadingRequested has cognitive complexity 17 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/SceneEditor/ViewModels/SceneRootViewModel.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"424ecb55b65610394854984c84e02b8e261f23c7b59ac96d3b80d825047bd4c1"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualScriptEditorViewModel.AddNewMethod (cognitive 17): VisualScriptEditorViewModel.AddNewMethod has cognitive complexity 17 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6b5852e61392cca3f278c4f93e0632f70477f9d0075d5352541e525911ed2b4"}},{"ruleId":"D2","level":"warning","message":{"text":"GameSettingsAssetNodeUpdater.UpdateNode (cognitive 17): GameSettingsAssetNodeUpdater.UpdateNode has cognitive complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/GameSettingsAssetNodeUpdater.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc3895d83293027d792a7d4465dd789bf0ccef05db80f483bd9a2cb3d3dc4ead"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterialViewModel.UpdateGenerics (cognitive 17): MaterialViewModel.UpdateGenerics has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/MaterialViewModel.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d6fa37a1dc499ec50a27f4a927dd3a7fa07162edb9e4a2085a35d61a5feec77"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelComponentViewModel.UpdateNodePresenter (cognitive 17): ModelComponentViewModel.UpdateNodePresenter has cognitive complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/ModelComponentViewModel.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc9bd3400e94468ae267030d6e45144d3c92e3ff67e0675b7e46f11675578eb1"}},{"ruleId":"D2","level":"warning","message":{"text":"SceneViewModel.ChildrenCollectionChanged (cognitive 17): SceneViewModel.ChildrenCollectionChanged has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/SceneViewModel.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"2047c59aa9b6d341327ec1fe96089ff7abacb278ff4de4b4636d0bf7c527d7e2"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetContentValueChangeOperation.ApplyUndo (cognitive 17): AssetContentValueChangeOperation.ApplyUndo has cognitive complexity 17 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/AssetContentValueChangeOperation.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"11aee0346d1b836718b4cc2bb313cc45a929401e663b5d649490540588ecf9c5"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericValueNodeUpdater.UpdateNode (cognitive 17): NumericValueNodeUpdater.UpdateNode has cognitive complexity 17 (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":"sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Updaters/NumericValueNodeUpdater.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"718843121931956633df943dfa1385dd030a714ccc376148fbff95600cb61823"}},{"ruleId":"D2","level":"warning","message":{"text":"PreviewGame.ProcessPreviewRequestsTask (cognitive 17): PreviewGame.ProcessPreviewRequestsTask has cognitive complexity 17 (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":"sources/editor/Stride.Editor/Preview/PreviewGame.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"412ba30d7327e46af365a395013f3c47b5a0b4af9a6f3340142b3dc6f15f4d99"}},{"ruleId":"D2","level":"warning","message":{"text":"StrideEditorPlugin.CollectReferencedBlobs (cognitive 17): StrideEditorPlugin.CollectReferencedBlobs has cognitive complexity 17 (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":"sources/editor/Stride.GameStudio/Plugin/StrideEditorPlugin.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6d8d526fa2c3bdd4df4d4e0fee3fcc995ea55a02a068399b1749d43a3a5e6ff"}},{"ruleId":"D2","level":"warning","message":{"text":"GameStudioWindow.OpenDefaultScene (cognitive 17): GameStudioWindow.OpenDefaultScene has cognitive complexity 17 (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":"sources/editor/Stride.GameStudio/View/GameStudioWindow.xaml.cs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"f39ab501321f2972e85bfe86f54250958719cdd88ccd384b1a2fee5a4e83b99b"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphicsCaptureClient.OpenSession (cognitive 17): GraphicsCaptureClient.OpenSession has cognitive complexity 17 (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":"sources/editor/Stride.GameStudio.AutoTesting/GraphicsCaptureClient.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"bba1050f6b6af0d5dfa2d4bb24b54440ce4907d42b0c14a8ee723f7ae46d4c19"}},{"ruleId":"D2","level":"warning","message":{"text":"RoslynCodeUpgradeRunner.Run (cognitive 17): RoslynCodeUpgradeRunner.Run has cognitive complexity 17 (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":"sources/engine/Stride.Assets/CodeUpgrade/RoslynCodeUpgradeRunner.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1b7781a2241e09e1d40c9f89cfd404d92cd4f0790709e5cf44cf64c10fffd98"}},{"ruleId":"D2","level":"warning","message":{"text":"BitmapImporter.FindGlyphs (cognitive 17): BitmapImporter.FindGlyphs has cognitive complexity 17 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/Compiler/BitmapImporter.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"a248dac9b2d09f9963d12deee8bcb8f6fe4b43e85afb1ce8f39743b6bd1dfbb5"}},{"ruleId":"D2","level":"warning","message":{"text":"ToolLocator.LocateTool (cognitive 17): ToolLocator.LocateTool has cognitive complexity 17 (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":"sources/engine/Stride.Assets/ToolLocator.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f648b80aa3d42930d6cf1068e9a965bb1986633265b020d06a78a389e4bed2"}},{"ruleId":"D2","level":"warning","message":{"text":"POExporter.MergeMessage (cognitive 17): POExporter.MergeMessage has cognitive complexity 17 (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":"sources/tools/Stride.Core.Translation.Extractor/Exporters/POExporter.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"03ec929025b898c98531e63e1f111299606153ce51cc714ee654d402eae83583"}},{"ruleId":"D2","level":"warning","message":{"text":"AtlasTexLibrary.InitalizeAtlas (cognitive 17): AtlasTexLibrary.InitalizeAtlas has cognitive complexity 17 (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":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/AtlasTexLibrary.cs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e990f50064bff3ecb7072a2de56f332ebe32ef9eab3d7b5a9f3e273bab7594f"}},{"ruleId":"D2","level":"warning","message":{"text":"GuillotinePacker.Insert (cognitive 16): GuillotinePacker.Insert has cognitive complexity 16 (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":"sources/core/Stride.Core.Mathematics/GuillotinePacker.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3fc8449572943f2c2f18f867c1ce7ace3fe500f0304a3e26b7741f943d616a2"}},{"ruleId":"D2","level":"warning","message":{"text":"HalfUtils.HalfUtils.ctor (cognitive 16): HalfUtils.HalfUtils.ctor has cognitive complexity 16 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/HalfUtils.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"36667291f331a10b144d76d52d600931b57dc9b20de65b7fffd3def001c4e85f"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyContainer.GetEnumerator (cognitive 16): PropertyContainer.GetEnumerator has cognitive complexity 16 (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":"sources/core/Stride.Core/PropertyContainer.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb0ecc71ab48a5be2dd563da81b04bc2a48b2e803faf184d2b31f72041e99694"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyContainer.ContainsKey (cognitive 16): PropertyContainer.ContainsKey has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PropertyContainer.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0d095c39618a5e5018f9aeb71ac0b1780d18239fac4b93fadd991bff29da04a"}},{"ruleId":"D2","level":"warning","message":{"text":"ConcurrentPool.Acquire (cognitive 16): ConcurrentPool.Acquire has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Threading/ConcurrentPool.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"a95cc4f33375f682177694b3039312a64b09e34174aaf7884ce8204f2faafa2d"}},{"ruleId":"D2","level":"warning","message":{"text":"ThreadThrottler.Throttle (cognitive 16): ThreadThrottler.Throttle has cognitive complexity 16 (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":"sources/core/Stride.Core/ThreadThrottler.cs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"282b28e21cb3ef14ef418923074c355276ab5a77b043118e9effdb25aaf75b56"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelNodeTransformLink.ComputeMatrix (cognitive 16): ModelNodeTransformLink.ComputeMatrix has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/ModelNodeTransformLink.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"178417f7536436cf443a9d5ce08ff297bd927fa627501b45d3fde57ccfacdd1a"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelNodeLinkProcessor.Draw (cognitive 16): ModelNodeLinkProcessor.Draw has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Processors/ModelNodeLinkProcessor.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbde1215316fad7b2a885be93219c9b3e2efc417153e428c331cdb005d95b80a"}},{"ruleId":"D2","level":"warning","message":{"text":"UpdatableField.GetSetOperationType (cognitive 16): UpdatableField.GetSetOperationType has cognitive complexity 16 (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":"sources/engine/Stride.Engine/Updater/UpdatableField.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5165461c89254d6cf7eba1b5996390a231b6618772170aac7452b34ccdeebb0"}},{"ruleId":"D2","level":"warning","message":{"text":"ParameterCollectionExtensions.ToStringPermutationsDetailed (cognitive 16): ParameterCollectionExtensions.ToStringPermutationsDetailed has cognitive complexity 16 (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":"sources/engine/Stride.Foundation/Effects/ParameterCollectionExtensions.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"9837db6795afdcc1dc1fd2da6d14db8bfa75fc4e95ca4d901f00a99496dd637d"}},{"ruleId":"D2","level":"warning","message":{"text":"GameSystemCollection.GameSystems_ItemRemoved (cognitive 16): GameSystemCollection.GameSystems_ItemRemoved has cognitive complexity 16 (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":"sources/engine/Stride.Games/GameSystemCollection.cs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"141fcd0730da1e5e155dd6268b585d24614c426a5a6277471d92129d63a755c2"}},{"ruleId":"D2","level":"warning","message":{"text":"BatchBase.DrawBatchPerTextureAndPass (cognitive 16): BatchBase.DrawBatchPerTextureAndPass has cognitive complexity 16 (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":"sources/engine/Stride.Graphics/BatchBase.cs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"c73f418ffed9b48952417b95294959373146057cb148b8f78b92ab2c56fc647e"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphEnumerator.MoveNext (cognitive 16): GlyphEnumerator.MoveNext has cognitive complexity 16 (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":"sources/engine/Stride.Graphics/SpriteFont.cs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"d73a8ff4ec437c8f3ba315b7fb22ae2bd374e708d0133b96926f0365f1803ae9"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationMeshBuildUtils.HasLatestColliderShape (cognitive 16): NavigationMeshBuildUtils.HasLatestColliderShape has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationMeshBuildUtils.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"262015a580576d5ec251d8afaeff056684f9285d42788ec78b564f5798f4018a"}},{"ruleId":"D2","level":"warning","message":{"text":"ParticleEmitterRenderFeature.PrepareEffectPermutationsImpl (cognitive 16): ParticleEmitterRenderFeature.PrepareEffectPermutationsImpl has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Rendering/ParticleEmitterRenderFeature.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"86297c95597e37245abf897a22664a1dfd5e121a7ed7dbe6ed810dc537342b9b"}},{"ruleId":"D2","level":"warning","message":{"text":"ParticleEmitterRenderFeature.Draw (cognitive 16): ParticleEmitterRenderFeature.Draw has cognitive complexity 16 (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":"sources/engine/Stride.Particles/Rendering/ParticleEmitterRenderFeature.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"d402b3dc4fb523d044f5406af310b7944d619c402997b5b55027cb132769d0f2"}},{"ruleId":"D2","level":"warning","message":{"text":"ShadowMapRenderer.Collect (cognitive 16): ShadowMapRenderer.Collect has cognitive complexity 16 (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":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"c578359b8bcffdbb25819da066a2326d92f0aa7a9b60f59f2de0196a95e3d414"}},{"ruleId":"D2","level":"warning","message":{"text":"StackPanel.UpdateScrollPosition (cognitive 16): StackPanel.UpdateScrollPosition has cognitive complexity 16 (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":"sources/engine/Stride.UI/Panels/StackPanel.cs"},"region":{"startLine":780}}}],"partialFingerprints":{"codehealthFindingId/v1":"206eb3be5009e89d2ec16e91f8bb2d11b9bf09e61bb0596672c6f9b483138289"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultEditTextRenderer.RenderSelection (cognitive 16): DefaultEditTextRenderer.RenderSelection has cognitive complexity 16 (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":"sources/engine/Stride.UI/Renderers/DefaultEditTextRenderer.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d569cf7f091b027229536b5eb9062b71ea7c7eed4446abe1ab4d7f668f86d5f"}},{"ruleId":"D2","level":"warning","message":{"text":"BepuSimulation.Update (cognitive 16): BepuSimulation.Update has cognitive complexity 16 (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":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/BepuSimulation.cs"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf3385075735903458c7f0b5aaf73f60021040833cc26ceb8bcd184af9050c0"}},{"ruleId":"D2","level":"warning","message":{"text":"VisitorGenerator.CanVisitMember (cognitive 16): VisitorGenerator.CanVisitMember has cognitive complexity 16 (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":"sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"e86b53173cea2c1f9b1eeee75980468e63da5366cf17639699574a50641bc393"}},{"ruleId":"D2","level":"warning","message":{"text":"EffectCodeWriter.VisitMixin (cognitive 16): EffectCodeWriter.VisitMixin has cognitive complexity 16 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators/EffectCodeWriter.cs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe19068b6326775bbd10f7d5b6e1aea0c14798c3f94e84cf2beaa3d191950eca"}},{"ruleId":"D2","level":"warning","message":{"text":"RGroup.Compile (cognitive 16): RGroup.Compile has cognitive complexity 16 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.cs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"30567a4c847a345b456bebe8b7e358a0b34ee22575d3396c34b2c9ffdc81e660"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMember.ProcessSymbol (cognitive 16): ShaderMember.ProcessSymbol has cognitive complexity 16 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.MethodOrMember.cs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da2077e612b58f019ae0e94ca72c29c1ce84b2726db131398199edec89a4f4c"}},{"ruleId":"D2","level":"warning","message":{"text":"ShaderMember.Compile (cognitive 16): ShaderMember.Compile has cognitive complexity 16 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.MethodOrMember.cs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"42c1649dee1b01d2ae551b790e2770fe7753be119284d3f61c7c0a285a29ddb3"}},{"ruleId":"D2","level":"warning","message":{"text":"Space1.Match (cognitive 16): Space1.Match has cognitive complexity 16 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/Spaces.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"98341793257f7b54d0752becabbe5f0bf3d84a3e5f383dd37e86f48df145611c"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.Equality (cognitive 16): ExpressionParser.Equality has cognitive complexity 16 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f191a10e0e7d411f1f60957dee39e55ec8375e693516748b70e40da8ce76015"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.And (cognitive 16): ExpressionParser.And has cognitive complexity 16 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"3041a5e8de8342b2779c03012a34930476733b56017e7da57a0d58b06c40d84b"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.Or (cognitive 16): ExpressionParser.Or has cognitive complexity 16 (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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3fa655ae59790ed7c5a270d80a1b4f22a0287d66c97114952f03729631b0b00"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.Ternary (cognitive 16): ExpressionParser.Ternary has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"617f84a8147a77df5bfbc5b5902898d68c8878efe44f23248042a71a76e4eabc"}},{"ruleId":"D2","level":"warning","message":{"text":"AttributeParser.Match (cognitive 16): AttributeParser.Match has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderAttributeParsers.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba5ac3ec1d25613ac97165b05f855cbe8df3ddba280b6237497ac8d9ec93e290"}},{"ruleId":"D2","level":"warning","message":{"text":"SPVGenerator.ConvertOperandName (cognitive 16): SPVGenerator.ConvertOperandName has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed45763e62822f526b8e0c0d3cad75eb9c5a2f151d374d651de03483358c043f"}},{"ruleId":"D2","level":"warning","message":{"text":"GameTestBase.NormalizeDeviceBucket (cognitive 16): GameTestBase.NormalizeDeviceBucket has cognitive complexity 16 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"95708a544fd4e5a376835785838ff79a0541da5017848cb175c7e073ed54f5a5"}},{"ruleId":"D2","level":"warning","message":{"text":"Builder.Run (cognitive 16): Builder.Run has cognitive complexity 16 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Builder.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"0559453a3ec82742be5fa15082dfe83c542a7f361bcb898a6d166c08efb8e536"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicBuildStep.Execute (cognitive 16): DynamicBuildStep.Execute has cognitive complexity 16 (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":"sources/buildengine/Stride.Core.BuildEngine.Common/DynamicBuildStep.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a3b116d8363b8daed7628844e896c9d0c2af167f3406a5cdba35f7c28b0bccf"}},{"ruleId":"D2","level":"warning","message":{"text":"ListBuildStep.ProcessCommandBuildStepResult (cognitive 16): ListBuildStep.ProcessCommandBuildStepResult has cognitive complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/ListBuildStep.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a326cac4bd7bc8bca14b7106039f51daeaa539119b98bbdc8ebdb705495026"}},{"ruleId":"D2","level":"warning","message":{"text":"Parser.ParseFlowMappingKey (cognitive 16): Parser.ParseFlowMappingKey has cognitive complexity 16 (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":"sources/core/Stride.Core.Yaml/Parser.cs"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ef192657c51e195f0f57a87cad6f1a545b80a3cbb188e79f3ffa6b8a787b174"}},{"ruleId":"D2","level":"warning","message":{"text":"LoaderToolLocator.GetExecutable (cognitive 16): LoaderToolLocator.GetExecutable has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shared/LoaderToolLocator/LoaderToolLocator.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"9275dd1e9daf352f47849fdf179b8cd3874ab9cf74a9bd2c9e24f61b5b95ddd6"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetDependencyManager.CollectDynamicOutReferences (cognitive 16): AssetDependencyManager.CollectDynamicOutReferences has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetDependencyManager.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"027d6e0d6d9686bf38bfaaea105f4901c76ec7c871885c94371dfbab8839935b"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetObjectSerializerBackend.WriteMemberName (cognitive 16): AssetObjectSerializerBackend.WriteMemberName has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/AssetObjectSerializerBackend.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef637a95c404e0b5f4c37d05a47af8ab100ae242d5a1947cbfdaa1ce1806d1bd"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetObjectSerializerBackend.WriteDictionaryKey (cognitive 16): AssetObjectSerializerBackend.WriteDictionaryKey has cognitive complexity 16 (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":"sources/assets/Stride.Core.Assets/Yaml/AssetObjectSerializerBackend.cs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"12bf4503da817eabf1b9294820702a9a1594116cb9c27b4846468c5ab86b061f"}},{"ruleId":"D2","level":"warning","message":{"text":"NugetStore.InstallPackage (cognitive 16): NugetStore.InstallPackage has cognitive complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/assets/Stride.Core.Packages/NugetStore.cs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"d609548ba0cd0abab11e1182563af4f4b1452dfe76f33a9a042ce42ac633d7d9"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeViewModelFactory.GenerateChildren (cognitive 16): NodeViewModelFactory.GenerateChildren has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModelFactory.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc5e9eab0e586ec204559a1e26ff8e3476716349b5a3ee8ebebaedc68912488f"}},{"ruleId":"D2","level":"warning","message":{"text":"BindableSelectedItemsBehavior.ControlSelectionChanged (cognitive 16): BindableSelectedItemsBehavior.ControlSelectionChanged has cognitive complexity 16 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/BindableSelectedItemsBehavior.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"7457f8d4101929a457f37144d78c9c15fb166392f549fd07bd971ccf816e1272"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericTextBoxDragBehavior.OnMouseMove (cognitive 16): NumericTextBoxDragBehavior.OnMouseMove has cognitive complexity 16 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/NumericTextBoxDragBehavior.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dd64a651cb1c87bd90c33c89769d8c305b0707cc8b9226959fa6e8f8ff5b2e8"}},{"ruleId":"D2","level":"warning","message":{"text":"Int4Editor.UpdateValueFromComponent (cognitive 16): Int4Editor.UpdateValueFromComponent has cognitive complexity 16 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Int4Editor.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"d83a38ecb4c4fe88c5d83566ec984704004c410ef67f805d02ca353d0e6cd287"}},{"ruleId":"D2","level":"warning","message":{"text":"RectangleEditor.UpdateValueFromComponent (cognitive 16): RectangleEditor.UpdateValueFromComponent has cognitive complexity 16 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/RectangleEditor.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"de80e58556a542f00cb1d6451e8c7d391ebba4e75e0e9b3b92aa47ff76f9ddb7"}},{"ruleId":"D2","level":"warning","message":{"text":"RectangleFEditor.UpdateValueFromComponent (cognitive 16): RectangleFEditor.UpdateValueFromComponent has cognitive complexity 16 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/RectangleFEditor.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf577c5fa773d6c117af3414b553c498c5359068c84cf54852bf93e4fa92eec"}},{"ruleId":"D2","level":"warning","message":{"text":"TimeSpanEditor.UpdateValueFromComponent (cognitive 16): TimeSpanEditor.UpdateValueFromComponent has cognitive complexity 16 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TimeSpanEditor.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"e74bf9c998c30ac8585260dda3049bd69fc9de93f8978cdd3d74a38ff147dd2e"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingTreePanel.GetScrollLineHeightY (cognitive 16): VirtualizingTreePanel.GetScrollLineHeightY has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VirtualizingTreePanel.cs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"2039ef07206e5c4be7bae8303612f534484f038146b2deaeeda5a320912a0d22"}},{"ruleId":"D2","level":"warning","message":{"text":"DrawingContextExtensions.InternalDrawMathText (cognitive 16): DrawingContextExtensions.InternalDrawMathText has cognitive complexity 16 (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":"sources/presentation/Stride.Core.Presentation.Wpf/Extensions/DrawingContextExtensions.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"acfb08b0dd3897c423de171e5a5805f95ef9c95c942766763b059a2e0c961ddf"}},{"ruleId":"D2","level":"warning","message":{"text":"TextureAssetHighlighter.Highlight (cognitive 16): TextureAssetHighlighter.Highlight has cognitive complexity 16 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetHighlighters/TextureAssetHighlighter.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce5fb446c6461bf2284b40c2ba71c0daea7e5a4be0cb9b287e0f2c1c441e18a"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameEntityCameraService.UpdateCamera (cognitive 16): EditorGameEntityCameraService.UpdateCamera has cognitive complexity 16 (threshold 15). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1eb49d09f43e377627fd90a239b9c11f9b1b874d8051515a8ff5cc0e59d21ea"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorGameMaterialHighlightService.NotifyMaterialHighlighted (cognitive 16): EditorGameMaterialHighlightService.NotifyMaterialHighlighted has cognitive complexity 16 (threshold 15). Most of this is not in the body itself: 3 of the 16 points are its own statements and the rest belongs to one function literal inside it that branches (line 161). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameMaterialHighlightService.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"c55b860f544dcdc89c34ef3129224d097a29f6b0e321624a614ecbe627679350"}},{"ruleId":"D2","level":"warning","message":{"text":"ContentReferenceCollector.VisitNode (cognitive 16): ContentReferenceCollector.VisitNode has cognitive complexity 16 (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":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/ContentReferenceCollector.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb3c1f7e3f1e328cc1a7f83b02c20034a01527a5e5dc7da899fb98f72e37c413"}},{"ruleId":"D2","level":"warning","message":{"text":"ScriptTemplateGenerator.PrepareAssetCreation (cognitive 16): ScriptTemplateGenerator.PrepareAssetCreation has cognitive complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"sources/editor/Stride.Assets.Presentation/Templates/ScriptTemplateGenerator.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"553dfdde4de1fc93447c72abe2799710887e2454ad92c05207f610fe3c455b6e"}},{"ruleId":"D2","level":"warning","message":{"text":"FixAssetReferencesViewModel.GetReplacementsForReferencer (cognitive 16): FixAssetReferencesViewModel.GetReplacementsForReferencer has cognitive complexity 16 (threshold 15). Most of this is not in the body itself: 0 of the 16 points are its own statements and the rest belongs to one function literal inside it that branches (line 47). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/FixAssetReferences/FixAssetReferencesViewModel.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"157f18e809c834f83760498745b0e0e2517ecf2d16988c55f1e98cf41bcdfbdb"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorDialogService.AddDelayedNotification (cognitive 16): EditorDialogService.AddDelayedNotification has cognitive complexity 16 (threshold 15). Most of this is not in the body itself: 7 of the 16 points are its own statements and the rest belongs to one function literal inside it that branches (line 324). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5fdd338f485e65b7bc380473ae0d631caec38272504b4544fdd503af96f90ba"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetCollectionViewModel.GetCopyCollection (cognitive 16): AssetCollectionViewModel.GetCopyCollection has cognitive complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1015}}}],"partialFingerprints":{"codehealthFindingId/v1":"146fd7add18e27cb97c21b51950417f2e31714af2b96412f4fa79e8ee8bcd8f3"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetDependenciesViewModel.IsReachableFromRoot (cognitive 16): AssetDependenciesViewModel.IsReachableFromRoot has cognitive complexity 16 (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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetDependenciesViewModel.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"c138bab2428f07b014ecb4e5f1edf5c610567c09abe2c83537b7c730a90db2ea"}},{"ruleId":"D2","level":"warning","message":{"text":"AssetViewModel.UpdateUrl (cognitive 16): AssetViewModel.UpdateUrl has cognitive complexity 16 (threshold 15). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetViewModel.cs"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"39807bc1e2364a046d583b85aad25b1e61230cf7938ccb14a87e2bfb1959e2d9"}},{"ruleId":"D2","level":"warning","message":{"text":"PackageViewModel.LoadPackageInformation (cognitive 16): PackageViewModel.LoadPackageInformation has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/PackageViewModel.cs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"f95db7dc2f017fb06bcf327bbbc175da1597cdda3fb3f132e70571b93b5da435"}},{"ruleId":"D2","level":"warning","message":{"text":"GameStudioDatabase.ApplyAssetReplacements (cognitive 16): GameStudioDatabase.ApplyAssetReplacements has cognitive complexity 16 (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":"sources/editor/Stride.Editor/Build/GameStudioDatabase.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d345c5467b0be6d14e44adbbbf0629315ef5e99f48d8507823fa2e991fe79f6"}},{"ruleId":"D2","level":"warning","message":{"text":"EditorContentLoader.ComputeReferences (cognitive 16): EditorContentLoader.ComputeReferences has cognitive complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/ContentLoader/EditorContentLoader.cs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8302a3877033c26ac640b13108507b391e7c0f5b842097133f7e2cc0387ba81"}},{"ruleId":"D2","level":"warning","message":{"text":"GameStudioThumbnailService.AddThumbnailAssetItems (cognitive 16): GameStudioThumbnailService.AddThumbnailAssetItems has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/GameStudioThumbnailService.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"4006d36a795e8dee4167a59ccca9e8ea8ca59ba265b136198b57ad217b99cb67"}},{"ruleId":"D2","level":"warning","message":{"text":"DockingLayoutManager.ApplyDockingLayout (cognitive 16): DockingLayoutManager.ApplyDockingLayout has cognitive complexity 16 (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":"sources/editor/Stride.GameStudio/Layout/DockingLayoutManager.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"271110d6db12b3acdcb66ed0364b67e50d4168ec9ccd9e201e0348bb16fa788e"}},{"ruleId":"D2","level":"warning","message":{"text":"ThreeDAssetImporter.GetAnimationDuration (cognitive 16): ThreeDAssetImporter.GetAnimationDuration has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ThreeDAssetImporter.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"3570d6b1bad2d0f748ac8a7a9d76c35c77fcc909918540a556f5c01a205107fc"}},{"ruleId":"D2","level":"warning","message":{"text":"GameSettingsAssetCompiler.SetPlatformOrientation (cognitive 16): GameSettingsAssetCompiler.SetPlatformOrientation has cognitive complexity 16 (threshold 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/GameSettingsAssetCompiler.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aa868cfe747756e2dcf82337c3c6ea2a4074795d016c1d3c86c44c12ec0de27"}},{"ruleId":"D2","level":"warning","message":{"text":"HeightmapConvertCommand.ScaleToHeightRange (cognitive 16): HeightmapConvertCommand.ScaleToHeightRange has cognitive complexity 16 (threshold 15). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Physics/HeightmapAssetCompiler.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"72ccedc71c8ffe7e426cca85031aedb51d4ee868b3ddb8a3680213565de2a42e"}},{"ruleId":"D2","level":"warning","message":{"text":"StridePackageUpgrader.UpgradeProjectTo41 (cognitive 16): StridePackageUpgrader.UpgradeProjectTo41 has cognitive complexity 16 (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":"sources/engine/Stride.Assets/StridePackageUpgrader.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"a91e79bef42f183ced6d5fb9059faf033ebf672562197893ecde7d42fe042e40"}},{"ruleId":"D2","level":"warning","message":{"text":"MaxRectanglesBinPack.SplitFreeNode (cognitive 16): MaxRectanglesBinPack.SplitFreeNode has cognitive complexity 16 (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":"sources/engine/Stride.Assets/Textures/Packing/MaxRectanglesBinPack.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"629e1592abdce03ce44f0c3a2c7c340acead7f95d35520922006412ffcf0c34a"}},{"ruleId":"D2","level":"warning","message":{"text":"Program.Main (cognitive 16): Program.Main has cognitive complexity 16 (threshold 15). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Program.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"aba9b4c0ec3eabb3232ea1d722fd848dd4732d21fd065bf8698487bc0cc3eb89"}},{"ruleId":"D2","level":"warning","message":{"text":"RestoreHelper.TryResolveDevRedirect (cognitive 16): RestoreHelper.TryResolveDevRedirect has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shared/Stride.NuGetResolver/RestoreHelper.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"aab11022741b8c9ec9c9b7ed6c92a948b406f2c6e7cdba24b58f2735ec07d713"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayTexLib.Extract (cognitive 16): ArrayTexLib.Extract has cognitive complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/ArrayTexLib.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d9d5300213ce6d240fd1d4399b0da70763d5ed215451a2dca62c8ff46daf44b"}},{"ruleId":"D2","level":"warning","message":{"text":"AtlasTexLibrary.Update (cognitive 16): AtlasTexLibrary.Update has cognitive complexity 16 (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":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/AtlasTexLibrary.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce996b586205543d07ab301e391720beb2162a6f4996e3f366e7de36c4baa50a"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsoleProgram.ParseArgument (cognitive 16): ConsoleProgram.ParseArgument has cognitive complexity 16 (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":"sources/shared/ConsoleProgram.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba48620edc0a1a1edafab9cb31660cd3cd4fdcf11c39320dce4f3adaf138c245"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IntrinsicImplementations: TooManyMethods \u2014 473 significant lines (blank, comment-only and punctuation-only lines excluded), 211 methods. 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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/IntrinsicImplementations.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f9d4769558bb5b891c14d6a144f067b05742afa21240313e60ac32e15e20b28"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Matrix: TooManyMethods \u2014 1307 significant lines (blank, comment-only and punctuation-only lines excluded), 144 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1ffa4ef6979f32e5f771cdc1ee16d116dd51061268f899c8fe4977970d1efe0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Texture: TooManyMethods \u2014 991 significant lines (blank, comment-only and punctuation-only lines excluded), 107 methods, declared across 6 files: Stride.Graphics/Texture.cs (65), Vulkan/Texture.Vulkan.cs (26), Stride.Graphics/Texture.Extensions1D.cs (4), Stride.Graphics/Texture.Extensions2D.cs (4), \u002B2 more file(s). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf1157e69ae07b257ecc4379df321330f69b47433a67c62ea84e876f14caa432"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Vector3: TooManyMethods \u2014 516 significant lines (blank, comment-only and punctuation-only lines excluded), 104 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Vector3.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06b67e795fac7555ae965f9a570000712f409b2882222caadc21299844060e6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Double3: TooManyMethods \u2014 489 significant lines (blank, comment-only and punctuation-only lines excluded), 104 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double3.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ddd94cfd92359f6bbe7353236c2c0231e584de399c85905b9ef73acb391f52c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CommandList: TooManyMethods \u2014 981 significant lines (blank, comment-only and punctuation-only lines excluded), 89 methods, declared across 3 files: Vulkan/CommandList.Vulkan.cs (63), Stride.Graphics/CommandList.cs (23), Stride.Graphics/CommandList.DebugScope.cs (3). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e2309aab0f682b7637fd222b94f1ff233c295183831be4fa926b9a5a13d4bfa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Double2: TooManyMethods \u2014 382 significant lines (blank, comment-only and punctuation-only lines excluded), 89 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double2.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e0e5e007d9074e2ca3a70ae24080fa7ae1b0ba5424b64ad83abf2f7312f18ba"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Vector2: TooManyMethods \u2014 396 significant lines (blank, comment-only and punctuation-only lines excluded), 86 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Vector2.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a8770e659ff1078ae92266d361d009c07eb8ca2d3c6c28dfa3c9be5953bdaa1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Double4: TooManyMethods \u2014 435 significant lines (blank, comment-only and punctuation-only lines excluded), 84 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double4.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"11735b9c413249c624f7ddca71f3dc3a513b8be91fffc25e52bf3b17dec6e417"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Vector4: TooManyMethods \u2014 436 significant lines (blank, comment-only and punctuation-only lines excluded), 81 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Vector4.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7da613460e085cc95f7be85bfd241ada0ca5e9462950acebaecb27428f1f64f6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Quaternion: TooManyMethods \u2014 512 significant lines (blank, comment-only and punctuation-only lines excluded), 80 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Quaternion.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad7b2bc91b9988e709fe669fc5593432915af1d70a02b3131ac09dab32581324"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Color: TooManyMethods \u2014 496 significant lines (blank, comment-only and punctuation-only lines excluded), 79 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Color.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8127ad3ea76fe6c489fdc0b8ed1a648121e2c71cae2d1b5694c56b90c40cd346"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Mathematics/Matrix.cs: FileTooLong \u2014 1312 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3369992030ea9d9c9ed89956dbc23943b9e4e123abbc93829f45ac26bdfa53e5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ColorBGRA: TooManyMethods \u2014 350 significant lines (blank, comment-only and punctuation-only lines excluded), 76 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/ColorBGRA.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"85d4d6e5890396e13e37ad5b161cef6a1cb7c247b2ee85058645a637f4aca492"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Predicates: ClassTooLong \u2014 992 significant lines (blank, comment-only and punctuation-only lines excluded), 22 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4795d5ef861d9bc3d4ef48c1c4202d5888dc609c768c36950e6d8f2125dee78e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UIElement: TooManyMethods \u2014 839 significant lines (blank, comment-only and punctuation-only lines excluded), 70 methods, declared across 2 files: Stride.UI/UIElement.Events.cs (38), Stride.UI/UIElement.cs (32). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/UIElement.Events.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab3aaba27c67ff21a975f94586f150d0c36c7245a2b7a5762fc844f8c7e25bf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Color4: TooManyMethods \u2014 304 significant lines (blank, comment-only and punctuation-only lines excluded), 70 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Color4.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"329bf389ee8aa22d9732510faaa6a49c998cf025033dc84f6a9f6d648530b28e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SpirvBuilder: TooManyMethods \u2014 1016 significant lines (blank, comment-only and punctuation-only lines excluded), 64 methods, declared across 6 files: Building/Builder.Class.cs (20), Building/Builder.Expressions.cs (12), Building/Builder.cs (11), Building/Builder.CBuffer.cs (8), \u002B2 more file(s). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"41bffe63763328d8879e49daeac6222bcb807519824c208066a9a19124b08df7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ViewModel/SessionViewModel.cs: FileTooLong \u2014 1052 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee1743e38a8b037efcbb566b2125a6b355d014c3cb54c91d17a39165382687c8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SpirvContext: TooManyMethods \u2014 651 significant lines (blank, comment-only and punctuation-only lines excluded), 62 methods, declared across 4 files: Building/Context.cs (23), Building/SpirvContext.Types.cs (22), Building/Context.Constants.cs (12), Building/Context.ExtractBuffers.cs (5). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"72651678d70173706f44b25e51e1197a9abf516539bca22e7b7e15afceaa1bcf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SessionViewModel: TooManyMethods \u2014 1016 significant lines (blank, comment-only and punctuation-only lines excluded), 61 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"672e4a262f72a4cb16985aa1becb031ef47d4fbc49b1cea06d01bbc75ea106f8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: LightProbes/Predicates.cs: FileTooLong \u2014 995 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b215c5af6ba475b2d9df1cd648173bb707d103121a36a33bed0d22f7c945c134"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InputManager: TooManyMethods \u2014 459 significant lines (blank, comment-only and punctuation-only lines excluded), 57 methods, declared across 2 files: Stride.Input/InputManager.cs (47), Stride.Input/InputManager.State.cs (10). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Input/InputManager.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0faf262084839b6b24925583e68d7001084680577bb97b49ee9bc19c048c6b8e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Color3: TooManyMethods \u2014 230 significant lines (blank, comment-only and punctuation-only lines excluded), 57 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Color3.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"17e62da144d3f50fffb0c53da18955107643797846164d27f7a8589ab8ca1920"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Int3: TooManyMethods \u2014 195 significant lines (blank, comment-only and punctuation-only lines excluded), 56 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Int3.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a052e8876689ce183465b71bc30b6df205a2405c665c7a8921c6b095bef0cd08"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ViewModel/AssetCollectionViewModel.cs: FileTooLong \u2014 921 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c30baa0019ee5a6fd7f00602374e4f4faab855c3a613ff8c77a4aca37df1154b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Yaml/Emitter.cs: FileTooLong \u2014 911 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a7c5f6f0228bfe976e20f605eec2f22bedd4e1cfc500dc2fdaefa57051be24"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AST/Expression.cs: FileTooLong \u2014 902 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d90c30bb26fe7e7ae7839ef5c457f1e6c676aa720e810cdb2f6b34991b52c1b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Emitter: TooManyMethods \u2014 884 significant lines (blank, comment-only and punctuation-only lines excluded), 54 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34a94c64edc8354ae87ce2efe0c7a6831d916f53cb31f536bce6aa43af6ae4ab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetCollectionViewModel: TooManyMethods \u2014 824 significant lines (blank, comment-only and punctuation-only lines excluded), 54 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"08ba29678f95129dd139543e743096093428ce7f7db84f901baa6da2bc98b069"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Vulkan/CommandList.Vulkan.cs: FileTooLong \u2014 895 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9cf1c8b8656d4d8ba126b62d996e5d3e30dcc0ee76bfebe7bd82edd9af8f05"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GraphicsDevice: TooManyMethods \u2014 630 significant lines (blank, comment-only and punctuation-only lines excluded), 53 methods, declared across 3 files: Vulkan/GraphicsDevice.Vulkan.cs (25), Stride.Graphics/GraphicsDevice.cs (17), Stride.Graphics/GraphicsDevice.DebugScope.cs (11). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"548ce542913a47a27a3f1562c809bb5466c2b1b539a44443eb8ce196c3fbe8d1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FastList: TooManyMethods \u2014 242 significant lines (blank, comment-only and punctuation-only lines excluded), 53 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Collections/FastList.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1314a103e22ec99477f92a55c1655a7f50f4291116764829b58487c7259b565f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Importer.3D/MeshConverter.cs: FileTooLong \u2014 881 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b239c55a2e155d151973fd75b672826ec14563609cf48ddae75a1c788c2c7509"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: VulkanConvertExtensions: ClassTooLong \u2014 702 significant lines (blank, comment-only and punctuation-only lines excluded), 15 methods. 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":"sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"579f62f6a1c367f797b08d5d5e86461cf6b4a5d0ba191fa4b2edaaee8b2b4b12"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Scanner: TooManyMethods \u2014 769 significant lines (blank, comment-only and punctuation-only lines excluded), 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c485a7251ce32e5012c5dfc615025162803a72fa16de5fd92e84ea753a4b8b57"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Int2: TooManyMethods \u2014 162 significant lines (blank, comment-only and punctuation-only lines excluded), 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Int2.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"804598f8075b1111ec2fd187d3fde4c6256d1c05e2ed28cefc1b85a976ffd04b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextureTool: TooManyMethods \u2014 569 significant lines (blank, comment-only and punctuation-only lines excluded), 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TextureTool.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c72704787dcca1ef8cbe101ef9c272e69ae3a299be35ea968f539b2ea3e88ed9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PackageSession: TooManyMethods \u2014 1074 significant lines (blank, comment-only and punctuation-only lines excluded), 50 methods, declared across 3 files: Stride.Core.Assets/PackageSession.cs (34), Stride.Core.Assets/PackageSession.Dependencies.cs (10), Stride.Core.Assets/PackageSession.BuildManifest.cs (6). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bbd64c7900b1dd2c9823efdf8fd9f85f543c8ba6460ca413d6fc9d437be044b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Image: TooManyMethods \u2014 412 significant lines (blank, comment-only and punctuation-only lines excluded), 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Graphics/Image.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b135c87e591c2e567e75ccbf429557657d3db7578a50127fe62e7e5054e03ef"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Plane: TooManyMethods \u2014 270 significant lines (blank, comment-only and punctuation-only lines excluded), 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Plane.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8ee1d714085b2556a301495b02cccd88fc2107b5a30a51c4ed092f24c20ddea"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ShaderWriter: TooManyMethods \u2014 286 significant lines (blank, comment-only and punctuation-only lines excluded), 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDFX/ShaderWriter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eec55fbbfc88041076f2644cf37dc3558782c85810ef129020388f5c73742ec"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MathUtil: TooManyMethods \u2014 162 significant lines (blank, comment-only and punctuation-only lines excluded), 49 methods. 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":"sources/core/Stride.Core.Mathematics/MathUtil.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b25eb9cb322f51162a1e79bd9b9663cb281e88d3f16a59b39e430a998e5d319"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ForwardRenderer: ClassTooLong \u2014 646 significant lines (blank, comment-only and punctuation-only lines excluded), 20 methods, declared across 3 files: Compositing/ForwardRenderer.cs (17), Compositing/ForwardRenderer.LightProbes.cs (2), Compositing/ForwardRenderer.VRUtils.cs (1). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"701e7caf4323476a53de9901b325145606ff9e3a2f97fb14d521acb89b40c230"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Int4: TooManyMethods \u2014 187 significant lines (blank, comment-only and punctuation-only lines excluded), 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Int4.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"43533277056cc7bc32e9a6adc4a410aebb3145f81d7619d62d9fc21be373c31c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Yaml/Scanner.cs: FileTooLong \u2014 776 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cc63f2aeb9080814856a867b8bfe566faa3f60c4534d2b0205dfcc7457c32fe"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Assets/PackageSession.cs: FileTooLong \u2014 767 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"589ba7f9e2b8ba53645ec7fb963bae69377849ebd0e8215d18733e1d55c56389"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CurveEditorViewModel: TooManyMethods \u2014 420 significant lines (blank, comment-only and punctuation-only lines excluded), 46 methods, declared across 3 files: ViewModels/CurveEditorViewModel.DrawingModel.cs (22), ViewModels/CurveEditorViewModel.cs (21), ViewModels/CurveEditorViewModel.CurveFactory.cs (3). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.DrawingModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"144614cf393de913b277a66ad9470be6e931472e89439b1393841eeebd716f27"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Buffer: TooManyMethods \u2014 342 significant lines (blank, comment-only and punctuation-only lines excluded), 46 methods, declared across 2 files: Stride.Graphics/Buffer.cs (39), Vulkan/Buffer.Vulkan.cs (7). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Buffer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"07a42bc795a585954a06cebc33bd2a5067af363ebcc0027648ecccb880617496"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Yaml/SortedDictionary.cs: FileTooLong \u2014 752 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/SortedDictionary.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3560d811e254eff9e96fcf2191bcbe4303b6430c2bc465a47f27f07687d22c34"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetViewModel: TooManyMethods \u2014 344 significant lines (blank, comment-only and punctuation-only lines excluded), 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6c018dc563cf0dd831ab6a150eb4f8f1ea0c15a36fb9aa5bf776b4085aa1324"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Package: TooManyMethods \u2014 540 significant lines (blank, comment-only and punctuation-only lines excluded), 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5149ab27bf6ce1614ca9a1d421baa893a14fdf509aa0a8379539912e8fe35da1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EditorGameController: TooManyMethods \u2014 222 significant lines (blank, comment-only and punctuation-only lines excluded), 44 methods, declared across 2 files: Services/EditorGameController.cs (34), Services/EditorGameController.DragDrop.cs (10). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/Services/EditorGameController.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"87c4f43fe790c836fe8f1692a9cd48e3382b083f926247fa1448a31ce45d20da"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: SDSL/ShaderMixer.cs: FileTooLong \u2014 725 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d65074a7143373be033c4e53ea0f7d316505f62b26250e2ed709f9a30eda338"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MeshConverter: TooManyMethods \u2014 842 significant lines (blank, comment-only and punctuation-only lines excluded), 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6afbe7dcaf7b781343473a987de8d682b45b283fbafc78a3542cd4a6e3b9c2cf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EditText: TooManyMethods \u2014 510 significant lines (blank, comment-only and punctuation-only lines excluded), 43 methods, declared across 3 files: Controls/EditText.cs (25), Controls/EditText.Direct.Default.cs (10), Controls/EditText.Direct.cs (8). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/EditText.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4258809838301055138d66b1799b7a9ec3d1fb3076e6de5e4c47c0cb92ababa4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Context: TooManyMethods \u2014 465 significant lines (blank, comment-only and punctuation-only lines excluded), 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio.AutoTesting/UITestHost.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e22201416f60311c935bde1a1c43a06cb49a38cc4281d00e32e75673c60dd8c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NativeHelper: TooManyMethods \u2014 432 significant lines (blank, comment-only and punctuation-only lines excluded), 43 methods. 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":"sources/presentation/Stride.Core.Presentation.Wpf/Interop/NativeHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4be9c31f59c44a5d0141e21961957e4d362cfffc40f466c19ad6500ff642d0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Deque: TooManyMethods \u2014 285 significant lines (blank, comment-only and punctuation-only lines excluded), 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Collections/Dequeue.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7acb4dd0566376ecc00dab1bb58b7a267d041ba831d38f6418c0b3a6b0c515ef"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Vulkan/VulkanConvertExtensions.cs: FileTooLong \u2014 706 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aea8a7bfd65d3f54cf32bb67b38331dfe078c8f5941d16475894b8e5fddb1e99"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UInt4: TooManyMethods \u2014 179 significant lines (blank, comment-only and punctuation-only lines excluded), 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/UInt4.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"59f23c718234e793b4282dda454427fe05fb3bbe5fb94da399a2e0730abd4763"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ShaderMixer: TooManyMethods \u2014 1439 significant lines (blank, comment-only and punctuation-only lines excluded), 41 methods, declared across 5 files: SDSL/ShaderMixer.cs (17), SDSL/ShaderMixer.CBuffers.cs (9), SDSL/ShaderMixer.Reflection.cs (6), SDSL/ShaderMixer.ShaderSourceEvaluator.cs (6), \u002B1 more file(s). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad55127e99fda81079a3265deb0e91c7c6ac274baa44545d6a7069412834081d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CollisionHelper: TooManyMethods \u2014 565 significant lines (blank, comment-only and punctuation-only lines excluded), 41 methods. 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":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"814666bd5686ed0236ebec13be6bc511ceccf16a1b4a8d46bbb3f04a0a574d5c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetCompositeHierarchyPropertyGraph: TooManyMethods \u2014 359 significant lines (blank, comment-only and punctuation-only lines excluded), 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a36cf1f5ccbffb0af8da9647e8be6803e434cee85ae1465d3f70a33b845e23"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetPropertyGraph: TooManyMethods \u2014 467 significant lines (blank, comment-only and punctuation-only lines excluded), 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d76c0bd4f605d1dbadf7287b09da0d5aaa84eb67feb7008a7889f61f0fbc5f8f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Vulkan/GraphicsDevice.Vulkan.cs: FileTooLong \u2014 659 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"79ff3e78cccc5e13d3c8d8cddf22519121572dc2d41d03dd906a9e7be022b254"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScaleBar: TooManyMethods \u2014 585 significant lines (blank, comment-only and punctuation-only lines excluded), 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/ScaleBar.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b9f0214827bc1c0b80c7e833e37f7432c40124348f336454ba72415faf9b649"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UIEditorBaseViewModel: TooManyMethods \u2014 426 significant lines (blank, comment-only and punctuation-only lines excluded), 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIEditorBaseViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af6a94a4d5a936eddfbeb55f476dc8adc44f62566c20f70ede41eaf56fc05800"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TreeView: TooManyMethods \u2014 402 significant lines (blank, comment-only and punctuation-only lines excluded), 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeView.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f240ff8121e309a18e249ff20adf5ff6f273761968664fc81c2ed15be2f3c08"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EntityHierarchyEditorViewModel: TooManyMethods \u2014 374 significant lines (blank, comment-only and punctuation-only lines excluded), 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44575edc7efc892b2af28c6a39ba696b90e094a7899ed8b66b9a8a1a1baeaed5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PackageViewModel: TooManyMethods \u2014 348 significant lines (blank, comment-only and punctuation-only lines excluded), 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/PackageViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e4961134f9e50075f5c1bd38819389ad281fee8fec048a5ce8267a18c08475a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NodeViewModel: TooManyMethods \u2014 292 significant lines (blank, comment-only and punctuation-only lines excluded), 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc852577486b2d10d7d2890fa331cd6f862b2eb79d94431fca6ff8541530185b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Physics/Simulation.cs: FileTooLong \u2014 647 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"485ff1eb7d7a6fea4c27e31e7637809d9755ab42c8e9c9699d6ce34783ac3a02"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.GameStudio.AutoTesting/UITestHost.cs: FileTooLong \u2014 632 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio.AutoTesting/UITestHost.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"85d35fd18f6e1cc8434746dc94a626cbb4d94bdba1bfff784502be3a7e68095d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RootEffectRenderFeature: ClassTooLong \u2014 501 significant lines (blank, comment-only and punctuation-only lines excluded), 30 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d40e739484084591f186857d5a4b1855219c9ec24800a88750c5336f09890c6b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GameBase: TooManyMethods \u2014 351 significant lines (blank, comment-only and punctuation-only lines excluded), 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GameBase.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"156607a635abd36e8d04458ee1331991f3fb101dc217e20224ef9104ae0144f1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.UI/UIElement.cs: FileTooLong \u2014 616 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/UIElement.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de76de6e2136f4b8a612a6bba84f5dfdf6ffbeb568bef261d0c09fc282b6ecd0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Controls/ScaleBar.cs: FileTooLong \u2014 610 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/ScaleBar.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4508acd805a95ecc787aca8cf5302aa89acb66300e0cc8064383282cae712c18"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SPVGenerator: TooManyMethods \u2014 981 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods, declared across 8 files: Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs (10), Stride.Shaders.Spirv.Generators/SPVGenerator.Instructions.cs (9), Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Preprocessing.cs (5), Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs (4), \u002B4 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":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c9a7a9af7acf7375cde5a0cc6e4c7dffdd806ace21710fa6677e4aa0772a121"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GameTestBase: TooManyMethods \u2014 431 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"684be350a4bc94fff06c30e0bedd36050b2cbfdbc0d0f76c1b13c619b4413b13"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: XamlMarkdown: TooManyMethods \u2014 371 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/XamlMarkdown.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"878572e2da78d5bc9b7061b18f84b928592eec624fb361b9832ada5231403fd8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UIEditorGameAdornerService: TooManyMethods \u2014 304 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods, declared across 2 files: Game/UIEditorGameAdornerService.cs (25), Game/UIEditorGameAdornerService.Events.cs (11). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameAdornerService.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"46b48efd690b5b1632013f951fa38ef972a29b12a9cae510b8abb98b083d71c9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Serializer: TooManyMethods \u2014 150 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"35058ba6f559912c55484e24ca36a042028c66b23339d8c3ce9ad6676d9c4fdf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetRegistry: TooManyMethods \u2014 371 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. 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":"sources/assets/Stride.Core.Assets/AssetRegistry.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f584781ea3c493950898531692ef6876ace06a237bf884b32df76198e492836"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ParameterCollection: TooManyMethods \u2014 288 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Rendering/ParameterCollection.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"feba6efb6882e8bbd29c0d59a657eb04fadb447a6206ae8cb6d3d5ceffee32d7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CharacterAnalyzer: TooManyMethods \u2014 97 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/CharacterAnalyzer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"440349c0d54a6d83f8f95711250246d999c3403adf530ecff4bbd3aaa997e49d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Frontend/TextureTool.cs: FileTooLong \u2014 581 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TextureTool.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf2b015772ec3f347e7bf53ed995cdbd2f26fa94c9047960c3467378a8f54c95"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Assets/Package.cs: FileTooLong \u2014 580 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd7cbca96af47ceb81c134b132fb458ed11ce6234ee3e3b7d7fd4791cdd8fee5"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AccessorChainExpression: ClassTooLong \u2014 462 significant lines (blank, comment-only and punctuation-only lines excluded), 10 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"646beb967c5ec53b8fd8f869c714370148ac755517550a39a811ab08c906dac9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.TemplateGenerator/TemplatePreprocessor.cs: FileTooLong \u2014 574 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ad9e8896f5309d1483764a32aa5fd5f7037178ab41393a54f8c2b6f5ef67132"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ParticleEmitter: ClassTooLong \u2014 455 significant lines (blank, comment-only and punctuation-only lines excluded), 23 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleEmitter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7f45af736641f18484244fd7f6e6f2aa75841d4af765fc66637e9cf68b0fd70"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TemplatePreprocessor: TooManyMethods \u2014 562 significant lines (blank, comment-only and punctuation-only lines excluded), 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1dac211120542d492b6751dec9fb1fe33f14ec0319c31ba0aac71faaa661235"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextureMethodsImplementations: TooManyMethods \u2014 385 significant lines (blank, comment-only and punctuation-only lines excluded), 34 methods. 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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31bee6e9cbc062a4e20aa08283ae0c2b905cdc3b4100a4be1d0e7b74170b7e72"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Mathematics/CollisionHelper.cs: FileTooLong \u2014 566 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"82ea0f5c5d38c352fbd667090817ec6f83f7a01a21cf28c7972df368e1d625bb"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: GraphicsDeviceManager: ClassTooLong \u2014 442 significant lines (blank, comment-only and punctuation-only lines excluded), 29 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8b0422ec926813e69faeab414a0c08ab5b0b311f650d7f04757accb8ce26c79"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NugetStore: TooManyMethods \u2014 452 significant lines (blank, comment-only and punctuation-only lines excluded), 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Packages/NugetStore.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e2f42b78f4f7a7d3795eec19f1b132a3bc07f41f23ea8ac8ab11484cf4a4de8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AxisBase: TooManyMethods \u2014 363 significant lines (blank, comment-only and punctuation-only lines excluded), 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/Axes/AxisBase.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"542bde1d30d4e6cf9912f424e3692c04950e58219e970a60c0fbd42c520d8cb3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetCompositeHierarchyEditorViewModel: TooManyMethods \u2014 281 significant lines (blank, comment-only and punctuation-only lines excluded), 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4785a6796303ee952c03e34ff28e2536a3af4e9b22a3b8363dc277554f516237"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SpriteBatch: TooManyMethods \u2014 218 significant lines (blank, comment-only and punctuation-only lines excluded), 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SpriteBatch.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"47a40d9de6ca4e14b5589f81fa1eb6de5827ceb8af1614310d198561e9294734"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: OpenXRHmd: ClassTooLong \u2014 440 significant lines (blank, comment-only and punctuation-only lines excluded), 17 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OpenXR/OpenXRHmd.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"762d0e1aa5374270b55ee9b48a837e3a74aacec7ba65c5a835cdee7150ef5213"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AssetPropertyPasteProcessor: ClassTooLong \u2014 435 significant lines (blank, comment-only and punctuation-only lines excluded), 23 methods. 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":"sources/editor/Stride.Core.Assets.Editor/ViewModel/CopyPasteProcessors/AssetPropertyPasteProcessor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4b27407cd1bbf4559fb13c940db1482bd78512c9b10beb24114e223d58b037f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Graphics/Texture.cs: FileTooLong \u2014 538 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b941653c9f26ae7b06304c5f8d07f43d08bc5c638b250967b5e40c1caa6817"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.BepuPhysics/BepuSimulation.cs: FileTooLong \u2014 536 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/BepuSimulation.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b42fa83ebe1e95b003c4c5e47d17e2367407e0611c2dce502c49839f80c26b6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StackPanel: TooManyMethods \u2014 394 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Panels/StackPanel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"364ee953f4791f88f113ad2cdd11d5bb2325e2192a710163de62fb393f478bbe"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AngleSingle: TooManyMethods \u2014 200 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/AngleSingle.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee2b6baca51b7ebab12d504a70c3787d91671da1197fae69b6b05a7560eacfe4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VertexElement: TooManyMethods \u2014 135 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexElement.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e29ff0326963118c0adc086d2776ff84a7c6a0587484709a19aaac4d12dd69e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetBoxedNode: TooManyMethods \u2014 43 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/Internal/AssetBoxedNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c76510be52712a6231ca070b97c551c6c87964026016139c444b56f265e045b6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetObjectNode: TooManyMethods \u2014 43 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/Internal/AssetObjectNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2794ef2be8253f3e89b67ad9b7b453175b028b040b5a32abc9a5354fa67eb32b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Parsers: ClassTooLong \u2014 425 significant lines (blank, comment-only and punctuation-only lines excluded), 29 methods. 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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe9e35ad5b50883ac15f9a05ceec2643aea3266971d95998eb72d19a2230eef5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Rendering/RootEffectRenderFeature.cs: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b5254ef83a8baa8974d6ca45b88cc8b4ddd55154ef5cf0c5fe2ee1263fc6a1e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Mathematics/Vector3.cs: FileTooLong \u2014 520 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Vector3.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6911ab541ca6843f8a02151bc084f5088820df7dd6967f4a886bd6c60780f635"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Wrappers/DxtNetWrapper.cs: FileTooLong \u2014 519 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/Wrappers/DxtNetWrapper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"213db0de655d8b0dacad6d8ca4b4e0f34d8cb318979fc4f4022b9355f1a40ad4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Stride.Core.Mathematics/Quaternion.cs: FileTooLong \u2014 517 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Quaternion.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb65cf744d42f0aab58a642f2318c3b116e64153fa53144baf0b835e1019b2b0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Simulation: TooManyMethods \u2014 507 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"129d247fc54a327767681019675fb574677b7bace14481a30d14b2d2037e2019"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SpriteSheetEditorViewModel: TooManyMethods \u2014 333 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteSheetEditorViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b14416fbf9f21383ecdac55a3175839241417234759d6323f1d933c1bb5b28d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ContentManager: TooManyMethods \u2014 316 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods, declared across 2 files: Contents/ContentManager.cs (27), Contents/ContentManager.ReferenceCounting.cs (4). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1b2eff909030f5c37734a704fda304fdaa1bc176155aff2ba3301493bc18811"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MaterialGeneratorContext: TooManyMethods \u2014 248 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialGeneratorContext.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdb66f8abc565e1b2a795bc7734e5b8adab4fd41f6b1077d4476603eebab54f4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssetObjectNodeExtended: TooManyMethods \u2014 211 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/Internal/AssetObjectNodeExtended.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cd677aecd350411351f4fedd2dc7537fb25cca95201580d6998a047c611fde8"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: UIBatch: ClassTooLong \u2014 411 significant lines (blank, comment-only and punctuation-only lines excluded), 19 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/UIBatch.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"447e51547ea77746a3f5932516ae4c7bca89d72be51deff4d7c6fd082033d349"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Building/Builder.Expressions.cs: FileTooLong \u2014 506 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee4760598f64237904b62b42ad4dc7b97e4d1ff5e6962d4c085ea6dfed045d2b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: EntityHierarchyItemViewModel: ClassTooLong \u2014 403 significant lines (blank, comment-only and punctuation-only lines excluded), 20 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"35482ee39e9c23c59616072beaf972c3d276b6560f8c07aab6ecc56f31553660"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): sources/core/Stride.Core.Yaml/Emitter.cs:1199-1223 | sources/core/Stride.Core.Yaml/Emitter.cs:1227-1251 \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 \u0060sources/core/Stride.Core.Yaml/Emitter.cs:1199\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee1f9f4077bed1876deff27f0930b622437575deb324cca1e98e9a50a5466a7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 7): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:120-143 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:169-192 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:221-244 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:270-293 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:319-342 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:371-394 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:445-468 \u2014 all 7 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:120\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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"98032efd50e1399f47bb27a009a7ad3e93fa82b4690cf1dadae0b763e459a48d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): sources/core/Stride.Core.Yaml/Emitter.cs:1322-1344 | sources/core/Stride.Core.Yaml/Emitter.cs:1380-1402 \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 \u0060sources/core/Stride.Core.Yaml/Emitter.cs:1322\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":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1322}}}],"partialFingerprints":{"codehealthFindingId/v1":"74d8dc4e219ef375d16f83369355305e522c72535df9b855dfbaf3d45936e34d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Matrix.cs:1557-1578 | sources/core/Stride.Core.Mathematics/Matrix.cs:1638-1659 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1557}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2b8c759021064fbcdde1f3760acdd0a0f3e6807632b4ed6b92f600eefcc0758"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 5): sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs:143-162 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/RotationCurveViewModel.cs:184-203 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:136-155 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:286-305 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:440-459 \u2014 there are 5 copies across 3 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs:143\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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"7936cb24b1116e10fdaab7a70695f22cfa3a65f8dc519d338950af688e10dce4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Double2.cs:798-817 | sources/core/Stride.Core.Mathematics/Double2.cs:841-862 \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 \u0060sources/core/Stride.Core.Mathematics/Double2.cs:798\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double2.cs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"9672310d31721ff040d5f06211ec2300258e48ca4fde2f667717d0ec3e90333f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Double3.cs:964-983 | sources/core/Stride.Core.Mathematics/Double3.cs:1007-1028 \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 \u0060sources/core/Stride.Core.Mathematics/Double3.cs:964\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double3.cs"},"region":{"startLine":964}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7a68c5964e10c455dd887617a4b224891e88997cf43ff44db0cf3168ff75f69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Double4.cs:871-890 | sources/core/Stride.Core.Mathematics/Double4.cs:914-935 \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 \u0060sources/core/Stride.Core.Mathematics/Double4.cs:871\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double4.cs"},"region":{"startLine":871}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f8e703bb1cf4e28d4ba2ee85df5eb25331f0dcc93de8b3b38c912f84b075177"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs:121-142 | sources/engine/Stride.Particles/Initializers/InitialVelocityParent.cs:119-138 \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 \u0060sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs:121\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"24b532fc5ae92c39ee40ed67ed9cdbf108c03763e2f220cf7cb96634a0edadb5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/FloatCurveViewModel.cs:85-104 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/KeyFrameCurveViewModel.cs:260-279 \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 \u0060sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/FloatCurveViewModel.cs:85\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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/FloatCurveViewModel.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d14a19f750d62cb65866be87572463d76f46cc8b61ede828e6bec80aa0479d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs:79-97 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:72-90 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:222-240 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:376-394 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs:79\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f21e3a420c15a90ca163a2c9ddd3b206d76207f88866d12a3a2e0d1ead5587c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 3): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ModelGizmo.cs:101-119 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/NavigationBoundingBoxGizmo.cs:109-127 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/VoxelVolumeGizmo.cs:130-148 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ModelGizmo.cs:101\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ModelGizmo.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"4edf96a13af13eba5f1fd70d7982d0040dda8c2818656c28ff403b9091971d3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Wpf/ValueConverters/Multiply.cs:19-37 | sources/presentation/Stride.Core.Presentation.Wpf/ValueConverters/Multiply.cs:45-63 \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 \u0060sources/presentation/Stride.Core.Presentation.Wpf/ValueConverters/Multiply.cs:19\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":"sources/presentation/Stride.Core.Presentation.Wpf/ValueConverters/Multiply.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"b18827e82aabd489a7aa332c5347e810d5e465c6fffb2d864deae101a006d113"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 5): sources/engine/Stride.Particles/Initializers/InitialColorParent.cs:94-111 | sources/engine/Stride.Particles/Initializers/InitialOrderParent.cs:70-87 | sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs:125-144 | sources/engine/Stride.Particles/Initializers/InitialSizeParent.cs:87-104 | sources/engine/Stride.Particles/Initializers/InitialVelocityParent.cs:123-140 \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 \u0060sources/engine/Stride.Particles/Initializers/InitialColorParent.cs:94\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialColorParent.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"17ce95947e530019fe4dde26d58b52d5fb7a144d5f47655909a35a1cd3cc36c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): sources/assets/Stride.Core.Assets/Analysis/AssetDependencyManager.cs:550-567 | sources/assets/Stride.Core.Assets/AssetTracker.cs:126-143 | sources/assets/Stride.Core.Assets/Tracking/AssetSourceTracker.cs:370-387 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/assets/Stride.Core.Assets/Analysis/AssetDependencyManager.cs:550\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":"sources/assets/Stride.Core.Assets/Analysis/AssetDependencyManager.cs"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b83f56633fa867a5dfea632b9b711491fb7627e0f9b2993161cf6b1a2bc5c56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): sources/core/Stride.Core.Mathematics/CollisionHelper.cs:823-840 | sources/core/Stride.Core.Mathematics/CollisionHelper.cs:852-869 \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 \u0060sources/core/Stride.Core.Mathematics/CollisionHelper.cs:823\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":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":823}}}],"partialFingerprints":{"codehealthFindingId/v1":"f179b563ec2b1b7a2d04c6af1543e391a4638a9201db63a87a94c2325f2f7869"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): sources/engine/Stride.Graphics/Font/OfflineRasterizedSpriteFont.cs:30-47 | sources/engine/Stride.Graphics/Font/SignedDistanceFieldSpriteFont.cs:33-50 \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 \u0060sources/engine/Stride.Graphics/Font/OfflineRasterizedSpriteFont.cs:30\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":"sources/engine/Stride.Graphics/Font/OfflineRasterizedSpriteFont.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8831eac1badb60472fb54c010874a9e8d8a9d1242259a4c2c40f1299a9917ea8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererCubeMap.cs:268-285 | sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererParaboloid.cs:294-311 \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 \u0060sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererCubeMap.cs:268\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":"sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererCubeMap.cs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbdc234a1e8de8c6450c7e36b5f491a18aae38ecaeb491e8beb9207c6eeffabf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): sources/core/Stride.Core.Yaml/SortedDictionary.cs:581-598 | sources/core/Stride.Core.Yaml/SortedDictionary.cs:757-774 \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 \u0060sources/core/Stride.Core.Yaml/SortedDictionary.cs:581\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":"sources/core/Stride.Core.Yaml/SortedDictionary.cs"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcfd77f6f60125989bf7511c9d856d8b944c0290a10de7cbbc7b0ed4f7a44cc9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/RotationComponentControlPointViewModel.cs:24-41 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/VectorComponentControlPointViewModel.cs:139-156 \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 \u0060sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/RotationComponentControlPointViewModel.cs:24\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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/RotationComponentControlPointViewModel.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"97665af8ffadf1963427e4b327af7f553778ffdb259214661a38b94b44df38ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Color.cs:434-450 | sources/core/Stride.Core.Mathematics/ColorBGRA.cs:368-384 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Color.cs"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"31024248a18661588079ad28a924cf2e3de4a27240c0a9329b9e5e20eab3fd67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): sources/core/Stride.Core/Collections/FastCollection.cs:62-78 | sources/core/Stride.Core/Collections/OrderedCollection.cs:52-68 \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 \u0060sources/core/Stride.Core/Collections/FastCollection.cs:62\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":"sources/core/Stride.Core/Collections/FastCollection.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"caba64af4daee01ae293b028a52962496f70c1df0f2567aa819311b58a2a0a0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): sources/core/Stride.Core/Collections/FastCollection.cs:122-138 | sources/core/Stride.Core/Collections/OrderedCollection.cs:104-120 \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 \u0060sources/core/Stride.Core/Collections/FastCollection.cs:122\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Collections/FastCollection.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2ed526027b86ca3a7f31fd45e6f9d7a41521270c0bcd2a33ef5c7b7e7033a58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): sources/core/Stride.Core.Reflection/DefaultKeyComparer.cs:35-51 | sources/core/Stride.Core.Reflection/DefaultMemberComparer.cs:28-44 \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 \u0060sources/core/Stride.Core.Reflection/DefaultKeyComparer.cs:35\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":"sources/core/Stride.Core.Reflection/DefaultKeyComparer.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffd5df20ab4933af4669e81654e33d06fb27207a6ed9ab882aeb3b6cf1e55cc5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Wpf/Controls/FilteringComboBox.cs:469-485 | sources/presentation/Stride.Core.Presentation.Wpf/Controls/SearchComboBox.cs:240-256 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/FilteringComboBox.cs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"80066f0b843bb047689626c43c7acb7b03631b43ce0ddb1784d74d0a4b2773ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): sources/presentation/Stride.Core.Presentation.Wpf/Controls/DateTimeEditor.cs:238-253 | sources/presentation/Stride.Core.Presentation.Wpf/Controls/TimeSpanEditor.cs:156-171 | sources/presentation/Stride.Core.Presentation.Wpf/Controls/VectorEditorBase.cs:158-173 \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 \u0060sources/presentation/Stride.Core.Presentation.Wpf/Controls/DateTimeEditor.cs:238\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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/DateTimeEditor.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f4a7fef2ca624f608313335791a36a98428777a8a3e0d8d83ad4840d3fb2d55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:117-132 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:267-282 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:421-436 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:117\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf6ce31d00eb3235a1115d1092436603a634d05a052f2252ef9360b7fd0620f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): sources/core/Stride.Core.Mathematics/CollisionHelper.cs:83-98 | sources/core/Stride.Core.Mathematics/CollisionHelper.cs:102-117 \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 \u0060sources/core/Stride.Core.Mathematics/CollisionHelper.cs:83\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":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a09f3fd01423c163556867d7cbc5482ff577a94cedb95182687bfcc6750831"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Color.cs:370-385 | sources/core/Stride.Core.Mathematics/ColorBGRA.cs:304-319 \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 \u0060sources/core/Stride.Core.Mathematics/Color.cs:370\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Color.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c47598b2b12fd5d495c2f727367d50cccb50c856c0f7010a9a0dc08baaac7c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): sources/engine/Stride.Particles/Sorters/ParticleSorterAge.cs:18-33 | sources/engine/Stride.Particles/Sorters/ParticleSorterDepth.cs:18-33 \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 \u0060sources/engine/Stride.Particles/Sorters/ParticleSorterAge.cs:18\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Sorters/ParticleSorterAge.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd19be38b813f1b521c1f78e1d4926addf58b016df4ae32d93469f793def9c82"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:199-214 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TranslationGizmo.cs:201-216 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:199\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd44b5f23823a9fa7efa85ac5e0bb054cc286d50a31d2f08d78952113a382263"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): sources/editor/Stride.Core.Assets.Editor/Quantum/AssetContentValueChangeOperation.cs:67-82 | sources/editor/Stride.Core.Assets.Editor/Quantum/ContentValueChangeOperation.cs:89-104 \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 \u0060sources/editor/Stride.Core.Assets.Editor/Quantum/AssetContentValueChangeOperation.cs:67\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":"sources/editor/Stride.Core.Assets.Editor/Quantum/AssetContentValueChangeOperation.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fe0862ac409a9a592c5e95a84198ea070f2201dee9d5a5f1e9ac505eb183d99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG002InvalidContentMode.cs:47-61 | sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG002InvalidContentMode.cs:66-80 \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 \u0060sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG002InvalidContentMode.cs:47\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG002InvalidContentMode.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d3e75bd6a317d2d64774c8f60e8a9e18a85568456a8c1fa2f247eef0a0fb482"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs:159-173 | sources/engine/Stride.Particles/Initializers/InitialVelocityParent.cs:146-160 \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 \u0060sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs:159\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":"sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c343897c60f9e28895e761662ceced0a65f1fb7491c8d63a8db3ab00ba4c198"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/engine/Stride.Particles/Materials/UVBuilderFlipbook.cs:107-122 | sources/engine/Stride.Particles/Materials/UVBuilderScroll.cs:44-58 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Materials/UVBuilderFlipbook.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"313ec1a00ccc032cfecc040f3bf396c93795eb505c40d8c9f3b16b5519618f24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/engine/Stride.Particles/Updaters/UpdaterCollider.cs:179-193 | sources/engine/Stride.Particles/Updaters/UpdaterForceField.cs:188-202 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Updaters/UpdaterCollider.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"839e30923bd4a26fe7b777e195c1a84dbd80e61077c5a42a43b502546e596f00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:263-277 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:303-317 \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 \u0060sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:263\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":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"c929ab67899fda9a9bbc0e9f42f4402a742cf8c4087f85c727ddc15de5ffc1a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/Scanners/Scanner.cs:61-75 | sources/shaders/Stride.Shaders.Parsers/Parsing/Scanners/ScannerGeneric.cs:60-74 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/Scanners/Scanner.cs:61\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":"sources/shaders/Stride.Shaders.Parsers/Parsing/Scanners/Scanner.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee64bcef8cd85265ca8fef8ec55b6e6d154158c5b048d84596d719f7fe2104e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:419-433 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:441-455 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:419\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd42535dca5c3f489f93b06c9cacc97c7ab03d7fc45fb04a06fabfed458dd39f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/CameraOrientationGizmo.cs:260-274 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/SpaceMarker.cs:142-156 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/CameraOrientationGizmo.cs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"83a0dcc15db23a4acafd71a24472e8c4b7a0adfcf35fa3e8bdf717a59a429805"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs:244-258 | sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs:269-283 \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 \u0060sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs:244\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"c529610e122b0db98c34962d3a969626ee355eee4eea2b1eccfad8ef43b5bc50"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): sources/editor/Stride.Core.Assets.Editor/View/TemplateProviders/DictionaryEnumKeyTemplateProvider.cs:20-33 | sources/editor/Stride.Core.Assets.Editor/View/TemplateProviders/DictionaryNumberKeyTemplateProvider.cs:30-43 | sources/editor/Stride.Core.Assets.Editor/View/TemplateProviders/DictionaryStringKeyTemplateProvider.cs:20-33 \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 \u0060sources/editor/Stride.Core.Assets.Editor/View/TemplateProviders/DictionaryEnumKeyTemplateProvider.cs:20\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/TemplateProviders/DictionaryEnumKeyTemplateProvider.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f08b04cc8dfbf0320c7fa6a782be303978cc442886658bba97f7cf77a71fe8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Color.cs:346-359 | sources/core/Stride.Core.Mathematics/ColorBGRA.cs:280-293 \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 \u0060sources/core/Stride.Core.Mathematics/Color.cs:346\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":"sources/core/Stride.Core.Mathematics/Color.cs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a7fab1651a0f5d50d9ab6f2d215a7b7580c5c8f6b952992506690f7ebbb46af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/core/Stride.Core/Extensions/ArrayExtensions.cs:85-98 | sources/core/Stride.Core/Extensions/ArrayExtensions.cs:112-125 \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 \u0060sources/core/Stride.Core/Extensions/ArrayExtensions.cs:85\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Extensions/ArrayExtensions.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"4004d5a36bf0cdcba153bc77cb678580909002913cd35d565ca851a0fb47879a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs:692-705 | sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs:719-732 \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 \u0060sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs:692\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":"sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"19dcbb647b0fce16c691c987b77e8802f33716d4cecf4112f9db6076530314f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/engine/Stride.Particles/Initializers/InitialDirectionSeed.cs:39-52 | sources/engine/Stride.Particles/Initializers/InitialVelocitySeed.cs:39-52 \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 \u0060sources/engine/Stride.Particles/Initializers/InitialDirectionSeed.cs:39\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":"sources/engine/Stride.Particles/Initializers/InitialDirectionSeed.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d075cb38bb7f10242094ec489bb9e976caa6ab35b429f7c86b44e2cb80768d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs:300-313 | sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderTrail.cs:293-306 \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 \u0060sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs:300\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":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"08611c3f7603e5c7d7c0843da9dd2ad38352edd4bc1af25522239c674361d298"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Materials/MaterialTransparencyAdditiveFeature.cs:83-96 | sources/engine/Stride.Rendering/Rendering/Materials/MaterialTransparencyBlendFeature.cs:78-91 \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 \u0060sources/engine/Stride.Rendering/Rendering/Materials/MaterialTransparencyAdditiveFeature.cs:83\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":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialTransparencyAdditiveFeature.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea5545b33f635d90c10692636fe6b9984d9de339940342d29b1b8e33b81d2c6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs:86-99 | sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs:151-164 \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 \u0060sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs:86\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.EnumerantParams.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3cfebe5e6a6e315fa197318d6d33af20cad1dd57f04e7235163ec502ac7702f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Wpf/Controls/Trimming.cs:165-178 | sources/presentation/Stride.Core.Presentation.Wpf/Controls/Trimming.cs:219-233 \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 \u0060sources/presentation/Stride.Core.Presentation.Wpf/Controls/Trimming.cs:165\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/Trimming.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b893d02cf7db48326cf46bb569d3a6dc7cafedff3153e82c07e61278c9225f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs:507-520 | sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIRootViewModel.cs:101-114 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs:507\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f527b1ad6f8cd0c7c67a13cdd9e7572be9eb4d307558c41ee035541ae03dab4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorComponentCurveViewModel.cs:60-73 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorComponentCurveViewModel.cs:61-74 \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 \u0060sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorComponentCurveViewModel.cs:60\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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorComponentCurveViewModel.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"53955d9ff811dd22f27652c10defbd7323b03a6158cb393691f05b5dc111cbe7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderBillboard.cs:56-68 | sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderHexagon.cs:55-67 | sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderQuad.cs:55-67 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderBillboard.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"340358dc868625e2c0acb21c3374276308f6882669d309be3e63a1db21684c6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): sources/core/Stride.Core.Design/TypeConverters/Half2Converter.cs:117-129 | sources/core/Stride.Core.Design/TypeConverters/Half3Converter.cs:118-130 | sources/core/Stride.Core.Design/TypeConverters/Half4Converter.cs:121-133 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/TypeConverters/Half2Converter.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcd4b8af3ad2890fa2bbce9fcb203986a7e87f66a9994464ff11ecb5c2f9c13a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): sources/editor/Stride.Assets.Presentation/Templates/AnimationFromFileTemplateGenerator.cs:34-46 | sources/editor/Stride.Assets.Presentation/Templates/ModelFromFileTemplateGenerator.cs:135-147 | sources/editor/Stride.Assets.Presentation/Templates/SkeletonFromFileTemplateGenerator.cs:34-46 \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 \u0060sources/editor/Stride.Assets.Presentation/Templates/AnimationFromFileTemplateGenerator.cs:34\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":"sources/editor/Stride.Assets.Presentation/Templates/AnimationFromFileTemplateGenerator.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"91c5929c87774a7f7d3afb156fbe2504f2f711e7d24e0e888616eb5457ffd29c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): sources/engine/Stride.Audio/CompressedSoundSource.cs:235-248 | sources/engine/Stride.Audio/CompressedSoundSource.cs:282-294 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio/CompressedSoundSource.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8491f8ca02855e02e7acf57a52f81b4cdad8bdcaa0d60613610d84854cfc675"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/ContainTextAdornerBehavior.cs:88-100 | sources/editor/Stride.Core.Assets.Editor/View/Behaviors/TextBoxPropertyValueValidationBehavior.cs:132-144 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/ContainTextAdornerBehavior.cs:88\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":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/ContainTextAdornerBehavior.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"0572e6ea90be85be15724f4de291bf190b241a683111f24f14319174699818cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:310-322 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TranslationGizmo.cs:295-307 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d979b573bf3f711f8f81c4bc20f39f08845d7889b8d03b5d067a64fe6e582e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs:21-32 | sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs:33-44 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d8392107cfc74390117cf1afce97dcc3ae662e9b2684184ccf07c65dd74c34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs:46-57 | sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs:83-94 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"97323a308f2c4da24734bb2124cbc03374b812794d916bf60a5633d3572f94e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/engine/Stride.Particles/Initializers/InitialSpawnOrder.cs:38-49 | sources/engine/Stride.Particles/Initializers/InitialSpawnOrderGroup.cs:40-51 \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 \u0060sources/engine/Stride.Particles/Initializers/InitialSpawnOrder.cs:38\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialSpawnOrder.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e9b5a15b239a1290525e30ca839aa988b3795636c1a5e0a0408404e73cc9de6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/engine/Stride.Rendering/Extensions/IndexExtensions.cs:169-180 | sources/engine/Stride.Rendering/Extensions/IndexExtensions.cs:223-234 \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 \u0060sources/engine/Stride.Rendering/Extensions/IndexExtensions.cs:169\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":"sources/engine/Stride.Rendering/Extensions/IndexExtensions.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"992d92f36925f1085824d817d46d22c4dc631f9d822f023e4d35ef37548a9435"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs:317-328 | sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs:355-366 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f35b3ca559cbe641ea0a29d395f979286663abf8e274530eeafcd7963b697fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs:86-97 | sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs:99-110 \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 \u0060sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs:86\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0e65b92e879298c1c63a60682df96dc714ac7ffd412c18ea9b49e4d87157b5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Core/SymbolTypes.cs:479-490 | sources/shaders/Stride.Shaders.Parsers/Core/SymbolTypes.cs:509-520 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/SymbolTypes.cs"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1c5ea3eda8ad5230541f7d139280e278991a10d3c109b51934edb7e9cd518ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs:430-441 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs:460-471 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs:430\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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/Common/CommonParsers.cs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb82d637ab1ae102c1cac69ead95b6db4adcec4d40a6b6dc15158b1cbf6cd25a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/core/Stride.Core.AssemblyProcessor/Utilities.cs:34-45 | sources/core/Stride.Core.AssemblyProcessor/Utilities.cs:69-80 \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 \u0060sources/core/Stride.Core.AssemblyProcessor/Utilities.cs:34\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.AssemblyProcessor/Utilities.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cc4743add2cce0f42850e8f37fa41d999a7771c715564065e0d8cf1799d561d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Wpf/Controls/NumericTextBox.cs:470-481 | sources/presentation/Stride.Core.Presentation.Wpf/Controls/NumericTextBox.cs:496-507 \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 \u0060sources/presentation/Stride.Core.Presentation.Wpf/Controls/NumericTextBox.cs:470\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":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/NumericTextBox.cs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a573d5290aea23f15c9c844d02b4813fb315ddc89b7099d3adc074b5b0b4450"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:160-171 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TranslationGizmo.cs:162-173 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4411a21ac3427f4a89021513bcde6e52f91e9eb4d52e519d312ce8b33cfda5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/PrefabEditor/Services/PrefabEditorController.cs:75-86 | sources/editor/Stride.Assets.Presentation/AssetEditors/SceneEditor/Services/SceneEditorController.cs:84-95 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/PrefabEditor/Services/PrefabEditorController.cs:75\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/PrefabEditor/Services/PrefabEditorController.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"42d04d2665c72ae5c024a4e7e6474ea46a1d0e0121154dd6b221c64c9f458e43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/AddNewItemCommand.cs:31-41 | sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/AddPrimitiveKeyCommand.cs:32-42 | sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/RemoveItemCommand.cs:27-37 | sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/RenameStringKeyCommand.cs:33-43 \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 \u0060sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/RenameStringKeyCommand.cs:33\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/AddNewItemCommand.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab1f51ac980fc0c4f5547ced9d4932eac27f77e3ddba1cea04fc38693994a9c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Color4.cs:267-277 | sources/core/Stride.Core.Mathematics/Color4.cs:297-307 \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 \u0060sources/core/Stride.Core.Mathematics/Color4.cs:267\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Color4.cs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7bdbec46ff1424c2ca248e9ea9910664732a5bdba1756d4c099e72f4fffa98f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Plane.cs:124-135 | sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Plane.cs:155-165 \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 \u0060sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Plane.cs:124\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Plane.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"c58d67c82d9e1a4444c3785f249e3d530d6b61927de6a870f4ee98fd8f941fd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Particles/Initializers/InitialVelocityParent.cs:95-105 | sources/engine/Stride.Particles/Initializers/InitialVelocitySeed.cs:39-49 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialVelocityParent.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"b41277b36536dd31872f8b145e39540b53d75e90c4139a666c1659b8b7ce27a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs:120-131 | sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderTrail.cs:129-139 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"b89d0bfbbcb5e4d291bd6f4610c2d804187a84b751995286141362def3e7ff9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Physics/Engine/PhysicsComponent.cs:521-531 | sources/engine/Stride.Physics/Engine/PhysicsComponent.cs:552-564 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsComponent.cs"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"caa0b41ced11b318ca9ed590ac8077e42071e65f3568fcfd93c00d8171864244"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:412-422 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:445-455 \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 \u0060sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:412\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":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f245cccb863b70f1128181ad87f2972e167504770aee0feee68e05f082c27b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs:327-337 | sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs:381-393 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a268b43e9df390a17c6e6bd8ffa73a4a33243b2b886b54e428a08fe3e2a5e00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Lights/LightPoint.cs:81-91 | sources/engine/Stride.Rendering/Rendering/Lights/LightSpot.cs:203-213 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightPoint.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a1a6cf6cb645fd2c8361539c32779463d8bbc475ea7a6ef295db3e46638339f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Materials/MaterialTransparencyAdditiveFeature.cs:62-72 | sources/engine/Stride.Rendering/Rendering/Materials/MaterialTransparencyBlendFeature.cs:63-73 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialTransparencyAdditiveFeature.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec73ab65d88d284ac471abe956658cec7e464a90bfa5c25f2741119dd2dc0b52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererCubeMap.cs:247-257 | sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererParaboloid.cs:278-288 \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 \u0060sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererCubeMap.cs:247\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":"sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererCubeMap.cs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fbc5cf9002880b47d448712b70d4e151a10eaf74498dabb8e1ab60562c24fc1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/engine/Stride.VirtualReality/OpenXR/OpenXRHmd.cs:707-717 | sources/engine/Stride.VirtualReality/OpenXR/OpenXRHmd.cs:730-740 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OpenXR/OpenXRHmd.cs"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"c09c3a4ec518acfd4e9f88a96b1abae3aa309c6bc2955194b0e9856a9e3d72c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/AssetHighlighters/MaterialAssetHighlighter.cs:39-49 | sources/editor/Stride.Assets.Presentation/AssetEditors/AssetHighlighters/TextureAssetHighlighter.cs:48-58 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetHighlighters/MaterialAssetHighlighter.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb32469c8d4200e1ded46125a57ffe09cdab31a6b9f61f0d786b8db371843ee6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityTransformService.cs:155-165 | sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs:128-140 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityTransformService.cs:155\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityTransformService.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"5017dfe3b5873ee90ef95cac8fd95a2c31b5a99ac7085393740e19e62b9c75b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 5): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:142-151 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:175-184 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:238-247 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:273-282 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:307-316 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:142\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"18dec0169f3cfda23429b7043c92909ab4def0c7045aa5ceb8d1b229653ceb24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:396-405 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:429-438 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:462-471 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:396\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":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2f2ed449b5c2172181b405497e30c91594072fabdbabe7cfc7ad66ad7602f5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG005ReadonlyMemberTypeIsNotSupported.cs:33-42 | sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG007DataMemberOnDelegate.cs:33-42 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG005ReadonlyMemberTypeIsNotSupported.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebb685073c17d8c7a0339e5f8093cafabf9002b6a53ced8687e7c47fff285226"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG009InvalidDictionaryKey.cs:49-58 | sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG009InvalidDictionaryKey.cs:68-77 \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 \u0060sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG009InvalidDictionaryKey.cs:49\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.CompilerServices/Analyzers/STRDIAG009InvalidDictionaryKey.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"938c17c01dc2f1c0b65075a4d47c55cdd6adb959de17f251df8599f0974a475c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs:280-289 | sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderTrail.cs:273-282 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"293fb0cea6c0293d4246418b97cf65f5b1dd3e65fdfabe1c31cff8c56f27a90e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs:347-356 | sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderTrail.cs:340-349 \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 \u0060sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs:347\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":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderRibbon.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"df13d6c930e91a5f64c5201280c080cfa76a9deba47a5b6df2b1b8df173e21a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/engine/Stride.Particles/Updaters/UpdaterRotationOverTime.cs:116-125 | sources/engine/Stride.Particles/Updaters/UpdaterSizeOverTime.cs:115-124 \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 \u0060sources/engine/Stride.Particles/Updaters/UpdaterRotationOverTime.cs:116\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":"sources/engine/Stride.Particles/Updaters/UpdaterRotationOverTime.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"e76dc88f243f107c585d3539daac8e3b72edc18597a36c1614aa3abc4d2d338e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/SkinningRenderFeature.cs:118-127 | sources/engine/Stride.Rendering/Rendering/TransformRenderFeature.cs:163-172 \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 \u0060sources/engine/Stride.Rendering/Rendering/SkinningRenderFeature.cs:118\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/SkinningRenderFeature.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce0b960629c6e498bf1343846e73bbbe477c4b6440445165f832330922d0fd25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Flow.cs:130-139 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Flow.cs:213-222 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Flow.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"49d08beb1ae70e5ec650e55ebc07e2915c13eae6ff66b7dbba2b63339c62dc75"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs:360-369 | sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs:400-409 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/TypeDuplicatesHelper.cs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"52c7b8e1eb7e2b917893a31ebfd77c6fe9fef7b923cd007b51127a798c73e54a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/assets/Stride.Core.Assets/AssetRegistry.cs:111-120 | sources/assets/Stride.Core.Assets/AssetRegistry.cs:129-138 \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 \u0060sources/assets/Stride.Core.Assets/AssetRegistry.cs:111\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":"sources/assets/Stride.Core.Assets/AssetRegistry.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"34b89a1426848b20db7b1af7b1b2e97e36de1d6fb39af8112b731ea97cfdf509"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Wpf/Extensions/DrawingContextExtensions.cs:156-165 | sources/presentation/Stride.Core.Presentation.Wpf/Extensions/DrawingContextExtensions.cs:173-182 \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 \u0060sources/presentation/Stride.Core.Presentation.Wpf/Extensions/DrawingContextExtensions.cs:156\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":"sources/presentation/Stride.Core.Presentation.Wpf/Extensions/DrawingContextExtensions.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"1df73502fba1c196bbc37015d08532f872e5c1d1925e09ac6edf86892fa57695"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Services/EntityHierarchyEditorController.cs:77-86 | sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Services/UIEditorController.cs:374-383 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Services/EntityHierarchyEditorController.cs:77\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Services/EntityHierarchyEditorController.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"21dc7c0094642cea4f83d25ebcf74282a26f0c7ac09e6985e007052128761d43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs:144-153 | sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs:244-253 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs:144\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"15b54b6dda2c124c94592a8b52a5ed30d2fede56391ee20e99f43cd99b23afe7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs:370-379 | sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs:405-415 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs:370\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"d016829211733832894063c999ec15dd219799c9b1e7b2820c6e77bb9f9f067e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/Templates/HeightmapFactoryTemplateGenerator.cs:34-43 | sources/editor/Stride.Assets.Presentation/Templates/SpriteSheetFromFileTemplateGenerator.cs:85-94 \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 \u0060sources/editor/Stride.Assets.Presentation/Templates/HeightmapFactoryTemplateGenerator.cs:34\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/HeightmapFactoryTemplateGenerator.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fb16f6e53fc83a6f9411301779f58021c394bede625c9d00a83c12614eb911c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 5): sources/core/Stride.Core.Mathematics/Double4.cs:1299-1307 | sources/core/Stride.Core.Mathematics/Int4.cs:596-604 | sources/core/Stride.Core.Mathematics/Quaternion.cs:1357-1365 | sources/core/Stride.Core.Mathematics/UInt4.cs:546-554 | sources/core/Stride.Core.Mathematics/Vector4.cs:1305-1313 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double4.cs"},"region":{"startLine":1299}}}],"partialFingerprints":{"codehealthFindingId/v1":"14f3a317ab0699af8ba244e59a096b840692c102a9fa3f9d77fb322183681251"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 5): sources/core/Stride.Core.Mathematics/Double4.cs:1314-1322 | sources/core/Stride.Core.Mathematics/Int4.cs:611-619 | sources/core/Stride.Core.Mathematics/Quaternion.cs:1372-1380 | sources/core/Stride.Core.Mathematics/UInt4.cs:561-569 | sources/core/Stride.Core.Mathematics/Vector4.cs:1320-1328 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double4.cs"},"region":{"startLine":1314}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba3df9164282fdb478082eb0126f5f9a56490f2154268ead27dbec6c7d7d66cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): sources/core/Stride.Core.Mathematics/Double3.cs:1616-1624 | sources/core/Stride.Core.Mathematics/Int3.cs:720-728 | sources/core/Stride.Core.Mathematics/Vector3.cs:1674-1682 \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 \u0060sources/core/Stride.Core.Mathematics/Double3.cs:1616\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double3.cs"},"region":{"startLine":1616}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c5762325e5279238fd2363a2913cd21af1b8e9657f1cef7891e06350725477f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): sources/engine/Stride.Particles/Initializers/InitialPositionArc.cs:131-139 | sources/engine/Stride.Particles/Initializers/InitialPositionParent.cs:87-95 | sources/engine/Stride.Particles/Initializers/InitialPositionSeed.cs:50-58 \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 \u0060sources/engine/Stride.Particles/Initializers/InitialPositionArc.cs:131\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":"sources/engine/Stride.Particles/Initializers/InitialPositionArc.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"87b9b9d71ee379005c9e114cae1d8c290bb16a549ccf63850b32ff7be546a8ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): sources/engine/Stride.Particles/Updaters/UpdaterColorOverTime.cs:119-127 | sources/engine/Stride.Particles/Updaters/UpdaterRotationOverTime.cs:114-122 | sources/engine/Stride.Particles/Updaters/UpdaterSizeOverTime.cs:113-121 \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 \u0060sources/engine/Stride.Particles/Updaters/UpdaterColorOverTime.cs:119\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":"sources/engine/Stride.Particles/Updaters/UpdaterColorOverTime.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5ac0dfc8e7d52296590bab75ede2438c00d382d63bf75e8b02e0f4f5b490d4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:206-214 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:339-347 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:369-377 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:206\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"87c7bf00d74fe901a9a331fcbab5c81ade66ea3a5fc1e074ee9242f8b9c0d273"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Color4.cs:920-928 | sources/core/Stride.Core.Mathematics/ColorBGRA.cs:1005-1013 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Color4.cs"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"55eb822e1fdc432db3f5b065e8946263ade322dad757e296e2a4f9a4d08c9820"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Color4.cs:935-943 | sources/core/Stride.Core.Mathematics/ColorBGRA.cs:1020-1028 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Color4.cs"},"region":{"startLine":935}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a68b57f5612fc5f379361615dd528e0846bb8bb677e2c1b7b666585a01d8091"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Rectangle.cs:488-496 | sources/core/Stride.Core.Mathematics/RectangleF.cs:481-489 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Rectangle.cs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e79a37923eac113ccd4df406e82cd41d8c72a9bdff76f5a6147d3f247322636"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Rectangle.cs:503-511 | sources/core/Stride.Core.Mathematics/RectangleF.cs:496-504 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Rectangle.cs"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"583ce9789e30269d9b270524518d2bfb56156bb5a6617b459cad5252674f53b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Cone.cs:80-88 | sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Cone.cs:94-102 \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 \u0060sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Cone.cs:80\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Cone.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"01384cded1c286c84b928e8a6bc89eb65491be7bd0f000519c522071a915611b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.Particles/Initializers/InitialOrderParent.cs:90-98 | sources/engine/Stride.Particles/Initializers/InitialOrderParent.cs:113-121 \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 \u0060sources/engine/Stride.Particles/Initializers/InitialOrderParent.cs:90\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":"sources/engine/Stride.Particles/Initializers/InitialOrderParent.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"a319a4d87763de5dc34a48deb9101ae3fde87f2de8bca1b189eccca70158fa12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderBillboard.cs:146-154 | sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderHexagon.cs:188-196 \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 \u0060sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderBillboard.cs:146\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderBillboard.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"a910de50c8b7bff2da2e7978eb8029ae08c52c97a66d2e98cf241d7489627385"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.Physics/Data/ConeColliderShapeDesc.cs:52-60 | sources/engine/Stride.Physics/Data/CylinderColliderShapeDesc.cs:52-61 \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 \u0060sources/engine/Stride.Physics/Data/ConeColliderShapeDesc.cs:52\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Data/ConeColliderShapeDesc.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bb45250b3bfff6a06a463fac1423536ab1566aaf84bbffb171afb92569fce18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/McIntoshBokeh.cs:97-105 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/McIntoshBokeh.cs:145-153 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/McIntoshBokeh.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"2255c120aa45a8491684fc82bc5c31ea455be4d5fc7839f159fd81700a7202ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:533-541 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:542-551 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"572cb4151ef42d84cc1d28be3d7ff89187d939b37039fc57e974af0f8374bfcb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs:347-355 | sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs:404-421 \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 \u0060sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs:347\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":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"01d1258c75cf16ce5a18ac90e0303fb40bc4dbc979b0866dc5558b1ea3c6af58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs:52-60 | sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs:132-140 \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 \u0060sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs:52\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a09588337c5dacdbcbbd2667e4920fc45299a93d935ba42513d4e53165a8bfe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs:96-104 | sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs:133-141 \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 \u0060sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs:96\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":"sources/engine/Stride.UI/Renderers/DefaultSliderRenderer.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"a68c0e7e32d34e55f38527181b87b309a17dff460141c2752b783cf147baf89f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs:66-74 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs:105-113 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs:66\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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eba27055c022794b24bcdf66ad96438bc3d769d06d8c796a62f74d0b602d4b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Spirv/Tools/Dis.cs:283-291 | sources/shaders/Stride.Shaders.Parsers/Spirv/Tools/Dis.cs:301-309 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Tools/Dis.cs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b79ead024b6f701f8c6e71c553bef950da8b6217730ca7b39a19344428baae7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs:487-495 | sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs:504-512 \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 \u0060sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs:487\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":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"840e6382be9011648e146678e5b4a063cc9024c647e48bbdd7187ade05a4a155"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/assets/Stride.Core.Assets/Tracking/SourceFilesCollector.cs:45-53 | sources/assets/Stride.Core.Assets/Tracking/SourceFilesCollector.cs:68-76 \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 \u0060sources/assets/Stride.Core.Assets/Tracking/SourceFilesCollector.cs:45\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Tracking/SourceFilesCollector.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ae0398d6f4e5b4e0c758afc7ca89b88401d6a42f955e788305772cd895b1ac4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs:587-595 | sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphSelectionBehavior.cs:226-234 \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 \u0060sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs:587\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":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c49801edb7cd00e7a16a66f4fd28cc75016194a53aed8859c60651ecc7d3360"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs:251-259 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs:264-272 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs:251\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"a68dc42dab81b23ef9a9c2d024d52ccb59c5aae121330cbf4eb8d958dfb194d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:136-144 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TranslationGizmo.cs:138-146 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"868043a0cb35fb7c0a131a5fb0ceb7bcff8989a4eed5a6aa247abbce18ff0d7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:227-235 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TranslationGizmo.cs:230-238 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"026e98c283f25387eb65d0afd377d178f2252c972794b32ec891380310938830"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:288-296 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TranslationGizmo.cs:251-259 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:288\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"309903573a95da911e9819cbe7d691d9c58956f9109486ddfc3ff0bbfa521897"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 7): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:74-81 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:107-114 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:140-147 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:173-180 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:236-243 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:271-278 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:305-312 \u2014 all 7 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:74\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2fb82d30a22d7d375df342e5dc6b26dfff8d7c5a06640addb73d1cc11d6e1d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1139-1146 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1147-1154 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1155-1162 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1163-1170 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1171-1178 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1139}}}],"partialFingerprints":{"codehealthFindingId/v1":"79c7cb323361839a53e17ae1fa31c1ae83a5aef315631a097feda51a52cc334b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): sources/core/Stride.Core.Mathematics/Double3.cs:1629-1636 | sources/core/Stride.Core.Mathematics/Int3.cs:733-740 | sources/core/Stride.Core.Mathematics/Vector3.cs:1687-1694 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double3.cs"},"region":{"startLine":1629}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f9f9825965391466ae552bdb19cd775590d1e7e9e35a59492b5ff93962b4ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Circular/GaussianBokeh.cs:68-75 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/McIntoshBokeh.cs:93-100 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/McIntoshBokeh.cs:140-148 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Circular/GaussianBokeh.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"df00609a2ddc57c416bc28aa5e81056778280caf82364fa8540ccbf63aaf63f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1119-1126 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1127-1134 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1135-1142 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1119}}}],"partialFingerprints":{"codehealthFindingId/v1":"f03ff2d63959b8a60af1654cf977b194de9e2a61116757cb4f7615902c8e3ccc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1212-1219 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1228-1235 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1244-1251 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1212\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":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1212}}}],"partialFingerprints":{"codehealthFindingId/v1":"253645d2eaac0ec2fe6da5897f12915433defae4df68ece5c8a701761f81340f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/core/Stride.Core.Mathematics/CollisionHelper.cs:1388-1395 | sources/core/Stride.Core.Mathematics/CollisionHelper.cs:1416-1423 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/CollisionHelper.cs"},"region":{"startLine":1388}}}],"partialFingerprints":{"codehealthFindingId/v1":"7af118e140a8ce033070a20adac1a3547a8808522cc4771b66498d64d3c727e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Matrix.cs:1959-1966 | sources/core/Stride.Core.Mathematics/Matrix.cs:1999-2006 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1959}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d3872db51e01ac9c520daf50441cbc9f7ae2526c006dcb735a8db6e5f799952"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Size2.cs:133-140 | sources/core/Stride.Core.Mathematics/Size2F.cs:133-140 \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 \u0060sources/core/Stride.Core.Mathematics/Size2.cs:133\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Size2.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e964f4df24de9ed813ae567aa68aaa1f58b9e89e7bd7c4464be90f06957de03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Size2.cs:146-153 | sources/core/Stride.Core.Mathematics/Size2F.cs:146-153 \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 \u0060sources/core/Stride.Core.Mathematics/Size2.cs:146\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Size2.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a8102d1e6d4e540b8342a84ee7defcfdb83b8fc94fc45570c609b9ea778a88e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/engine/Stride.Graphics/Data/ImageTextureSerializer.cs:69-76 | sources/engine/Stride.Graphics/Data/ImageTextureSerializer.cs:95-102 \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 \u0060sources/engine/Stride.Graphics/Data/ImageTextureSerializer.cs:69\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":"sources/engine/Stride.Graphics/Data/ImageTextureSerializer.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbcc38cf2254a2e81b907aa73ef96ac1c161f2965917ccd974dcbfce644a8eda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/engine/Stride.Input/GamePadLayouts/GamePadLayoutDS4.cs:18-25 | sources/engine/Stride.Input/GamePadLayouts/GamePadLayoutXInput.cs:30-37 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Input/GamePadLayouts/GamePadLayoutDS4.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"d756e8cd303862d2c896c297c7a3c1c7e79a020119fed4714c839af5fde0b58b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderOrientedQuad.cs:53-60 | sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderTrail.cs:127-134 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderOrientedQuad.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecd353f0dfcc4b4d3389e46a274f42f2d7a7a0c81436bf256cf30bb96aca880b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/engine/Stride.Particles/VertexLayouts/ParticleBufferState.cs:106-113 | sources/engine/Stride.Particles/VertexLayouts/ParticleBufferState.cs:120-127 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/VertexLayouts/ParticleBufferState.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"df62b46dfe1fe108db834bce7709ff6b6dc344481e467517fe1e6cf6c5dfc898"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs:159-166 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs:177-184 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"227339bdec106f684b24cd3943fdb3584d766806cd880e82ff4854c790c3458a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:690-697 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:706-713 \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 \u0060sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:690\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":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":690}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e4866799b4d3577230a8d7e4db58d61064dfd6e320ce982244df3190236de93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1104-1111 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1112-1119 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1104}}}],"partialFingerprints":{"codehealthFindingId/v1":"5281eebb37c54c1b9c74747902aaab2190d851be42faa2aa8cdf1892f80eba8b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs:305-312 | sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs:384-391 \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 \u0060sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs:305\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":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4b62801022298afab17a43c66bea1a621fc57630a4d9f58e286ea4f66f2060f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs:62-69 | sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs:76-83 \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 \u0060sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs:62\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":"sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"24f90abee26c42783d2a17f965a9077e78d7bcf58b7553face5a94d7cac28212"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs:377-384 | sources/shaders/Stride.Shaders.Parsers/Spirv/Building/SpirvContext.Types.cs:93-100 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs:377\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"14ad72b6b4a7300b5576a7ef14d2e8cdae3a12e3fff3c5ead764d1928d564494"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:248-255 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:264-271 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e47772668dadfe503930422a4c60f98ffa99afe84c81972b967b5dc2bee9902"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/UnaryParsers.Prefix.cs:42-49 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/UnaryParsers.Prefix.cs:102-109 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/UnaryParsers.Prefix.cs:42\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/UnaryParsers.Prefix.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fbf02e86705a81d47305edb1d6ff1a6282da305b32460b6b2131723037f7fad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs:27-34 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs:63-70 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs:27\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderBufferParsers.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"959484468f6012960027fc87eb01f3a2875afce97d3f812b67944b10c1081063"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderDataParsers.cs:129-136 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderDataParsers.cs:183-190 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderDataParsers.cs:129\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ShaderParsers/ShaderDataParsers.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"ced4f9b1b095e9d184bbff18a1fa0f6f2884eaee647b2f6875617d963be315fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/core/Stride.Core.Yaml/Scanner.cs:96-103 | sources/core/Stride.Core.Yaml/Scanner.cs:104-111 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed79bf4cc9147312ca26e377754d02f550918c021ccccfd6bf9954a64c169c1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:47-54 | sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TranslationGizmo.cs:48-55 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs:47\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fb16987b8e33b06185f323b0b91409472198e4e9f6e20381414b2f148730944"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs:155-162 | sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs:178-185 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs:155\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1f5d43da0b0e46319b2bc0468841b87d90995f966e7522c941871e1abd646b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs:45-52 | sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/MoveItemCommand.cs:47-54 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/editor/Stride.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs:45\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":"sources/editor/Stride.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"966f266b4189ceae4df10fc275b6d819e9c31c36de08e87e5ea1b3bc4639176f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 6): sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/McIntoshBokeh.cs:113-119 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/McIntoshBokeh.cs:122-128 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs:162-168 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs:171-177 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs:180-186 | sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs:188-194 \u2014 there are 6 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 6 sites; resolving a subset leaves the remainder to drift apart. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/McIntoshBokeh.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"4101625c1d80ebc1e7f28ba233ff06efcde485c48217c1b5850f42a0965ea032"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1196-1202 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1212-1218 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1228-1234 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1244-1250 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1196}}}],"partialFingerprints":{"codehealthFindingId/v1":"312b281251552781e17626c702576839ac2207296c2a7181eec9c014c4f1bad3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs:69-75 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:62-68 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:212-218 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorCurveViewModel.cs:366-372 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs:69\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":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ColorCurveViewModel.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ab08aedd109eb72450f5eadc1766041ae52db96b895143bf34b0db9d29c4084"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): sources/core/Stride.Core.Mathematics/Double2.cs:1358-1364 | sources/core/Stride.Core.Mathematics/Int2.cs:658-664 | sources/core/Stride.Core.Mathematics/Vector2.cs:1375-1381 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Double2.cs"},"region":{"startLine":1358}}}],"partialFingerprints":{"codehealthFindingId/v1":"548321e0522b6056f9382637d246d844ace56fb45f0536bb771ec9013808fc17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Half3.cs:194-200 | sources/core/Stride.Core.Mathematics/Half4.cs:211-217 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Half3.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b44e40f95f359076f903576fd75026597a00cf3e951f10006ec2132a92ece16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Half3.cs:207-213 | sources/core/Stride.Core.Mathematics/Half4.cs:226-232 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Half3.cs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"10f8b6116d1c0532da7ce3cd1feaf74dea70390c1074473fd6b627b87d924f69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Matrix.cs:984-990 | sources/core/Stride.Core.Mathematics/Matrix.cs:1064-1070 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":984}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6cf19839d9e81884dccb1035bf4e1c9cca5e3702071f4b32dfb26486d13a7aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/core/Stride.Core.Mathematics/Matrix.cs:1788-1794 | sources/core/Stride.Core.Mathematics/Matrix.cs:1800-1806 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Mathematics/Matrix.cs"},"region":{"startLine":1788}}}],"partialFingerprints":{"codehealthFindingId/v1":"a81b429afe77066eaa5bd38b5b16422fa41a37b0666648b1c92ffeb14ee3b009"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:563-570 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:571-577 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e166350efa3f493269689e16ed41c744bb1c5277fae5d86b304c410aa2d0080"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs:523-529 | sources/engine/Stride.Rendering/Rendering/Shadows/LightSpotShadowMapRenderer.cs:194-200 \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 \u0060sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs:523\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":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"be02cc8e493e6964871a8c44c629170cbf721a25e0c3eb6ccbd23ce8502a2a63"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ShapeCacheSystem.cs:106-112 | sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ShapeCacheSystem.cs:121-128 \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 \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ShapeCacheSystem.cs:106\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":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ShapeCacheSystem.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2d32dab1f1df38af7833295ea8d5d274a6871d400a12b3a62d4960af6e51a07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Flow.cs:146-152 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Flow.cs:229-235 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Flow.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab0f62090c12b849386978f4f7d165030e9f9bb31ce907138ddcdba51bda36ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:160-166 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:310-316 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e335b972f1eebca5f8c1a1604eaaddd90ded14795e1ead1a2b56d3ee79fbea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectivePrimaryExpressionParsers.cs:82-88 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/PrimaryExpressionParsers.cs:54-60 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectivePrimaryExpressionParsers.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"215cae330486f76df3be351356e2ea4cdb784e14aa99c841cf54ae8b3ee8c1df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs:529-535 | sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs:539-545 \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 \u0060sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs:529\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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"33fe4b3e810604429c55015249075fba71c6fdea6a956eba1eb3500e36da3ec9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): sources/editor/Stride.Core.Assets.Editor/Components/Transactions/ActionHistoryViewModel.cs:106-112 | sources/editor/Stride.Core.Assets.Editor/Components/Transactions/ActionHistoryViewModel.cs:117-124 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/Transactions/ActionHistoryViewModel.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"332f7484ab4f7b84df53d37ca9a1b2466015fe19661f2fb6984b63f27227a8e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 7): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1011-1016 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1017-1023 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1024-1030 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1031-1037 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1038-1044 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1046-1051 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1052-1057 \u2014 all 7 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1011}}}],"partialFingerprints":{"codehealthFindingId/v1":"a488ecd0efb815c608785322ce95b365bb854a5feeab50b30ade029e2f3387de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:284-289 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:293-298 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:302-307 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:311-316 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:284\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b593dbd0b42e069b703eed2c753f5b0cf981af2de93fc6a94064f64b3b06799"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:327-332 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:336-341 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:345-350 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:354-359 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:327\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b5fb6742651930f054fb5a6292718758fbe33615189e187fa114b6e445d6169"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:125-130 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:139-144 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:146-151 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddee2c22717eb92b33913db92bc832fa0b362dae6d7e006fdc9f861e25036fad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:607-612 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:614-619 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:621-626 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b34dbb565f63534df73f9ec6d4156438b7dd22ddf6bea8f073f78f07d346898"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:646-651 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:656-661 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:666-671 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":646}}}],"partialFingerprints":{"codehealthFindingId/v1":"0618ab7802ac83e6d94df8c6cd03b768ceedd158202eab68aa127edb0ed3dad0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs:300-306 | sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererCubeMap.cs:141-146 | sources/engine/Stride.Rendering/Rendering/Shadows/LightSpotShadowMapRenderer.cs:89-95 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a8184f195befe5064f4788b2c54811a2984a983d715060a9f873b2d324e12d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): sources/engine/Stride.UI/Renderers/DefaultButtonRenderer.cs:25-30 | sources/engine/Stride.UI/Renderers/DefaultImageRenderer.cs:24-29 | sources/engine/Stride.UI/Renderers/DefaultToggleButtonRenderer.cs:28-33 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Renderers/DefaultButtonRenderer.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fc0ef467146b56baf3c77c768b408b9b9f1839f9aa327bdf17c391acdd2548e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Teapot.cs:371-376 | sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Teapot.cs:382-387 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Teapot.cs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5ca201cf1fbd69ea7cfb7cb38a0ff27d5b6bd68bc6a49a07e4a7c8d8df58245"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/engine/Stride.Graphics/Sprite3DBatch.cs:186-191 | sources/engine/Stride.Graphics/UIBatch.cs:706-711 \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 \u0060sources/engine/Stride.Graphics/Sprite3DBatch.cs:186\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":"sources/engine/Stride.Graphics/Sprite3DBatch.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"10f48b022dc0c8dea24013e24e41f33e9d20d5fc0ef06843d42283594abb896b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:167-172 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:173-178 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f91aad2999999da8a23477af97c08e821cada3a6e81b1c5900ed75fe583a28e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:520-525 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:526-531 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"578f4ee81c5ecce0d44671ac27292de219407bcb9832c4b711a5c6e4bdd4a8d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:631-637 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:638-643 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"05bce55a68e59dd28cdc255c9431d72076ca411aea22ba929cf6d9dcfaf9484e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:769-774 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:775-780 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":769}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d4c74b5f8b6e60c5aa2503d4e5d2d5c82383acf44309ee9f1b8bdd3b52343ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs:283-288 | sources/engine/Stride.Rendering/Rendering/Shadows/LightSpotShadowMapRenderer.cs:73-79 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"76c25424cf5217ba4048c5fa7e76107ad26673f492880148e8e85b2b3809bdb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ConstraintGizmo.cs:223-228 | sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ConstraintGizmo.cs:238-243 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ConstraintGizmo.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"7975b94f762d39eba7da3bad747c1ca268c1deae439918a25f209da6d8ad14a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/shaders/Stride.Shaders.Generators.Internal/Intrinsics/Parser.cs:200-205 | sources/shaders/Stride.Shaders.Generators.Internal/Intrinsics/Parser.cs:208-213 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/Intrinsics/Parser.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"434aec79c788c24a7452ebd9cb14810d4ba3550044587f96b9e6d024b81972a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:115-120 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:168-173 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"588ab03ac6fbd0bf5af8266c0be9f4a3634d630842e3d5a844d4954957da7752"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:151-156 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs:184-189 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/TextureMethodsImplementations.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5029371f474c17d5a106d034157bd724045afff0f3419143fea3fcad3b978c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:209-214 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:307-312 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs:209\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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveBinaryParsers.cs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"6af47bdf149c0245a8c76638d965f1b08a27f55e2cd7c94a70eb9c2b2ed5ba80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs:622-627 | sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs:636-641 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3681e9807003ac371cd22879e7d5142daee673897f592e47e79d1db1aa62e94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs:790-795 | sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs:802-807 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs:790\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":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"e840aeccabd864ee4259dd123461adc47a0006a932467cb3832c6eafae17dea5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Buffers.cs:111-116 | sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Buffers.cs:131-136 \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 \u0060sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Buffers.cs:111\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":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Buffers.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b84dc04b7c9b5dd812a1a42d18850700ffce080893d6b7c5e13b517d082fb6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Wpf/MarkupExtensions/MultiBinding.cs:100-105 | sources/presentation/Stride.Core.Presentation.Wpf/MarkupExtensions/PriorityBinding.cs:100-105 \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 \u0060sources/presentation/Stride.Core.Presentation.Wpf/MarkupExtensions/MultiBinding.cs:100\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":"sources/presentation/Stride.Core.Presentation.Wpf/MarkupExtensions/MultiBinding.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"b262fdc5bad69fcd60e89bc9f5885ced31eb4ef5033dcbb747f5d442d52fc326"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptBlockViewModel.cs:88-93 | sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptLinkViewModel.cs:53-58 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptBlockViewModel.cs:88\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptBlockViewModel.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"5550f486c305c2603c0e961d03d58e60a95bc44e7938e032eb1d7a06e025ea32"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 5): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1060-1064 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1068-1072 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1076-1080 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1084-1088 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:1092-1096 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":1060}}}],"partialFingerprints":{"codehealthFindingId/v1":"7081ffd16f14e2c27d778ff10eaf1dea78a768092c48d17bd96f08ed63f3e010"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): sources/engine/Stride.Foundation/Graphics/PixelFormatExtensions.cs:563-574 | sources/engine/Stride.Foundation/Graphics/PixelFormatExtensions.cs:575-579 | sources/engine/Stride.Foundation/Graphics/PixelFormatExtensions.cs:580-584 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060sources/engine/Stride.Foundation/Graphics/PixelFormatExtensions.cs:563\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":"sources/engine/Stride.Foundation/Graphics/PixelFormatExtensions.cs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"6708c1d44fe17bc973f32a301fad9e9b98d021ea9fda3081da4710d029e76b2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sources/engine/Stride.Graphics/UIBatch.cs:601-605 | sources/engine/Stride.Graphics/UIBatch.cs:676-680 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/UIBatch.cs"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"234f96d1eea17b80589db2944758c576fcd62a261d9c7c992a6cc4cc9dabc95d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:750-754 | sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs:755-759 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/Predicates.cs"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"205bb4e6518efba064c48074bbb95714e3e9533c77b190c75318f660cd8e4baa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ConstraintGizmo.cs:257-261 | sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ConstraintGizmo.cs:285-290 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ConstraintGizmo.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aec1191a71f232481b1e610992b82db08942a640389ea6f5f8a12c91927f3ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs:165-169 | sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs:175-179 \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 \u0060sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs:165\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":"sources/shaders/Stride.Shaders.Generators.Internal/VisitorGenerator.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8c363e933367a5e7b74c701689bcacee1ffb54fff9978314215935d62b4f164"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:389-394 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:396-400 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs:389\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":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/ExpressionParsers/BinaryParsers.cs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab65a64cad1758ee89f0e762aa842bdfbb14b625828e8c7fe54d072cdc34affa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/NumberParsers.cs:70-74 | sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/NumberParsers.cs:81-85 \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 \u0060sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/NumberParsers.cs:70\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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/LiteralParsers/NumberParsers.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"c976b230c9154709a008ace4ea4b1f4223790d9d7f5539cfe65cd3a06620972f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/BehaviorProperties.cs:107-111 | sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/BehaviorProperties.cs:116-120 \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 \u0060sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/BehaviorProperties.cs:107\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":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/BehaviorProperties.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"545e184055e8d9b817aac38cc757a5b6f29f794fa0cd03dc67f6d253496b4edf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): sources/editor/Stride.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs:534-538 | sources/editor/Stride.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs:590-594 \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 \u0060sources/editor/Stride.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs:534\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":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc28ee4c0046f7ee02190bb590e43b1b723a7efe4399b3f29a26ef8b5954b7c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 3): sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/ColorComponentControlPointViewModel.cs:52-75 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/RotationComponentControlPointViewModel.cs:44-67 | sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/VectorComponentControlPointViewModel.cs:159-182 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/ColorComponentControlPointViewModel.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b7029e34f8aac48504776829a18d893ae7834830470ae72f15484e4619b9301"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project Stride.Shaders.Generators: Stride.Shaders.Generators has instability 1.00 with 0 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8f2ad7c90922dc4c54e045fa33856ee17b01dc31983f8bc45aedba5147b0632d"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project Stride.Editor: Stride.Editor has instability 0.91 with 5 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3c2060ec69604acdebf1ffe37bbfc4b189cc0ce4ff941835698d3958c956a7a7"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project Stride.Assets.Models: Stride.Assets.Models has instability 0.82 with 8 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1d732c83e200f4e5351533c7346c84c5586020e82c1fdcf75da4775589d2b837"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project Stride.SpriteStudio.Offline: Stride.SpriteStudio.Offline has instability 0.81 with 8 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c2ac6c5c7b905ad7fecab1ffe2b655053571014c81c3e7b5b9f73ef91653d42f"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Editor.CrashReport: Stride.Editor.CrashReport: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 2 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4ce7a701d8775d1599bf8b62a9cb287d223d40a1dbb06d0f17febe06f11187ce"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.NuGetResolver.UI: Stride.NuGetResolver.UI: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 2 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c6a1debfff18c418cef6f5a5b4a8ddd765007d43f8c6244965ffcf002cc367ac"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.NuGetResolver: Stride.NuGetResolver: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 4 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"506b73dc40eacd748b22e3379d898082ed69e7cc8e19e6eff5aff8c959446adc"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Native: Stride.Native: abstractness 0.00, instability 0.07, distance 0.93 \u2014 zone of pain \u2014 concrete and depended on by 28 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f6f1c7fcd63489a6f91a4cfd2d9c999a2b409532d946f0adb709c781c0a12c68"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Core.MicroThreading: Stride.Core.MicroThreading: abstractness 0.05, instability 0.02, distance 0.93 \u2014 zone of pain \u2014 concrete and depended on by 41 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"afa3764f19480af6ef7a1d1afb4e3282a937728948ecf12af84831784d265cf5"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Core.IO: Stride.Core.IO: abstractness 0.13, instability 0.02, distance 0.86 \u2014 zone of pain \u2014 concrete and depended on by 57 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4e145abb132cab4e4df2aeadf1bb731e96153ef1c29c2d2c295efdafe252ea3a"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Core: Stride.Core: abstractness 0.15, instability 0.00, distance 0.85 \u2014 zone of pain \u2014 concrete and depended on by 68 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d3a1b55b7be4bfbbf7397cba4db68a3ec4dc0ecfbddf665fcb7b5980da7eaf90"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Shaders: Stride.Shaders: abstractness 0.13, instability 0.03, distance 0.85 \u2014 zone of pain \u2014 concrete and depended on by 38 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ad26f85bb75ef28ef8b44a3eecd2060b920bec3536b28ef95ae31024a1f03b51"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.VisualStudio.Commands.Interfaces(net10.0-windows): Stride.VisualStudio.Commands.Interfaces(net10.0-windows): abstractness 0.17, instability 0.00, distance 0.83 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e7600a5d8ccd91b2cada2c17cc1d6b8ecb3ff5f47a24648f10b7a646bb0ee24b"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Core.Mathematics: Stride.Core.Mathematics: abstractness 0.21, instability 0.02, distance 0.77 \u2014 zone of pain \u2014 concrete and depended on by 53 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"03a5f0bc336a0ef99992273378171051970e49e411802b3d65ec502a003874d4"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Shaders.Spirv: Stride.Shaders.Spirv: abstractness 0.24, instability 0.00, distance 0.76 \u2014 zone of pain \u2014 concrete and depended on by 30 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"553b57a61b3367361d3ff7a80cf4ce09a70f1473498df0d084dfcd1f342e27dc"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Foundation: Stride.Foundation: abstractness 0.16, instability 0.10, distance 0.74 \u2014 zone of pain \u2014 concrete and depended on by 37 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"20a148593667604e2a8efed220622c0c82565a9f60f59402faaf55823c63ab2f"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Core.Translation: Stride.Core.Translation: abstractness 0.20, instability 0.08, distance 0.72 \u2014 zone of pain \u2014 concrete and depended on by 12 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"63600b413dc1a993cff0f8296d9fc16478c0582706040e73eff465e881480376"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Core.Serialization: Stride.Core.Serialization: abstractness 0.25, instability 0.03, distance 0.72 \u2014 zone of pain \u2014 concrete and depended on by 56 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a933255dbb7eaa76faf36b201e95723c5c653865f1219dba7bd16966ee9aa519"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Stride.Shaders.Parsers: Stride.Shaders.Parsers: abstractness 0.20, instability 0.09, distance 0.70 \u2014 zone of pain \u2014 concrete and depended on by 29 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"da55239790ceb56b77f96d8292c3c722070a3d1a46a1bfbd6dae172162b48a62"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: EditorDialogService (LCOM4 13): EditorDialogService\u0027s methods form 13 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7d2cc9d8a50c4c15c1c4b9c38fae93699876e9d07a504d3e7480e6c96f9a9ad"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: EntityHierarchyEditorViewModel (LCOM4 9): EntityHierarchyEditorViewModel\u0027s methods form 9 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"02947ceeb9a960bc9c996c133268c31a1cad8227ac579b17a5c49b8ec17063e3"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Package (LCOM4 8): Package\u0027s methods form 8 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b8d144ba65f86361f4c593e639214d1ad817a9b81c2114e983c41b82df9a85"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: EntityHierarchyEditorGame (LCOM4 6): EntityHierarchyEditorGame\u0027s methods form 6 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"e79cef8e439e4a6ab29943e90f784019e388a26fb26a5d053faa642226101515"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: UIElementViewModel (LCOM4 6): UIElementViewModel\u0027s methods form 6 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIElementViewModel.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"05d17dc23447825e42d28dc36a41a85b97c3be58038b165c1c2b2449357c3d4e"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: EditText (LCOM4 6): EditText\u0027s methods form 6 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/EditText.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dcd78c933f0690113660295feee8edf8c89567ed246a46a8a13c060bec640e1"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TreeView (LCOM4 6): TreeView\u0027s methods form 6 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeView.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"03ae9ed5a5cdf3b8deca267ef9345f855f80182cfdf7d930ff93afe7ca388774"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TreeViewItem (LCOM4 6): TreeViewItem\u0027s methods form 6 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeViewItem.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"401a524ed68529834e284b8b649d5a77c02d13af01bb2e510927813632c56faf"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: EffectCodeWriter (LCOM4 6): EffectCodeWriter\u0027s methods form 6 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators/EffectCodeWriter.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"842edb313bee8969a228d748763030d1f3db4cdc15ddc860d7d7d2510f184a60"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Command (LCOM4 5): Command\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Command.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"75ba43fe465f8381209de880fed984bf9f2748cb2019333a8c5474c8a45e4bbd"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: UIEditorBaseViewModel (LCOM4 5): UIEditorBaseViewModel\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIEditorBaseViewModel.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de2d4d0f183fe5afc056c18aa3d7c52729f03dbc714b0dac94421e33d176e4b"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AssetCollectionViewModel (LCOM4 5): AssetCollectionViewModel\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbdccd2f34a918623a2b669a3beb5d882147d6f46d2e8ca9318dda6f8816f88f"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SessionViewModel (LCOM4 5): SessionViewModel\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"33185ea2763a2d2c20f9b9754c2ce6b3e460abdae26d6f870cd0d915c8abf8fd"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: EditorServiceGame (LCOM4 5): EditorServiceGame\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/Game/EditorServiceGame.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"166d7410f6cfbaee9951e4a6533edc04681d9f32276dfaf082187017a0d5e6ba"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ThumbnailCompilerBase (LCOM4 5): ThumbnailCompilerBase\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailCompilerBase.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae8775a6d52930cb45057273854cae8a0a6b3f363571cedc84e08cd7adcdb0a9"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ParameterKey (LCOM4 5): ParameterKey\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Effects/ParameterKey.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"45d07f0557d0c97c65789434049b2901e127a447fb73e230317890d99a33b98f"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GameSystemBase (LCOM4 5): GameSystemBase\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GameSystemBase.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d035f7400cfe8af99914fe2b0d790d904fdf92f844719011502c6e9499176ce"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GameWindow (LCOM4 5): GameWindow\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GameWindow.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"378c289e28bf459be7ed98158b2b689c8ad1affcb3e32abf949e7244bba026fe"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TextureTool (LCOM4 5): TextureTool\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TextureTool.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"9886ed886eaa92fde994545c59cb5dd34a4269b41786b07b1e3c3a93608a8c90"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ListDescriptor (LCOM4 4): ListDescriptor\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/TypeDescriptors/ListDescriptor.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7fd725b205081314941b5a1f24caf072d128538309bd36c4d7f3e3ecfba36a9"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SceneEditorViewModel (LCOM4 4): SceneEditorViewModel\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SceneEditor/ViewModels/SceneEditorViewModel.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b88870e70a3bc4fcae7aa07ca8ce7c0c541ccc26be81d3693b257cc502c6ff9"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: RoslynWorkspace (LCOM4 4): RoslynWorkspace\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ScriptEditor/RoslynWorkspace.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf99f83926ab2728aba1995295b2b5601ed3f5b9c6ef2fedc9b5235b9ebe87f6"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ProjectLibraryWindow (LCOM4 4): ProjectLibraryWindow\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/ProjectLibraryWindow.xaml.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0d1e68b3613782e0991e257e58fe02cc35f3cba3ac4679f9010cf64ebcf7830"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GameSettingsViewModel (LCOM4 4): GameSettingsViewModel\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/GameSettingsViewModel.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"173d4a6899f60ba2e2cad823dee3278f0e2c89f3515bb4823fe1fccd84d44438"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SessionObjectPropertiesViewModel (LCOM4 4): SessionObjectPropertiesViewModel\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/Properties/SessionObjectPropertiesViewModel.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"88dcc013c20beb55d513467cf3e1d29166bbaec5e38a642a584cb915a4a2145d"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: PreviewGame (LCOM4 4): PreviewGame\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Preview/PreviewGame.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"997dd0336806dce713d34de66b75656b2104dff43dd200c450be1c41f8fd981b"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: StreamedBufferSound (LCOM4 4): StreamedBufferSound\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio/StreamedBufferSound.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"22aa7a4cd518e675250048c3c60cd7566554f160b630dda4aa319e93170d7cc5"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: EntityComponentCollection (LCOM4 4): EntityComponentCollection\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/EntityComponentCollection.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"975d9427cf81f9cfb59fcb5369b60dfb695872cf230ee6ebf8afa168c125d3e9"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SpriteAnimationSystem (LCOM4 4): SpriteAnimationSystem\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Sprites/SpriteAnimationSystem.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"4be9f1abbcae3175b5197ccc13d6a3b1d0ba2cafa7ac5659c543be0bf14195fe"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GamePlatform (LCOM4 4): GamePlatform\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GamePlatform.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"45b75ee22bebfd82fc7a5fb9312b526676d996951de8e52b05130a14f0734f86"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GameTestBase (LCOM4 4): GameTestBase\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"78f51e728969eb6aaa07ab8957d3e4a3cde728caba7dae174a13da69649c2263"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SpriteFont (LCOM4 4): SpriteFont\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SpriteFont.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab64eeb2ae9a89bb5174c7d06336028b489296e4b1a542e0f6187c2369950dda"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ParticleMaterialSimple (LCOM4 4): ParticleMaterialSimple\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Materials/ParticleMaterialSimple.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"11dcf6a57b1d035790aa8835eca4b84082fce64adc065fa4c68e6cbadebf66d9"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ImageEffect (LCOM4 4): ImageEffect\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageEffect.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe6d69e64925f62ae17c4c069f68692cf5968e40708b3cb3cffce0b662c956fc"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: LightDirectionalShadowMapRenderer (LCOM4 4): LightDirectionalShadowMapRenderer\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c37098878432dd9d7364c594b6f7535a5aeba967f5e1998ceddae47c557374e"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestDirectory: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestWatcher.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"499f163116fbb68d4ecb0c11bc48e8414f02e382cff55eed2c4dbb3f8e672766"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: DifferentThreadBroadcast: Skipped \u2014 Hanging"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine.Tests/EventSystemTests.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"74e14b65d24264ad5fca2e1fe4881e6d76a559ac2b7c8cfc5ea5ae930bb2a160"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: DifferentSyntax: Skipped \u2014 Hanging"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine.Tests/EventSystemTests.cs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"6728b57f52510b7c294d58c7ef2c06ca4cc716bbf99feaeeb0ac7920eb36e59c"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestFitting: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine.Tests/AnimationChannelTest.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"384bf2975fd4dbbf5337f7ee224e9426c7e4ee45955229d8a655aa321800f377"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestPerfLoadSave: Skipped \u2014 Ignored"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"f68aed1749f8abc40d0a7602aa54eb6cf6b9392d31b9ec1970f993c3c4c3762e"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestRemoteSingleOutput: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Tests/TestIO.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e987cda59005633746055a6f7012fbaa654bedca18021e0f2cc4c228c9e3836"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestPackageLoadingWithAssets: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestPackage.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"8145a23b55bce177fa6f81c0f8a9e2120038ddc679361b05debf594728a5a969"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestMovingAssets: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestPackage.cs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"92862ddb7dac8b379c121199b7361f54881b5d49c503c7b6556dd1a3d7dbdc74"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestTemplateDescriptions: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestTemplateManager.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c10273c2c97a0c8ad3fe497356feaf5af07dcd17f3535124340fe7ede95bc44"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CanHandleRequestTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ArrayTexLibraryTest.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"afc04870fd308f3e735d263aa9d759fc607926ae82ab3d2a90354d79070e71ba"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CreateArrayTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ArrayTexLibraryTest.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad3ce7cdb5f426150c5e57639c0a3991829d466b59b97a45ed2ba0189d26e25d"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ArrayTexLibraryTest.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcdc779ebf5c2864610e683bd363b4f6d1d43560e1ded4be0ebf84627e37bcbd"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractAllTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ArrayTexLibraryTest.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"b52a65377d13d6ab43c6257b8e9489d2f96f0cb227faac7bf8e9232f993215f3"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: UpdateTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ArrayTexLibraryTest.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"7900a4deffff35f2c5424141d6b4364ffe483bd087f07410bd50422ec3006bb4"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: RemoveTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ArrayTexLibraryTest.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e674f36bb24281fc7f8766dec1ed0ef154481a765d3b912b2d3271880e4a6f6"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: InsertTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ArrayTexLibraryTest.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e27bdbc0c7c31dedf58079bc760512a48f727b684bb497f25882a5d59b03c39"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CreateCubeTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ArrayTexLibraryTest.cs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"afb6d1e8498d58653fba39cb3f2e06cf584fe2d1ce79266a3607d5bbaa766057"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CanHandleRequestTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/AtlasTexLibraryTest.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"3818e2132f9e5beee4bdb291de24ef51adb5724c67e5a89f65fb720204af7f83"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CreateAtlasTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/AtlasTexLibraryTest.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0ba7910bddedeaebb773d8e2c341bc29027498833a4d25264768ba8c504e796"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/AtlasTexLibraryTest.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"79742a3281df016047fbf1518c5dc1d30e5550e0cddb884c362d01ac0f2ccdca"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractAllTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/AtlasTexLibraryTest.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"79f0c8e48e7640e21e04d3813bd70f7116dd2fddb4f3f2780b1cefbe3cda6038"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: UpdateTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/AtlasTexLibraryTest.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"b29fb97b3e65e35d0828c7828384ef84fd4bf2a16a596fb0516ca2bdfd36740c"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: StartLibraryTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea68c9f614e62502b2eee7c897fa373e52c43f9be434f4183fad26566a63f12d"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: EndLibraryTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c90dc2991480ce9704e4dce3fc70bc5b3e4632614d044e982f2521c203598cf"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CanHandleRequestTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"751955dce833cb8b8e4c8163005278096b5be1615fc7f7a39faca35583b579c2"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: DecompressTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8cdebeb9f7cc7d3140ad9816215c52336a08511a48735cfc1ecca101ed8f1d9"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: DecompressFailTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1ee7c71c8174ebfd28ca9ae277e8aa810dd0b9f1bed85b64dd869a0930291b9"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CompressTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"1193e1419b3180147f139eaf4c472ff898528a7952b2170eab4840d1ec02d76a"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: GenerateMipMapTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cc3bf2dd80947a4b15660b7493d2b1653f400dfcaab27e552f46056bdb10406"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: GenerateNormalMapTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e8d2ca857e6d9cc21475cd3f48b95068bd1b2af28352aef1dff263bc9b53475"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: FixedRescaleTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eec3ec9572b078b55131ee51b0edc5a01e41b5f0a0643411d8e070b07ba3b04"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: FactorRescaleTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f83c0dc83932034fdbe7b8456143fd809f2eaba087abd1d4d4606ca23d3e03a"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExportTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"c75231627e14ddd68ad9fb1bdd3d70665047d7423ef34dd8f59c9bd72756bdde"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExportMinMipMapTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"183281985835a30a484a4561d92c2c287630ba7536c723dbda826772c86ab474"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: PreMultiplyAlphaTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/DxtTexLibTest.cs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"194dac35b560c42b2c0be1a50192bb69eb36ca5f9c66a6ee9a86f5347e68a387"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: StartLibraryTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f3b2f54d8d936d89d545639f6e63543a6bab3a13507c890a2dc936461044c87"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: EndLibraryTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c6cf90a7f9dc943bb7cfdede3ada173e7a3dee307adb5dfd3199a07951030e"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CorrectGammaTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6cbbffe934a4cea41fd04e07f2290f0e9854f8832d975c5d327abdfcd431b73"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: FlipTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"831b6ad925155ee8c58a8dc489e206b248a2ec77273e4ef80b3b3e46a77d478d"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: FixedRescaleTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc9850156653e5e65c9180441654330bfaeb4cea260317ff2275e67bc2589062"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: FixedRescale3DTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fb0b75c61e35f9881847eead7638d4d928738ca09d60d4c47038dfefef06249"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: FactorRescaleTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"2785bea232f7fa738d2e162aa09322aec1f2dfb5a4407d7a5e1f65d4ec7b44c9"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: SwitchChannelsTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e6654d439cbe76ae73b9b489af9c9ce89c5e5f6cc45cae0b9f63adfc4e18913"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExportArrayTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd6850f929cd491627f4141c6b327eb8f76a30408e4ae530692ffd8ee252bab3"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CanHandleRequestTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/ImageSharpTexLibTest.cs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"05395b476d8d9e5009bd9d1b48c50ec9672f06c310208f30ee47a080e9b6df9c"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: StartLibraryTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/StrideTexLibraryTest.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"2db08183bfe080943ef4b22e90c28c230525e5414aa1e124539c5c3dd4e1f7d5"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CanHandleRequestTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/StrideTexLibraryTest.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"85df1fae750d9e0fb9b7db29d9d465ba179ef25819ae4e4deb40f13cb481b276"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExportTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/StrideTexLibraryTest.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c562265f7ae5fecf1c699a83c5d38b720a909198862abf56cf58e0f362b89b"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExportTestMinMipmap: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/StrideTexLibraryTest.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d8d09100702e558ecfbe685ca8d81642ad1a8723e5473b7a087e2aa6675054c"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExportToStrideTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/StrideTexLibraryTest.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"74927045d9a3d0137d829d195442c88e40bb86fdd15a29b1753475c104a582fe"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestEquals: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TexImageTest.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"009e95311f04d262d7de525e11d25f04398d287f290d1ead24de3793b0e3dcac"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: TestClone: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TexImageTest.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c8d5d8b99eb834db1b9a2613936d74ddfbb161693784f0f35ee00d2e386562d"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: LoadTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"10ca9b3e5a4607259de977545ae9d71f1e250494d18fbc4c298f5583051d7200"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: DecompressTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9db4414aea5c4c553089e2fa320e948fca787e192a10f3ca9d3673b4eca2597"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: FlipTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8517098762b4b3743a92f83d0ed0a136b256e1fc77c4aab84d3e78099a74e13"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: PreMultiplyAlphaTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"89be2ddafdfd5df086b0e67abb57a3f397a46e56498f436fbecabc8d9e5b9a5a"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CompressTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"c363a23e81cba6edc7ff5dc0eaf160980719e5a784ae88ff963e511664d61540"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: GenerateMipMapTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b68acdbdfd0d8d56d55d1533c1334966ad27bbe7c4bee0ffed3e95a494e8652"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CorrectGammaTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb30f179ebd27dadd11bf417e990872dc3d0a7e879c0f8f1a69457768d9e76c7"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ConvertToStrideImageTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"371362f3c0e500a913be3d2dbca90c54f48679d2c6d50756c8c8d68b8d02fbc7"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: LoadStrideImageTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd9ccc328280371ce6855f1e3b1e1a3861887470e6fa84aec3e46f064e415386"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: GenerateNormalMapTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4c562ae92aaf71adab27d6621be85c0b9f5a292a6a3d0d7abcb06db27ab89ed"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: RescaleTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d673af804cd4697b7a30e13942fcf9c43322386265d35b97bd135b54bab6856"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ResizeTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba86c487c184f644c0dd6881242a11f303bd15f754e019205b0436f8c1b91978"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: SwitchChannelTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5ada1e5fe32ba8c84d2b9c723e1f871cbd21ae2148b46e74da19ae8f5ad53cc"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: SaveTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"cba59488bc168824f965a635caf0e70f2d59b1aef6b94ed90499eeb3129de62c"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ProcessingTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb85c3484456a8353ea7c2fe0d2cce37f9649ba0986c8ea4872ff4b5fe41ed72"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CreateAtlasTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"37b225b87b6a3b5be1a66120c59cdf899df1a52b0361ba7d2561656168b4a1e2"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractAtlasTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6e1cbd4d6c6aecfc93793d48db24ea3948fc4cfc803775473ed94fe987b3c0f"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractAtlasFailTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"29fe91086a41125ecbf418c7fed11a77e224da96abc7b46b264cde0a113c6887"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractAllAtlasTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db5b7b8c581aeea0360fb0d4a309ca86c9b8bebd56ad5ca61e0aa986f14ba49"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: UpdateAtlasTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"01ecad4d55e4b2eadcf6f95a292dc95c9ff120f76ae0d6ad33bc838ff220b55d"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: UpdateAtlasFailTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"607453478b8830678277c2099d9692f5830fe4a347cb98c8af184e0a81dc7262"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CreateArrayTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed7d1efddc3cc81be2679f6623ceadf844ea2586fa630c7da19cb4ec3d5b5ccb"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CreateArrayFailTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"673f9d973904454f2eb782cb1635b7b6047c928e1a9810b648054746032f5a0e"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CreateCubeTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"4820fbc93db53c66760ff449a0c0767ab675c50e9771440c05d72f7b1d5615c6"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: CreateCubeFailTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"4781e470999c9f58814f418512a3050374233822e3de7800eb20d0a5011c853e"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"645398fd49c6cd3558c165f10e8eecc5eef3d7fa1fc348793fdd197cdf5705ce"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractFailTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5c6f7a13b7aee28d9806cbc69c0b8de8c004f94cdbbc4c88e92e804dd37f792"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: ExtractAllTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bde7541cd7a1d17d1e5af123ebbb9a2e1ff753107a5753ff2696c095103bc53"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: InsertTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed99c4b34a8c60272f639e50b2a2fcf46d3218ba93405659ed680ece942a3eca"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: RemoveTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"217551385e1d94da6828176ac48dc58fdf101ffdb8e805fd709d64067bbba134"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: UpdateArrayTest: Skipped \u2014 Need check"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tests/tools/Stride.TextureConverter.Tests/TextureToolTest.cs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2f500214c18222d0a64ee52907844f66d7f14b7415b9b39d5274279d05e5d5a"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): Finalizer_DeletesFile: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/IO/TemporaryFileTests.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2345b724178acf06a24c138af83f610c6a35f959a2a20a238ad942cd511d111"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Forget_WithRunningTask_DoesNotAwait: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/Extensions/TestTaskExtensions.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"060bfedc69f52cc6817a65262326eb128ac3fdf8ddc1385a7dfe4912ca8764bd"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathHasDrive: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"f60902e0b5fc047d3ad3edc6c965891eba4448c1cffaff47db1cbeced7f152bc"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathIsFile: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"38d6c01343953a9c67be7f4331cadb12972293fc40c0b99a571889e030f9ec6e"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathPathType: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fcfa5fd0c49cf3bbf7d8a3805bdc381acf778309aeef3347d86db155b32c6f6"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathGetDrive: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"439bcdce17999c87b45c66252d2c136375c3b2033030594d28cf041ed5757ba7"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathEquals: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6e0c2c47a2c53ef3eb5c9057fa082ba5c034b637ee7f01a09a78c0cbf2f25b8"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathGetHashCode: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"4177ce8b66f3a29acd2fac3d16bc04e97666eb0d8085a6f51613f37c44ce1818"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathCompare: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a29c7e943bc54361edb065d849a8c1de9186c91ec42d310d45ca5a5612fc433"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathToString: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e4490044ebafed226a3d6016fb31325b7593475e4888bbc37fade15e2954dd6"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathToOSPath: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"3643ef6b390f0d788e81dd16c20ed231a1427450232a824ec7e5a8b25534c9cf"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathMakeRelative: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b530b27382a8ca3b638d65138b9811faaa7049a13aec612c5e2484d301d62fa"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathHasDirectoryChars: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"308270a914bee25f80b053a43647f9de6ea79985ef9ec1a55bcb2a137cffb9c8"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUPathIsValid: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccffdf6b56353a0284f56a602a0741afcc42afadac7f5490d1cf4d5bac83e2aa"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUFileGetDirectoryAndFileName: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f16704fe546a09ef1bc7ba7aca6aec142772f7019c4b8b203b86052bd1f09ab"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUFileGetFileName: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5d14cca5a3993e271f4d7548914f79e27270c2b7509755cfb2730612d8745a5"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUFileGetFileExtension: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bc5a42567e4f1c9aafe4ff925fd75cfea4755b6ad1c30b1b67b4f549867fa8f"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUFileGetFileNameWithExtension: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"6599c39a56069a3c119cf77f94c4bb6d1be33fe8fc882218b8a0f136522e9faa"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUFileGetFullPathWithoutExtension: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"24f427d6631c0062092c518553cad8b9c23efe84532db11aea445e595486cc18"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUFileIsValid: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"35aa13aca91c6b43a86d26010cd2d1da0398ea8d9b8b27777d21c53e28f06937"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUDirectoryContains: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":475}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba59bf20b26c4b2d233cc062e4ae273a1f2866ec5ee0924666889971ced3fe7f"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestUDirectoryGetDirectoryName: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4efb778acee7574642487b5e8f82dc3e08bf722d145dceb1b70064c6307be35"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): TestCollectionAddRemove: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestAssetReferenceCollection.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"c78dfa4c26806ec9759923ee4af36ed20d04eab7136e1da4c23002c1e7c87baf"}},{"ruleId":"D11","level":"warning","message":{"text":"Test reliability not measured \u2014 test suite did not build: Test reliability NOT MEASURED: this repository did not build in our analyzer environment (a C#/MSBuild compiler error), so no test ever ran and flakiness could not be exercised. It is excluded from the score rather than counted as a defect. We did not read WHERE the failing diagnostic is, so this does not claim the fault is in your test code \u2014 a repository written for an older SDK band can compile for you and not for us. Run \u0060dotnet build\u0060 on this commit: if it succeeds, the gap is ours and nothing here is a defect in your code."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"daf09aaa4e14533ca5ff2442790c6867a248b3a07dae410d48e7d6405d6fec30"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs: sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs changed 14 times in last 90 days, max complexity 66. 2 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9cfb0e0422efe34e194d5e3f7293c988707b6364456105a4fafede1ae1943e0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/assets/Stride.AssetCompiler/PackageBuilderApp.cs: sources/assets/Stride.AssetCompiler/PackageBuilderApp.cs changed 12 times in last 90 days, max complexity 59. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilderApp.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"54937acf8f84f601776be6ae227fb01167b9fb6a15d4395ddd69392bb6499a7f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/assets/Stride.Core.Assets/PackageSession.cs: sources/assets/Stride.Core.Assets/PackageSession.cs changed 20 times in last 90 days, max complexity 31. 1 of those changes was a fix/bug commit, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bcc93e02e2ea93d11b8f66eb59acfb52704e9e830657eeadda5ad0cf0c08382"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs: sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs changed 9 times in last 90 days, max complexity 48. 2 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dda5d4a210972e19ab69ac58f6739529f14754314596142501760bf71c0ff59"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs: sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs changed 13 times in last 90 days, max complexity 25. 3 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f692466bdc54227edae5335e00d9f49f5fc421982bf6fdef4313615d1974b05e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs: sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs changed 13 times in last 90 days, max complexity 23. 3 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.BuildManifest.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"40493c3585d7cc4633c92fe5b43211f77c0f28faf3942b3ec172de0a555dbbe1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/assets/Stride.Core.Assets/Package.cs: sources/assets/Stride.Core.Assets/Package.cs changed 16 times in last 90 days, max complexity 18. 3 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1716d81fed8275f4ed5654b2bcbfc4a9aaf4b2699ab1296d8b51bfa1b9d7553"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/engine/Stride.Graphics.Regression/GameTestBase.cs: sources/engine/Stride.Graphics.Regression/GameTestBase.cs changed 14 times in last 90 days, max complexity 19. 1 of those changes was a fix/bug commit, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1c3ca1a126b2180a19369a434913fb49ee7cbe05a6415baecdaa55454662eee"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/engine/Stride.Assets/StridePackageUpgrader.cs: sources/engine/Stride.Assets/StridePackageUpgrader.cs changed 11 times in last 90 days, max complexity 23. 2 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/StridePackageUpgrader.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bb5038b56984efbb43364e5fcf0f6a9490b980590bc0f3c74187013bfd2dafe"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs: sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs changed 6 times in last 90 days, max complexity 37. 1 of those changes was a fix/bug commit, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d8a4fbab1c96d6a7f1f66752d2bd79ab080d0bac9d998784b4c9cfa45a0b3ec"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 35 significant file(s) lose their only recent owner: sources/tools/Stride.TemplateGenerator/TemplatePreprocessor.cs, sources/core/Stride.Core.AssemblyProcessor/SerializationProcessor.cs, sources/core/Stride.Core.AssemblyProcessor/InteropProcessor.cs, sources/core/Stride.Core.AssemblyProcessor/UpdateEngineProcessor.cs, sources/launcher/Stride.Cli/Core/StrideVersionManager.cs, sources/core/Stride.Core.AssemblyProcessor/Serializers/CecilSerializerContext.cs, sources/shaders/Stride.Shaders.Generators.Internal/Intrinsics/Parser.cs, sources/launcher/Stride.Cli/NewCommand.cs (\u002B27 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d8b3fb16ef9afcc5f0ba87213e7dcf8c6df02076a751814cfeb7c4c6a604997f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: optimization: for nuget packages, directly use sha512 file rather than individual assets for faster checking \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilder.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"91f868bb94e004c2ccf2da865f7065edb1316edafeeedc1da07fe62bc02273bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Big review of the log infrastructure of CompilerApp \u0026 BuildEngine! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilder.cs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"409a15281bc2bb3003c9c79c473e8d8e217ad66930588068bf324102cb1d0fcd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Big review of the log infrastructure of CompilerApp \u0026 BuildEngine! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Compiler/ItemListCompiler.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd7465e3c850c3d2d86c09a0e49eff5210532462eb8de680ffef2111380f14ee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Big review of the log infrastructure of CompilerApp \u0026 BuildEngine! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Builder.cs"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"c47108f29e35ef6bfedb1e5c5ac5d6a669a199fccd82a1cb9eb9736c55ad19bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Review how costly it is to do so, and possibily find a way to restrict what needs to be loaded (i.e. only app plugins?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilder.cs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"b264362ef42e27b264a1f2cea7da379961a51d593f10b7edc5484567f1ad757f"}},{"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":"sources/assets/Stride.AssetCompiler/PackageBuilder.cs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"da1bd7245e71d0701ff482d0acdc466bea1c4dd668262f582fe9aabea256cfe6"}},{"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":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"68c0373943a20b9fc6c4d5b9d1b8879303a43ec144fa18a0aab6493c5db4d1a2"}},{"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":"sources/core/Stride.Core.Design/Threading/Internal/TaskCompletionSourceExtensions.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"32fcf177ad21bbc36c2df3a31cb62205eb833dd8c1acaa49d96c4d4cfa14e02b"}},{"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":"sources/core/Stride.Core.Design/Windows/AppHelper.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"50a41599a7c05361cd38528e0571c8b558cfed5e302a504c67c88f79937203e2"}},{"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":"sources/core/Stride.Core.Design/Windows/FileLock.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5005ab082eab604b7d94a497c1029870a3ce0169c14939ec278cd8f5dd67a95"}},{"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":"sources/core/Stride.Core.Tasks/LocateDevenv.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"c21b36f56ddd11eefc1d2b825aab8ca6cba2b00d19f6008f543a33e4f747bf92"}},{"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":"sources/core/Stride.Core.Yaml/Serialization/Serializer.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"d84a4ec0ecfa546bee9be348d9e61f0f37f9907ad27959fd55eed878b3d4f0c7"}},{"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":"sources/editor/Stride.GameStudio.AutoTesting/GraphicsCaptureClient.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa6d58e7633635707d27b25d63daecb81556f3f81dbbcbe182d5320dcfd9a94"}},{"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":"sources/editor/Stride.GameStudio.AutoTesting/Program.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"4142242d5dd9b2ef33b66285009e025d13a6a4269c6a274ca7f88dac146574a8"}},{"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":"sources/editor/Stride.GameStudio.AutoTesting/Program.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"d59a57eba697e36d83aa13477a51704144bf565534f1d846af4f76bd58309d19"}},{"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":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1232}}}],"partialFingerprints":{"codehealthFindingId/v1":"3840469e736e7e439d8afab1a8263855bb931c0b28e18a3944cbe8d4f2cdb5c0"}},{"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":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":765}}}],"partialFingerprints":{"codehealthFindingId/v1":"32ab0f194e84f84bc4a0932f1f5b344ae4fdc433536680867eb228cf242069a2"}},{"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":"sources/engine/Stride.Graphics.Regression/ImageTester.cs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2fe847db834ce064142550d2d337d69d5b5330b8af56798fc2b937dbc3fb79e"}},{"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":"sources/presentation/Stride.Core.Translation.Presentation/MarkupExtensions/MarkupExtensionHelper.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"7218e9d264091df085a10a3bf6c56945935b91d2e04a6980e055341f8cd93e43"}},{"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":"sources/presentation/Stride.Core.Translation.Presentation/MarkupExtensions/MarkupExtensionHelper.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0eb5c42db4e6437e0c9618909a35ce84da806b6b6ab4852da1cdea7261bbff4"}},{"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":"sources/shared/Stride.NuGetResolver/RestoreHelper.cs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e41d213d0792f010f1c759ecf2198241a98c1ba1b42d41b6d8b25e44a018983"}},{"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":"sources/tools/Stride.ConnectionRouter/RouterHelper.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"25950709d8613b0a0619e4e2cae0eafb49eacdb5c799c00d9f719d48960d2980"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this is hardcoded. Check how to make this dynamic instead. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilderApp.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"df67c869639b59253e338abfa1794c2192b42028588cf97a4a14ac80159588e8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/PackageBuilderApp.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c161f448aad41c3f0867afeea03018165056b709627bd6dc622d7505b94ccc9d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"96d0741b33f3e019317e5f8a18e638234956390f28e683313c5ec5d4de2c5fd7"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"aee768d81affa4879962152fb5da7b13f63a2285ab969713fd8fe13fd174b14b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"968731616b353ad995d60085b8a6771ba878f527e206db22a576aa1d6a80ac9d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"40132aa78b5954cc0078e33eef11b8ef945d0311767a6b33db57ffcbcf41a47f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dae330e9c4257193f856d25f584ae3b3982b97ebd3505b2a8cd788ff00d7466"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb6900262ad83e91f25d3a37485f41d61ad2b2dbd8ef12fc76043d18f4e29375"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b81641f8ee5e807b82301bc308fc3b735326a43249b4055892d5d586062e53"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"192ddd5e64f2fa816dea18f2de8953b9700768a91997613816acb81e648e0ddb"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":680}}}],"partialFingerprints":{"codehealthFindingId/v1":"e279f4c9f1e70585074da37f145472b98fb78a3884d9f8ed82241d9656c775f9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetCloner.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"62772d0abe9de49199beb4d3ac291fd0ad853ddaaff577a7c129f3e7462e7bef"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetCloner.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"1307c3cb30c76438614cbb78ec8dcd6572d1d8eae92d89b756a64f12f56d8968"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Packages/ProgressReport.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"05ac7be793b51ab1514df2080cc83b2f240d1e54bb21fd71804e4b0435cfb09a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Packages/ProgressReport.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"69288824d4f0368dd0a9f40404678d5b9040b54b781aadca025f36cf306b3421"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Builder.cs"},"region":{"startLine":655}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec924f9de75a2e341fa74654f9e30da0e941039375b2dee8b6d9a1d82250fbc2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/CommandBuildStep.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"954cf0096cb81a24f1c5f36dcfcc199c778accce3566c9632a62f372d99517ad"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/StrideServiceWireSerializer.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"927bb3d4f0faae769af3567d2c9d6de29a0762da4f3df63ec959e29a40fcf44e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Windows/GlobalMutex.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"b125b373aabeefbb35dda9c2f9372f62bf481fd2bff8fcbe591afc8b9e57e966"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1505}}}],"partialFingerprints":{"codehealthFindingId/v1":"367f397327d6ab6b46caadfbbfa75db3084deec960ad0d2c446683da0b91c3a3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Collections/KeyedSortedList.cs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"782aa35e6701a14f95397c18fde8c167c9d4f05932bd7a366b57efc2fda7b515"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/EntityFactories/ModelEntityFactory.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0c787078832bfb5c92cb02eb84eee11479f18bbb39e4e8f1b2f1c267f5dd78a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.Diagnostics.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"87dd8fe9037166179693d5f5b0f450475bd9e4fd84d5d74a2b257c266aa5d6d2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/AssetsEditors/AssetEditorsManager.cs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3b40069feddbc2348271e5256c226d1500d550a3f147781fa787cdf71dc1a79"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Materials/MaterialAssetCompiler.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee29308d6d936e75c3ec70b2b5bb986c9ca3c9df86596c2c64e5424afacd094c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterProcessor.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa188aaca947d4bc93c6256dc835b6a93442b235e7a7a8aebcbee1663a92afc6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioListenerProcessor.cs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"0350b7b108568f80a6f3cfbe757315552d4ef965560d97c17c8fc5032c9ebb40"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"83e75d6a5b7d97fc7ff8ba85e880cf0e798a1945d7dd64c7d924167a0621b073"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e8bfe4276d2ffb9603d20cee6425168d0f3953208a3a3ee164a49d7edefcbd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"756375716c7e54a3375f0fc294fb1fb4099fce53fe2769448dd1169e0b268ac6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"4af0b18d42b6edf21140073195abacb6fa33762747eaa97726bee894103b7a72"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0b4bfd72bedfdca6179ef01dfca91e6fc1f5132df297da4627eb5b1fadd7c18"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3f9e947a0bc72d6bb5d82c1fc787ee47884885da863a86c1880d6025eb612e3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6996e314cddf8366202e4fb6ef56425c3f6318f1bd6257cfc3e11fc582b6887"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4dfa7cc7ba9c2a66e9dc6983dfd9dbca6119c16fdca1eda0899f1a02cb19b11"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6658edf41715a59e8c69c83300047f63adb5151579e9abe3576c215b4d4a63d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"26602fc926a59780da60ca7798b62e2967f5fb9e3861e350c1089510f36fe8d3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"4865a44367fde36496caf2533e3a141a2efb8f38ebe74b2702457f20eddd74fa"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f0221ba8242b8d072620ab5ceace9228656502f1ca6cb39cc2b6749830b45ac"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bb6a745ed1a41d075c020c333c497098e2228e61d9517038b7cee5fd386dbad"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0148609d0f6985407f09c449022ffd600ad64ec0c5d9ec110729466c73b7533"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"617fe54dd7143d939296da228ec1d57733ea06921ecbc8385f78f5c686c9be7d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f7d54d8930cd33765812c4b55a082027d067e82e056129dac015f5caa088279"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6c116675467c7e448259c78965f076b7e7984aa0cab4a0e4f85286992975e27"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3a8c0f25f29aa3043236293d52320d7d3c06ba0d5a5e645240166c7613ee554"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"72b363d1aa83f98d7ed7a1c33d0b96bab02e998fb2a116d8c831bd35dcdc671a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c8db71fdb9037ba1852b9e182cd7707aec8567092d35956729489556eaecbc3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ddf43d528fd61af3672e3898faed88d3ea20f8c8675431939cf2d200d14011"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd5b4f8a52a7241e5fe42b6bf66e74abe2d6b8b2ede4a372a86f94d1c1e51da5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f0a1aac029afb83d703d6c4f2ad58b32e0fa92c8f96916e5ff0020c8c90e863"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c0380aef7ff8631528570c2670e80bb4e4036f9d00e1aa976df3885f5eb1a93"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"17f73241e43cb88a28da1f63a32c523f6f8bd769ba4a9abaca0b3a9eb5f85869"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6ad2307c3e0fb023d180d4f3f4f305f338519901111ddcf054e8cee9ac6d8d1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"125c81417a9f3a06f1610085c5873064e82ddfe087e9255bdee7aa5f88b7a198"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5ca803695f24aa7d26a25c54adb0c35eb27c6a56de4d302e4b3724f173f8e49"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"43f488d1ad1cf7a4b9c2107074549b9a860d7a85859554cd347707343a0486cf"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"d792deaa70bed82b8a33fb33edb63eddf4dcdcd46ea50b3504d849083a966b56"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"740713fafc7673435877b01d77f1806a365e640a74a9cf1bb15e9df48b0abeeb"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"52920a7c435487af7019b80fc56cc3a575894b201c8a7f1b9d38fdd9ad009b92"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c76c59aecfb0f77c38490529191bf9a97798384f3866def4714382ea30a6a86"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2d48ef2a9c18aab78d75dc65a2116782a957c99df2fc7fdf82c910f8ca0a7a6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"4da8a7927e56b24256f8702eb40d9cb4a2b2beb76d4ace3b0dc65349f0590ead"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Design/CloneSerializer.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"efd2312a71a828c6a700bf5109574907e96f13817404fad7779afe3e32d53728"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.LightProbes.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef37261f0d7d7525c11ffd22607412296377f862f6b038e27f140f7a5022aade"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea75686ba59072dd05df8a4853c6be66322c087584a678c2acd8679968e37f67"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests.10_0/NextGen/NextGenTest1.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"56f40d27a0cfec33b7b4c9a15ffd12ef6a33f0ea27d830cf7ea132266eb42f97"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests.10_0/NextGen/NextGenTest1.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"9050b2557d41f5a3e79627fd53458072c62528d6953ff86666fd0ca51236dc08"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/UIBatch.cs"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"67443c4a1520052361ed71aa4a8dec6f0849fc9031d3ffeaa580d92f3d24c3a3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapter.Vulkan.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2ef357c78b2d6585dbba7e160472beab6a13f161330edfc25005dedc73f60ba"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"e159a0ebc28eed1d93a30d9a9a48ecf7498a02e7884595fd14ba6eba2bd26d00"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d5154593c4252d7806b27e2e6e31d236a165ba4d1d59e60c9728b524cbd9cfc"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aa513f06b8cc3d9da0793c4308eaed869f5330628bd03769a4abf16e55d0f6e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1c350b97538c58d8005bd6aeb3dd17ced46646172d416e880638ad4e08f8058"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"430548265d9434da6c22bea4321f60b3a93795b6c93660c73fe5f3db9ebdb693"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsOutput.Vulkan.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"125a39fcadd0b5e7dfd5da2c9e0d2e399d85d11d57a6902e141d50a23bfed415"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsOutput.Vulkan.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc72f5862ff28aeeb2e1f0de818466fcab1722373e5e2404ec9e18cd1ed41d4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsProfileHelper.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"83a1bf8579d78718ca80fd9233e3e3abe0519c86775b5d4acfbeb2cf39061436"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffc88804b7986f298428c8189ed15cad3448cf38d81743b44c4db594debbc37a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Components/ParticleSystemSimulationProcessor.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcc4888d9dd2920861b55927d54a0f997ef8ef6b3e5ad632355aae7b5681d6de"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsDebugShapeMaterial.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d7ed80d28ce1199fad677236c330feb325adb92f9d3003e3e90ec47d82f0a46"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Model.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fbfba81e2306c415c34bfe9da40339894c6da6677f516ce9abb81b203048d96"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shaders/TransformationKeys.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"8508cc34baf1c47e095504faa9ca50f3bf2997c03a458a33e2a82471cdc86874"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shaders/TransformationKeys.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"337f3ff2de1e2abcfa6d036ce95d3ebc8234bdda1b660f39ffd12a75ca6cd6c8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/PropertyView.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"48e4a25e6c04cacc91a193b3c2d6b69b775117f80de8788f3dad615df3af8120"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/PropertyViewItem.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"d600305272de99308bf1ae650c743e9213076e5b3dc17064258d5e2f8592d6e6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/QuantumConsistencyException.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"af47b223dd2e379075c023654bb77833e3a216cab7ecdccbf7d0d35de5b94cc2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators.Internal/IntrinsicGenerator.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5b0d64abc089bdb12b1b3e55fc7578f39dd72026ae243e3f4a6d5dde2dc24d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.VisualStudio.Commands.Interfaces/TypeExtensions.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b10d72f0eb48b2cfade86941a9bfc9700a3a32fd6627766b3881edec971763d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/Program.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"02925e8d8d54c15fa11168621371a133be14bd0d610b915e117222a0244a028c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9fb89adfac72eb76db2e7ca3a093227e12657f65a6c164bf9e9a2380bc3b715"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"1597b0192cc84cb376dd40ae49fe0ddac6a726bbc197d902c4e3f9dd96af19d4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":699}}}],"partialFingerprints":{"codehealthFindingId/v1":"d26a4c2a3bafda8584236646f5579e5afdaed1a1c356166d36fb34e661143b69"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"f062d0e8c635dc9aed389e60f354f2f8ed236e66b5cf0c56c45b8e8959cf3fa4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/GraphicsCompositorAssetNodeUpdater.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb1cd511a72181f895514bb8eff50a48f4392397d986d447987a3ccac6ac1c0e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"d842df7c67669660118036a58b8b92216277eb2076c098e72452a398f22c2009"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"074cb44fd1881b7d98a514b0ef3b9da0b233c3e0960f94fb563b9aaa7598b71c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailBuildStep.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb26da50e3817aabd3958e80fd2dca092596702b6a86d6e12418b47b5d187261"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Materials/MaterialAssetCompiler.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"2468a93f9c4547a2a2c0a999cbff8112ebf52ac3a3b51d1b6a04dcf340ffa861"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterComponent.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"92e754e3ba26b4a4c986375231a04790eb6c3a1c57419d7c357258f441584037"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4078f455e7a28e9cd979b091f2e3ac75f9585392cd627d883d9e324240dc00e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d90d30d0a92163d642ee48a1b20981989fbf5fa9e1d5b002242cf310f6e9e7d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a2cc6a9fbb5d83edc663417431a3f604d2d6a46feaac212853c514f8d2e26cb"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fb7d77817a2432d5de32ce56a2a045cdbca28637d3e861f3307f88e0a7edca1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"16047bdf9c6d9e75c8f877cc8d5a6738dfe2a658d47e08bee6c21192a7b0933c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"a66d50923d286df2ef8f1ae69cdd74a44e1797d770e2df6669d675153de4674d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"972910b3744122e731bfa72293b9e1ec0639a994e4bf8f0e29d9c3dab9d8e6d5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"83155328af0e228c6ecb54baa2f5801d6820125d4cb9440f857717d743688cac"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6485f78479287a74ce222db212d6022333e0b783cc42cbc9b929d281194ade8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d66b11fa43f64e8199e9040228c6544d3eda33679bba6da5a0bcfd954adf328"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2d4e48633b02d447e755581629ccc3ac11444536327d3338fbe7808b24f175f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b77b778b011c2c064934197d3f0d5d067ecfd4885764d75178d77ca64c29427"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6e1bcbd452ea900506e71f2b1bd4670aa2f0cdc6254b5bc6378344941ed5001"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"d31b112ba206315d83a22984ad05b25383fa73a09618ea98a1559f75e549eb89"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"b26ab756adba06882927d6079a406d5de302454d357d2afea4415b64dbf095ce"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"e47d93594ab4245233487f0df8fcd1a54d2655177bab0b31c97d387021551f92"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f9f2a623972c41d5cacd4beff2c2c17bb4d0541a753bfba64192f18a55d211c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6e5b31059c092ecf1937983c79a94c9a32ceb3ab01e589423fc1f7651f801a7"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"e05555426245eb202f028e1656726ffe37b620fe064b452201d7804749c29386"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":888}}}],"partialFingerprints":{"codehealthFindingId/v1":"420c3e68213fdd7b7c47fe804535570779d6b3aa3306d5bdf9ec0f1217bf8c63"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"995ad66abde42964564cc889501bd91f8a44892bcf4426564fa1bb4eacf9a9e7"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad5edf655fe0afd1dc9816c18efa3d1497d0d30d77c7c7ac02a89b62e0bec889"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsDebugShapeMaterial.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea69c97e803f39e301ee0337d3ba36fed09ad08aea85fcf14f741093f820a459"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"27916fd48033b72a5b7483faccd2be667ac257d2628f8a5b3c067ccc9922ad60"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightShadowMapFilterTypeVariance.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"b14cce69f207d771fa7740a60d5e2672a9c154556c345ee0bccf0b4bcbaef395"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialOverrides.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d9345592c26393ef30ad63909951e51fe15b690de376bd528551b72fe838742"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphSelectionBehavior.cs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"58a9b38a4d0ea7a33855be3a5cd2732a0b92315a96b5c700f77ada7d92f000b6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VectorEditor.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6bae0ef7debb38afb003557d507955e97bee61b51f9a02b97f5291dd04cc115"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 14 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.AssetCompiler/Properties/AssemblyInfo.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce3c59afbbc4579db3a78b496f9691bfd0115ab755033b11c194d513a60624a6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we don\u0027t want to have to do this to detect children! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum.Tests/Helpers/Types.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c00a50137397b2f139c5867a17fc64cdda9a3f287cdeecf0815058fe8d53d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum.Tests/TestObjectReferenceGraph.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8cded4b0c26e13bb042a6592a1bdd5af3c3598a9617f39aba1c877af952d45e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf9d018abbce5417c8ae9fef743d93773c619aa9558f4cbc0ec13d67694e421b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dc28992137a3c9593575404fa0dc3dfa4d1b8fe70904d59d03e74e399f06d8c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b9f1f4cbba89af74cfbba46f4f1ba9c57ce10ee6220937eb7e5bb5dcc502758"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"feba69fe97e92eaf8de724d9d9f7b13856af2423c4d8ef15590508f009ed91fe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"aace15f8169a165e8c590a57d6babcd377a6f7bd4588ed702c9dbc1185393e54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a60cef31043539c8a24afbf8e12b2fc568330f4c92b3ca3981bcea6c1f95493"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"74ae095d7283ee946ffd62c064fab01f23c037e0c65823e6ea8f5e78dacbec30"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c0d24b7daeaf7a581189a979f1a880acbf6c8ef909b5ed83a8e9ce9ef57924f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0faad4fe8698743669002668a24cbc502b6298888de53e3e51c727764ead30d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"05ed0b44e995d0a50cbae81cd2b932575863da37a3de7274bb663eeded003321"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"d877ad67c1b455e468190597c5298bfed11e5713a02169a3cb377cc24959063d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"627e8dec54d8f2cb96521fc1f6ffc63316c96b0092bd1be86fdfd6c340f5299f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bac75023c5d594e21fe628b36629f50453e82e310ae4f84871c47c2911bffcb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ee00c90aae2ff60631b163782d0f0a4913740e2c68ff7348849277b6c9bd1a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e83d65d8a4d8e23cca9a702c947f435aa8a713f67588a56644a68f1f6391106"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"9127f874ec3c0df67e7233737dbb597a786a5d671f6db2d592c287f39c185d5e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6bb1e372a7120f56bed4fe851ff0b2a82754404f948cf406271952c4ea717c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"552bf5983c0d30f298681943a0742737b2fc244922ea28fdfdd808a63b500e10"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb8a75d66ad698d13acd8e0e3e189e959c05d67302e9c4aefb1a2e580e4b291b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf024366b9455155268d39307fce88e370a8590133ea87ddff8b42d2f80ee33"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"2627c71909b3ed8962d9a4fe3db7216030f7a8c5f3e3d01d5dadbf75af01f128"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/Axes/HorizontalAndVerticalAxisRenderer.cs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a41c382b72be3bb163cbd751a32a152411d54c57749a91087925c04cc7c5fe5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/TemplateDescriptions/ViewModels/ExistingProjectViewModel.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"79118b7ee96c05c83ce464b623d6ce2664977013886f090732339c28cc6c1e39"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/DrawEffect.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f5e63b7219fc9e71f1d95536ba4043f0f6bfebc4c51ff1624b088fa3141ee5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/LightShafts/LightShafts.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff995bfe4b516998109f65cbf3cad001fe0b6f26adab41f2f70552f11ee2a213"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphBehavior.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1a70e9d7b3576cdda01cdd08301e27d9b966f5375704788b621f6b6f6890b8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphSelectionBehavior.cs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b010decf78d55ec853fbb1774d774d9dafcb2d47db359d06e75fa8cd21cbf1e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/PropertyViewItem.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef91a1e0d7910d5a15184b7909c416b9fda3c8ec9d4f7caf3fe353e209392ce7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /* test TODO:\n     * Non-abstract class (test result recursively) : simple prop \u002B in collection\n     * Abstract (interface) override with different type\n     * class prop set to null\n     */ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum.Tests/TestOverrideSerialization.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9ea8f652cdb0e7d52b444c114495279fdc8311eff24e58210178ea4185fc8dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: try to generalize what the overrides of this implementation are doing. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"087433e0eb25ce15cb2aa1cac8e4f1b10142c16253a02ababce0d4f51d1ddc32"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this method probably doesn\u0027t need to return an enumerable, our current use case are single content only. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e26b27b0047658a91f9baa3bdc2fe75eae8a93e05480a2607d3f7e49654c711"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this method is temporary! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bf319c4b817de1c442587ca0d6848034660c1df2a20970b79526469102553cc"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: instancesCommonAncestors should be synchronized with existing instances, i.e. if the instance has been compltely removed then the common ancestor should have been cleared. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dd42a18339645ce1885eac567cccf29a2d739505f078529513ea083f1ecb21c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn back private \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df3eb6d1a556aaadfd5eeec43ecacc8bbb4e4665c4815587bcdaad5a1f5de40"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: these two passes could be improved! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"28e4e66c70c4f51e44fb45e3ace20e1f8f804ad108d0baeb3c34d5666a9bd0f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this will need improvement when adding support for Seal \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"22feefb1696629e3c36754374e07ae09a9456b620e81685c12fb9a226c5246e9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this method is should be called in every scenario of ReconcileWithBase, it is not the case yet. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f93f8fd05cf25ee14be611283f4df567a18101f2d4f967714f999b5290e12b5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check if the cloner is aware of the content type (attached reference) and does not already avoid cloning them. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bde41d992e090844719c777b663ff2b2f1a8d64010e9875790cb9ca4aacaaf9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO FIXME \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"5292365bd6d75399b4020e1f1fd3d15acf7be39582a53ae2146b9a97f553f78c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can link only the changed item instead of the whole collection \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"c760ed5fbc282d31365febcc29b097e2db9b95555363bf6f95c36b7f23648572"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What should we do if it\u0027s empty? It can happen only from corrupted data \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Quantum/AssetPropertyGraph.cs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8fb2cbec3823ddbf5f31594785fc535e0d4bb6803f096bd318f99cde36d5dbc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if ParameterKey is written to an object, It will not serialized a tag \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/PropertyKeySerializerTest.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"602855746211343a5bdf561314d18af0291bbb84a714eb2a02db6dc4a004ed62"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if ParameterKey is written to an object, It will not serialized a tag \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Serializers/PropertyKeyYamlSerializer.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"5863cc5cd20b6430119292206c5eac11cc62781bc1bad964d23750ba6b8d4d17"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if ParameterKey is written to an object, It will not serialized a tag \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Yaml/PropertyKeyYamlSerializer.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5beec18cdcf62465c84619c2435c306c55de101d49f140d448bad1aee94aea8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if ParameterKey is written to an object, It will not serialized a tag \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Serializers/ParameterKeySerializer.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"94a9c0194c5e73768021c8910bf30659d4bc769374bab01767a161be54b417f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO test to be modified \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestAssetReferenceCollection.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f252a99f76db3b17b4b7e284992e3ac183720fb7eeb20518472384bc983189"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8625 \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":"sources/assets/Stride.Core.Assets.Tests/TestAssetRegistry.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"dacb8d8415196a3a7f4601ec7b4287e8c1bb04cf886fcd77701f75c0655c874e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8625 \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":"sources/assets/Stride.Core.Assets.Tests/TestAssetRegistry.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"610ad808a087b7cfc8fba1e480b9f60a04be0f71a9b028b7e4419d04a8cc6a63"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8625 \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":"sources/assets/Stride.Core.Assets.Tests/TestPackageDependency.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"15d1258c33af8b787e411538d75d1f366a051c8710e87f4706a59f6cac8248b0"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8625 \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":"sources/assets/Stride.Core.Assets.Tests/TestPackageStore.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b0962f27e5e1e7d119969bb68195a497823244b4e16bab46bd176beec4c50bb"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS1718 \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":"sources/assets/Stride.Core.Assets.Tests/TestBasePart.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed3be4ef8f125d44cca82f966286e99e5d2179045c593f57ba38c08bacd8812a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS1718 \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":"sources/assets/Stride.Core.Assets.Tests/TestPackageDependency.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"b74d7d8bf122d723c04dc781dd6924b86650df8f97dc491f4a3af2783fe77da3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 12 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"858ef8cbc0a003315afee733942173972269e00400e3eb2da04a465e9b99dbaf"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 12 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"df6dcf85bcd9c5e34724635e92737f95e0e7e1d6c6c0129941bf747841e06459"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 12 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa324a38cd70a2c9e4c200780d27c74806636801337359ce56a837713f43a581"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 12 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles.Tests/GameTest.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"691b5f805db305b639c25ef9fc7d145a2b294e2bbe53fe28cb6469d1838a5cab"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 12 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Literals/LiteralFloat.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7e14a394f04d554fbb898bb42185e602af96c003f3bf9abd393861d38c729f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7fc57e38a3f644e09043523992493049cef3a9c7303e49ebd6b3e6e79b1542f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e399a12737fb8ef16bfc42f33ad9b62567a8771e118d280a9e194b07152d766"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"83eaa3e596a3792aa0ce60480e0284a3b74450b2cb1e09b70fe75c19159978b2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"a185cc4d4b8f76482bf938d6ef883e28b87dea4f3285314714fb1cf3c37254cd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fde83a58bb4522b5c541b93131ae80c845e8ab21a82577be7f33bab817de2f2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":612}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd6b9d199dbf278abf9ecdd18d0c458ebf4585520286804d0af16b7d3cdae5e6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/BuildDependencyManager.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcac6e08f7c91eded4c40b1450c80c5e07ccfcfc34d14e5624606009113497c8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.MicroThreading/MicroThread.cs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e66d0042c67876b2982fe799bca6595d2498f9cab5d95ebd5423715ae6eb508"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/EmitterTests.cs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cee9806997c2bdbd1e69e28eb0cd083a43e0ec02fdcf1936504375fdcb2d985"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5aff73793fe5def89642ee9accb458a29c3d133817d3fb13dde3fc9307ee8cd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"31b3e6ddad357878ab564aadc416c67397edf53d1af944bf27b3869c383447a1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/LaunchProgram.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3b5a753b9a3e5ab0a4129174d55aa818f3077f1b944fb532e64937a8da04576"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterComponent.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"e69697baa19c05a22ebd39dde81fe9dc9fa5493087dee39b9c46df9f24900228"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0aa0889ebb432c7253c873b663b8c5f55738ce5cf38372a89d47ba6613ad4b2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"1499c5f0c49d56c59b13f192959bfa3454d61dae686e5e22ab74c0c393ebb48b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"df1f71831a5c739bbf606a2850e036eb75bfe3a777df842fb176080c8b83636f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6cd57545197a5e19e3f322a9d651f2afaf81e2b884978f42308f01476a8eeb3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"936065b69d7341bd6e704cf61c5acda897703dc29bf095e8e8f4d8d650ed0183"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ffd849609db7c4b7296cadec6aff1a6d5e6b6d2458f47140f48ef49b8027f79"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ada9d40eb7e0f0cd8b218dacfcddf8e6b46ecaba7011de902549f892a13ab13"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4f0ddfb9cc24ce1a3cb987a0da366ab24cc51d9f53a6446f77ad8bbec0c9718"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb391ed5a5e632ae6b6cd7f229ca90c07419429f32c59a71b644aaa4b9636aba"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"df0da73526207600d667cf5e97fc56e8c8f42b7f412bf80910185aa104cdf728"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"78d2b4a2bf3841ab4212bbc49b8249aa50a91030569da4da4014ad68bbd84fca"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"11ecb844e506c49f25045a3559622d94a7810282f1a78d1a2096ea06c63af961"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":749}}}],"partialFingerprints":{"codehealthFindingId/v1":"631877c514fd22acbd5a2a092224be3cf42432c8c1651a4f134eae361cf22658"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":918}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bfd1bc9e6d65d9ed9cdb2576440f6eca3bba29bc7f222a6a442169b837a4335"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationChannel.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"604c4a63f1a0e52c5a8c5e8122976596194ea1cf5b4ce74b71c15baabdcc5601"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationChannel.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"d72547755cf04998716a798b4ad78c396630c07cd47471588ec2adaaac92f47f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shaders/TransformationKeys.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bc12a237018bfa9556c585ceb2764a2a83f2190f57512841978890d9c24cb84"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shaders/TransformationKeys.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb2f5c88cc4dc268164535657cef4ea18f5c0c788ddff469f9721c4ebec0efc8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"8707e95c38818424e84a78f5869e09cf01d16b0849ee86c80e532b8f3cb361d9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/ScaleBar.cs"},"region":{"startLine":746}}}],"partialFingerprints":{"codehealthFindingId/v1":"550904bfe519ca347b387f948e8adee16c9e8f98796b01a7894607b5a6bd4cb9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Tests/ParsingTests.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"acca2ff1b836e3b15fe13206f200d4ca8f04b42b3419c35913fd6fd8594393c6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"c438c553e5d4e2588785b996f974799f035777a21b2b4f5f5684ca8671170e23"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetDependencyManager.cs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b5523c96dc6bee0b3c2a81427b1be8dcb6a48212f66d1bf45025cb9858ca43b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/BuildDependencyManager.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ec0fbfa22cfd3a44443003bffdf4cce4bec80c21a92decab054aa8c53baf634"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1524}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d4d85f343d2f36f80f7cd63f46c2f3de3cc179a24f7ef0347c05373f5c1777c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailCommand.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"974715f906124a21814d8a202f4ef3358a025e5a704de4f09199939fc8c6a683"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"f33156be146c7f1d3e1c78c5420713356ab329cafcf4fb5f0d614bc197197f09"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"1248d8f8eb6df5ac88e6bd22fe17d139ca66fa9f9ece4493c607be1b9d51c731"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"e132fbc47951af68b8668bb0f75033819249e5f7408d326191e9fb8848139d53"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 10 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":757}}}],"partialFingerprints":{"codehealthFindingId/v1":"93f0370c5abf44d1fc3e193cc918572779027d2a8337eb9ce8701e5922ee0937"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"98a2ccbdb3aa88d023af659f119895ca61c6dbbd458af73374c60d14bfc12372"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"12197406612d863b51bd71203d6322072fa788fbbb1f74b5ecf96e10c5694e67"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8b55f2c999b3db54f45471db6bd234cc547899ebbe4a0dca0f0fc8be99c3f7e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbbb23e3d457708b05f4701f24ad4e7e81029acdcab6a83cb522073dfcb26c55"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"4130ab58173f393e8823a4e701b07dcc95c71556edf640d06aece0806d036dbb"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"414614ba06a51fa449b5a0d445fd8658a0d1bac3c38cb22fe01f9c60df9942a4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd417260bcb340e2da87d2ab6a0770984df2f7913835b65b7c8887e31fb83324"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":713}}}],"partialFingerprints":{"codehealthFindingId/v1":"280b83fbfb1dcfdb047cc8b492de9d722c0eb5c7f341a5ef5daf0abae7be070a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"522998d03ac58ad959f902a62849d27dc7b04cd849eba94a0488199f8b13a028"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"31d47397c7d6fa2c5ba18371ccccd98da8b214f0dd1068c9dfc93f3b5851ca5c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":818}}}],"partialFingerprints":{"codehealthFindingId/v1":"b427b609737f588cf6fe188294a6f8ffc5cce590f3339b33f856b3172e37c6f3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"b391aba9e1db00377180a9f4fc0cc01ed0963eeae58806bf9c6dd7fb2c07ad8c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Packages/NugetStore.cs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b2c7608ac1026e96b90d705a944c28118cd1fb10bf92f40ea4c084db3a0ff38"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Packages/NugetStore.cs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6e9f3ec661ac7b1f84c5241f98e4d3730d3a581526ce87107ebdaa9616abf67"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Transactions/Transaction.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e5823515f52806ecd8308494b91c4031f571258d87ad80080a9f976c4d79309"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestSerialization.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae49b1697e938e4621e855bb2c2112bb9177b205cc7dff1f5b470649f195240d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/EntityFactories/ModelEntityFactory.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f25281edbe2b700bdd9f15f3c78591aef9d7ec5f7b8bbe4aefe5f58568b2f5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ParticleSystemGizmo.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"349d5e2f4d1c71e7e776b6ccf93ed3583356bcab3fd4ec390087599a520b1963"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/Views/GraphicsCompositorGraph.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"e717f74b5a2a5aace207bb41f12a3b9739990534c290295bee83248c467025d4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/Views/GraphicsCompositorGraph.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"767aee8c65af843cf2107b330baf8f8ab79e2bdf76a111f0588e9574d09ec713"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"e94bd8c62a12ea1ca56dc1cd51cd01f45bbc45e67c3c29e6ac0078d02b8adab8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f83f0961116f8e0517b34a8530f7ed987eec0847a877eaf037c931e8d952472"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Preview/GameStudioPreviewService.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"2197a2565c930b2cd7f505e55e8abb3a05021214ba36ef9932e03fc2327e13b0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ModelAssetImporter.cs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"810597ebacfe01f00dd7751eccffbdcbbe39dd3d4d5acf4fcd9288a24410a9e6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Tests/TestPrefabAsset.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3beee45728e743506145d8b57bd2c24990da12275187f3614fd476ddd1174d7"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Materials/MaterialAssetCompiler.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"39ecead9c775c5d454e44536811f9c7eb3f727a8388a580d6256459f6fade68c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterComponent.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"a89f8f0c261822fcedcc05f9879f8ee1241d3d83ed95e760ec480be41e2a3cc0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterComponent.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"d55c6cd4fa75104721613a5aa0ef9543a0783291499264343b009d5636c5d8df"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterProcessor.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"f00c9d868c22d26a1d953b59d945876685ba75e005b17b6cc3af4fed0c71e9bc"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterProcessor.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"41d7651eaaf42126970ab511470057f01c7b25eb84fc52faf321d51c9c1d4822"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterProcessor.cs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"d83d3b0fad8815d78924e6d2fcc8e84e13b608bb891bb5a9cd520bf6a420da30"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterProcessor.cs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"7478c95a8aea9cfa7fa01823fc646c26ea92cdc3e9d3a2bc1e8a933b447424f9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioListenerProcessor.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec90ed98d6425b22dbbba2d9a2f457b813b69f206834dc020f0960f28e79381"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioListenerProcessor.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f890799fd0a2a12616fc1735bb7ae190cdbf320e2108ed474cc44f48adce2a0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioListenerProcessor.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c2bb0b3f4d1ab55c9346348437b1b9ab1f9816c64194859807de529c73e4f95"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioListenerProcessor.cs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"37fdbade9f57892daeab082c88e7bfbb386e784e462cb55efa403f5851b4e486"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioListenerProcessor.cs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"a38dd9ac4cee5ab9015c6bf7ea1739b985a5cca8b4dd3323259e7bd0de9851db"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioListenerProcessor.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"a64bd77de0a5233db56762ceead8c5f287dffa38556291d9aeb0d5b70e6f24c9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioListenerProcessor.cs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"14adbc5a7b60ad60ccd0a63b169a6f36e7085c15851a38c867eb486c2d4e57a8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"5646e1f5f56ebabeba0a0e7ae77160bfd166816a14bd2792c24b3df3da4df1a3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"672de9add628344af3ed507c828425b35d37eeb1407c6922f1d8f774484d0045"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"e31f7c9e2efb5443b5799c0e3052aabc8b48c33f430effacd34bb5b7dc19c3a0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"8630a5f6f51a64e9bdeedaf7ef8615c9fb7a92fff4d3fae44402b3d47ac7dd2e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3a0976632ce89fb8a07c1f26060f02599386d5f823cbc38325001c083030a33"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"23f5adf53569c557874b4ae3fa5fead7e8bd29b424ea662d64effa52fcb996d6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"b130457cd0ad2d9c9055ad199974b94c7b30aa8662236b4f7c80c4f2e114df03"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"0316942293944157b38b4f27c8aadc91fdc199230feefdf9d1cc3df3227a3ecd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0bb4ed0d6272034a75b7b036c92a6e26ecef39451c0f1fdd0958681e973e961"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d7dbbbdde1874238c4c22da94687c4fea4c3638d32c575f7bb22e3525def4b7"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"a809b9525a14afa1212577cdf3b5b39a856cf59b9e85f09954b0d6edcd25362c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b599620fd96ba75340568340f00c042202afaae7a9ee2794bd8105bbecb9022"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"d30ffa841186629b5733185d48fc1a0f71a8de476913a8d1c400588568830a78"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"a850dc335e47aa15a97af5bb696d8a7353c1433d7bc8b02fc239e9904c9c0757"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"97ff40f5581dc03e23dbaa9e5f3fbe7ec2fa63d90754da9a1464bb83c7f4b02e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"326941eeccbe642f7b8db27c7b27a61239bd67dc31a5b7a9ceb688c80493cd4e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63d56206a2288b6b3f72be3d04666a5b7e31bd1a27f9297b8522513b21433a8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"11afa4024ea6e9b400daa9820eaa0e829f78d924b58976568354f980ec9bd69c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"5579b3a8949619096f715a5d5a85e660a5ac90db63747432a73603419d1d9785"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"50fa25d4ff9fed02e1b0487b9de893cc0325e2104ed86d4c2509caedb2f753d4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"3944cf5dfed3ab70eb0a8f46448dd12fa2586272eda36276ed801fd8051fd653"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c1ddb7c563ea4af19af8d61d1b16d2fcadb7e69c178c1b7ec349a46b34fd19"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"a80f0fad5523a1bc3333606e1766c3df89e094def04b7a2f4cda7c8b0fd6d404"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"6980a70f684ec07af6aa049320cb3156241b23dc2e0bc246800452903e2b8339"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"d576aaf53bdc8eb97e23de20d97d80f20651b906bcfef41dcfbf2265583cf18b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e500b13622beb92dd40018c5240973ea382d9af0de7bb2dfade2fa08e930da5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"82e47f3558afbd6333e32354e39f9f5f3d403a5b868ec083a6b190cf1fb46d1a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"bebef2741d2e73fea494c4d03b9bc26d925e24c0e8b014c4128062444dddb830"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"29a060fc6bbf3d485fa0f32d5b767c4c7874f97d98ff4c05eafa20139b2a5fa4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c16239f67c22605b301625b7c4409da193bbd031c5b53e154aace308083b632"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbd782a27bd6f3708275f592fbe6ccc24e81cbe8e934d529ab19c37bdbd72dd1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"6210d9f8c8f0da9c8667c08be7a9a85ee4ae730c1506296389abd87726ef3c07"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2a4cf7ff31750a88262b14d76f10acdd0892de813dde8b5a2f69aeb6c0e2e72"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":493}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccf39e3453185836497433e3d36987cfe0c665c518b6a5f5b6e1e167f94cd22e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"54166d85b500a3d089599abb2ea8c34c663551f4c0fde492200344e0342fe9e2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd45ccffe850b9af1239674af404176d7435273c7cb3ba08a1677960e73996b0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d6934874e122e07026b8ab55aedc6ffad2151318adfb8d24a7fdff0e6401a05"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"13e05ede8b4af223ac89bd28465c02554a156397d6b38dbb45fb8fbe9a4cf831"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"1383067bd20c2569962495045b9569f565359e052696705b0506f8845e8fd2b6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":828}}}],"partialFingerprints":{"codehealthFindingId/v1":"165f70d8e411f802be7ab30d5d7ad163c2a77301326d9134c88c90ffb18cc5b6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"af20876ff76e7f37ed632ce4e95e6a515b770a5aeddc17b765b351b5d99187c9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bc814b3e6255cd5877596d3e60e7ea9f873842633716c6c82499aec0fdc8507"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1297}}}],"partialFingerprints":{"codehealthFindingId/v1":"8706c96e948286a729d1078902599e1d30846fb3a8463b888650dab1a8672644"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests.10_0/NextGen/NextGenTest1.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd8f8658b3619ea47f5e81f597de68a57d097d19fe52dba58636d553b42d3619"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests.10_0/NextGen/NextGenTest1.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff043951e0d9c45c7a4bf6ac7848dd98d30aab12fe2be266c32277d72a610e3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests.11_0/TestRadiancePrefilteringGgx.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d5e6e5d02970617a38d4c39b92490c6cdd32b9778a27bcb71e2fbcbb8f82467"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestTextureSampling.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"883de47d4129ce986fee3653385fd68244c3f76b3c6bcbe81c2b60658596c503"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Effects/Effect.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac26a7627f85915d60b8e3a9004f4214a03918db991ab1ce3a93ad5c54ba24ad"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.GeoSphere.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db4c7c2a93fe30cc29da0bec4cdbdd9a19451edccedbbd83dd8f469f1b0dba8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9bad87aa339360aaeae213168b05646e077be0ce3e2f4a1bdd7fedf8c1d53ac"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cd2cd13007ea6406e66d668acae4bc0e3bc836734d824ac4a66d1ff3802d813"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VectorEditor.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ad5ebdebe32953d41cbe8aa505b13c36ee84e045e7dd34f033932f957566617"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc26549f04b7edfd2ef9c1f871085ebf4829ed2b1c5ba9f6798ee7c386427be6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcbda7edd2b6ff2fc39d1f99ff027767ac6d0ff8e4609842c9b0977750deb2c2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":759}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d6a9c4d65014741d62e70c3c79aa10010277d7a7a4f7ff8b09ea382e9bf7de5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestSerialization.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"d499a71506a860c86e0af1e2c731cff9711f2ccacbce18ea00581a38f176823a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c5bdad6a8aa06e3ab56cb09e3203dd3cb0fc1cdce7b51269055ffe374831178"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dda3670ff2797bbe7b3a4845c5f19b5b7d0a13bfb8ce45a3dba69a8dc84e6ff"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"555b79776983e3a46b3faf3b0ba5fe484242a40f4b4ded109c6c6e4758434702"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe6bb2839b9ab7425cc92dd531482f736b64891cf58d78d2d7638afda18071b1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":831}}}],"partialFingerprints":{"codehealthFindingId/v1":"9473327576e31106b17bfcb5473fdb7b4782efc3f90f38c387107c452dee2a89"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"917655cac19d581821878f0a0b6314ff0db84bad878f56d837aa534fbf3bda3b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests.10_0/NextGen/NextGenTest1.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"aec5ba984a52eb0ef07d5fd71fd6ca103216e2b49e3abf59a943b503faf37356"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"37c259f85689f260d7c1d8489d83344b482dcdbf715a3c92918a5343c88de8e1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f484416d9bac36ed1ba906c32ef8c95604a53dbb76f5cfd9893f6968f83cca7"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":597}}}],"partialFingerprints":{"codehealthFindingId/v1":"c414975e40172089fbcae242e41a272ec6ed8c7f2f9fbfa5763cbc8d72cfdd53"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b9360e7f5fbb9df2460229c80b4426c9537a45c98537f86b17517a57b882d1a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"75556ec3e43b6836b7f9691db60f74d990f1b951a4180c220ce1895e49a292e9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6adc17f8b0bafacf72023d7d6b69a8c622ab4e53b1bb3ec55ec96cf7292bf02"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentSerializer.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"299af00b69cb14c1b11b1115dd3a5913abe6c2d88a84a4d329f80db4e69c83ee"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestMicroThread.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0fd62a64beab81abe31d14ae74b15e2a97b886eaf7c76f7ca25fdadfd933480"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"1895778b3781226ce9ba9375b2c6b47b8ab96bb870444e020725da6dc769283e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f7ef30ff7d677040194395e1941425e4a8f9bab1cf0d0fc731e844805c9a14a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"eba6811d44aaa2fb78f4d93664b9991d9f140c176d0f3234c8e2378515f3ca0a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"14976091c0d95d4bb69c97a256b7b959ad1af2198dae94c4242bbb2a16d75172"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e7f06dfb96121d74487948c0615e53060d25a63319e0af59168c8751508c161"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestInvalidationAudioContext.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c72a67615f9a27c927044ba9e57960b9bbf65ca98c3178fd501c56a009ff93b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"50bd36937a1ae291a45065b6ea4f1bac5e455f4e9d87516573dfbbbfd0a6b533"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"5248dede4be281909c4f081440b7b89e532da15f8543bb9b444ec2175197ef30"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe959a829b45cc4f3aea80448d8171f39c25b74e26021fdf84a30c1a2e27cb13"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dc4830593989405841e1d5139f2db02025e1823f7bae64e36145fadac884f3f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a9de8e4a608173493e73acd32ab80a2648ee1fd9f3764f5a3f0d104875e4dbd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"f512557bd86f58abc368260c5a101d47da05cb8b2f3043cf11c2fcf1c1e4a0c9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf683e7496ce81dc56b0ffe17939111963cb76cce7b226a5718802b622d62a04"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b8f5b21cc691f7f5eb39a98b66e17a8cc935b5687aebf85bd9365fbbb3bb7e8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"da58c03430828fab383f667d0e084f421a366d95447228738901b2dcef747b55"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/StridePoseIntegratorCallbacks.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7ce498b3c4c51d3f9515901435f7d3404279a4bca25bc0aad51653d97955205"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Effects/Effect.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4e934d3dcee6c771ea31f04aafbcd1a3b69d6e603324bb25a257ac2c6de82e9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1294}}}],"partialFingerprints":{"codehealthFindingId/v1":"c222969ac58451036c900d96ddfd361c5751c8934e353f7e9f1a0d69d9aa236e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bd68004282fdfe2464f54fde6bb7ead454fde005de71da29e16a9e1376d40da"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"25bf7c7222beed90333f530bd3e9c0d71ae346078c258e950e8af46e7b3bbb2c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d956b1e07cda39a1931cb3e47a97c012e01fa29df677678c3bae2357fc05f7d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":579}}}],"partialFingerprints":{"codehealthFindingId/v1":"5646ddf7f46a4df0cdc44533563acf4ffede7a11527a26188daa558ab622b86e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"927f21c610697f40c73f090de45cc7dc0f7377546f8d55633bc75c8d3c2426bd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6e1e1a65d315eaa212c3c45277c667d8bddd29772cd0e5d97bc47b6b395380f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"743a275401648191b0c13ff5e9c36b46241b51b8b9e464cc9d1b4c4b233af144"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":645}}}],"partialFingerprints":{"codehealthFindingId/v1":"855ef23d29b5a5fd138cd7233f87f7cfbe344e73cffa86caf7f56859aa205562"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestDependencyManager.cs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f9b07812100adbd57caeb6ed0d62cbbc2386015ab50bcf91dcc2a5b8294c4a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestMicroThread.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"72cf174d4db5954c5297c7dc1b36364767af0ebda911128d5a817a3397c25bfa"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestMicroThread.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"a30c2c57a0a77f7d2643681e481e308b6893952d9d4eb7c8bf06253c73650692"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestSerialization.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"41acd5a7f5fb84b958c79228cb96370138b1d6f7fc74aeb78c5dd64588069e2e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"e83c206d23ad00884072c21576bd43c62f17256827f46431e35fe64a36fbd8f1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ModelAssetImporter.cs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"3813c8e0790ae792bbbe4ba4bfffa909b99f8c98dfa1a69a0137770ab92d3a08"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterComponent.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"b214c9cd8a86e897597b661d9e77c962ae567c4d4001402d7e4eb095dc047e9f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebca9f121437f09b422d4b6d94ef30fcf538a3823469cf3d182131b0e5a66006"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3fea0c8c55b8858ed89864c7bdd9468b312d611189ddf413db57c7ecca3426f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"411fcfb51b72d274bb338aafb9497f091686d8406d0450184ff62ecffffb1eb4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dd4b9fb9c709064db3eb65dc9d2f77982f644e51fc793d9ef6aaa7129d80e6b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"177f83dd642a86845253e06f9a68728527ead03ebb02b782f8639be3a3de2d2b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea2641c86492f1d992577511f4a5c0e6709a4c41b105e8fa0990f574fd2241b5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"fddb70e37ea79a1b01e94158d4844f882d78e8ec016144dedadcf43bc848ffe2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"112444a5a2c01fc5085defa068018f22a50eb9ea3dbf092fdca4387376c27b10"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1492b58dc81bce955724ad0e40a5433ba86017e8d5419da3aeafd05f32bc11a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffect.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc565fa51e3532322f6888349ef8cddab22409973aac59d1cc52336dad3ff778"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":843}}}],"partialFingerprints":{"codehealthFindingId/v1":"6879d429ad7816fb3ad80e1600d01bac631c0aa1f97cf6b2ca8cdfa5eacee599"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e5fe559cc44437426e0e4d597b0aa7c07072fb11cd94386c4bcf7559164d6e9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"87b1131bad58351afab24f75a6c3c7867e3be827dc9f270101046005c50ec9da"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"f899c3bed2207e91bbe98243b6a828694053521404c82a00e43edbf0fd7666d9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/MeshCollider.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf71f947d6c36cd5976914bde52ed26803d5abbea27e0f07d27583c9d9cbe9c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.TestMyAssetObject.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"350907ebdcb98e59086701fa5e834601fe5f21697e4f5e5edc0f189b450157f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.TestMyAssetObject.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"3453e50e155496f63bc22094cc1ad14f5c138d4013e91d1603cde331d43a91da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.TestMyAssetObject.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"a54a65537d0d9518c8ede3192e3a88c956b714ddb914a90088179bc3ef0185f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.TestMyAssetObject.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c424411b41309b2f51ba9082429cad049eb95a57f7f94c67c78a326220590e9b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.TestMyAssetObject.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c97948d8a5a004fc851165741ab060f7c8a4789e59c4c17bce3874ffacce471"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.TestMyAssetObject.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"6023217dec88c0316e78e49acb49f35329ea336af8b16ec3c60d409421b5083d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a17b2343c78aa9b3c40f9bf5b8e41a3ddb502a6fa0ecba3c789c3924dfd0122"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ba538136252f5a10bac4c739f1a6e98d57c75e503dadcfd9dac6b244ea4f387"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-enable non-pure collections here once we support them for serialization! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets.Tests/TestSerializing.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"86d2d22eb8f37e1a2fbb67cc828b73f2c8ecd64e0cc49907de201eeeccee9ddb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: here we need to add a deep-scan of each base (including the root) for any embedded assets that are \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetBaseAnalysis.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"797fa7b230c653ba109c88b3126c7efc1955e399c0daf985f92bffdfa843ff77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO provide an optimized version of TrackAsset method \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetDependencyManager.cs"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2e24a60d6a1514b6ab3a93030af0f5845f307593a05adf1b3d17d4935459eac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO provide an optimized version of TrackAsset method \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Tracking/AssetSourceTracker.cs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"012df6257831dfbb53c94f5ceaf02de8862c8f6d14548a18fabaab5b183001f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is not handling shadow registry \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/AssetDependencyManager.cs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"589c567afb44f13c925ac495fe7f620299124d8edb962d9d91cda916adfad960"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is not handling shadow registry \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Tracking/AssetSourceTracker.cs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"abb0fa9f779935bd48414ab2a089d35608038c7ae6b19c213f7339af1cb5d64e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: right now, we consider that assets returned by GetInputFiles must be compiled in AssetCompilationContext. At some point, we might need to be able to specify a custom context. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/BuildAssetNode.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2d01e0ba3faf44da6d9af5aeea85f91fb138f616dbf88af8630ab8a73c01e4d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: right now, we consider that assets found with RuntimeDependenciesCollector must be compiled in AssetCompilationContext. At some point, we might need to be able to specify a custom context. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/BuildAssetNode.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eb766bf7e9973231667c633f86c0b36df99db28bfdf2178c67ad2f86c9ecbea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be reimplemented at the service level (that consumes the build graph - thumbnails, preview, scene editors...) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/BuildDependencyManager.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"e86629797cab0a55b18a857a2452f0b3c26ed907ecae26336cc6caf5378366a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CSPROJ=XKPKG check deps \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/PackageAnalysis.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"d78b16d74b92d0225892182d70635daa57310a8c0a8ae9f2c894c81694af03f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check profiles \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Analysis/PackageAnalysis.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"4347295c88252833040eed24641dd41238815c97e28f07061f2ec7759b0446f5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn internal protected and expose only AssetItem.CreateDerivedAsset() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Asset.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"5be0118f8420fe96d669ee3a8adc6e0e1a6b60aed6abd5485ef151f5421a0078"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn internal protected and expose only AssetItem.CreateDerivedAsset() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Asset.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eb66a9b57028737bcdd1702d1b1e2d865b6465fb0d33309e5512d8eb33ad40e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: keepOnlySealedOverride is currently ignored \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetCloner.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8e12b383e29627bf12258e43d7d9e09b17ac5170ed74753108dcf2426406f08"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Clone is not supporting SourceCodeAsset (The SourceCodeAsset.Text won\u0027t be cloned) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetCloner.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"759068befc387630ae9c0618487476ed0647e0eac94f974db66b052feed45ef8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: at some point we should converge to a state where collection ids, which are for override and asset specific, should move from Core.Design to this assembly (with related yaml serializer). Meanwhile, we have to split some of the logic in an unclean manner. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetCollectionItemIdHelper.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c71d5024d8a91ad02cb89fc45450600ca619cb7b76bfb8ce9e53e58be62b301"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] CollectParts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetComposite.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"aef5c97a9613872f4d26f657d9dc834e00c09ef85897970413d11f1e43154ef2"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] AssetPart"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetPart.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0b818100896d010fb621b2fdd27a1623b5efe430a31705159cb4c958dbe9a82"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Peek the SortedList size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetPartCollection.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"0255e1962a5629f4009f5c37ed4b1d3630bfc317be608fadc154a05e40588b5f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Peek the SortedList size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/Serializers/CollectionSerializers.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e0deb93954445f3facf8764878d2bc9375ca98663d052c3c189e9ff28208fa3"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME values are always null \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetRegistry.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c67f13639f6931c40a0b5d6f33332fcc34fd32b80987be19c6708a88fb11f54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use this class as a base for AssetSourceTracker and AssetDependencyManager \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetTracker.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2d2248482ca93814b4d6235e0f13cf780edf8ce88927cf4963e9139c8f0b046"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Don\u0027t update the source tracker while saving (cf AssetSourceTracker) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/AssetTracker.cs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d1132c74eec377bc45a2b599318709778ac7007bec7485a3e1ac33a8c32b852"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO provide automatic asset to string via YAML \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Compiler/AssetCommand.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"9186be113c01bbce145e11f906463f08a038637afb5a9e29e67c197271d24e06"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the \u0022/path\u0022 is hardcoded, used in EffectSystem and ShaderSourceManager. Find a place to share this correctly. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Compiler/ImportStreamCommand.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7ca9b194b041c401e1468eb5e2f43c345f250ed70a7b5b9370afdbcbc022331"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: See if this can be unified with PackageBuilder.BuildStepProcessed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Compiler/ItemListCompiler.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"c54e1138a250fd73b4bd15eb3ead9b0ce4da17ea48d7fe9c1badc236f81f457f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this works only for asset now. Allow to select the YamlSerializer to use to make it work for other scenario \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/DynamicYaml/DynamicYamlExtensions.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06f5ac350511691626b25368eb102f44f02c1f569c8c13d8e58bab8a79f3e58"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn that internal! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"df7bd4e0c33f07db1c2f853cb1a55369616fe44d95d8d1c5c4fd350db89e14be"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CSPROJ=XKPKG \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d2eefe88a314b84dcf298f1082b4286b8642982d41b6a94a906a184773ca8ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CSPROJ=XKPKG \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a5518686f21301c299706b575f22adc50cfdcbb29c932c7c09902465daf75ab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CSPROJ=XKPKG \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/PackageViewModel.cs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2f39c276c6588827cbc0f0f7ede73e95bf54df6da06671ddc114e80a9427b6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CSPROJ=XKPKG \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ProjectViewModel.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f4588b11b269b64f51f2d5a02f3cca689e9b4a601c7a34eae04ed3441d7e2f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Let\u0027s review that when we rework import process \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":973}}}],"partialFingerprints":{"codehealthFindingId/v1":"f454cf1e43c24f81776fe0555325ec2c6dd9d75cd6d7bdf4c850b2be519013ce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: More advanced cases: unload removed references, etc... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"db6c65e90e39ff0a4c504bdd2c14c84fe06306a56d5fe39740690daeaa924cb0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Check how to handle refresh correctly as a public API \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Package.cs"},"region":{"startLine":1235}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ee75d4bb4394d326d6c1be12c4aaac4688092edaa18a4c1d4bafa186a7f8a7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO better handle interaction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageAssetCollection.cs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"17540c8bbdb6441912b5a6708f6be023cd47dc1ce0a9f55182c3983b4467895d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove and recheck Dependencies Ready if some secondary packages are removed? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2f2f91a5eb5d91ba083f8fc2ae44cf35f501c7023d672e72bc3fd54b1ebde30"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Disable for now, as not sure if we want to delete a previous package \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1141}}}],"partialFingerprints":{"codehealthFindingId/v1":"e355b1158507c4f385f9022d765ba1fcc353408b3ee956b00ab176bfc98b8bb0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CSPROJ=XKPKG: skip it in a proper way? (context info) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1395}}}],"partialFingerprints":{"codehealthFindingId/v1":"573be24303d9d3ba31025e611810db46b389bf278bb2e174e4347f879bf2edc7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Could referenced projects be associated to other packages than this one? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/PackageSession.cs"},"region":{"startLine":1636}}}],"partialFingerprints":{"codehealthFindingId/v1":"84261f556013cc5df650bf77f0d346e8528ef3fcb064a91836d57a788cdeb053"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For properties, do we want get { return default(T); } set { } instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Reflection/AbstractObjectInstantiator.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"9122b7b80d5e9d354953f84fd80400c90af98b340828b9f487632fc50b845137"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do we really need to pass an object to this constructor? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Reflection/CollectionItemIdHelper.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0dcf9a8d2ad5e9db2b50a5732147ded3b5669dcfeab8c252050b99040badd0d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Arrange the API of this class once all use cases have been implemented \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Reflection/CollectionItemIdentifiers.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"31e636b65efc2923b3bfd9d8dd30ba599e2bc31babf32024e7f1a4f1249c920b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add indexing by guid to avoid O(n) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Reflection/CollectionItemIdentifiers.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"933355ebc96da3bc135ed8042609a74040516c284abd68cd291e83dd32b41958"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Propagate dirtiness? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Serializers/SourceCodeAssetSerializer.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7b74b488d2bf6627a5dfbae0469701c84e2764842c9d4dfd25732746131cdba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move .gitignore content into an external file \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Templates/SessionTemplateGenerator.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"098958fdee0f7247bec0794b24b2787a6d34bf57e76fc1f7d69759d159a3ea91"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this will not work if the same package has different versions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Templates/TemplateManager.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a17ceb9f0dd2dcacb68730ccc72758c1ccc19c32eccf0bcc362292d6144add"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO We could use flags instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Templates/TemplateScope.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"3806442e7447543d9770e0e09c6b04ed13d96bc8ff69ac2e5dc86acfed002cfe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Inherit from AssetTracker \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Tracking/AssetSourceTracker.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"a136264fd05a5ca17496261966f4d7f67b3db906bfbf02e3c031c8a518efbd44"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CurrentPath is valid only for value, not key \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/UnloadableObjectRemover.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"77fe543bb4eec074b18ce29dc81864a63ff98ffb58dd04ff2d1cd680610662ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CurrentPath is valid only for value, not key \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"6263b1bf6e2da336693a09f5ac82dc8db48e4e7d97d08e6823527d23c03e3906"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should deduct TFM from referencing project(s) (if any) rather than default one. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/VSProjectHelper.cs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec06cd46ec40557e4d000d23026481a9882cf7cce3cfa9ec0402ee296692cc0f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the API could be changed at the ObjectSerializer level so we can, through override: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/CollectionWithIdsSerializerBase.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"34dd1c56557089df858a104e834fa807de37b13dafed62dd80927a45e19a16e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: - customize what to do -if- the object got transformed (currently: ObjectSerializer = routing, here = keep same serializer) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/CollectionWithIdsSerializerBase.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"0468db8aed2cedc51c7a7337718c9563304a026f912eff20d2bf95a2c6aeac31"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: - override WriteYamlAfterTransform without overriding WriteYaml \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/CollectionWithIdsSerializerBase.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"e335936682172b390e113dbea43c91ccf938c07d09ee89541db003477b0664cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: - and similar with reading \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/CollectionWithIdsSerializerBase.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec2cdf785c0a6cca83f25b5e98057bfd94c67423b6fcf254a42af79fd8d94da2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Allow to disable sorting externally, to avoid overriding this method. NOTE: tampering with Settings.SortKeyForMapping is not an option, it is not local but applied to all children. (ParameterKeyDictionarySerializer is doing that and is buggy) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/CollectionWithIdsSerializerBase.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63272234d4f73d36a5a0c64a648d9a6547f2912763afeb322932c56dbc22250"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Filter only TagTypeSerializer TypeFromTag decoding errors? or more? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/ErrorRecoverySerializer.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"88dd57d4cab7cd84482592440f6a2b46dde19e7afc1c027dad8b69f8df75c6e2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Only type from user assemblies (and plugins?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/ErrorRecoverySerializer.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"9571cb57220ff5a1dd6c3485226cda2d164c7a86347607960215bbcbacd4fb92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace this with switch pattern matching (C# 7.0) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/ErrorRecoverySerializer.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"195cdb69723b0e29f6466c54c8504830a12069c5b0a5f6cd5a8f7ae6024b01fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we want to save values on the base type that might have changed? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/ErrorRecoverySerializer.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b39a32bda890ee6de874b319120ca69f0553bfa37368e6ea74f2aba1aea1e7c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use YamlAssetProfile.Name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/ItemIdSerializer.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"ace79e21521c3604eed3c4550419d282c268fe4385025f120c1baff0eab03dc1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use YamlAssetProfile.Name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/KeyWithIdSerializer.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06949513b9c19248bc54de54322b002137d45192089643d55f879f4fd90660e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: deserialize non-scalar keys! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/KeyWithIdSerializer.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9ef60a925ce91bfa60231ef5904ff640c57279ca7dad536b25ef6120eb82c96"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: serialize non-scalar keys! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/assets/Stride.Core.Assets/Yaml/KeyWithIdSerializer.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"66726158f96f7713093193e4949c1fee9d5acc39b26fc9ea8678c061633e86e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Scan what is actually in framework folders (and unify it with ProcessDataSerializerGlobalAttributes) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/AssemblyHash.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cbc303928d7b5d4d7f43f541bdbab8501d8aea7ba60a693fead61eb9bad53f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Either something is wrong, or it\u0027s because dependencies added afterwise (incremental) are not supported yet \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Builder.cs"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b891e9877f4147dec8cc214c82399519a63bd2056cab160c15760289c2e8bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support proper incremental dependecies \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Builder.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdf5a5d8082ec979a25b89d0efe6cd531bca3013d7da8c2ea84681658ce3212f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: improve how we wait for work. Thread.Sleep(0) uses too much CPU. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/Builder.cs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"27eacc269fae8e8993eef99222ec778b50bde09557eca62e795f8d2b3e1458a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO/Benlitz: check matching spawned commands if needed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/CommandBuildStep.cs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"58a1823a01076f052bab15b37aef5f6144ab1832eb83bd3d40dc773889c5af3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This will prevent us from overwriting this asset with different content as it will result in a write conflict \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/CommandBuildStep.cs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"123fb5d583df9b79334d217a9f114c4bc4fa9bac3f58c698b68d3281fff4ade0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: performance of encoding/decoding could be improved using some manual (but much more laborious) code. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/FileVersionStorage.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fd7053aae3c82f2284511fc233bd5c8c83dc7c24f26be63518cb2efcde685ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we might want to allow retries, timeout, etc. since file processed here are files currently being edited by user \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/FileVersionTracker.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa9d5b59d5ca6f62ef9453b9a3996341a0952d7bd3e75e66fbe80bc8d974b39e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Merge results of sub lists \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/ListBuildStep.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"72e7cbe6c5adfd126f45826d5f076676ea454b1e561b1bc1fc67b008c33365fe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle removed tags \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/ListBuildStep.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae17a263b9a957e98ca1f8c1f53a504ca424ab141d4ec53d3bf377a3ea72c199"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Improve search complexity? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Common/ListBuildStep.cs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"9900ca7726c266be8dccbbf4501ba36a25b592e729ffeb70a1f2842d8051bf6f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: return a path in the temporary folder \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/buildengine/Stride.Core.BuildEngine.Tests/Utils.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd684f66f75e06c069f269474a543b0509b041d6b6a83347f89dee280f86825f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (include tests with parent and self paths .. and .) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"490aa0e54a9211bcbf2bf6180f66cc5cc123beee09dc7dc41d92bec41d7ca160"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: not enough test! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"208d01a2b46a3c7ab0a07d17a199b9db0ec3b65e071fac2e8568fd84755e9ede"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - maybe we should turn this method private? Or keep a single overload public? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"36a3f0c05daa5a60e44153141e0dbffc04705ea598640771dc6dd156229a673a"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] TestUPathGetDirectory"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPath.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b31e207a7c8a21438dfda94fd908ebcde993a1a4fdac971e80fcb075ed8b61f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Tests in this class should be migrated to the new testUPath class where we do one test method per UFile method/property \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design.Tests/TestUPathOld.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dbbb7770106b2468258fa722fff9fa2428356a6fe0e7dbf0250c9987ac8453f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO handle network path/http/file path \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/IO/UPath.cs"},"region":{"startLine":776}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d08984fa28adebfe040d7cca6f5c5fc7842987a76f41c425864278f323bd8e"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] GetDirectory"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/IO/UPath.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9f969c653f07a61fa85da5fd78132489b97bce7887d9091902d4974bdf2375b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Properly deal with file duplicates (same file in multiple package, or RID conflicts) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"a864707731dfad22806a0e5f18733e6465b5750a1e057a5d8c5fef5e6e1ae966"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Properly deal with file duplicates (same file in multiple package, or RID conflicts) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"3692fe23b4638e52644e4d5fcc07822defc30ae65695f7d1b7af8b7cb21c7836"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Look for a proper way to query that properly, maybe using NuGet API? however some constraints are: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3335f23408c543e871a322102b0e0f6c4c27d7eef39e8fdd559c70b72844e10"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is using AppDomain would provide more opportunities for unloading? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Reflection/AssemblyContainer.cs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"566ff88a4dde65a25ab8564b12e65af81d514e78c254ff9062b005fbcb6ed50a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO handle null \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Solutions/Project.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa0c80bb45d442845c1496ab4a18d26f7b45c91ff295de76ed44a8498f58c09f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO handle null \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Solutions/Project.cs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"8012dafe86e4fd6158044946e3b7976263360722f2c8e99cc8e853b21c929170"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO handle null \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Solutions/Project.cs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"4185e3ae02c6db61e63fe50383c2bfdb6a62245a5c9d1a3ddd3e9693926b891b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO handle null \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Solutions/Project.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c46d39316f822a1622e5860fd8d37b9dd1176cc6c3d105e13a6cb3c7dc5c90"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] AsyncLock"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Threading/AsyncLock.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c24fda762b11a6c1882155e4698d1cdc2ecc4c6e69c0ab9622b9cdfa0dc435"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] ExceptionHelpers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Threading/Internal/ExceptionHelpers.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"db08137c04617610df439a8e87b723488d9c40809b79ce378d9ecfaf5c5ad976"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is minor but we should support that (potential discard, properly trigger events, etc.) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Transactions/TransactionStack.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c5a8f4adaf0d1078b0e11be418230325859c6006856ed90fcb5b01912414026"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Verify that converter is properly updated to match other converters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/TypeConverters/Half2Converter.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4ef93a5f94070b02babd2fd16cfa42e82e4154748073b3144c5bd2bf025f11c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Verify that converter is properly updated to match other converters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/TypeConverters/Half3Converter.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d8783b2dc6753c054fc8866f7b77637882711044c65ce01adbf509a565cbde6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Verify that converter is properly updated to match other converters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/TypeConverters/Half4Converter.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa367c3ff6fa3f67f7238455a68568a5b326d30512a4cab48a32dd3fdabd6e10"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Verify that converter is properly updated to match other converters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/TypeConverters/HalfConverter.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ace0f2048c87f22995ebbcb4547e3892b7f202caf928d9369b2647b806d8951"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: PropertyDescriptor does not support Properties, only fields so can not currently Set Properties. Does not seem to impact usage. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/TypeConverters/UrlReferenceConverter.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"411b87ac3be7fcfb62e7cb298e074ceabc4088b552c4f6314270d9d4e79ff0ed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This code is not robust in case of reloading assemblies into the same process \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Design/Yaml/YamlSerializerBase.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"e23385fe653429574feebedfd70c78222def07b403743de6af44d332b93c2a7e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO should use a wait on an event in order to cancel it more quickly instead of a blocking Thread.Sleep \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/DirectoryWatcher.Desktop.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a9d7b80029ce2cd3b2d454e2573194ab4f0952555bf8eaf7548477c2c34035e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : Need to investigate later whether ToLower method is safe to remove for Windows OS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/DirectoryWatcher.Desktop.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1757ae00b47973e8c1b7ecfd1839377e0214d4457c34c25f9537381323d0e30"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : Need to investigate later whether ToLower method is safe to remove for Windows OS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/DirectoryWatcher.Desktop.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"61af740692ddc39e5429dcfbef05fba126178b50b6c3167ac9d41b7f6d60b36b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support more complex URL such as UNC or devices \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/DriveFileProvider.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"9564bf3b221980e1e9bba12c605cd5a6707706fe7677c1e6518ddb001cf8295f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support more complex URL such as UNC or devices \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/DriveFileProvider.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3856f52bee98d900c22941db0f9a45bbc824bde14b5e118f019306c913c51e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: More advanced validation, i.e. is there no directory separator before volume separator, etc... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/DriveFileProvider.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"685e566fabd8b5a09325668706db744fa9a47566e21deefd422058fcbaeed094"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated across 35 files: The identical BarePragmaDisable (\u0060#pragma warning disable SA1402 // File may only contain a single class\u0060) appears in 35 files (35 occurrences) \u2014 a single repo-wide policy (e.g. a Directory.Build.props decision or an idiomatic suppression), not 35 independent debts. Decide it once centrally rather than file-by-file. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/FileEvent.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e7b74d2f943b9e9565160e84e437ff54a6bd09c68a5f522cfe0096f8df8d83"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated across 17 files: The identical BarePragmaDisable (\u0060#pragma warning disable 436 // Stride.PublicKeys is defined in multiple assemblies\u0060) appears in 17 files (17 occurrences) \u2014 a single repo-wide policy (e.g. a Directory.Build.props decision or an idiomatic suppression), not 17 independent debts. Decide it once centrally rather than file-by-file. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/Properties/AssemblyInfo.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2610a8f08fe9ab9c28a376724d4b258c3d7a996afdc8385fea18a077a72bad9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find a better solution to customize the ApplicationDataDirectory, now we\u0027re very limited due to the initialization from a static constructor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.IO/VirtualFileSystem.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f4a43a11f7dbe88ba7cc413ef8aa8da49c2d8d2a2023e65a38435d603b4ffbd"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1025 // Code must not contain multiple whitespace in a row \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":"sources/core/Stride.Core.Mathematics/SphericalHarmonics.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"816bc37c2f535ba78a1564393c65877ddc0fc692ea253b6285855bcfd4adb903"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1025 // Code must not contain multiple whitespace in a row \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":"sources/core/Stride.Core/Serialization/DataSerializer.BinaryFormatVersion.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d505617d70806924e44d011067081c25cfc319bc9eb748846a67bd5b2a1a1c4"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1025 // Code must not contain multiple whitespace in a row \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":"sources/core/Stride.Core/Serialization/DataSerializer.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"409ee61205c7bfb9a645f9196cea00112243b4672d2112c67cc1f2cbc171adac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Thread-safety \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.MicroThreading/Channel.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"08671f77a819712c9f34f1db1460258cb87dea97c0168909c377f38baf13e0a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Interlocked compare exchange? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.MicroThreading/MicroThread.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddb7f4a2252327a4cb4ebb4e544179f5cf014fc0196c556fd696b9f43ed04891"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: If we unschedule the microthread after cancellation, we never give user code the chance to throw OperationCanceledException. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.MicroThreading/MicroThread.cs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"85e088fa829518f347cdf7de60a824267809e64e9f33faaca527b0bff3dda5cc"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1405 // Debug.Assert must provide message text \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":"sources/core/Stride.Core.MicroThreading/MicroThread.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea1e63f16e7fa7f08acbaf132989f6d9557b554d9b91019e641a00c6079ccbe4"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1405 // Debug.Assert must provide message text \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":"sources/core/Stride.Core.Serialization/Streaming/ContentStreamingService.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"d13009212da54f26da9783d13d0aa9f90b923fd1976892c2a836a8fbf1c1a5d6"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1405 // Debug.Assert must provide message text \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":"sources/engine/Stride.Graphics/Data/TextureSerializationData.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d0518cc1fbc2873bea8acc3e7e668c3d1e0a9d53ccf03224136253ab670a55c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we still need to try/catch here? Everything should be caught in the continuation wrapper and put into MicroThread.Exception \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.MicroThreading/Scheduler.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"59507985724c9ce8b79cff5ef3db4a4d65971fe9fa29e5b230d70612fea38d43"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Not implemented yet \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.MicroThreading/ScriptFlags.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"be7e09500d1f4dca0f910e61a1403a5fe1a8191f3b0c191d1babe0294dac018e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move this in a different location \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/AttributeRegistry.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef0dbf5fde6c1a381447c0212853a6f72ed926ec1c784609789b02e8d92f1349"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move this in a different location \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/IAttributeRegistry.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"781e3a05d42ad407371f8fbc876ad92d094e07c68fee93f6cc1f0525c0619e60"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn the public setters internal or protected \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/MemberDescriptors/MemberDescriptorBase.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf40d87d59827e75e5b4c520bc100a24c585933d58e2cc34ffc655b013a14c02"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This data contract has been added because we are using a PropertyKey\u003CMemberPath\u003E somewhere, and the assembly processor expect the generic type of PropertyKey to be serializable. MemberPath is actually not serializable. We need to allow to use PropertyContainer/Key without serializable object. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/MemberPath.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"96305155736e396a3d46ada80afd40c291f77a630b5574a0bdf9f008b24c4683"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: improve API for these classes (public part/private part, switch to interfaces) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/MemberPath.cs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b1e4c0e7fd185570996e52e17d38c48779a677611edc69ab54a2f9a464ea241"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we might want an option to disable non-public. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/TypeDescriptors/ObjectDescriptor.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee332ec4baae8975970a2aa2c7e52f42edb4d1abe1446d7d863a7fa2abb4da3e"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] OldCollectionDescriptor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/TypeDescriptors/OldCollectionDescriptor.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f557aeb79ea6d55076046c68ce41c4c8de351de50d6412a3681d6a660391c68"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Simplify this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Reflection/TypeExtensions.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"f24767715cc705378568bbb7d46b4b44000456798da9f73ae47e96b003cf3e24"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be ideally moved back in Core.Design, but there are a few runtime usages to clean first \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/AttachedReferenceManager.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0c041c830aa05532615b28a38ad1969802f7d55a77d32766cbc5bed0a66425"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Lazily create this list? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.Reference.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4539c4be2e0b57792ee52971cef809e9cd11d45425e604b265107519a10adfa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use collections where you can iterate and remove at the same time? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.ReferenceCounting.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7634420084414ce24b03a407fffba2cc4aed2b4b6b352b7a262c1a6a4961f4c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Currently ReferenceSerializer creates a reference, so we will go through DeserializeObject later to add the reference \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"791811b1d355129bbac4046df8a3d98ed3512f98878cbdb223df8d78aa171745"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO/Benlitz: Add a log entry for that, it\u0027s not expected to happen \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"a739e9eeeb73eed3bc87f9d8a08e0259a3734bd952d270d6a7344401715a34a9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO/Benlitz: Add a log entry for that, it\u0027s not expected to happen \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"828149c8bcbf981abe072704d70390844dc6bd701aac322e432f7b7bf02dd5c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we work at ChunkReference level? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"18ca12e20cae18c03b58e26a88460fa504094d35e161ccbc9307686d0452713f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we work at ChunkReference level? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"87a75acd9ac02d3240c196bc9f67745d4cd81e60e95283b921afef8874c82ce7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Ref counting? Should we change it on save? Probably depends if we cache or not. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bd0e08234081af0fc650da217dad60d3a1d37370ca003c34376ba3cece8e8eb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Currently here so that reference.ObjectValue later keeps its Url. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"699b699705ee9673bc4c6caa2de1ad1ebcdfe273987cb1a51cd0676560c362bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replug this when an asset is not found? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentManager.cs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"926a3613d387b33fddd2afdd89b3f86adff624a47f5687d1a04ec0c5ea0aee36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we return value.Location if value is not null, or just reference Location? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentReference.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"a76c35efe90d5f31279ba56f6fe4795c29f93c2fd3aaca88a9c5d04d5dbd2564"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Many simplifications/cleaning (lot of leftover from old system) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentSerializerContext.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd7414fa36e3d9893d8899d4cef9944b68b2dbf74dd4ca4de022447edab09cef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This behavior should be controllable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ContentSerializerContext.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d664d501b9b3a74688fb2f1a2641e1bbd3518bd4f595293ed9efa6cbb5d65c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do not use string \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Serialization/Contents/ReferenceSerializer.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fb84df3ec871e8758440c19c1cef88ffc4bb98385b917a2719f88d048c78e87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Detect object that are stored without ObjectId being content hash: we need to check actual content hash is same in this case \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Serialization/Storage/BundleOdbBackend.cs"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"53eee0fd23a5a89bdee94a03a50df954f1c16230a8d65a2eb35ebf12ea2a8707"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add some checks to see if tests really complete within scheduler.Step() callstack \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestMicroThread.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"660b0f979dff210f978737a1b3f01c5a40ada0db6e6f229269573cccb510b18a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 1998 \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":"sources/core/Stride.Core.Tests/TestMicroThread.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"e413104b2b094db203f037397881c7437e71a10ad3b3289f423c86941cabae84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO change binary serialization due to microsoft security concerns. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Tests/TestSerialization.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"219f7a260afa6fbe804069a5f1bc98fe43cc4ff5d8741e48a2a22ea293a74415"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SYSLIB0011 \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":"sources/core/Stride.Core.Tests/TestSerialization.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"defa41f08b8a0f9bd5eb17c0b8610765f2aac9071730e4ee5514597492631996"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Todo: figure out how (if?) to assert \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/EmitterTests.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d45ae19bfe7a04607040cca4c75e0ceabb3b5259e1e14b6e54d69a3bc225cd9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Todo: Why involve the rep. model when testing the Emitter? Can we match using a regex? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/EmitterTests.cs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cf6248be8393e80aa28d0c4b9e5564c68308d952b306b79a5b71e3196b0c6dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have something like \u0022!!int?\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d1c8fe876a099c312f434e540ad9008115e45ceb6eddbfb03c7d71555b132cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have something like \u0022!System.Guid?,System.Private.CoreLib\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d70044f26d78d4b1867177c0bf5bab7a3341f0577775a6746f2d3fc1348f17"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have something like \u0022!Stride.Core.Yaml.Tests.TestNamespace.SimpleStruct?,Stride.Core.Yaml.Tests\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"c380d9b38e164ebfe74424bf884bb3541ea890450c22dbc1e3a999b630c4d348"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !CustomName2[[Stride.Core.Yaml.Tests.TestNamespace.SimpleType,Stride.Core.Yaml.Tests]] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"200d1a968fb87fffb4704633efe260d992aad47b85e828e59a014e0b770371e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !GenericNestedTypeContainer%601[[CustomName]] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5373edcff98d626d5c1ce6a601598aa3e187c7c4335f5ee3cb4c7a3bc576fa3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !CustomName2[[CustomName]] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"d385490b8a7642bf6d3a988bb827a5faeddd61bcaf1cff02ad32aaabd75b621d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !!int[] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"19212f46554c8b9761c5c166171984ae9e78814afe7da0d28b5e485e1096f727"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !CustomName[] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"60094a03b48d99524815618a7665a7ce6c7968a580cab0b50ac05ae1bba865ab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !CustomName2[[Stride.Core.Yaml.Tests.TestNamespace.SimpleType,Stride.Core.Yaml.Tests]][] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"96f92261d67352b45acd0249375f4414f1fc116c173356627613c3e83502e37f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !GenericNestedTypeContainer%601[[CustomName]][] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"603062515d02e602e10e86cfc3093741103352e0ff76f143fb403d29cb14b33c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !GenericNestedTypeContainer%601[[CustomName[]]] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"08d9a0a5fb3f42fd48653805aab9b5644a06b6ea305e5751e215d605f9702aa8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like to have: !CustomName2[[CustomName]][] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"f80c22c71efa1862a7b939792649c2a1a3cc6a40233a5b309810199572c53e75"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support aliases (ie. remapping) for array \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5c0dd5b7e91059b7f5885f120bf6d44b7d216e2f46b49ff5a94ba16a5705afe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support aliases (ie. remapping) for generic types, too (tests not implemented for this case) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml.Tests/TagTests.cs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"da575795392eaa59e682d6e216ba0085349b119b31d5b1b6b0ac12c8640f605b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What is this code supposed to mean? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Emitter.cs"},"region":{"startLine":1504}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfc21381c82c26c2eb5417ba3ec6195c22395c117bada0f00d1a531add21cac6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Throw a better exception \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/EventReader.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f20d3a25668a00ec3e745ff903f4bdf2d4268fc827df0a7ae010b571e43b5b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use a more efficient data structure \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/InsertionQueue.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"30a31ac82a0bfedaa1d3a70e68f3d779503deb7ee2c1bec4b8d1f7375002e81d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Check for \u0027x:x\u0027 in the flow context. TODO: Fix the test \u0022spec-08-13\u0022. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Scanner.cs"},"region":{"startLine":1842}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6a73d1a6b7107bdc4b68dca3cc5f4f9249a8d39650a5ecad832cda577807637"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO change this code. Make it configurable? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/DefaultObjectFactory.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"4251379dbfb5d6b1c0eb9d37c63bad404925916fdf24e36410723b82a821f926"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: store the proper type descriptor here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/DynamicMemberDescriptorBase.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3535f9e22e285016b7fb3c88c031b36b0e6d73db08b22abc25c4030a5cc807b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO the current emitter is not enough configurable to format its output \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializer.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce685de9c19e26098749162b9d2ac393bdbc359b9542d810f05a2f03507d33a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this is a poor check. Need to verify this against the specs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/SerializerSettings.cs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"c53fbfdb9484a7abd5a6d1671fbae497aa05fd5cbc6ef65303724df0d076b727"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should go through the ObjectSerializerBackend, not directly use the ObjectSerializer! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializers/ArraySerializer.cs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"64707a821102c192374512b41ddb6bdd9926df2582f935e5eda709f9d97b5111"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should go through the ObjectSerializerBackend, not directly use the ObjectSerializer! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializers/ArraySerializer.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cff1dc9ff6bc025d5fe0a9b7ae5be2caad208f6eb91d5815c8ff3c00c47115f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO check this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializers/PrimitiveSerializer.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"51578667f91744ec3ef6ce372d0bfafa759501a87cf39b6ee16beba836f3ac29"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO check how to put a location in this case? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/Serializers/TagTypeSerializer.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"450f4fdf8d77fc02dd583225c1353595fe6f9751e8b515442b148cc80f43aa87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this is not really failsafe \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/YamlAssemblyRegistry.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e92f9b5124338d0a7e328fce4613ae7ce756579a7949f11dd7861bfd58f6dca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: either remove completely support of UseShortTypeName == false, or make it work in all scenario (with unit tests, etc.) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/YamlAssemblyRegistry.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"3529d32a5ae7e9cdb166ca2dc257c10060f0e63e9575b3e428822c61adda9367"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: either remove completely support of UseShortTypeName == false, or make it work in all scenario (with unit tests, etc.) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core.Yaml/Serialization/YamlAssemblyRegistry.cs"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"776fae3ebc95bae8b4fc5ea53f9e6c956d086cab03897086dfda1e22362db4b3"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] FastList"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Collections/FastList.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d654fbe4361f4f4c0f08c32420b7e960bf8185678ef34fe9af6db5f21f5e695"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] Items"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Collections/FastList.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"e042f7156e53716f8e2bbccd1f58fb545bb431bdd463a3b46f882ca7b6d4bc4f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unit test this collection! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Collections/IndexingDictionary.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a128c4cd8d0a42556502b17a0ad7efc3665b0c2b04164039ce69ff3a521c9ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Not fully satisfied with the name and the extension point (on ComponentBase). We need to review this a bit more \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/ComponentBaseExtensions.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"c700a207e13bee9cc5c5441e591d57ddef5748556cef83fefbdc62da1d0aef6f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: MOVE THIS CODE OUT IN A SEPARATE CLASS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Diagnostics/ConsoleLogListener.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"365d29879cebc8e42ea23abb3e43d5e5d248136fde5745399b2bbba4c14ef4f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Current design is poor as it does not support recursive progress \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Diagnostics/IProgressStatus.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"5083b097c777cf80e9f11af1fcdf6bfb9fa7dbb20a0f5135c89496d922969e0d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Hack. No guaranteees this won\u0027t collide with a CPU thread id. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Diagnostics/Profiler.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9515d0d6a6e3d9afe6779011601f79db8c774e3ef41c083af54e53e2e600c28"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Use TicksPerMicrosecond once .NET7 is available \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Diagnostics/Profiler.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c8d0ddc01d12196667c851a4ed8f3c387db2181e708560cae22a793892cbe6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Map GPU queues to thread ids \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Diagnostics/ProfilingState.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"c35b1e8ea9bfd85edd10e08bd7b4432fcfd05d63f1d81942d024670d25917d1e"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] GetDisplay"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/DisplayAttribute.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"74bcc27e533c5db3807bdd4c4984757a45444c1ef25ae9af7d2d609b83ee02f5"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] GetDisplayName"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/DisplayAttribute.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"064182f5902e6101787f143d11bac90e524ae7a64bb054aa8769a4898e8d0337"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] GetOrder"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/DisplayAttribute.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"9add74a10d1163de3367d8ce1f070376a98f58db06a473c7e4bfdfee2d5d4333"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Merge this file with CollectionExtensions.cs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Extensions/ArrayExtensions.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b5d889f814e883660bbb35776bdd68cdaf9f6e33dda4b59b67f603e9be5b0f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This class should not try to initialize directories...etc. Try to find another way to do this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PlatformFolders.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8f9e5dad5a28e76c14e90d4e77f18b7004e538fde0553f7f12a37a6727051b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we add \u0022local\u0022 ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PlatformFolders.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"d12ccc28893907fc68eb84acdfaa9fcf953f7687cac202e55b93eb5d11338e68"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we add \u0022local\u0022 ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PlatformFolders.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"8efdf813efe7d549395f7aaaf3f2af1d03724136f22b706a43677f993616c18a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we add \u0022local\u0022 ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PlatformFolders.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"d811294eb2ea8fec6fd12ae45ee4065a39e165ca6820b738ce9cc4a9604d8a0d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: improve this. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PropertyContainer.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e59f1fd8e93f9e82136cd140fb382274bb37e36d990089a7b900ad67490993"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Not optimal, but not used so far \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PropertyContainer.cs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf3dc774650d12cfeac87fe70a5032b7efb7a4e8201a73e4e516be55ec26663"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Not optimal, but not used so far \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PropertyContainer.cs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d80cb7eaa22e8d430fd4e42dd6841a76b4afad8524efde497c4bec3b11dc5ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Not optimal, but not used so far \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PropertyContainer.cs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"c48ccb80d72cd32bf2b8913244cad22d5415576316eaa21822c229c6194b55ee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use typed validate? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/PropertyContainer.cs"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f783427dff03b1b10dc327c7d62d9cf43480d4e104281aecaaaed360d5ae79c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: At some point we might want to reorganize AssemblyRegistry and DataSerializerFactory \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Reflection/AssemblyRegistry.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd023fbf847362173819662ba3f50254ef1c8c01267df9c683593ca9d9ddf308"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Reference counting? Waiting for \u0022plugin\u0022 branch to be merged first anyway... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Reflection/AssemblyRegistry.cs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5b010bc70ec26b8b08337c17bfa59638fa10c1908ae7163e7553029a66fc40e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should remove that as soon as we can register attributes in registry for \u0022string\u0022 type \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Reflection/ObjectFactoryRegistry.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"563fb034d6b9c8a5f2cfe95d7d47c04eda9c457499a6820327eb1c0d94b953a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Warning, exception or override if collision? (currently exception, easiest since we can remove them without worry when unloading assembly) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/DataSerializerFactory.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b9c87005e260849b017b1f9e4318a11393a8df09b9d80a2746a5a205548ec1c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For now, we simply reregister all assemblies one-by-one, but it can easily be improved if it proves to be unefficient (for now it shouldn\u0027t happen often so probably not a big deal) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/DataSerializerFactory.cs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"15d776fdeb6f4d9a8d3553b5fc2b855c7bd28e894d8efea1edd8749f18fd10e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Warning, exception or override if collision? (currently exception) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/DataSerializerFactory.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f02ef34575408485d1767ad2fdfc4cfb05b5671454ee354cd93c1c2c1db576"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated across 13 files: The identical BarePragmaDisable (\u0060#pragma warning disable SA1649 // File name must match first type name\u0060) appears in 13 files (13 occurrences) \u2014 a single repo-wide policy (e.g. a Directory.Build.props decision or an idiomatic suppression), not 13 independent debts. Decide it once centrally rather than file-by-file. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/DataSerializerFactory.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"18fa11c87863a61531c7e4159c4bd2c763320bd5d0990cd8e1f3de49b3c43701"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Switch to extensible/composite enumeration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/SerializationStream.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"f891b78aa469850ef7c0834d4f42fdc4e7acc623582843023df357c68f8fc6db"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] ReadBytes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/SerializerExtensions.cs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac5d22e230d5bacb1648837602712b337a9509f04583c2f21abb4ef5449542ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Peek the dictionary size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/Serializers/CollectionSerializers.cs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"18057a098ffebf53d8a09b9c6ae76aac41dec3688447a2363cbbf5973b76161c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Peek the dictionary size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/Serializers/CollectionSerializers.cs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d49bac77c96de2fa23ac1fd2ed603adec149efc4ac0feb74c916fc89840a0e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Peek the dictionary size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/Serializers/CollectionSerializers.cs"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"046403aa08bacf04f7c9a10603d38f41bdb96ce7628b92de87a973768991c825"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Peek the dictionary size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeColorParameters.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd302a76a628e63c57d166630900808ea99933d4f51627b2e35250b9b64317da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We could probably avoid using TrackingKeyedList.Add, and directly fill the items list (since items are supposed to be sorted already). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Serialization/Serializers/KeyedSortedListSerializer.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdb273285079af822371b113fcddeba4158d96c82c714f13b6883d53505a7d3a"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] UnmanagedArray"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/UnmanagedArray.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b5698bde3aae9263739b5f4da85523d5f622f6b83cadba3a9d23651548e3b7"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/UnmanagedArray.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0ae31e3f56cb5f2f1b9557ccf8728eacf9b5de4a42b65cd7ab915c8ce21b507"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8500 \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":"sources/core/Stride.Core/Unsafe/UnsafeUtilities.cs"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d649206bf2d280dfbc9ecaf9397484409a81b25db3f484b885d79348c8181e9"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] ReadStream"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/core/Stride.Core/Utilities.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb6eb88116666deb7ac4c3d67a7506d28935a211034a9db06c41e9f2ab8469fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Filter by \u0022modified assemblies\u0022, for now we reload everything \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"a656a3e5652935415aa77b0eee073e658df75b7f68edbf97bdacca58e562cd9c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Share this code with ContentValueChangeOperation? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"71732375027740c7d62a3d535e235c858ff6d402fe6500c9578f5605993b0b69"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Share this code with ContentValueChangeOperation? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c3e19385715760c234ceb37564dc35bc7c36853f299316a94e63d811cb35c58"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: How to better detect CollectionAdd vs ValueChange? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a1e8b95672064fb184b8d01daa05b9840398c8c933b2404d4ef27afc6bd040"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: How to better detect CollectionAdd vs ValueChange? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"589c18b3c67440379083810149c99bc95000b9b52859dccde0f2181ad24534b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: More advanced checks if IUnloadable is supposed to be a type from the unloaded assembly (this would avoid processing unecessary IUnloadable) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"a39f14a4a5ec566f21deb37cc7d9a80a523d74a9e6420aa5d3b78ccea5012a8e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be factorized with UI editor (at least) and with Sprite editor (ideally) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf5c9845f05ccca6d7632c1a0cda53e8a06b37e8ea9b43bd0c9e242caf9560da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: reimplement this! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"18cd26e789a5fa51ed974a24b4bf9ebdb4dd37395058a8f9678eb9810af6860e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this could be factorized between the different highlighters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetHighlighters/MaterialAssetHighlighter.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"341588225a3eab089e9ca426aa2163602428eb291cb117d60dca46ac396dd00b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this could be factorized between the different highlighters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetHighlighters/ModelAssetHighlighter.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"deeae6cbfd1c5b136310415777bf7ba8e1e4a7e29dd024bbb37fc3a6b18271f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this could be factorized between the different highlighters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/AssetHighlighters/TextureAssetHighlighter.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f8ca98178ef686ff9c736972f1b37a6c58019de64edf73ac2a48f6ca46c03b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Hierarchies are currently not supported \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/EntityFactories/ModelEntityFactory.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"570067b464ca214728816aa3da9977bdfaa7f68934221dd0ae08158bbf256ea9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this view model should be in the SpriteStudio offline assembly! Can\u0027t be done now, because of a circular reference in CompilerApp referencing SpriteStudio, and Editor referencing CompilerApp \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/EntityFactories/TwoDimensionEntityFactory.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"097f96c1602e81f65f8acebe7b05857e3a010184444cafb36ba21a8205d83d79"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this view model should be in the SpriteStudio offline assembly! Can\u0027t be done now, because of a circular reference in CompilerApp referencing SpriteStudio, and Editor referencing CompilerApp \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Preview/SpriteStudioSheetPreview.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4c9dcce3d9207fd9730234d624dc4b88a16ef35a34b50b18ecd5784e541cc96"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this view model should be in the SpriteStudio offline assembly! Can\u0027t be done now, because of a circular reference in CompilerApp referencing SpriteStudio, and Editor referencing CompilerApp \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/Preview/SpriteStudioSheetPreviewViewModel.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"99c79f8435961f87403d6c2f32e7386e0611bd8accd97d0152ba1283c2e2cb27"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this view model should be in the SpriteStudio offline assembly! Can\u0027t be done now, because of a circular reference in CompilerApp referencing SpriteStudio, and Editor referencing CompilerApp \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/SpriteStudioModelViewModel.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4a0d3e7a3829fce0a8cd6bdceb77c706dfd6629d4c8896b43ec408676c00988"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Combine this with UpdateCameraAsOrthographic! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8be5fc58c33cc59c6555e9eaf05bb23b2096025ca8a054bc69364e98ec34452"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: code largely duplicated in EditorGameMaterialHighlightService. Factorize! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntitySelectionService.cs"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"069c6d990f68e6d8bafd86de00104927ab83762b694bb8abb0973cf30668bfab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Complain (log) if there is no MeshRenderFeature \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntitySelectionService.cs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3ec0974231a2e4135a8646c03d5a2c4feecbf68663dbc62f9ec37fd701202f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Complain (log) if there is no MeshRenderFeature \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameMaterialHighlightService.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"d027035a17e0e960f8061583de176358764693437bec636d4543fb0fd938dd5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Complain (log) if there is no MeshRenderFeature \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameModelSelectionService.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"e173e73f343846777a93b0464cf23f27771d5c4329e33f41f604f5982addcac5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Complain (log) if there is no SpriteRenderFeature \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntitySelectionService.cs"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"406b10cc6e4823dae69d5d4bd9f07d0a8a9ae3752fa1d08f1d9be0668fd293db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: SpriteStudio (not here but as a plugin) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntitySelectionService.cs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"84eba34d0a7a5da7cb806af7da4a8ff53eae0f05ab6e16e9813c8ac289e31ba3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: referencing EntityTransformationViewModel should be enough \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityTransformService.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"c73ac093588f4ccd12f5694ff138b4f348345ef6428e0653c4a4b066bec568bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Start listening for changes in this compositor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameGraphicsCompositorService.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"b61516736b777c5f3322db3adcda279f2cd1a1492a9b07ddab36aa021031b988"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: If nothing, fallback to default compositor, or stop rendering? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameGraphicsCompositorService.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"7159c664caf75b694911c4dd5bca52b9f64066e681bd997d19674836b14097d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Prevent reentrency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameGraphicsCompositorService.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"01c807e2a4dbbd4d1a8d58f52d2e52008f5deeef950b875720fb0cdbd89d716f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use LightProbe Id instead of entity id once copy/paste and duplicate properly remap them \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccf70677b61904d0b2b6750a93c3bf773c7ca9b69907aa61fa05970ae22aab50"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use LightProbe Id instead of entity id once copy/paste and duplicate properly remap them \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EditorLightingViewModel.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"5571090a00665d050478103cdeeda9a15e6f8317975e9048097efbc191ccfb58"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move selection/wireframe render stage in EditorGameComponentGizmoService (as last render step?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbb0e7669ff9607ceec60ed13cf9de388a250e5f89db92788138b26bf7c6ccbb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: More general implementation (esp. if moved from this class to EditorGameComponentGizmoService) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f8ea1fc2500004445bb9fa288ef691321af8416e97d572604024f6b0bc2a707"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Avoid having to go through entity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a320faf1b1bbf9cd0ffc1c0f728675778f08bb16a02546bff93005217fd6de4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Avoid hardcoding those shader names (maybe by letting the user mix himself editor mixin in his own effect?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameModelSelectionService.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c81a9d85469693e3b71b691c0c080528cd50b11da09bb76e9f7cc1e17447ab7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: A more robust mechanism for filtering or redirecting input? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameRenderModeService.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cf3314add1b543eecbaec22a4c19afa9808e06551413cb02b081dccd07e432b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: turn internal or private/protected \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"b289c215e9e039137c4bf493a9d3e999776ef8605197bd208552b6161e7f0c2c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Log or rethrow? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ea85d915c2a26de2a0f1204fe6c5e2cd67a8d5b9f4ea4ac42514bdecde7f8dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Shaders compiled on main thread won\u0027t actually be visible to MicroThread build engine (contentIndexMap are separate). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cffb03a90e7d8c45c0fc3557766aca29371c49cde1e60960a3cedc50ff592f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Shaders compiled on main thread won\u0027t actually be visible to MicroThread build engine (contentIndexMap are separate). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Preview/PreviewGame.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9fcc110e6f01d2e777b0e48ef9c982d1a54f38857eae742142d38eaf08a4053"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Maybe define this scene default graphics compositor as an asset? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e50a71a471f4ade6d51c9ce3368455e6a2c6803b834dd9182693b7691d85c1c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: callback will be called also for editor renderers. We might want to filter down this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a7c94758cb70e0f1a9b5af908afa2d0ae56edc5dce37eeb6b569f1ed953a5cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: callback will be called also for editor renderers. We might want to filter down this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine.Tests/TesselationTest.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ebb81199e5ef6049962bb99ad7060be34a35c0e597fb361a012c715b7c66855"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check how many scripts there is inside this file? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/AddAssetPolicies/AddEntityComponentFileAssetPolicy.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"e004261b663de0bd2bfcee00d8d5d3822050001224c7aa318d2cba332e3dd23a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Display error message \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/AddAssetPolicies/AddEntityComponentFileAssetPolicy.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"65bc20d07e38ec75941cecf294e21cf5c018c016402c2a353f4b2099a1cf634d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn private, create a service getter that accepts only IEditorGameViewModelService \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"682df17cadd84fb0927609a9be51b8ae56173043a879985ae5ea2139f98be651"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: it would be better to just set the one scene settings data instead of the whole collection. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d9fc9e79758d2f1a2de6f99a0eeb379869fbd2acf30819e5d811d6aa86d091b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: it would be better to just set the one scene settings data instead of the whole collection. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SceneEditor/ViewModels/SceneRootViewModel.cs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"903953aefc8854af44d80f45dad1e2d15c3a8eadb4e6bbe786adc2615f94098c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: it would be better to just set the one scene settings data instead of the whole collection. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIEditorBaseViewModel.cs"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"96b26e5d5bbe16f99eabb6ef4a0f214b783817426015f5063e0f91c234f3df6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this can be easily supported by calling the other override of InsertAssetEntity. IEntityFactory and all implementations must be modified to return a hierarchy \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"425273058ee8c2f9fb7a0bb3de57a35d0ccb25de29f6fd8e01fc9d619b840b33"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should compute the actual total number of entities to be deleted here (children recursively, etc.) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2c74e020db7152883e7985461268467b13246bdacd5266eb98e2ae83a4e3d3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is code for re-selection after undo/redo, it is here for reference and can be removed once the feature is re-implemented \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"64d1587b0a5e0a36188061957736dac3b13720bbae24117d9263f0a40ba08921"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //            // TODO: find correct action items in a different way! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs"},"region":{"startLine":648}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9b0ddc52dae573b28b7c3c323a55120c3ae9d9b6c149aabbf2a0c1ded0720fd"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: what about cross-asset references? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementChangePropagator.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"b46f88c62c7bb99a01212ac7a91a74cf678ec842a0a7e90118f956159af579e3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is very similar to what AssetPropertyGraph.CloneValueFromBase is doing, except that the base cloner is different. Try to factorize! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementChangePropagator.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8925c3fa7eefc1525e13f1a309f3309e191e29c936f607c12ce65ecac1c78d35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement a more robust folder grouping method that trims, etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd939bbb5c0637492c4c81763ccad1abf5d31056b230519200e357d77b292307"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: also ensure that empty folder are serialized as null (or vice-versa) to avoid this kind of issue \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"611f1f1fc17e8a42c6d8847f065b35807879b257314c93514ff0f7c370ccf526"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make it work with plugins (discovery, registration, override...) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"3063aa3dc0b0f2288fbfb6b1654fab2d810bbd143399609d63eb0421747f4d52"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: find a better name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c6d092403389462edd7a4b0eaa281afc369c7f02460babd79c4213367481f76"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: find a better name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4066ff7d3294c3b962e4ae666c93821ca84c3802a62c616e3b6b36cfd9dca83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this could be factorized with EntityFolderViewModel.GenerateFolder \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"13c696aa0cc633690fdf4a07865d94c4ae5f3a93f3d7e45b0c2191225f9d2a33"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: consider using the cut/paste mechanism for moving entities \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9d931ef25d7ac066a09d09dc5e78c85bd4f8a7dff5651d78eece80ec742c9e7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: consider using the cut/paste mechanism for moving entities \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIHierarchyItemViewModel.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"30fc7d6dfe3989ee153e84af5304bf8d3718c687cc7be6ea342989ceeeffe594"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: update the folder after insert, and subscribe to changes in EntityDesignData.Folder from EntityViewModel to propagate folder change at that level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c44bf815ca6ec73ad31d11b3114f66772397dd96c35d1606521022e70fe2e6f"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: the following lines are identical in AssetCompositeHierarchyPasteProcessor.ProcessDeserializedData(). Consider factorization. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"3421d52f74d5eb16365d10f0220afd2be0097bc4f5c70446c074371ed4d646bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: try to move all evaluation into CheckAddOrInsertChildren so everything is at the same place \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs"},"region":{"startLine":762}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e01df1b5083f36f53f7453b69d66659a196f8befe7b7580a229a366611ac3c8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: disable this sanity check for now. It is frequently failing in the middle of an operation, because we are modifiying both collections. Would be good to restore it later (as a CheckConsistency like in SessionViewModel?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyRootViewModel.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"c257250371c66aabb35d0af6923fa12c2fdfc1f78e049d6eb99ab835fc07d7a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can be factorized with what EntityViewModel is doing, through a base method. There are a few differences though. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyRootViewModel.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf343b4e0b2972b6b6479c5a75595b3849c395d13ac0bd9e45cf17c29541114f"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: when we allow loading/unloading single entities, this should be implemented in OnLoadingRequested. Then just call RequestLoading(true) once. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyRootViewModel.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce4c07c5f954aa5c628478a5f04e15cd662981942ffcbaec219a33b8695e91b9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: when we allow loading/unloading single entities, this should be implemented in OnLoadingRequested. Then just call RequestLoading(false) once. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyRootViewModel.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"724aeb745cc741dbd7a48b16b459ab4c0932fee26e3c0ab107d4f24ef31a42ab"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: set all children as unloaded? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyRootViewModel.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"70ce2c7f9d9ee16990a8661c5da32d0a96e9663f8af97c244296a26374f3191f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO These models should be pluggable later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcc21d9dc8d2c73087928bed6da4b3e62909c63c6a15f6006beb31ad7a5594e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make an interface for component view models so they present these methods \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d30f2eb26985c321228518846b1cf0bb2fe8866b2378ee5355f1b36e3401d98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn this non-static and put it in the base - just keep the entity-specific part here. This need to rework a bit how we initialize folders \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e2e2a2b6f63702a8919d171137c5825241e1bb218a69e2d8f9fa02f5491a86f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we don\u0027t support explicit loading request on entities for the moment. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ba80c077c0e3863de84db4eddafe2f71f109444acba86206d13f2e44d354a59"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: in the future to allow loading/unloading a specific entity, we will need to call AddPart/RemovePart here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c2b16444fee760b5ebfa8c422f4f5e9b5328ba0548887d9d12af2888a763fe2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: and handle all issues releated to references (i.e. what happens when we unload an entity that is still referenced by another loaded entity) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"20099789e11f1b2ed1c802eb5907539f196afb0abf40a1538c1b043234945f2e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can be factorized with what EntityHierarchyRootViewModel is doing, through a base method. There are a few differences though. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"843200dfa9248550c1f5b5d836cb27f3450e0984258f4274f162cee96552a8a6"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: when we allow loading/unloading single entities, this should be implemented in OnLoadingRequested. Then just call RequestLoading(true). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbcddcce8660c6029653509232227e472bdc8ee083d0840e3bfbfe7176cb7484"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: when we allow loading/unloading single entities, this should be implemented in OnLoadingRequested. Then just call RequestLoading(false). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7c9b8416e380dde6b33153c5bace7260b1605e8517520cead2312bb9f7eab9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Offset a bit (by 1 scene unit horizontally?) the cloned entity so it appears distincly from the source entity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"990ff309a954052d6c4ef31055ae45698caa7336d8af698944ca996fae15a445"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Verify this is correct. Preferably compute a value in the UpdateCamera method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/Game/EditorGameCameraService.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"64c093802adc5317178b5372b6afa61cfad5c1e1b9b28cbb2106a5fb96e883af"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: split SceneSettingsData to some kind of dictionary where each service can add whatever it want \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/Game/EditorGameCameraService.cs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"f794c78d7968deb7051e20098702171aa4c1c109f3f5e81506afa2e0943465e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we might want to move that to the plugin level at some point (or even above? in Presentation?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/Services/DispatcherLock.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"75ca40e02abc6806193bfedcdbe4ce820699df37fa362a54db46f9370c8efa60"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could check if the game fails to create. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/Services/EditorGameController.cs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"73e1674fc6d550cb6442036fd4facf7ad55f3acb62b0546b164ce94703f603b8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: share the proper const \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/ContentReferenceCollector.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcad1984b48c38cc67b404f7e4229bd8d688c645426ecbc9ecea1b4d02290480"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this base class cannot do much yet. In the future, we can make some EditorGameServices compatible with it and use it to edit assets other than EntityHierarchy, such as Model, Material, etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorViewModel.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"65274e16421419045ee064e36d15c7832a004bc734d8c8c709be7ebffe6ee663"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment repeated across 14 files: The identical TodoComment appears in 14 files (17 occurrences) \u2014 almost certainly one boilerplate line from a single migration or decision, not 17 independent debts. Fix the systemic cause once rather than file-by-file. Text: \u0022// TODO GRAPHICS REFACTOR\u0022. Source code is not a task system: track the cleanup where tasks live. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/GizmoUniformColorMaterial.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fd7ee76378c89f6fb9da8569f4509d05a15e689bf2910331928e7aaabe092ef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: If this is being called multiple times, are the resources (vertex \u0026 index buffers) being freed properly? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"84a4f2df9d6a36c271380ba1f6b35c521495bfd916f13ddb8f87eefc6594f51d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Does \u0022Build()\u0022 properly release the resources? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea443a8f4b43da85666a5925c1746c3077c8e3d7b454ffdb40d6794adf6bea2c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This will trigger a rebuild even if no texture is being used. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c2bc9375ae0ec01c489c5ccacd02160f3ed68bedd16b653505d2d92d7b91bc3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This will trigger a rebuild even if no texture is being used. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"c945beb69774b603192f83f00435640f6e542c9ee67f79409836b0989e7f0a90"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERFORMANCE: We\u0027re doing redundant work. If the lighting mode changes, we do a rebuild and then we also update the vertex positions (redundant). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5a8cd5eda5108cb7c2fb3a08de1ef6b071921c862697c8c6c9e69399cef6210"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (?): This ignores the aspect ratio. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"1839704205975b30972f1dea1eac291ec46e18d2863ba6c0bb1641ecdac43c1a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is this correct? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"29dc184f39572d8a9ed591899cee70b6dff03108eb5b67824da0615eabd65c1f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is this correct? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9dbba100db92b8f05cd707b83c6f6843672c5683e8a44e49cf83c801d994f69"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is this correct? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"f51ed5e80d7927e0c1f3657fdd8b69ec9eca9079a795edbebc15f348a19451ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is this correct? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"52504599e78b6d0ea46b86704df1a7ea07550a6da11209d7baaefee2606f4319"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //float y = MathF.Tan(lightSpot.AngleOuter) * lightSpot.Range * 2.0f;  // TODO: Is this correct? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/LightSpotGizmo.cs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"5733cc2c0805b7546b32b47a1246b7d7d55a43e76c495c6ed043fd059c488e55"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Invert cones \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ParticleSystemGizmo.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c07c7bcdf40ce9df2a31701cf01be42da7198fc6645fc6ea5b76240d65b8d65"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use cameraComponent.WorldToScreenPosition instead once implemented \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/RotationGizmo.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff5379e28dd7a53b633649eb515682884de0d2192a5db14ca2ef9975d41ec031"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate the actual source of the presence of nans which must come from one of the matrices. c.f. XK-4627"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/ScaleGizmo.cs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"45ae7b51663f9e9b482429238d9f1884c4dac0a4aa99a1f5a2f9be32cb1edc77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate the actual source of the presence of nans which must come from one of the matrices. c.f. XK-4627"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TranslationGizmo.cs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"312b93b359efd8f1f365c703f16ae12d2704076586b92ac4b91b56d37db4b9fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO perform this computation only when necessary? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TransformationGizmo.cs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7042013b07c55d1893d3a19f428898ecb685049bd69e09a687d6043c68ea43e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: I added this fix because I didn\u0027t know how else to make this case work. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/Gizmos/TransformationGizmo.cs"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf52dbd094ac1ebddbcc018e4eb172672c6f351354ac7abac2d45f36fc8ae791"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Relayout the graph? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorEditorViewModel.cs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ae6f4f0318916a64354b1b1fae230ef46090d41ede1feb4ff696ac66c9ff95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could easily support linking in that direction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererInputSlotViewModel.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d4341628efbd6aae33e548ee53a711bc4170424d22e21c10d088e32ed476b5e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could easily support linking in that direction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererInputSlotViewModel.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a7634b0b18c3f14d8b5981af1db70eb422bfe4baa6a52e9d4a7b35c76fcc8bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could easily support linking in that direction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererInputSlotViewModel.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63ae1cf8cb8fc088a158a7a0a809b00ea3f9a56db65f10dbf687fbfc988a58d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this object should be more closely integrated with the NodeGraphBehavior \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/Views/GraphicsCompositorGraph.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"23b55af0f2368cbb3119168c8058080324dc258d2bbdf1cd89ccf86478048059"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle current package changes. Detect this as part of the package solution. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3f39574ec97977aaacd378ffd448771a3c0597a31e97fc112f967fe15cf1619"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check actual unevaluated .csproj to get the auto includes/excludes? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad0ffd811263118b6727fdcee058ab61adb21699127c766eed16d09092ad2b2e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Properly untrack all files \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"babb1310f91c63f0cb355f57ee8f670bb32bbc9bd601294afa10d7d94a27287a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Detect changes to loaded assemblies? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2ed6ae7e0c9d8e0ff723806663e52ac6020199b49c34f2501c7008f8e3cc007"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Properly untrack removed documents \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4d0866696d9a6c44cd9d4d588a1753f10ee607e00d26278039153343f195266"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is not protected by the _serializationLock \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ScriptEditor/RoslynWorkspace.cs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"369db4defb8d9c8fcc8deb0d91f7ca0e24411f6902b60a1bee4533ad7c01028f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Warmup() is internal \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ScriptEditor/SimpleCodeTextEditor.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"02f6b817f267cd3ef22ab73f83535bc4c7f328cdc25f2771166c88f11bf82c6e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider invoking this with a delay, then showing the tool-tip without one \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/ScriptEditor/SimpleCodeTextEditor.cs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0310aa0d605daad0f3f83b67efb6de133b93b3f4b50d124a76dc1b5e7427dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: not yet implememted \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteBordersViewModel.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e796dcd22f4de2557715ff33cbe43afbd986094067402add4ab0fe41b43687"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: not yet implememted \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteBordersViewModel.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ab04cc92cf1dd38933aeb3fb489076f4bfce1736e0d4278933402f142994475"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: dispose this! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3b31c818d629a55c814f42c44eb811e42fa26f3cc717e02778a6ffc37cb9b24"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this could be avoided if the cache was managed view-model side. Then we could try immediately to load, but add a retry count. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"419b8554c5abc838d549e63384337bc7a6a545d7cc9619fb77fcb70e9aaf8803"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: dispose this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteSheetEditorViewModel.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"e593afd6f50a2302cfb3690e786c8deba8ffe5bba6424b7e6a05b46c887659a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: pass the ctrl state to the command somehow, we shouldn\u0027t access to Keyboard from the VM \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteSheetEditorViewModel.cs"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f7e53ea4e7b6d8ee6f05798f78d542c2c3d9c7e8a485d7072530ba870b88681"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: to be reviewed: not supported yet \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Adorners/MarginAdorner.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bcd144c306bca4a41aab544f612a0762733d054dc37381a2703ad5ad21d5d73"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: expose this value in settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameAdornerService.Events.cs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"82b41ba15468377782bfed5983ba02b746ba341135f57a085759720c63175103"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: special case when trying to move when there is nothing selected: should select and start moving at the same time \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameAdornerService.Events.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"e784416145de8bb52d3cdd6b62bbf60e5f5cad58c8c3bbdd66c5c94e7c4d8b70"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME: add an editor setting \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Services/UIEditorController.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c83dafcf39ed1a93cdc5d63db439dbb3ee5cf14b12056311954e913f33fa528"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: add an editor setting \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Services/UIEditorController.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcd08374f22ff714f536516c07199101ac84e75a348502f4e48162b70ea9e625"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: add an editor setting \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/Services/UIEditorController.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"f01fd6d6b6bab5f0686043c1e10b83fb91f22a23651bb3e4b94b69ed5dda0309"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: review if this is fine doing it that way or if we need to do it the same way as when moving elements around \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"89cbc707f33c7b86431da0160aaabc5e2abfa41bdf8f5297fbec71266af4ac6a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: should be similar to \u0022move all children\u0022 then \u0022delete previous panel\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"c427d8171defa87c1dcada680ae9a1b8168bc17fcc24beb8acb6b36ab9e75718"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: might need smart rules for dependency properties (maybe use the same rules than when changing the layout type) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"6356e212c03d506defecc12c7eb8e86d2ab9b5fa34e3ffbea7545b5bfe76b4fc"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: we would like to call it in the same controller invocation, but because EnableAdorner is awaiting the propagator we have to call it from the main thread \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIEditorBaseViewModel.cs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0dfb1230c1fbc69c713d4710c5d458caed9b33b8efa605ec76feea5c6d56c5f"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: only retrieve from current package and its dependencies \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIEditorBaseViewModel.cs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"c997ccab1817fabb6c60b6a5ba4060e959ddb3a04887c1e568c7f947a5301574"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we listen on MouseUp instead of PositionChanged to avoid intermediate changes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/BlockNodeVertex.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"b806284847d1599e5222aca6d67dad4bad5961fa52fb783258f900a2e5230195"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ref/out parameters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/BlockTemplateDescriptionCollectionViewModel.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eff57ca295582f3b68df2a0b6dbf3512587828f5dbb0bc766cdafb2b9dd46a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check if view model is still part of the visual script? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/VisualScriptEditorView.xaml.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"34a7f0cd4fff12583bafe9d8289c840c2b7c35af0e5f0144a5837105f2b956fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Get a read-only copy from AssetChangedEventArgs (this require changes in the action stack to take immutable assets snapshots on each change) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.Diagnostics.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e5277ae231c1b0a13de4d84b7e6137ecdb5ad5a5131941ea705cd30aa284516"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Log it in global pane? (if yes, maybe we should move part of diagnostics code in view model?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.Diagnostics.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ffcb76df398752d9b23fe9bd508c3f0f8a7bbb4cd8745f9af2e653557d3b880"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this non-blocking (need async Destroy) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1ec1880a40977178364cc6e91fac36bca565e53b5f905eed63417ad88081b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Properly qualify types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f254a905aa2b7cd4d7e0e4444ecefcb9d484a8c83c137abd0e8eec5eb5d984b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Properly qualify types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a489c28c3af5dde4803b3153e2914d927e7db527f83fd04ffa7c565b8ec8e86"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Listen for changes? Probably not necessary since a link shouldn\u0027t be able to change type (if we disallow connecting to incompatible slots) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptLinkViewModel.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cb6de68deac27ec69388933b77c10d7c4896521abc1b8f7165700044fd097a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Process prefab drops \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptMethodEditorViewModel.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"8839fc698ccdca9598988394c5a8322fb94a0684f15788e0d346779b4a7bd04b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can this be improved? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/Axes/AxisBase.cs"},"region":{"startLine":1002}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0b67c20d8284b0e08dcffe78e83864bd7b77d386030fd4e6308f99762349087"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME (performance) cache the value and invalidate it when the point or the axis transform changed (not that easy) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/ControlPointViewModelBase.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"532c169b029747b288fec4cfadd475fc603e5c845114d168e8e64bf99cd2ac03"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: should we move this into a dedicated class? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.DrawingModel.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f826bed18d442a0a467bd48cb2862fe10fae248ce9a4a22c464b91d9ed1f7b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: allow curves to have other axes than the two default ones \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.DrawingModel.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"42ec2084d01c5dc6e761b51ea86674ca4d33f771f7fd6fd29460a35d577e839c"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: for some unknown reason, returning the x-axis first causes some issues on the view part \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.DrawingModel.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"00316ec37ef72f40debfef5a78e0531ed9885bdd86bf4fce0a52aea1e6aa6d4c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do something. E.g. exception? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.DrawingModel.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"61b463332e102767b59d1c0c4c5aca1a615ed376e268304d73b228fbd0596176"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do something. E.g. exception? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.DrawingModel.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"69bd37116e2e3fd11da2a58b1a861e9d84ac1009fbdccfef2a0e329567a6ceed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move this property to EditableCurveViewModel? or merge selection from different curves? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"64df2f54bbd5c9c25e345a2118a3bd3490127e33f9611b00b636d9d8e3da6c4c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move this to the curve (especially hit testing) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"04743aa3461775d325680420b5e564e00bdb90058cb6f82100feb1f7d645da87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move this to the curve (especially hit testing) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"432c6cf704293afc7b9080ca223a0b73ef7ef3ff1db679991adb62b156af3b04"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: do this atomically in the curve \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0327fbf9f2bbeb324317df75830555be711ff16c89ae8484931d8fee0e0f7e2"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: do this atomically in the curve \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.cs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"39d8e5e4dee51161854bc7cf3f2acb1c8f09aece4b96177cff79047098ff53ea"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: do this atomically in the curve \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.cs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"d567341e5b372b52d2e1accc1aaf308ee30843fa4d828a382d167e47481f6d46"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: do this atomically in the curve \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveEditorViewModel.cs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"2273b5f863e5216be11e89af6d595bbabb70c00f2b58cee04050a9d6470764bc"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: calculate (optimistic) clipped line beforehand so that points that are eventually outside of the clipped area are not given to the rendering context. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveViewModelBase.cs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"f64549d6ea476eadebc2d2bd728aaac963c7460b7e0b860c1cfaf2928ed6bd20"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: note that in the end the curve is still clipped by the canvas Clip property. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveViewModelBase.cs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4eda796a344e000ac07f8db5aa6bcdbf3454c9f320a2a01caea5fb130321eb3"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: refactor isCurrentCurve and use the IsSelected property \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/CurveViewModelBase.cs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e048f27c9f08f584cbca3639d23733f93c16411b578ec58a9676d7b039427a3"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: might remove this later when hit testing is done on the curve \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/EditableCurveViewModel.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bb7cb47cc32e9172d8daa3b6483d3c1893fc7a226325345966dfc34fa2a22c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: also render tangents \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/KeyFrameCurveViewModel.cs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fcbf7f480bc013c969536c773f6adfda0faf7ada65993f54370981364c28571"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: instead of evaluating for each quaternion component, optimize by querying the parent curve (that should be a rotation curve that knows all components of a quaternion) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/RotationComponentCurveViewModel.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e96cdc70a60a443217d3afd9445a18ccc4826041fe9670d5590fadcaf1a5bba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Log error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/EffectCompilerServerSession.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca50b9ce923016d16493fbc42b39c1dc30157bd13ed4000b6f81da6b19fd8415"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Log error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/EffectCompilerServerSession.cs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c9fe119471bbb4ac66401d30e637966c39f0b12b77df0c183d93797fcf1701b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Maybe situations where this asset/node are no longer valid. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Commands/AddNewScriptComponentCommand.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"418dbed5ba75721f5db7e4ce8039edfd0dbce18f6e32bdac1e0c74168e644c46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should display the path instead of the name for the title \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Commands/EditCurveCommand.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"9080c48f6fcbc4c8ebb7686e6489ab0e9e35c2b13af043fdd2493c67dd018302"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we do not take all package dependencies for now because we don\u0027t want to include Stride package compositors. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/CameraSlotNodeUpdater.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce0a140a7002c3c1db6a428bb3fcb2f9d6494b4afaec9cb6a89462ecd679263"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn this into a real command! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/CameraSlotNodeUpdater.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"aedfcfbb8215de1d161e817e9c866c08b7af97cbd6cf4adcb6ac8ecfe5a5efea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we shouldn\u0027t have to manually refresh this. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/CameraSlotNodeUpdater.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"b26e7c523643df6e64778e62126bc0a92676cd8b8a4f7ea5e7b8cf636726ad74"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Choose a better grouping method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/EntityHierarchyAssetNodeUpdater.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"f26e4a5d491df7f231e7be508630bf7f4c74972390146cddc744b21101fcb140"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Doesn\u0027t seem to work: exception \u0022Unable to move this node, a node with the same name already exists.\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/GraphicsCompositorAssetNodeUpdater.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd5b6b785d27dc3dd0aa6c0ca6cd8ef329cc039b123be11e60bb9427eb2d3196"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo physics is kinda independant from the rest so i don\u0027t wanna reference sprite studio stuff in it... for now physics can be achieved by sprite studio node link \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/ModelNodeLinkNodeUpdater.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"f506fcfa6f237b0bfd6f8ecf89e6fc614631d7b8947081c0ff101eec119cb9b5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add dependency on game settings, so that this value updates automatically \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/NodePresenters/Updaters/NavigationNodeUpdater.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"0069e2b8b94ccc053160031ff384462b97bfc1649351c5879a091f3581c8fff5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should technically store it in a temp var during Compile(), and set it only now (in case it changed during compile) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Preview/AnimationPreview.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"99f5201ff806a2fa537fdfe45c5207341e8a4a6da5c28f86e1e645314450b350"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Ensure this method is always called from the preview game (it is not at least when a property is modified, currently), so we don\u0027t need to lock. Note: should be the case now, assume it is after GDC! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Preview/BuildAssetPreview.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a65a66492174e6628fbd17b9f2b681d0930fc2229583953ce121b29f3c1f53b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should dispose those resources at some points! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Preview/MaterialPreview.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"062c28ded68471ffc20d046ab7d0c8feca3adb6bcb2a6bfa6e41a5362463c581"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should dispose those resources at some points! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Preview/SkyboxPreview.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdbed6ebc93b476e47440a371a742ea6a4efbeeeb008c701832b0effda9ce68d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Return LDR or HDR depending on texture bits (16bits is most likely HDR) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Preview/TexturePreview.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3516bcc1a870bf2343322986ee4033ef5da926c2d52f986bd9abc64f871258b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR: Should be per render stage \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/SceneEditor/MaterialFilterRenderFeature.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d4db6e48b83bbda4d1345817bfda7cbac4a166667a6549e734b906e62ac5900"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR: Merge in MaterialRenderFeature. Filter by effect slots? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/SceneEditor/MaterialFilterRenderFeature.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ded27805da2e2f7982f554976302ee38df5088acc6bc278afdae39fd5fe571f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Release resources! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/SceneEditor/PickingSceneRenderer.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e0916c5cd76ec49470d30b67806a322596393fc44f254a14f8887fd4a0edda"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use RenderFrame \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/SceneEditor/PickingSceneRenderer.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3d389de55eb62d5f12fd8d36e8186f2a5f22c1d41323106ddb3f1a417d650ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make configurable (per object/view/...?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/SceneEditor/WireframeRenderFeature.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"63626c962eb6dfaaf13be8c71cacc870d297100bdf00e3f3b96535c0678ed489"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Add back once properly implemented. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/StrideDefaultAssetsPlugin.cs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"1df77684e37476682f0f32ae30136cc6cf8d9689a6e0cc67acce5f2499035a70"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: iterate on plugin assembly or register component type in the plugin registry \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/StrideDefaultAssetsPlugin.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"96911cad73157c0ef18b241882299576be54ca711d490e00b5352fc1196a5b82"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we allow to select the importer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/AnimationFromFileTemplateGenerator.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"9da3b8f34bd6a14d5126237a2b03bccda624aaa9d8aa56c4e671c656e449b792"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we allow to select the importer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/ModelFromFileTemplateGenerator.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1deba13f14a832f142a259651bf22e48dec47f079bf0e54c505c600a4f79598"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we allow to select the importer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/SkeletonFromFileTemplateGenerator.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d72562148970561accaad191ce8113e6a585dab66061f61105e0079d398233c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some templates save, some don\u0027t (and behavior can even change in Unattended mode) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/ScriptTemplateGenerator.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c284119ff8ded35906468e822108aad293128cae4bab68a2a24278e1e1e0c3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Attribute-based auto registration would be better I guess \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Templates/StrideTemplates.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"44db627eb2b129e5e2c5088508ffa1fecb3ae0b8133dbe23678b32346343f941"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add ImageEnum and ImageFlagEnum \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Test/TestAsset.cs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"2826411b9a6846c3fb2fa643711ac8f6da6ff699ddc389b79a9413dcef96b1e0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO dispose resources allocated by the procedural model \u0022model.Dispose\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Thumbnails/MaterialThumbnailCompiler.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"37b6ca0364c3608dc2adca6a2901eefa15532ed5f3c35d97b114f2b6f13f94a1"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] PrecompiledFontThumbnailCompiler"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Thumbnails/PrecompiledFontThumbnailCompiler.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf6025c1ec13b4366cd84589109d3028bb67eb2bbccb4b0f55b54eed7f206150"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: shall we set the same/similar priority as Model asset? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Thumbnails/ProceduralModelThumbnailCompiler.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9048be07d75301359d8782e60abb88a2820e0a1bce7669b7bbb5b32f5716b6f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO also handle Texture1D and Texture3D \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/Thumbnails/TextureThumbnailCompiler.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"5562bb7a7edc5fd8f09f2be9be18e43e05a543ec435dd3a1e63afcca64f213d7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: display a fallback message when this service is not available. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/View/DebugEntityHierarchyEditorUserControl.xaml.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbdd8e87036135e063145dd4b3590dafc747d7ba6dc8f681f473cf1f69c4bc0e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Update with latest RoslynPad \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/CodeViewModel.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e53fd63d8166cce1efdc66feeadbf2ba384b5fe990624a32a1426e13ca162a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use roslyn list of files? not sure we could have non .cs files easily though \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/CodeViewModel.cs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f349ec1f3297cd60b0b8172327f3977d57efa4ee9c400c4ac77f549a5038e24"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Does that work properly with Undo/Redo? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/CodeViewModel.cs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a568a831d6d3e0a9ecfc4b78cfe9b2f3ea7c067b40aba44dde93882deca0e17"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this action (it should occur only during assembly releoad) will be undoable (undoing reload restores deleted script) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/CodeViewModel.cs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"666faa2faa789aaebcd5c3502e7c3c26fe0959f7287323e8e3dd1059dec9bd35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo review / this is actually very important in the case of renaming, to propagate the change from VS to Game Studio, if we set it false here, during renaming the renamed asset won\u0027t be removed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/CodeViewModel.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fb564c77b0e7ce8e400565712532bd162286342d7e728388eceada45604251b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this command is very similar to RenameStringKeyCommand - try to factorize them \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"61d7d4f0eb9ea200751d1db06fd019a28a4745ee29180ab5cd07a63424d6813e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (revision): should use the same mechanism as Reorder Collection actually \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"b07a0ab0a680416c997c319039bee06ea22607e45ef652698ef0c208514ebf0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be moved to FXAA-specific code to be plugin-ready (asset property changed works only at asset level) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/GraphicsCompositorViewModel.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab265fad5af065297c7f4860c5db6d012fd3b6d95fd6434c4ebfed3ebcd56fc3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we don\u0027t detect collision of name here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/MaterialViewModel.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"169e247e5957f9888bb7693a2e0ce50f755e554ca64348b2635b6cce14a3f980"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: tooltip, icons, etc. should not be created on the view model side (see PDX-2952)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/ModelViewModel.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"1300b4459be3c775d716812cd016a5daeef382404b689c03d5487731fa785458"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find a better (faster?) way to access the game settings view model \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/SceneViewModel.cs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"eccc70ea5c92617c69a68e0f27c43ef1dd14e20919f9af691bee8097466c762f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This doesn\u0027t take into account the case where you move and then undo, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/ScriptSourceFileAssetViewModel.cs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"557b2f8a1d50f693a63577e7c3055f77cc7e9474c133b80fcd201a6bb7fff562"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Differentiate document (newly created should be added in the project by the asset creation code) and additional documents (not in project)? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/ScriptSourceFileAssetViewModel.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"35c11c6cc6e8dd93b741b391581586f567cc1f2c2f4b09134362011769133507"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: do we need to delete the generated file upon undo? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/SpriteFontViewModel.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"33e96d5b48c539073df94dda3c60d29ea0dc9f77b9dc1834626fec0bfa066149"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Cleanup references to this parameter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"3162a38f9d4996277d3a9990e8cfeb7756bea9bb81ba7b2ce254041c54704b0d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should go to some kind of log in the view model \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"13b9042d89dd3ef8cf9ebaf17c6548e3921d6a9057958868a7e3ece781125513"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could use diff to minimize changes, but probably not worth the effort \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"9380c6f624330955fe086f0d1f79479fa5ce8d2b0cb8f240d46a297cd00ae802"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Cleanup references to this variable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/VisualScriptViewModel.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"9272f03b48b8c7469a2f018733302f8cfcbd4d0ebb65994726954b45834e2cb0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Cleanup references to this function \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Assets.Presentation/ViewModel/VisualScriptViewModel.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7b6f789fac67d866728194725a4286688e53b43bbc97b478ebca9a59873e684"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is a copy of AssetViewModel.AssetPropertyChanged - we\u0027d like to move this out of the view model so we can test the actual normal workflow. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor.Tests/TestArchetypesBasicUndoRedo.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"95be1fe385b0fee5a32b02363bbd7fedb304244710fbd4ac06bcae665d36107d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: provide a more solid API to avoid duplicates and name collision \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/Properties/PropertiesViewModel.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ab0f616d2631c91d25aa6dee6b78a8fcc48a70f54579212583bf3fc9e028a96"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove processViewModel \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/Properties/PropertiesViewModel.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"66c19fa98a09f4fd98f9d76cfd72b43fdc5a13248fc4f91eeb3475bb6460ad8f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support read-only mode \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/Properties/SessionObjectPropertiesViewModel.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"5763cc5e68b8c802e9e2d43dcc7d67874d4164ce022f1cc36f98fac66fe147ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we make this method public? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/Status/Views/ToolTipHelper.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"f68d36444e6e59c7332f219b719a51bd974bdafd719fa431cf537ab5ecbf6d98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we aggregate all textblocks? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/Status/Views/ToolTipHelper.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c2ed9f0c1d8c79c9e7df288727fb9c15be0ba29db29578c7049522c0430334d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we aggregate all inline elements? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Components/Status/Views/ToolTipHelper.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fadb5633fcd0627fd5b9f3d3fa12c2c803c7ae540184b3e469476de558c6b32"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Module.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"287e8fef7726659a693a6b57ae65c21762b3731a8d35af3e6593aa4c0dc10b6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this way of fetching the index is not robust at all! what if there\u0027s the same item twice in the collection? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/AssetContentValueChangeOperation.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"79f702fbd94df9a410a89e12c658ae20bb1b29c2d302a6dabe25d800f73adc28"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use a dialog service and popup a message when the given key is invalid \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/AddPrimitiveKeyCommand.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0be726c1dc2521c9d4d5725c7ccf9db07f7853c7dcb92ede812a3a0d5cdbc38"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: for now we only handle one result item \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/PastePropertyCommandBase.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b325fd9a54f088481b5396e2f31a08598794cde7f93110cf3c15e90d85049bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add a HasRemove in the dictionary descriptor and test it! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/RemoveItemCommand.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ba941acbda44e3d7a4be20983671a7abe087d705e02f40753d41454aff5955"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ... and can remove items - we don\u0027t have this information yet in DictionaryDescriptor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Commands/RenameStringKeyCommand.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"414065418966f48bbd0cbf2dcfbf4e7e559a461bd489de0bc03f63442bc99a09"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Workaround for internal engine issue when selecting a component type from the type dropdown generated, see #2719"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/NodePresenters/Updaters/AbstractNodeEntryNodeUpdater.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"3813fa99bae3a6b0d4bd2237f99ef942d67df1b3b24cba9c2903b6433f01f502"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] IsObjectReference"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/ViewModels/AssetNodeViewModel.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"87f6d8bf68b60a3371f7b422ab80b63a0bf829b3e635f8bd8dbef65fc119943c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: properly compute the name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Quantum/ViewModels/AssetNodeViewModelFactory.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"383b8ea1eb05009a065c7b044e51a7ecaccf4a8e6cf8b3276a0deef06b3102bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: properly compute the name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModelFactory.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"976000ebc93e1a8b78610fb515ff1c670268ffb454961a6fb226a59eb76a71ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: properly log errors \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Services/AssetBuildUnit.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"39016e6c6538a479b7d008b021225cc52ce0528015d5f9f0312ab1df5e8c8dd0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is temporary until we have thread local databases (and a better solution for databases used in standard tasks) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Services/AssetBuilderService.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b25d0c1ccaacddb4e90742c2c84270cb53770a64887ab1beef1a8c80d084454"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: give access to this differently \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Services/AssetsEditorPlugin.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda288f992ccf6752eecfdba5fa5bbbc4aeb6820b554ca78b2fcd5180bb76d90"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: items grouped by source ids \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Services/CopyPaste/CopyPasteService.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"2088e3695d5aed3002de8e9dd07ea439d9177695cebf5a873b7cf75c6d6c0470"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Put ShowMessage here, find a way to reach the editor title from Stride \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/Services/EditorDialogHelper.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2ddcc673058f26a7f0bf32904f3b6c5435a095a86c18e0e225af5f6313c310b"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: might be a better way to check that \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/AssetViewUserControl.xaml.cs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9bc97c466e8841829efe4e2ed5de4e5fa16c62f7eb95b1e2a3935ff6355ef65"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: If there is only a single transaction, take its name instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/Behaviors/DragDrop/PropertyViewDragDropBehavior.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e0cade476af00cb5b926a1b8fde8d709fd02e026c82b74e9a922c451de0cc9b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We can\u0027t share session.ActiveAssetView.AddAssetTemplateCollection view model (used for Add asset popup) with the add asset context menu \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf8a73e6a94448cc14b9b3dbdb0997c4fdf538e618600329aa5d0492fe51b7cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this in PluginService \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f07fafe9fa7d2cc04220f986ae1c64344d720390fa7a9ab08f869706d8eaa65"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this in PluginService \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/View/EditorDialogService.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"79e53d979aed5a726fdf7460169345ed82773c874eadcac75d57f1e7368a1173"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // /!\\ FIXME: we need to rework that as we probably don\u0027t need that many lists \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b6b6c12e4b9404988e47d41c4756641871dbaea0dbfe1fbcca4ab78de060fe0"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this property was added because for some reason DataGridEx has a lot of issues when displaying both assets and folders \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4e4c600580aa17db0265585a5c3162015b6b275b1b81bcb4b210b145ef8dde8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we use assetProperties value to determine if it\u0027s the main asset collection view model. A proper boolean would be better \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1299}}}],"partialFingerprints":{"codehealthFindingId/v1":"2477870d80ceb00db9f802dc28145fb4c8188cd245d271a40b3c7b400648b96b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we use assetProperties value to determine if it\u0027s the main asset collection view model. A proper boolean would be better \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1333}}}],"partialFingerprints":{"codehealthFindingId/v1":"806a073286105482a58dd2b2b85126a9c6f4cb5109816fb54a4039d952ac0147"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we use assetProperties value to determine if it\u0027s the main asset collection view model. A proper boolean would be better \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1493}}}],"partialFingerprints":{"codehealthFindingId/v1":"f50a2e0ad19aad97f6db0c3cd16179a776b38efaf8ea711b69b1b61f58147a4f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Allow to cut asset mount point - but do not remove the mount point \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetCollectionViewModel.cs"},"region":{"startLine":1595}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dc141405f283526f751ec67a14319ffbd8827bb8313f0c94ddc4e77e28f2acc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Change ContentLinkType.Reference to handle other types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetDependenciesViewModel.cs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"66efaaf39498080a1561cda4717b50a61012c647b8dea91cea8c621cb9b8cbf9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Change ContentLinkType.Reference to handle other types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetDependenciesViewModel.cs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fdca2dd6378e9d9dc6f5d558c4c92170e885eb6b42f6d1ccaf16e3825812c9a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME might not be necessary, but implementing editor might have different initialization logic \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetEditorViewModel.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"6faa037765afaa4305166f9f425393594daddc4e684e6a172aad1fe41ddfe5c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make the view model independent of the view (ie. MenuCommandInfo.Icon and remove this dispatcher call. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetViewModel.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"63c20ea18929f9b1679f50b0831a43b83a9cf4fcd4bb60f6cf53d681511b3121"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check view model dirty flag after such an operation! Are we up-to-date? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetViewModel.cs"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c2b676775e1ad4cfa025d8322d48efba4b69651a7faabcfd42f60936005977f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what should we do with this log? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetViewModel.cs"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc7458b493052a14272148baaa11a5842df75c299cedf45bf3d3ea91b98d2896"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] OnAssetPropertyChanged"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/AssetViewModel.cs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0310f123786fbbf167a5df96145e7829f4dc229c70ea90ea87f0ddf465c60c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Find a way to fallback to the asset or generalize for all asset composite \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/CopyPasteProcessors/AssetItemPasteProcessor.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c1fedbcfd97f5c8a56b31435f7462b4bb181ed53d023000a11435ae023f82c7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: rework this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/CopyPasteProcessors/AssetItemPasteProcessor.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c789aa14d53332327dadcdde06aa31ef6ad5338c7fb9c9fa2b200bb18fe284b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: have a proper exception type for serialization failure \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/CopyPasteProcessors/AssetPropertyPasteProcessor.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b75aac49166888f2de05acb4c2f2410ff5f50659b4c0bff7fa9ce7e0d81807c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: replace targetNode \u0026 index arguments by a NodeAccessor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/CopyPasteProcessors/AssetPropertyPasteProcessor.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d25aae8318e698586762a604c2e1b7d1b5b4012c362ecaf4bc1116bae13d3e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: When anything become renamable in the content of the package, this must be turn into an auto-updating sorted collection \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/PackageViewModel.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"edf32db97e29d6429b50445b38002f49baf67edc5dec726b1733016e776b642c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we MUST guarantee that whatever the user do, the assets in this enumeration all have DIFFERENT urls! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/PackageViewModel.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"13e2427c336c9fe284f4eefa30c068bcf92b1fe5e45266b11314d9bc371072e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Might want to hide this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/PackageViewModel.cs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"6717fed82e311d62346e13253149ed3c34a4fdb91b13c70aa8e09e0aa7ba3510"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CSPROJ=XKPKG override rather than cast to subclass \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/PackageViewModel.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"93f3c360f1ab81e353a50c614da4f78b12e3d489a764c7ecf491e74f35867d6e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this in an utility class \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/PackageViewModel.cs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"22dbeb10109f0a4aa650a62928aa3f009972eb62f3bb55585d3b9191b3053a2d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For the moment we consider that a project has only a single parent profile. Sharing project in several profile is not supported. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ProjectViewModel.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"294042a972b779c0fabe41a67bf4867cb047d64d917a5a7c88f829b716c800f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check with Ben if this is the property place to put this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ProjectViewModel.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9e0ae679ff448b3ddc5f4ca4ba7eb6daa110b97bc9e8a94ce30782dfbc7549f"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This feature is disabled for now. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"408c8f9b2e79047e01fb97865265510b37f547512ced016eda1e77be3663703c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This feature is disabled for now. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"168b6bbbd037a4c37af1bc3544aa3332463d71f82f96175ad054e408c71f6bfa"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This feature is disabled for now. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ReorderCollectionItemViewModel.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"864105ff55a23b50823b5007e2d3124e97a3750b2086e0740ebd5c556a7cdc7c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Properly temporary, until unification of AssemblyContainer and AssemblyRegistry since we now have only a single session at a time \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"87ae726cce5f40eb7dcb6a0b51fe15ce62032c1ab03a17dbf08fde0fd0b943a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this in AssetCollectionViewModel \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"5df9f4df88158e8a0dc1e9a4396f68a374a002f5c58c0eacc2b8f64b65175728"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this property should become cancellable to maintain action stack consistency! Undoing a \u0022mark as root\u0022 operation after changing the current package wouldn\u0027t work. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"378d9e2196c5f1e808abbaf9735d7b6d0b5a05fd6e74b5931d46c7a800a4a92e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can we merge this in the AssetPropertiesViewModel? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4b178cec09341c26350ff1908f719dedfed562d7e897636265c53efe712113a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check what is created here and try to avoid it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1340}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef67757082d008841a3fce1d9dc1e56fbd7fc53fd491429ae63cafb136ea826e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove the cancellation token if possible. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/SessionViewModel.cs"},"region":{"startLine":1372}}}],"partialFingerprints":{"codehealthFindingId/v1":"af78feff37bb9cb854e79d2a0b1ea0324d332e29eab1db6db9f4a475e7e20026"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: putting false here makes all thumbnails that are not visible to be incorrectly built \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.Assets.Editor/ViewModel/ThumbnailsViewModel.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce04dce19b03857f9aa52e2207d2d3ce1a4d0e15cd54d996b798cc0c9236154a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is a hack because YamlSerializer is static and there is no way to disable serialization with Id for Settings at the moment. This is temporary! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Core.MostRecentlyUsedFiles/MostRecentlyUsedFileCollection.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"67884a4e8ee95e2545fa02b5dfba431c9c342afa79a9dd618aed146adb2b65b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add an Attribute on Assets to specify if they are fast-reloadable (plugin approach) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/ContentLoader/EditorContentLoader.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"793fe7340aa1d221a4ecc25cea837a3d186826e037023398ed708636fce139c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Unexpose this interface from view models. Expose only GetRuntimeObject for services \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/ContentLoader/IEditorContentLoader.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc5caa0c4c42e1e9d757a47783c5076dde971a65943b6e4c2fcb19eefcc97d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the physics system should not be registered by default here! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/EditorGame/Game/EditorServiceGame.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"0455f88261f072b1cfbdf8f2ecf685a0b8bb4b79c87018ccd2349800c4035e70"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Cloned from ModelSkinningUpdater. Consolidate. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Engine/EntityExtensions.cs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"d776d4a2ba44b09dcade6625be778c26b6286fd7ea0fcebb5d12a80e8ddb96a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this code this method and find a better pluggable way to do this. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Preview/AssetPreview.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd8b122c0fbacb3cd53c2ff3d6f5cd6a6922db4dd10f5ee0bbb878429bbade37"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: In PreviewFromEntity, the preview scene is created during load, leaving the scene in an invalid state when throwing. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Preview/AssetPreview.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac49d345af6e80b320353c352deb44f57da870d966779a6078c9395c81d6e043"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For now we stop if there is an exception \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Preview/GameStudioPreviewService.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb9deace59b93251c59189bfeb0e79c475ef7a481cac5cc09510f6b2146d77a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is not serializable (OK for now since thumbnails are never built in a separate process); later, a specific class to store results will be needed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/StaticThumbnailCommand.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9d9874964a6ce86fdcadc60232d6d8abd228b14a06741ce31dd542188de6539"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //                // TODO: This is not serializable (OK for now since thumbnails are never built in a separate process); later, a specific class to store results will be needed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailBuildStep.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"10b0834f22dd3cce0eb858b91fd19e00d2782e04dab04fb9c43151e812e3f295"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the way to get last build step (which should be thumbnail, not its dependencies) should be done differently, at the compiler level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailCompilerBase.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"f61f5655db118a5bfd23441a06b70b16e093099f455495c5ce456490a23d7408"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Display error logo if anything else went wrong? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailCompilerBase.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f26a8726725523dfe0de1e95bad6b6735ca9ee41276a84111083ad56bbfde21"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Maybe we should wrap every message in AssetLogMessage before copying them in compilerResult? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailCompilerBase.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"027fe0130e2616b8548d2ed3f4d219f1bc4e9a81491a6bee477b996c7b51102e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this lock seems to be useless now, check if we can safely remove it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailCompilerContext.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"d74fc558efbe27b3e6dd632a1d7ab38d7081091544f1cfde26f137c1926dcc0c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR: Try to remove that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailGenerator.cs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"40a03278029e19e68552fd78754b2c81dbc73452c1df0de52b7ea42051a3708b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR: Should not require two rendering \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.Editor/Thumbnails/ThumbnailGenerator.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"35ac3e562b3b2bfa1d2902f34f5fa9e7037775940247c1b9edce434e213de046"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: desactivated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio.Tests/TestThumbnails.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8e7390e759dfa7ed2f9188fbb7e838780fda5640a186db343e0a93652835d06"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO have a base interface for all editors and factorize to make curve editor not be a special case anymore \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/AssetsEditors/AssetEditorsManager.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"78f20506159d5441dac601f952a6be58119167f2302b61a908d894f39db2d886"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: do we still have this case after decoupling asset and editor? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/AssetsEditors/AssetEditorsManager.cs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"a733d701ec489d9201a646b1713c162686450dda93ae5a37583db8552f3ac49c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Find more graceful solution \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f890d1fde9b28975ae741123d0ad12149e06835f621af7ebd5a6b52dc2c28f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo hard-coded! needs to go when plug in system is in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8bf8fade3958b21fdcb2ceb548942b3b7bdd4b75c12903e3e7fc690bef0b6a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo hard-coded! needs to go when plug in system is in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"4809038166e654b6332b59f9542a4a13286eddc24fa8263f1f5aaa3b0fd4ac39"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo hard-coded! needs to go when plug in system is in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df268a469df4ca2b965520afe04e64ca2e1cc9146c300069d630189b7107ecb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo hard-coded! needs to go when plug in system is in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"67ad52ae0d6a0c40aea6e5dd584626623078c07c90426d00b82400cde36bce3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo hard-coded! needs to go when plug in system is in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"82ccfc57b52a36c059946d8dfaec128ac59e15541a8fc03e6bdfb79e83c4b048"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo hard-coded! needs to go when plug in system is in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"08152a4ec0e6ef088902fdcdc1d00c2a81f3133b637508573e394a129baf231e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo hard-coded! needs to go when plug in system is in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/AssemblyRecompiler.cs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"3beb3b66fda844e45c3fc54d69983873a8756a6631ea7f3ed84c55502091b593"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: When should we do the NuGet restore? Should we do it only once, or every change? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/StrideDebugService.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac05190bb8c7d381b4f970c0f2ab3d62c204c89d2509fee9664a5ff6e43b420f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Maybe game is not even necessary anymore and we should just instantiate a \u0022DefaultSceneGame\u0022? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Debugging/StrideDebugService.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f7ed10afe8e6f20b15be3e3c3238ac4e82b50fa02782da054fe3e91b0083fcd"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: expose some readonly properties/methods from ITransactionStack or ITransaction to reduce reflection \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Helpers/CrashReportHelper.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f35409ec4e66c6d66a19991a7d65cbd8b39e84517d92853125035a8244da9db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this behavior was previously broken, it might work now (migration to AvalonDock) but has not been tested! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Layout/Behaviors/ActivateParentPaneOnGotFocusBehavior.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"07c2d5d810aef0731aad13b516c1d88592368c192319e4eb88a2dab0895907c2"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack: need to get AssetPreview and register handlers again \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Layout/DockingLayoutManager.cs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"50d9820e4c7f118807d7896528ec1cad421e767bc6f811942a3f42bfad1464bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be removed, the AssetBuilderService is reachable from anywhere now \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Plugin/StrideEditorPlugin.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"809db1f859c943127f35cf5d736da358c67a32a23f7266b9dddcba6663dd16fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: RenderDoc is not working here (when not in debug) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Program.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c59c364e8ef8e73e10d5ca69209378cd5bc65ce59eb3059fbaf7a97f622107b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be done elsewhere \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/Program.cs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"a429a99517e760ed26c719201316ef3169d2abc28d685cdc469d4b96089cda52"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: temporary open and await asset editor sequentially \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/View/GameStudioWindow.xaml.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"c673ecb1b3170373e8c86577f005a21d262e3e8c151739bd7dd70c0575babbd8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Scanning order? (direct dependencies first) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/View/GameStudioWindow.xaml.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"26cec8663944692a0ba482e502e5585e330bcae32579181465da2fe5c9c1e206"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Switch to using startupPackage.Dependencies view model instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/View/GameStudioWindow.xaml.cs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b795d0d62ca7d0f3ff024692eb8daac62541367ab81615adbc24c114a69dfdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Android device selector (together with platform selector) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/editor/Stride.GameStudio/ViewModels/DebuggingViewModel.cs"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc92ce53369322553abce0ba1fa6bb36b3387843c40e5b810baf5799fba2ee60"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Framerate is hardcoded at 30 FPS. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/AnimationAssetCompiler.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0d89c5130e56c124557de8452d65c41e6cda68c2e51c72f3537e4da0241fd36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For now, it seems to be located on node 1 in FBX files. Need to check if always the case, and what happens with Assimp \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Animation.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"33289b817ae3cb4ee58aba279e836a20831d88c6fd25be09f144e260acfa3cc4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add some other curves? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Animation.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8330447f1aa008b0293c690cd43695a477e4d8064df4d0d318332c73ee459cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should detect discontinuities and keep them \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Animation.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"bff11390a2bb8a8acdd2af300a19bf06f77299501e13459f8d9434595aa6959a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Cache this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Animation.cs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeb70cab23b5d82a7ed00459af8073b5d645e14fec899511529da40506b891cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Root motion \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Animation.cs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e88212b8f8dd170f2607d4425eae15201b385702b2267dc739700d38c6eb4c9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What to do if there is no index buffer? We should create one... (not happening yet) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Model.cs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"733ca194f3a9ab2b6beaed3b2dee2a7f11c114c80724dae529b78cdaae678b92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: temporary Always try to compact \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.Model.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c478d35cdcd8ce2e4edbb7151cac22a9793e83da7becf1a500dadfd750a0c51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check hierarchy for inconsistencies \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.SkeletonMapping.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"32230d57c201b6849b77b77f4cc25174d99ba6299bd24c3fd362eb0da4af902a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check is Model the same for the two mesh? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/ImportModelCommand.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2c4e99d4f23689cbccc49221306ac9af2eecf9e62f3a837add930d7d6462d29"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo need to take care of short index \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Models/PrefabModelAssetCompiler.cs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"11b6d8be836fba6103b4bc39caa1b72c0029b50615cdce93362317d1149fda46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*\n        TODO: TO REWRITE WITH new AssetImportSession\n\n        public class AssetImportTest\n        {\n            public const string DirectoryTestBase = @\u0022data\\Stride.Assets.Tests\\\u0022;\n\n            [TestFixtureSetUp]\n            public void Initialize()\n            {\n            }\n\n            [Fact]\n            public void TestImportTexture()\n            {\n                var projectDir = Path.Combine(DirectoryTestBase, \u0022TestImportTexture\u0022);\n                DeleteDirectory(projectDir);\n\n                var project = new Project { ProjectPath = projectDir \u002B \u0022/test.sdpkg\u0022 };\n                var session = new ProjectSession(project);\n                Import(project, \u0022texture\u0022, Path.Combine(DirectoryTestBase, \u0022Logo.png\u0022));\n\n                // Save the project\n                var result = session.Save();\n                Assert.False(result.HasErrors);\n\n                Assert.True(File.Exists(projectDir \u002B \u0022/texture/logo.sdtex\u0022));\n\n                var textureAsset = ContentSerializer.Load\u003CTextureAsset\u003E(projectDir \u002B \u0022/texture/logo.sdtex\u0022);\n\n                Assert.Equal(\u0022../../Logo.png\u0022, textureAsset.Source.FullPath);\n\n                // Cleanup before exit\n                DeleteDirectory(projectDir);\n            }\n\n            [Fact]\n            public void TestImportModelWithTextures()\n            {\n                var projectDir = Path.Combine(DirectoryTestBase, \u0022TestImportModelWithTextures\u0022);\n                DeleteDirectory(projectDir);\n\n                var project = new Project { ProjectPath = projectDir \u002B \u0022/test.sdpkg\u0022 };\n                var session = new ProjectSession(project);\n                Import(project, \u0022model\u0022, Path.Combine(DirectoryTestBase, \u0022factory.fbx\u0022));\n\n                var result = session.Save();\n                Assert.False(result.HasErrors);\n\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/factory_entity.sdentity\u0022));\n\n                var modelAsset = ContentSerializer.Load\u003CPrefabAsset\u003E(projectDir \u002B \u0022/model/factory_entity.sdentity\u0022);\n\n                Assert.Equal(\u0022factory_model\u0022, modelAsset.Data.Name);\n\n                var textureAsset = ContentSerializer.Load\u003CTextureAsset\u003E(projectDir \u002B \u0022/model/factory_TX-Factory_Ground.sdtex\u0022);\n\n                Assert.Equal(\u0022../../TX-Factory_Ground.dds\u0022, textureAsset.Source.FullPath);\n\n                // Cleanup before exit\n                DeleteDirectory(projectDir);\n            }\n\n            [Fact]\n            public void TestImportModelWithMaterialAndTextures()\n            {\n                var projectDir = Path.Combine(DirectoryTestBase, \u0022TestImportModelWithMaterialAndTextures\u0022);\n                DeleteDirectory(projectDir);\n\n                var project = new Project();\n                var session = new ProjectSession(project);\n                project.ProjectPath = projectDir \u002B \u0022/test.sdpkg\u0022;\n                Import(project, \u0022model\u0022, Path.Combine(DirectoryTestBase, \u0022factory.fbx\u0022));\n                session.Save();\n\n                // 2 materials, 1 model, 1 entity, 1 texture\n                Assert.Equal(5, project.Assets.Count);\n\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/factory_material_blinn1.sdmat\u0022));\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/factory_material_blinn2.sdmat\u0022));\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/factory.sdm3d\u0022));\n\n                var textureAsset = ContentSerializer.Load\u003CTextureAsset\u003E(projectDir \u002B \u0022/model/factory_TX-Factory_Ground.sdtex\u0022);\n\n                Assert.Equal(\u0022../../TX-Factory_Ground.dds\u0022, textureAsset.Source.FullPath);\n\n                var materialBlinn1 = ContentSerializer.Load\u003CMaterialAsset\u003E(projectDir \u002B \u0022/model/factory_material_blinn1.sdmat\u0022);\n                var textureVisitor = new MaterialTextureVisitor(materialBlinn1.Material);\n                var allTexturesBlinn1 = textureVisitor.GetAllTextureValues();\n                Assert.Equal(1, allTexturesBlinn1.Count);\n                foreach (var texture in allTexturesBlinn1)\n                    Assert.NotEqual(texture.Texture.Id, textureAsset.Id);\n\n                var materialBlinn2 = ContentSerializer.Load\u003CMaterialAsset\u003E(projectDir \u002B \u0022/model/factory_material_blinn2.sdmat\u0022);\n                textureVisitor = new MaterialTextureVisitor(materialBlinn2.Material);\n                var allTexturesBlinn2 = textureVisitor.GetAllTextureValues();\n                Assert.Equal(1, allTexturesBlinn2.Count);\n                foreach (var texture in allTexturesBlinn2)\n                    Assert.Equal(texture.Texture.Id, textureAsset.Id);\n\n                var model = ContentSerializer.Load\u003CModelAsset\u003E(projectDir \u002B \u0022/model/factory.sdm3d\u0022);\n\n\n                // Cleanup before exit\n                DeleteDirectory(projectDir);\n            }\n\n            [Fact]\n            public void TestImportModelWithMaterialAndTextures2()\n            {\n                var projectDir = Path.Combine(DirectoryTestBase, \u0022TestImportModelWithMaterialAndTextures\u0022);\n                DeleteDirectory(projectDir);\n\n                var project = new Project();\n                var session = new ProjectSession(project);\n                project.ProjectPath = projectDir \u002B \u0022/test.sdpkg\u0022;\n                Import(project, \u0022model\u0022, Path.Combine(DirectoryTestBase, \u0022knight.fbx\u0022));\n                session.Save();\n\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/knight_material_c100_chr_ch00_Knight_KINGHT.sdmat\u0022));\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/knight_material_c100_chr_ch00_Knight_KINGHT_iron.sdmat\u0022));\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/knight_material_c100_chr_ch00_Knight_SWORD1.sdmat\u0022));\n\n                // Cleanup before exit\n                DeleteDirectory(projectDir);\n\n                project = new Project();\n                session = new ProjectSession(project);\n                project.ProjectPath = projectDir \u002B \u0022/test.sdpkg\u0022;\n                Import(project, \u0022model\u0022, Path.Combine(DirectoryTestBase, \u0022factory.fbx\u0022));\n                session.Save();\n\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/factory_material_blinn1.sdmat\u0022));\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/factory_material_blinn2.sdmat\u0022));\n                Assert.True(File.Exists(projectDir \u002B \u0022/model/factory.sdm3d\u0022));\n\n                var textureAsset = ContentSerializer.Load\u003CTextureAsset\u003E(projectDir \u002B \u0022/model/factory_TX-Factory_Ground.sdtex\u0022);\n\n                Assert.Equal(\u0022../../TX-Factory_Ground.dds\u0022, textureAsset.Source.FullPath);\n\n                var materialBlinn1 = ContentSerializer.Load\u003CMaterialAsset\u003E(projectDir \u002B \u0022/model/factory_material_blinn1.sdmat\u0022);\n                var textureVisitor = new MaterialTextureVisitor(materialBlinn1.Material);\n                foreach (var texture in textureVisitor.GetAllTextureValues())\n                    Assert.NotEqual(texture.Texture.Id, textureAsset.Id);\n\n                var materialBlinn2 = ContentSerializer.Load\u003CMaterialAsset\u003E(projectDir \u002B \u0022/model/factory_material_blinn2.sdmat\u0022);\n                textureVisitor = new MaterialTextureVisitor(materialBlinn2.Material);\n                foreach (var texture in textureVisitor.GetAllTextureValues())\n                    Assert.Equal(texture.Texture.Id, textureAsset.Id);\n\n                var model = ContentSerializer.Load\u003CModelAsset\u003E(projectDir \u002B \u0022/model/factory.sdm3d\u0022);\n\n\n                // Cleanup before exit\n                DeleteDirectory(projectDir);\n            }\n\n            private static void DeleteDirectory(string directory)\n            {\n                try\n                {\n                    if (Directory.Exists(directory))\n                        Directory.Delete(directory, true);\n                }\n                catch (Exception) { }\n            }\n\n            /// \u003Csummary\u003E\n            /// Imports a raw asset from the specified asset file path using importers registered in \u003Csee cref=\u0022AssetImporterRegistry\u0022 /\u003E.\n            /// \u003C/summary\u003E\n            /// \u003Cparam name=\u0022projectRelativeDirectory\u0022\u003EThe directory relative to the project where this asset should be imported.\u003C/param\u003E\n            /// \u003Cparam name=\u0022filePathToRawAsset\u0022\u003EThe file path to raw asset.\u003C/param\u003E\n            /// \u003Cexception cref=\u0022System.ArgumentNullException\u0022\u003EfilePathToRawAsset\u003C/exception\u003E\n            /// \u003Cexception cref=\u0022AssetException\u0022\u003EUnable to find a registered importer for the specified file extension [{0}]\u003C/exception\u003E\n            private static void Import(Project project, UDirectory projectRelativeDirectory, string filePathToRawAsset)\n            {\n                if (projectRelativeDirectory == null) throw new ArgumentNullException(\u0022projectRelativeDirectory\u0022);\n                if (filePathToRawAsset == null) throw new ArgumentNullException(\u0022filePathToRawAsset\u0022);\n\n                if (projectRelativeDirectory.IsAbsolute)\n                {\n                    throw new ArgumentException(\u0022Project directory must be relative to project and not absolute\u0022, \u0022projectRelativeDirectory\u0022);\n                }\n\n                // Normalize input path\n                filePathToRawAsset = FileUtility.GetAbsolutePath(filePathToRawAsset);\n                if (!File.Exists(filePathToRawAsset))\n                {\n                    throw new FileNotFoundException(\u0022Unable to find file [{0}]\u0022.ToFormat(filePathToRawAsset), filePathToRawAsset);\n                }\n\n                // Check that an importer was found\n                IAssetImporter importer = AssetRegistry.FindImporterForFile(Path.GetExtension(filePathToRawAsset)).FirstOrDefault();\n                if (importer == null)\n                {\n                    throw new AssetException(\u0022Unable to find a registered importer for the specified file extension [{0}]\u0022, filePathToRawAsset);\n                }\n\n                List\u003CAssetItem\u003E newAssets = importer.Import(filePathToRawAsset, importer.GetDefaultParameters(false)).ToList();\n\n                // Remove any asset which already exists\n                var newAssetLocations = new HashSet\u003CUFile\u003E(newAssets.Select(x =\u003E x.Location));\n                project.Assets.RemoveWhere(x =\u003E newAssetLocations.Contains(x.Location));\n\n                // Add imported assets to this project\n                foreach (var assetReference in newAssets)\n                {\n                    project.Assets.Add(assetReference);\n                }\n            }\n        }\n     */ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Tests/AssetImportTests.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf5d87169f9489be91534d18a3608d540b2796e69cfacecf67b2ddbc954117f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Adapt to new API"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Tests/TestDependencyResolver.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"244ad5295d23bf0b07898825192aa752c0d6c56b5562e40ce698d55f3b939292"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add script link \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Tests/TestPrefabAsset.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f936a5574fa53bbcc283673edeaca7f7783865f594c60bc7f00a14816b8ddb6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Switch to a simple Write(variable) later, so that we don\u0027t depend on ConditionalBranchBlock for this test? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Tests/TestVisualScriptCompiler.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"14a10ed8d3bff7699121cb34331bcd3b878a911e6e8164ec4b18e9eca394fcfb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Switch to a simple Write(variable) later, so that we don\u0027t depend on ConditionalBranchBlock for this test? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Tests/TestVisualScriptCompiler.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"5063a71c28b1ed2d8943e798de74c7dae241c8ed055753bcd7fcf5fc55638cc9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //CheckSpriteTransparencies(game, \u0022SheetColorAutoNoAlphaPacked\u0022, AlphaFormat.None); // TODO reactivate those tests when this problem is fixed. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Tests2/AutoAlphaTests.cs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"43eca0c1daeb886095f633dcfac1b6b7d163005287a479d43a04d9891798f185"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move that as extension method? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/AssetCompilerContextExtensions.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1a28343bc7f274c9bc3b3578538ecc2ac1548eee5d365fcafec0757f18529de"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Store directly this into the context TODO this this temporary \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Effect/EffectShaderAssetCompiler.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeff91bbc2f792a62d8c0066c2ae162aa0dc940f88c5c7907a9a97112a0d571e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: How to make this code pluggable? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Entities/EntityHierarchyCompilerBase.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba87885c1d3261b362860ee5fa607f7de5142d15026be6257d69e1afe040ddc2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make it visible in the property grid, but readonly. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Entities/SceneAsset.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"c60be26a946ea3994dfdb432813b423eb825ed31ec0d4ff61961416ca9f6f2ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should ignore game settings stored in dependencies \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/GameSettingsAssetCompiler.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"416c0495b36b3a1c0dcadec9c4d219275bcd67d8a6997a324ac3a346c239c963"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: output messages \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Materials/ComputeShaderClassHelper.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"c53d2e78b08c09d8af62cd9fae5a534c08a8a92fb677b69c215e0a26ab2765f5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Adapt GPU reduction so that it is compatible Android color/alpha separation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Materials/MaterialAssetCompiler.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"861c58c890e4692697245e9b5a50d9638c50438462c0a1b06802aba2bc4e0d0c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use the build engine processed output textures instead of the imported one (not existing any more) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Materials/MaterialAssetCompiler.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b73c18c527a283f70442188f64d49c2e7848d1f05716f6f9474b085eb6df1aa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Set the reduced texture output format \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Materials/MaterialAssetCompiler.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f1819769f1c261f882abd6385113cf280eb1836031b176128207ccbf4ea9f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The graphics device cannot be shared with the Previewer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Materials/MaterialAssetCompiler.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c3b8ff188a526ee2386847630ceaa6c4f0176149fa5baa104bfc18b03f530ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check CloneObjectForGameSide if modifying this method, the logic should be factorized at some point. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Quantum/EntityHierarchyPropertyGraph.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d99a47e50a5f8a3d228346ca36cce22ccc846bda38e8bd57be246fa86c0c628"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this list is here just to easily identify object references. It can be removed once we have access to the path from IsObjectReference \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Rendering/GraphicsCompositorAsset.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"15bf3a4a13574df46fbf00b981d766cf754efd2471915a84a2499c3fae2f1267"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this list is here just to easily identify object references. It can be removed once we have access to the path from IsObjectReference \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Rendering/GraphicsCompositorAsset.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"72effb77a70f0266b672e2fe48b9cb4a83d1069e369392bf581665bd307ba249"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Out/ref \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/MethodCallBlock.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a07e06c11b4b5b52263d34bd4036735312d45bcd52ebeddf4c66fa7e8a3d825"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Internal setter when serialization supports it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/Slot.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a776e1cc7a06f2c9b4b7ed24f02160493a349b6774a2ecdd1e7bf1af5dcbfa2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Internal setter when serialization supports it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/Slot.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4d20098beeae33a69752c721560307a7259e178007f446201b6daaff96a5ea9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Internal setter when serialization supports it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/Slot.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"50ea6205cab212c7b711ce15975c2e95b8537d6af53b58a5c78cee410db54e3f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Internal setter when serialization supports it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/Slot.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"f21ff9399174ad8e4f0467d24672dfec8c856b7851e791daaa8a0c5a6a9fd929"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Internal setter when serialization supports it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/Slot.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"36670762a518a843df1d03d4e1bec29650c60e3d6ba6c96d646581979b49c75c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Guess type (from context.Compilation)? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/VariableSet.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"46d61683cf48ca2cb040f4e1e50a01d66a352f1bc55d45bd6139313d55dfa8ef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ideally we should stop converting those and handle this automatically in a custom Yaml serializer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/VisualScriptAsset.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bfb12e29ce609a0fa0b9a88a387084c1cd3485ee4c0db760a8ff3c052a5537f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Issue an error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/VisualScriptCompiler.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac4f7c22d8be7d616ed206222b9dcfe1a0d013cc4b9151ef4f9d8c60e440c9cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some analysis before running it that there is no impossible execution links between inner loop and outer code \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Scripts/VisualScriptCompiler.cs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5de2d53e4893ab044f4ec72f4d9bf868fd89d54ed24dd351e5a84be9ddf3a9b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: make SortKeyForMapping accessible in object context since it modifies the behavior of the serializer for children of the ComputeColorParameters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Serializers/ComputeColorParametersSerializer.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae44200858a44093e13b5edf6d09278d7e4fd5d6cbe8faacc6e25446d43aec34"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Convert SkyboxAsset to Skybox and save to Skybox object \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Skyboxes/SkyboxAssetCompiler.cs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b0256fa6f4d7e6c9cde2c00f86b4e7d515b0853c96dea6a29199021040168f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Add system to prefilter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Skyboxes/SkyboxAssetCompiler.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf845091ad250147d800416879e739291aad57d409377cf40ff44d2993be0f11"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support for HDR 32bits \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Skyboxes/SkyboxGenerator.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"0edb3d01e661aa6ac174770c8ec0c067dfb1f5efea24be93cbb3442142b55635"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: cubeTexture is not deallocated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Skyboxes/SkyboxGenerator.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"6679aaa37ae6205e8a37f8588fd00db1c3c5eab0226a03d38f933b82902be532"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Currently we only support Rgba32 as an option. Grayscale might be added later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/Compiler/OfflineRasterizedSpriteFontWriter.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"cebc76cbaefe8c463eff2dc35e838c12c6b251af712be5d0e864c467e5246b9f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Currently we only support Rgba32 as an option. Grayscale might be added later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/Compiler/SignedDistanceFieldFontWriter.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1f031994fde70ecf7cd7bc9048f748ac6283edfd314b524b1698ad20913c313"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Maybe switch to 3-channel texture \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/Compiler/SignedDistanceFieldFontWriter.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e8389b2d2a500eb4990fde97aad2d9c0ae57cd3126014c034c8352bee8038f9"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] PrecompiledSpriteFontAsset"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/PrecompiledSpriteFontAsset.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"aee9b628e953b5d6d43fdd662bcd3cd8131c3e0569383bf7cba6966215d87735"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // save the texture   TODO support for multi-texture \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/SpriteFontAssetExtensions.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb57ccdb9425cf6f9efe971d8f2a75aca3659030605fbdb242e3ceb0189944be"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // save the texture   TODO support for multi-texture \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/SpriteFontAssetExtensions.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f02c09e284a8c04a369e17175b6996a21ed5410f1e85356e041bb39d3f6f533"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO create PrecompiledSDFSpriteFontAsset \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/SpriteFont/SpriteFontAssetExtensions.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"138b4d23ee1f8570fbde45d446785e3d0c2b2fb9b9b35d7cc86ba2c2685f868d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: TEMPORARY SETUP A MAX TEXTURE OF 1024. THIS SHOULD BE SPECIFIED DONE IN THE ASSET INSTEAD \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e3f3dec7a60ef34a46b27d8b19603de2c76ed83c810135b438a8446424d0580"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO vary ASTC block size by hint/Quality (4x4 high-quality color, 5x5 normal, 8x8 grayscale). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc59adbe130fb2f40704c4396660a1a371ce030f023d8abb041ef8446df2cd83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO BC6H for HDR (modern GPU/ISPC encoders make encode time tractable; profile \u226511.0, AlphaFormat.None). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9f887f2dd0fefa7469abe9cfc7a63c7db2c4480f355bca21a0fb4c6d24d92ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO BC7 for Quality=High color / UI (modern GPU/ISPC encoders make encode time tractable). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c0f8370011067a079f99730305a2644f14b87b54021a793dd093ff1f78b47b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: As part of a conversion phase, this code may be moved to a dedicated method in this class at some point \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7a11001ba09ddfe85a3d9dc2f19c1f4963c2abe8b490d680478cd838a3378d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Change alphaFormat depending on actual image content (auto-detection)? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureHelper.cs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"d30eaf5bb7fca5fab9c5b61e7acabffe0c6338398ffc67dfd75cb8d1ce50a130"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is temporary, until we can make the asset templates ask compilers instead of importer which type they support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/Textures/TextureImporter.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"adbc18304e9e2f503f682e8397c2dca557de213644059d300717c0e06a4ece63"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make a common base method in AssetCompositeHierarchy - the beginning of the method is similar to CreatePrefabInstance \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets/UI/UILibraryAsset.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"c28d395c924db37b3d39d647d80e26df6a29c7317ba417bc1eba8d9dcd00b39b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //throw new NotImplementedException(\u0022TODO: UPDATE TO USE Scene and Graphics Composer\u0022); \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/Engine/TestAudioEmitterProcessor.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8f90990b96cc82eea58db749e9f5600cd2652db9d02c1b0014538e8591f2ba6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 11 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestAudioEngine.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcc21b238d68b60f4ca3ac0298a274cfe2afe94d60b0021a116146923f08b8f8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 11 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"64bc7412d15ee19a570c955878a434fbecaa140b8fd93ae6ef12e9976f5df689"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 11 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"62155c61bcddd115b025300791903de57504d8087f7cd5a8b0f917e718ba0126"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 11 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsOutput.Vulkan.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"603e3096a75b78a1723d63675099469e14e5dba0dfa9d81f1c9cc9f73e87b16c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 16 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestDynamicSoundEffectInstance.cs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec7acf6e63461f580697f7d3f1d47bf005135ceb2a69340c6f15710f5e18026"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 20 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d74638e3faf1b8677e5e0550a185f0d0aa0a148860a3f90d4c042a42c516e25"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 25 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundEffectInstance.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d27ec1216ea7f6cc8cf1cb85cbd3eb25dade7ff64d06205eefa0935087896c5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 19 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio.Tests/TestSoundMusic.cs"},"region":{"startLine":769}}}],"partialFingerprints":{"codehealthFindingId/v1":"93de1d22684637b638c335edb5ee76d1308b3364056eb6f67ab999abfa59c0a6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO improve documentation explaining how the interface works, especially what happens when the buffer is full (ring buffer/stops ??) when it will be implemented \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio/IRecorder.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"e41a67452782e6d88b43724c1967f112094229068d442047d5433fdee5a64c02"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO documentation for Exception thrown when duration is not enough or correct \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio/IRecorder.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"c41adccd3ee929ecbf7c4241465448b1249d727d3966f8722e6ff9888c7446cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO documentation for Exception thrown when duration is not enough or correct \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Audio/IRecorder.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"500b3124f85826ce3f52346f4121c72620c539dd6b36cf0123213128d57fc898"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1300 \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":"sources/engine/Stride.Audio/Native/Celt.AVFoundation.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"0450623f522dc9c088ec07ebe2131a788b5ae34b202ec2b563189b62341e06fb"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1300 // Element must begin with upper-case letter \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":"sources/engine/Stride.Audio/Native/Celt.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"451c90198291ab2fc110eef475f335cb3b79da03307a9d77e2baccd571a83d49"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] SetPose"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/BodyComponent.cs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"b51b2e61a8dbd176b69d70a0d77f929286727d9a52b0ee165f3b8ab9a867754a"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] Velocity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/CharacterComponent.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d40668d68e602ed9524fe5e78436f250aa8c66ca8644bb71c85572b2ade204"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] Contacts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/CharacterComponent.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a27b629d98d5c31c60f9cce9785afe90d3aadc71cb651deca8217db842dc10b"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] GroundTest"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/CharacterComponent.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"56150dcd0971dc5f266f99a9e08fc2862e74635ad9c9210f258a7454f65c0dec"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] NoContactResponse"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/CharacterComponent.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"742c675a5ecbfb801e267560a98a82a7b5602f4cfd1b099683d9d65b93f1d4f7"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] OnStartedTouching"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/CharacterComponent.cs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"562c740045e327f886ca892f97006aeaf4eba61506351e42e6bb95e4f5282a63"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] OnTouching"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/CharacterComponent.cs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c8db4e95f7e93cda78abca4c7a25db3bd2f88f7017f8e83566a077b6924545c"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] OnStoppedTouching"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/CharacterComponent.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f62c983c06cab777383d24aaeeadbd045c07f6bafbd6904ed2945a6224b6414"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: SuppressMessage \u2014 the suppression records no reason: either it carries no justification argument at all, or one that states nothing a reader can weigh (\u0022OK\u0022, \u0022By design\u0022). A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited. Write what makes this site legitimately different \u2014 the invariant that holds, the framework contract that forces the shape \u2014 or remove the suppression and fix what it hides."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/CollidableGizmo.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6b2fff2e3fdb079b5ca798f72158a2f0afff0a192364b5f943feddba32b9129"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: SuppressMessage \u2014 the suppression records no reason: either it carries no justification argument at all, or one that states nothing a reader can weigh (\u0022OK\u0022, \u0022By design\u0022). A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited. Write what makes this site legitimately different \u2014 the invariant that holds, the framework contract that forces the shape \u2014 or remove the suppression and fix what it hides."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Systems/ConstraintGizmo.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"318a6fd983bc22772393520b2d4614c3ee819efcd47a0e3dbbba2a39ac3ce02c"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: SuppressMessage \u2014 the suppression records no reason: either it carries no justification argument at all, or one that states nothing a reader can weigh (\u0022OK\u0022, \u0022By design\u0022). A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited. Write what makes this site legitimately different \u2014 the invariant that holds, the framework contract that forces the shape \u2014 or remove the suppression and fix what it hides."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/MouseMoveCaptureBehaviorBase.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"f895d55ca358418d8efd2e879ce06408dcdaf6b6ad00e065f8cb6a31ed5405a0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We might want to share some of the recursive logic with PrefabAssetSerializer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Debugger/Debugger/CloneReferenceSerializer.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed28ecaf7a82152b60c5b41021814c3557936759f2eb605509a9e7422dbcbde2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Bind database \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Debugger/Debugger/GameDebuggerTarget.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cb5bda1d8bdcc6f4f2618c46d06c2b086f76c96ec2d3a0c962e7b1f5594f055"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove component before serializing it, so cancellation code can run \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Debugger/Debugger/LiveAssemblyReloader.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9fcc2d8dd675a88e4baea114eeac18f017312825f7fc093379c1a614bd803d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Dispose or Cancel on script? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Debugger/Debugger/LiveAssemblyReloader.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf8350653164cccc2a88d379c1b3f344eeea4ef8d63c7be18fbc72c678cfb75a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /* TODO:\n         * References to entity component outside of a prefab\u0027s hierarchy should not clone the component referenced, it should point to the same reference.\n         * More work is required on that front, particularly with EntityComponent which does not have a specific serializer,\n         * we would need one that derive from DataContentSerializerWithReuse to properly filter external references.\n         * The serializer for TransformComponent derives from a simple DataSerializer for example.\n         * See also PR #2914\n         */"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine.Tests/TestEntity.cs"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"4be9a124448caa744a0e5c8f1a855ff53f2d5e5d44c04bcb3e05f4a8d06ead09"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check the root entity.Transform \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine.Tests/TestEntityManager.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccaf7309e2b3f36225b74e2fdb364fdee08dfc68ec422176a11c2a35af9910df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check if channel matches \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationBlender.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"85aa82bab7c6e48113a26f6590378708c856859068aecf17c80f65e43102e60a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Maybe it\u0027s better lazily done? (avoid need to store list of all evaluators) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationBlender.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1686bfa1b311c91e133566817fcadd3cf90842e9164517bb85c66cd834a3f3e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Either result is null (should have a Pop operation) or result is non null (stack end up being size 1) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationBlender.cs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"631eef1916c3a22141523e270045854684df8bf0ce6b0def810edaa99277e406"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Force result allocation to happen on user side? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationBlender.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"e533fcb12f7ead89a604470bacc5ea9d22e5087f8c5d814bbb4324e5afa7b51f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check if before or after curve (and on those limits) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationChannel.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b4111a6faf49640db346b050473b141fc7d7ce5f2e404b0f97408517a7625d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add jump frames to do faster seeking. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationChannel.cs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd9765376f3532313ec14415f8f152debef771445bffd93f50b27e4975edce9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add jump frames to do faster seeking. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationCurveEvaluatorOptimizedGroup.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"b265ffa635f76988b1bc4fb4e706229ee18d1e504e0a2099f220c4cda5caf65f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The curve stored inside should be internal/private (it is public now to avoid implementing custom serialization before first release). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationClip.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"34920b0113d93850692737625adba48f48b74d3ebb5dd6a496caf1d4c13f8f9e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Optimize this search? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationClipEvaluator.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bcfa8543411bf48ad65b7dacfd975a14e65509a50f42225c586937f628ce66f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Optimize this search? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationClipEvaluator.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"a86a740c4538643824cbf9d25b713813a0a18608757213c443054622f56a7096"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Simple enough for now, but at some point we might want a mechanism to register them externally? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationCurveEvaluatorDirectGroup.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"61d8ff1097f57bfa6ba27fb0820d04b2f86f4f138717adb41374f910d457e5d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Simple enough for now, but at some point we might want a mechanism to register them externally? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationCurveEvaluatorOptimizedGroup.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"769e6b161ff7dc0d4e7281dfe647bf4fe2842a1713e212bedbcddc685ab813c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Reintroduces explicit int path for now, since generic path does not work on iOS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationCurveEvaluatorOptimizedGroup.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"a902f2c5a9633db6cb5fd17f8ec1217315237a50e534574e06f126e43a0260cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we really do that? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationCurveEvaluatorOptimizedGroup.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"8668441107a3878e4dc714038b6acc51cdaa1f6a3d5eaafde333093838e6a7ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we really do that? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationCurveEvaluatorOptimizedGroup.cs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab6d8c399295d45db59cd8cbc6be249da38661e5ac700a760c2d743f2dfa177"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we really do that? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationCurveEvaluatorOptimizedGroup.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d64790b6869a59bc0ad762f095fdc258b382070370a43d66f645aa14768577a"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated across 22 files: The identical BarePragmaDisable (\u0060#pragma warning disable SA1402 // File may only contain a single type\u0060) appears in 22 files (22 occurrences) \u2014 a single repo-wide policy (e.g. a Directory.Build.props decision or an idiomatic suppression), not 22 independent debts. Decide it once centrally rather than file-by-file. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/AnimationData.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaa38c7b32e70b65138368b60602b2f51d7a323216e43242052a0a31fce110a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Overflow check? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/CompressedTimeSpan.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd6ed0d50fe9a836e4a4851e2a8376ff6dd44d4592a0b113484ca159b3422d66"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Overflow check? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/CompressedTimeSpan.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"054f551577fc47551fb8695e90cfdf90a7ba00d58d1b9bbe4bf78d187a67ddea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Overflow check? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/CompressedTimeSpan.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"10bfc625f27e468d79b9c9d49d4892b490ccf4911c841ce1b6e1eb11c21e11ce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Overflow check? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/CompressedTimeSpan.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf9747225a0315dba48a3a4a23360acb98741492f7420b310c3a9db96a9660d7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Overflow check? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/CompressedTimeSpan.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"b99cfa5c39c778b268d4bfc4c3cd4799ba5b9271ddd2d4d8fdcde019b6ed91ef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Overflow check? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/CompressedTimeSpan.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"526d50d17674fa314e2995cd8603ccd87029f5fb735b5a3b7b56b37e221e65e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO This class will hold an AnimationCurve\u003CT\u003E later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/ComputeAnimationCurve.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"d44478354838a359f89ea967da16ef572c2cc45945adb57d4503a0cda06b0d6d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO This list will become AnimationCurve\u003CT\u003E \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/ComputeAnimationCurve.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9e061c53e177a034a3ae49fc208cebd92289cf8853e4d6e0888eef22718b9db"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: does it make sense to use the same kind of cubic computation than Vector4 for colors? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/ComputeCurveContracts.cs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"31b0dca3a5218aff8db8d392b5e7ccc1e8cb5afd1512762c6978a34735423b87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Maybe make it variable length/density \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/ComputeCurveSampler.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"134d23292f1e19859ea6d5e4445406de7282131016500e52f65a1a30299c7abe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use Vector3(ref,out) functions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/Interpolator.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"5029bcc601582a650fadd6bba41efae6bf8b31c2b5f22272a66b2a10173aca83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use Vector3(ref,out) functions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/Interpolator.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa2185237b2aa750108aad1e02bd1c3c4a723e42c6c727085972193f74332c88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use Vector3(ref,out) functions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/Interpolator.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"33f7cb92ea9acf1aeec3c5847b7fbca223f02e359a3d5bb35d293582a40d0b51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Investigate: Squad doesn\u0027t seem to do the same thing as implicit derivatives \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/Interpolator.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ab11b1d155a849991a7a29c682a700b955146ad6a07e6d983ff18942a4eb14b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stored in AnimationProcessor? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Animations/PlayingAnimation.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c263f907a272d382de5ee4f6dffcc07c966ed014bc95407c9df3b0ffc17d0d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if the entity has just been added, it might crash because part of the Transform update is done at the Draw and we might have uninitialized values \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Audio/AudioEmitterProcessor.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"801c511ef1ad0fb6f09a4ee2605b5c4b602ca4475398d53e5a9da1e28a38a844"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be called CustomAspectRatio \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/CameraComponent.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a2d06803509b79138e1aa8822a803d0828197f2da804eb4ab6c8450e9460746"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be called AspectRatio \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/CameraComponent.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0aee8be2e9f636ad7fd3864e89462adf0e19e5706f46d1477122c290f24e159"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we throw an error if Projection is not set? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/CameraComponent.cs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"f99174332c65a1ae7c5ec37db6be97f2c5c2cffed21c58aa79a4501e673be0fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Hardcoded \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Design/CloneSerializer.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a124b8dd48ecd0649d6f84373691e60866cd268f740209a71441ba2c670a3a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Temporary hack to get static field of the requested type/property name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Design/EntityChildPropertyResolver.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3553b29fe7ba6f0a498fbca9fc6fe17ee83c3ed9aec4ecea007136126511872"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Instead of throwing an exception, we could just skip it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Design/EntityChildPropertyResolver.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e758e9e07e87ff88dddd0fca1777d65aeae3167cdc579ecf1da81b88eb42b54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this class threadsafe (current locks aren\u0027t sufficients) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/EntityManager.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"c80f2dd1057063dbaf19c2e28c2e02cba77e820c7fda3b353569af25889d2adf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: log an error if type is not of EntityProcessor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/EntityManager.cs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4c1c9980eb582b8345c5947af64edb55b178e899321457519de517e2c01ee19"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1649 // File name should match first type name \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":"sources/engine/Stride.Engine/Engine/Events/EventKey.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1c7a8a7fb215d860654156b087d41ee9a8b490148a822d7618f657849425e1d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1649 // File name should match first type name \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":"sources/engine/Stride.Engine/Engine/Events/EventReceiver.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5085569477117c1ee906cf3954ede4dba69c1cbc257d891f0f099c49b6bac8b"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1649 // File name should match first type name \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":"sources/engine/Stride.Foundation/Effects/ParameterKeySerializer.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bfe23c96787da574e06babf7f87f683920e66eea461b6888600562f5d1df905"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1649 // File name should match first type name \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":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/BokehTechnique.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"b80d4bad0f1dace53996d68d6d8584537c0bbc99e5c19730a41d2c15761b8637"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We might want to provide overrides on the GameSettings to specify debug and/or optim level specifically. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Game.cs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f1a04af701e7cabd0ae19292e6e9c858269de9af78784a9e7db3e2e5aa783f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: data-driven? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Game.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb04930157e32187ec6974c9159459bb561b7fb4feb4b9b96dd62e3df76a154f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if Model is null, shouldn\u0027t we always return null? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/ModelComponent.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a523fb8e9496bc5d4545343274c864e7ea9ca9ec703dc95c3791b8aa7ee819d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: How to handle scripts that we want to start during current frame? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Processors/ScriptSystem.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bfc85032bbeafc6c765c9c80f9621658de0e4c7a3b573a2f2c43afdd57f236b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Entity processors should not be aware of scenes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/Processors/TransformProcessor.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ba308515afa046fc59882bd3dce57109eb8b39b037ef372162632b68386b694"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Dispose of Scene, graphics compositor...etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Engine/SceneInstance.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"99aa3cc8c938861441c77ca35f583da45213a7b30e6e2a22e89b983edcf0e20f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR where to get command list from? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Profiling/DebugTextSystem.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"89b4636aaef4c14ebe3616ac106aa0ce923be52a464f2faab648dd90c82f7c9d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Untangle this a bit. Currently fps display (FilteringMode == GameProfilingResults.Fps) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Profiling/GameProfilingSystem.cs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"737135a89676b073d69ede64a8a0d4be4361b3356234a7f4842c878303e89cb3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Needed for ParameterCollection getters, but it would be better to avoid this kind of dependency. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Properties/AssemblyInfo.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8798c665dff8e12e2f8d5cafd5e31fb2b19e428482dfdb1e4373ccf797dab7e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Optimize (use previous coherency info?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.LightProbes.cs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"21ca0796156994028660d461e570809971878ec8725e0d3d86eeaabf69345e9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Draw the tetrahedron we are in full screen \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.LightProbes.cs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a847994a0297251d1fd719ec0f2b937c2a750cbb01891cfdf04fba7c3d7efc6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we use GraphicsDeviceManager.PreferredBackBufferFormat? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"f169e8aa8d6532633993ec47f9ba7fe3e84338e3dad977fe87f37fcfb25fba8d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is just a workaround for now, because I can\u0027t sample an integer texture in a post process. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba2b0901c48ea94cb21ceec16348229373a9d0a4424d534efd5073b76edfe7f4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This format should be acquired from the ShadowMapRenderer instead of being fixed here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/ForwardRenderer.cs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"42c6d4bbdc46a60d75bd9b32815c3a48187004b591c1e2a0ca187a5f53802593"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we would like an attribute to specify that serializing through the interface type is fine in this case (bypass type detection) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/GraphicsCompositor.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7f75f3c5885b98038c31328d6d785bca3af6572516476da25f70db1e9b2e0fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Multiple viewports? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Compositing/SceneCameraRenderer.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dd474e4f306e92378bcfe7bc01627e9f0725a98779d9dbdcb12a4a252a4aa60"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // Face XXX \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/LightProbes/LightProbeGenerator.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"510fd48fa51197ed48591f4cceb58207731b7c258afc5b724ad386db6d354f45"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Better check: coplanar, etc... (maybe the check inside BowyerWatsonTetrahedralization might be enough -- tetrahedron won\u0027t be in positive order) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/LightProbes/LightProbeGenerator.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"df0b79415498a0c80368dced04dfcd798894c2f6f354ec0d0f5ab86d401b4cf0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERF: will do bounds checks; if can be proven outside the loop that this is guaranteed inside bounds, invert the #if \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/LightProbes/LightProbeGenerator.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a9b70ae475856ccbb12aa88f569783ad48a979d48a58b230bb2de63fdc66dc9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Optimize 3x3 invert \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/LightProbes/LightProbeGenerator.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7d242ca262899fe8618e6f538b4d9b85010670e2b964fcc55643f98ae5a568"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Log \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/LightProbes/LightProbeProcessor.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"a93908c23511bcc3f44ec2038644a9ae40825817770f66a5dd599791674a8dd0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check if it wouldn\u0027t be better to add/remove directly in CheckMeshes()? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/ModelRenderProcessor.cs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"e261dd8dc713a7b217ecc631ce2ed37036d7101364c0459c567b3f2af488808d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Somehow, if material changed we might need to remove/add object in render system again (to evaluate new render stage subscription) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/ModelRenderProcessor.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6bc3bfba318942b368ab37ce5adb8a7cbdcce375e04001611a16c10a714f045"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Should we allow adding RenderSprite without a CurrentSprite instead? (if yes, need some improvement in RenderSystem) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Rendering/Sprites/SpriteRenderProcessor.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3fabccd9d4d4535bd633379aa4e1d6cdddda8e9b8818edf55e97f456ab729d8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle reconnections, etc... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Shaders.Compiler/RemoteEffectCompilerClient.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"0017d9a808ae127e7e6b4eee22ad7a2af925f8c03ec6ef3e1e675d1ad16ad0d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make that private as soon as we stop signing assemblies (so that EffectCompilerServer can use it) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Shaders.Compiler/RemoteEffectCompilerEffectAnswer.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf41805acc4eb12cd5ad20825374bf06b4822aeabb37d3499f6bf08046c0ab7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make that private as soon as we stop signing assemblies (so that EffectCompilerServer can use it) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Shaders.Compiler/RemoteEffectCompilerEffectRequest.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d20fadca6234cb8fc8db2f4752967d430f67fd986c13f6b04228fe1a3cbfe1d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support LoggerResult as well \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Shaders.Compiler/RemoteEffectCompilerEffectAnswer.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bce03b6b283574832d26f455eb97138567605611603940228bae626cd1dfb38"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should switch to something determined at compile time with assembly processor? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/BlittableHelper.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ebbbe54717ab72de360d58aa459d081d25dc28b2347d653ac4cdff3a3a27dda"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Performance: precompute this in AssemblyProcessor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/BlittableHelper.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa64e83a8e33372b3dc560a4eea73986fb2af991f051ec65493f02c2b52a35cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Avoid substring? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"262e8e5b30227b9dea8676b8d1779ad973042c77f1dddac4aa27d38e052b8092"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Avoid substring? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"b59634659c3ed5921437eaa1dcd04db1a3ba52abdbaa770e963978009e29ec52"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we actually perform an early castclass and skip if type is incorrect? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3876c30e709f4e20c4bf3be922060f93eaee067249fc9cf025393371555cda3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This case can happen quite often (i.e. a float property) and require an extra indirection \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":616}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f175c330247573a9d0fafb2074425ecda90eafb4a0b30b663133c63905f67cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This case can happen quite often (i.e. a float property) and require an extra indirection \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngine.cs"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"51bc817eac3f1d0616e44b6fefe50667fb73989fb9d3826a725d832c6f5d33d4"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] ObjectToPointer"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngineHelper.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d76a75405475d30fc431b87198e944dada2fafaa40d3cf41b3de11feb41b6f9"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] PointerToObject"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngineHelper.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"851f4f6563c3101f8010628f7bd248272bafda5edc18f7842fd793e0c2b36be7"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] PointerToStruct"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngineHelper.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bd4fc0ffa59cbe1f528f49cb409a100ce9ce01cab6a9df2c33e6f1e1bfe1702"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] RefBoxedStruct"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateEngineHelper.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"30c5a6e3dfe47841c7a852722d6f5347d156ec166e8f82ed45174c299ef81b35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we switch to short \u002B short? (note: could be a problem with big arrays) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Engine/Updater/UpdateOperation.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf358c92d444679e90b4100c25a4b95fc6a241f5149eea278b3566d4108f5cc2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make it unique (global dictionary?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Effects/ParameterKey.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5283ed9f935f3521e574f4fa428b9ffad0249196d77cdd6538814d2c4c6e160"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*if (keyByNames.TryGetValue(name, out duplicateKey))\n                {\n                    if (duplicateKey.PropertyType != key.PropertyType)\n                    {\n                        // TODO: For now, throw an exception, but we should be nicer about it\n                        // (log and allow the two keys to co-exist peacefully?)\n                        throw new InvalidOperationException(\u0022Two ParameterKey with same name but different types have been initialized.\u0022);\n                    }\n                    return key;\n                }*/ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Effects/ParameterKeys.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"53998fd7bbfb5f29db8adfbc513e520233a6e22b6779bbb73343cd390d6cbdf9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Expose a way to define custom color spaces (red, green, blue, white point, etc.) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Graphics/ColorSpaceType.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"903f2a306ae7c2f18eb04172696190fd706b3b84303bf729831f6c2c0064ba16"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1310 // Field names should not contain underscore \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":"sources/engine/Stride.Foundation/Graphics/DDS.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"32f58ee4eb77357b7922b9716dc7bf1e5f1359c1527fa0c341cceded6c2d035f"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable SA1310 // Field names should not contain underscore \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":"sources/engine/Stride.Games/Desktop/Win32Native.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"6737ee508ce8399015f433964e03bf24814123a2c5abe1f59d4e56120effaf76"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Invalidate original image? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Graphics/Image.cs"},"region":{"startLine":838}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b3a6a323294963fd0b4946ad546ccb36e602512db30ee609397463a1a5ffaa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should not this be in Stride.Graphics? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Graphics/TextureDimension.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a9391b4822066be8584ff358d1f605b3ecc65424c1a44178888132ed38906b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Switch to FastListStruct (for serialization) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Rendering/ParameterCollection.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e749624e1116191934a1d4c4086a1c89f6a22cce1c72e764cbf68addf0fead1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Set default value \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Rendering/ParameterCollection.cs"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"953e1f18a33daf3e83b8f7fd14094b60f7fba95f1231717da7529673abe530f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR optim: check if layout are the same \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Foundation/Rendering/ParameterCollection.cs"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d2f2df0eb829864ef6590c29480bb5490a0a76bfbc1e73c4cae82059ba0a030"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO temporary workaround as the engine doesn\u0027t support yet resize \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GameBase.cs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb87f563a2cf69e6b3fa99016bd4abe9a94a271ba530e87a1a42e189b55d1e9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check how we can handle this more cleanly \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GameBase.cs"},"region":{"startLine":814}}}],"partialFingerprints":{"codehealthFindingId/v1":"17b1a9734b74b9eee00be1f2a329463c77a68f65a21d70e8ab46de2f781d4564"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove these requested values. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GameContext.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"10737b9c69451db9191c024ede5267c946ec42620876436e5378877df7076287"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What happens if invalid or unavailable? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GameGraphicsParameters.cs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c3b1c8dabe55b39a1f2056dd3f18c465e2cead6baa46fe57015dacfb173eabe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Temporary woraround \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GamePlatform.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"39a0fca9461e65e5392b4b63584844bc0934c06c018c6e882f6787d25827aab8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Can GraphicsDeviceInformation be sealed? (No GetType()) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceInformation.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"20565e6e1d4447b6d4ac80b8df75664c72dc4c24192f150fe5f08e042b1a6305"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: GRAPHICS REFACTOR \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1101bd092eab5b82d52d7cf02f7b9223edcec3c2e1b42fbe768bbc0ff09cf7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: anySuitableDevice is not used, remove it? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":642}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce68d611691885b865b59fd33216641919bee8dfc390073cac36a761b94bac35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What to do? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1114}}}],"partialFingerprints":{"codehealthFindingId/v1":"03d87a7fd5a31acdfc4d7e2f0c57ed8a0056c012ccd4fec9174179227744a6cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What to do? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1122}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f11f2d6c19a817843cfa201af805ff9993da3a155cbbbc300df0e49c60fba0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What to do? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1130}}}],"partialFingerprints":{"codehealthFindingId/v1":"f741c6850944af96eae2a98eb245ddfe0ae9520182120b5b8a7eda4978dfabbf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stale comment? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1293}}}],"partialFingerprints":{"codehealthFindingId/v1":"20380eff54aebf45b68c5bb2c54b5649ca3f3b6049eae88fdbc3bbc4afd5d301"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stale comment? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"a666a2b4d2121e5683dca40bd2cdc2f7de87e9be75c57fe93e4a5340ebd2e594"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stale comment? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":2023}}}],"partialFingerprints":{"codehealthFindingId/v1":"993bb1c2e73e0031455e7fbc607e7296050b765fac30ad8f0d5cf9f6d0436803"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: HANDLE Device Resetting/Reset/Lost \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/GraphicsDeviceManager.cs"},"region":{"startLine":1296}}}],"partialFingerprints":{"codehealthFindingId/v1":"98d480110f7bd793ef1a478fc9e840896445a4eee31252450f1e967eaa172b67"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The code below is taken from GameForm.cs of the Windows Desktop implementation. This needs reviewing \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/SDL/GameFormSDL.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"048ee623409c68ddd0b39c2efa5baa75b3484aee939cee38204f776c9f3bfcb3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this is not completely thread-safe. We should use a lock to handle this correctly \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Games/SDL/SDLMessageLoop.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fbacd6c88894c277c7fd580235b1a4b32c278e040c1778ecfecc508fd6e0d55"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This doesn\u0027t work well because ImageTester.ImageTestResultConnection is static, this will need improvements \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":843}}}],"partialFingerprints":{"codehealthFindingId/v1":"a338fd3eb83e9ee57e34a223efc38ee27032f7f71bc78799dc0ea6f0eb5f5877"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We might want to sort/filter partially (platform, etc...)? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/GameTestBase.cs"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e9b4eca635dc1be5a395dffc1722e8556b834cedc432264cf8ed918d8364d0d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check build number in environment variables \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/RegressionHelpers.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba928b33997ed6c2fa9835468c94b07c03fcdf1b93a5fdb77d2e846f78c850b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move PreviewGame.CalculateViewParameters into a more generic location \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/TestCamera.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc497285baf55819bf5912102913a20183051027e5caa1086f1ad111ecded69b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR Need to get aspect ratio using graphics compositor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Regression/TestCamera.cs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2be93a213a0abbb96a0c25f0c3b7d075cf212e193f13c514c9708b3617cd70e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add HDR (BC6H) and HighQuality (BC7) variants when TextureHelper enables those paths. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests.10_0/TextureCompressionTests.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"83ec5634f974985c7679e3cb7c1610d1d8862f3f1f6d30c8785999069079be2c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO additional ASTC block sizes (4x4/5x5/8x8) coverage when TextureHelper varies block size by hint. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests.10_0/TextureCompressionTests.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"803f2500b9a1c9a4b28a053f9817813dedf7767d842a104fbe5b2a5bb42b33fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add switch Effect to test and capture frames \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestCustomEffect.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"de445ba74b674460eaaa9a5654781e7a18a04cf4b2c2a651ca2b50dbed709a70"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO DisposeBy is not working with device reset \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestDrawQuad.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"892fdfa7cb706238a616c551ad7669e44fd19241fb5a5ed121d267f46de8c788"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO DisposeBy is not working with device reset \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestRenderToTexture.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"781899b7531607138276826e1bf6292118ab41c846e94d60cffb454485d6c81d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO remove this when Save method is implemented for the bmp format \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bc9df522a690d5d97b3f4a44c38d0c33282c5a6a24b1cb1553db235b6025e8b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO remove this when Save method is implemented for the gif format \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ecea2a6a323154cbe5215bd1f464ec07e722add89703fa1b77e85e3f146b86c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO remove this when Save method is implemented for the tiff format \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"f726d03e83cf3a82f7c809ef3571d2db7ddd9ea6e683d99a3a9cb0088467c64c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO remove this when Load method is fixed for the bmp format \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"c49373a8d72efb59efb80163f957c29c0452562e57effdf268cf7bc979274fa2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO remove this when Load method is fixed for the tiff format \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0e45113818f63e252f4402c76db298250949d86a98e9e5ad6d33fe33546fedc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO remove this when Load/Save methods are implemented for Tga. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd54c03702d47de3fe534dd37cd45a94737938e486496fc60c6233690afc8444"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this when Giff compression/decompression is fixed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"51a535ce6df19609ecfb207c84b4cdb95bd10b70102abbf065ad58e5ccc04266"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this when tiff encryption implementation is stable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"296bfc60fbea509f486315f12f921e8e46337169141cc3f5f941040de64904dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this when png  encryption implementation is stable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5e0e7b876b6d038a19a78527ff66b6f38a60404c8f8e263aee58b69ca633ba8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this when jepg encryption implementation is stable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestImage.cs"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"34084ea7035d9c18c235d66057e3b3fc0ecd9835c928fcca221982584959d620"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove this when Load/Save methods are implemented for Tga \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestTexture.cs"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0ddaec6a7c41c41f991c35df9d6daf3be9e19ea2eb8b304de55507f2bb5182c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove this when Load/Save methods are implemented for Tga \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics.Tests/TestTexture.cs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"94ada12b4297ac414894f693a5a169a396676ba37bf2b614cd6f5e51f26bb76a"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] Desktop"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/AppContextType.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee8c3096c942d49b1c04e026e5d894367aac6b34f384091fd3a57241b84106c7"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] DesktopWpf"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/AppContextType.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5b2b7aa26c0d1d8168158f796a595f1f38db4553e65ac3439d33c054ed0a490"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR Should we initialize FX lazily? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/BatchBase.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0e0d14dfc9e77f516ce83131ce7687555ed9a698cb854285db7972dfb1d18c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find a better way to do that, and check resource disposal \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/BatchBase.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"b832a71101dea401f62d4110cf3933486f42603808b3ab713704161be0d221fe"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] GetData"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Buffer.cs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"89312f17c520c7a9da80c7fb06a0ebfbb46f5129df6262eb0453f19a66b43b1a"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] GetData"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1188}}}],"partialFingerprints":{"codehealthFindingId/v1":"f928ad4840789a1c970cfd437410a40c03beae01a0a00ef1911a28d45f7bd0f1"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] SetData"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Buffer.cs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f54b2c31d25d3309756bbe4a74e66249e4aaafd3103a149f4e2fe2094e030c1"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] SetData"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1394}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ca91b1df6aa44d04fc6013b2b587fc6372a369112d9ed602668a17bf4721ec8"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 162 \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":"sources/engine/Stride.Graphics/BufferPool.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"30df71532ad6eaf23bc6551b77ad2fc2a18a3abbe798c49400b33464b96a1b7c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 162 \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":"sources/engine/Stride.Graphics/BufferPool.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ba05afd6b0054d8c748d0df3e8a4e1f700845fb7b11ef3b58921da71d505c7b"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 162 \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":"sources/engine/Stride.Graphics/BufferPool.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0d3def8cc420ef77f5caa7eb5b15c682bfc3b6b147b0ad4fdd8a09f2c942165"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 162 \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":"sources/engine/Stride.Graphics/BufferPool.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"310fd21ad062c4cb569fff5a417ba1a88f083c1e545b637017f2a9b5d03210b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we clear the other entries? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CommandList.cs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"769be96d199410d7ba8031b74217afdc6aeb44cfbad4ea3cbc47d324550ca6c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we clear the other entries? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CommandList.cs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"b30da4586264cd5b8b357518c8277d3ebfe8735a350e9b5dceb9421ad7e82664"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we clear the other entries? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CommandList.cs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d5e5d7bde78a8a2efde23ff2e77bc631c3114e5160cb8eb9121a7adfcf0dd5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we clear the other entries? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CommandList.cs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a901a00acaa5ffec12103bfebaf068215070c80b1b5e16ba796e59674d2068e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we clear the other entries? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CommandList.cs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db9a3e600d9bef5ecce10b27da437bea453968082fb699fcb89e856e31f29e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR what should we do with this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CommandList.cs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8eab9d5835258682e52ab860bc4d13a01d5e65d43b3efe41c4856d94de6253f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR what should we do with this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CommandList.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"b36d8d11cfd39546c16b9966218c3706718f97a9b3f4301eec066bb9613a4924"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR what should we do with this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CommandList.cs"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"f023372c5d5e435c2f2f94a0b3797d084c844c622b99ed054eeb2bb04bf021c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR what should we do with this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1619}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0ab90a5f704528cfa2367f5403eb5e649ebd4ffe8e4860ae675110aad8c5205"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR what should we do with this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1710}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fcba7ee69224ee05ea800257e779fc31bd65e24bb6accf72c6e48120ebd3d0c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement deferred command list execution \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/CompiledCommandList.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"94a7711acf238630dbc19b3db3b3dac4dd9b595e435a92bf8fff0308f50988d7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Avoid loading/unloading the same data \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Data/BufferSerializer.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"f880d8ae963886eafdca04b40f9215c522b5d6ba95d1d7411a47ee26ed89cdcd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Error handling? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Data/TextureContentSerializer.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c068db91ea1757a45f765de25759867069f34ae38bea2224c188965f75392ab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Error handling? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Data/TextureImageSerializer.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"567ad1b5135585e568697ca3d7def1e2d7c404a7836bf5261032906b5826c931"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We end up duplicating some of the texture data; we could find a way to avoid that by saving only the chunks of higher level mips? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Data/TextureSerializationData.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"49fdf48a0ab1d205c4c532de6089d4fec79f630adbd8bc50f6b44c8ecc16d4f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should public API mention Silk? It\u0027s internal detail and device type is not configurable by Stride \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/DeviceCreationFlags.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6925b73560d86742cc85140d88348dbed6ada144eabdbbe4700476e4923fd53"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR (check if necessary) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Effects/Effect.cs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8422fb8bb77e6a207fe941c917efdfea6350cdfd4c5d0c6fe5e6235c9e81495"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is invalid, we might delete character from current frame! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Font/FontCacheManager.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bcffbfc74576810bb5b503b5b0aea472db9d63a192a1223e7b0d7f1bf59b099"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO possibly load cached character bitmaps from the disk \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Font/FontSystem.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"612ab18e51ecbc5164875268dd12a8da53c3366f125cf3fc1366e2dca6f82e8e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO possibly save generated characters bitmaps on the disk \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Font/FontSystem.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"11aaf020dd6ceb08e85b4abd777a5edbb9abb188a2c7969df24febc39d3b356b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support to tesselate the faces of the cube \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Cube.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"a63d0cd2f53d624c878319b401dcfc76aa169ce980b95c00965eac001a5160e0"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: I don\u0027t really know how to set up texture coordinates in a sane way \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.Disc.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9fffbb258b4140284fd92d96334b8bb1007380400d4daf87271ab94bcd12a90"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: A better alternative would be to store recreation parameters so that we can reuse procedural code. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GeometricPrimitives/GeometricPrimitive.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7e7ddc13bb4c1631253d62f5393cc0a678ee134ff198f154493d20692a7dcbc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is not a quad, but a fullscreen triangle! Maybe this class should be renamed? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsDevice.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"b46837d13e251d190646d7eb76917671a54de768399da5dc2ef7f217159d7d66"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is not a quad, but a fullscreen triangle! Maybe this class should be renamed? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/PrimitiveQuad.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"48f1dadddfdd23f080e28afe294e700202a53e0eaba376f98f32f216b71424ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Public mutable fields? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsDevice.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"b44a9187ed458463a0c05e50b8964df8fa59a040751541f61544c60a07e8b2f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Why different from Array.Empty? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsDevice.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"3203d4f7f92e020853d9394926662d3bdb74ae13493d2569c18b6ef7608b25b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should this be named DrawFullScreen or DrawFullScreenTriangle instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsDeviceExtensions.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"1197bec10cb7ad555031bb871a937a2dad1ce4e73c22e89ec68e261dc0b739ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use the Span\u003CT\u003E overload when available \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsDeviceExtensions.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"8af57c36312fbbc04e9ea18b76699321f76e0d469f280a28f55227e1c3fd9740"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Temporarily here until we can move WindowsMixedRealityGraphicsPresenter to Stride.VirtualReality (currently not possible because Stride.Games creates it) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsPresenter.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"a03fa4cda9b08a47fda7ed3aed813fd17622d0231b19ed896f3e281c1b10ba1e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check if we should introduce an enum for the kind of scope (per DrawCore, per Frame...etc.) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsResourceAllocator.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"edf1b86d47cff59002f80be1c64dcdfe403dd4857938bbe0e6ca5b8f7ea2ad09"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check if we should introduce an enum for the kind of scope (per DrawCore, per Frame...etc.) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageEffect.cs"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ffca8d315411c01bd92f413a5782d4e0d212822954df4499188d1d909e67740"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add statistics method (number of objects allocated...etc.) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsResourceAllocator.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f936b13f76435e9e28f379cb71af5f7c8cd99eba19558f436c32c82b1f57777"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Never set, never read, remove this property? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/GraphicsResourceAllocator.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f5d1ac681f59bf0b483c84708758c23f772058b994a5ae07ab14af33f3d113d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we use the enum IndexElementSize instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/IndexBufferBinding.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab84b9e5043fc271d07e20fe510d568e4571d2e9b4c8049dd7d6304e6887929e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: These two fields are not used for now. Client code uses DataBox directly. Remove them? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/MappedResource.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab7b0019198bd779db35f34a3c5c8f9d15dbbd2335781a7b4d8e1a0b83eb27c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: GRAPHICS REFACTOR: We could avoid lock by adding them to a ThreadLocal (or RenderContext) and merge at end of frame \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/MutablePipelineState.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdff801dd3e84850c7bb875d2643b3840aab7e4eb662958ecb16b898b47e423a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Unused? Vulkan backend has \u0027inputBindingCount\u0027, but does not write to this property. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/PipelineState.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea2092de81043f958486d9d6e36af7ac850c9fa3e0855a2b0281527e7c423a1b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Appropriate destroy \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/PipelineState.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1eeae7e9b3e626b480b3ad5991d124152cb2b53943283c4be54c493b23e8a0e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Appropriate destroy \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SamplerState.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc4cd50a93ecca3f9e2004be86d2e9e4e1b957258d6200c2e8eef4935461ece5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ADD QUICK UNBIND FOR SRV \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/PrimitiveQuad.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"65b8b52efa0977d482ced6eaf75fe35be627f326de4235d1571c546c9e98f3a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: D3D12: In Direct3D 12, Scissor rectangles are set through the Command List dynamically, not through immutable Render States \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/RasterizerStateDescription.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"2453d53287868443192c10ab0f6fb9043c565cbe8195c797eaea32fdf186bee9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Shoud be named permutationVersion, as it is to know when the permutation has changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Rendering/EffectInstance.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"714dee7df78a68bc7835dd50e4500c48bea24eb99c5c6b83abd83307db0deb6d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: == is comparing references, not contents. Is this acceptable? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Rendering/EffectInstance.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"cabf2d6d5a38dec89e684b416adbd21f2aa65b62e4521fe4136fe212e2d32221"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Wayland SDL_EGL_MakeCurrent does not cover multi-context scenario (https://github.com/libsdl-org/SDL/issues/9072)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SDL/Window.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"54a09f1a3c2bd73caf86f80d29d7a4560837d7ef3cc48cebd71c8300946ad49a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This is not yet implemented on SDL. We are using SDL_SetWindowPosition in \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SDL/Window.cs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"a19668d5b400a8937bff17442778a2d53fc895136b537117f1bf7f38419472ad"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: the hope that it will apply the new hint. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SDL/Window.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"28dd877590896ccbb972d0c92483d1f01562999272c43ac6e483ed74df8dd7e1"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: How to implement this since this is being called. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SDL/Window.cs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cdd15efd3d15bb8494a43ad9160cff3e51a727a1d7f7ff227eeaa1bb23ddf57"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: some step function to have LOD without regenerating on every small change? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SpriteFont.cs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"956757196d6ae99273c814b1e9b29f62ac9e87fef54940e8e566dbb2adf19572"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Do we need auxiliaryScaling \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/SpriteFont.cs"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"b713b16f9b1140256d2fa6eb8eb84ce96daf8f584dd5cc82825e86ca98f060de"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: review this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.Extensions.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b642b399c23e034b5dc295ccc8d926a5c95834d3eeb8c9a0cfa1af23050d246"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: review this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/GraphNodeChangeListener.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"72156ec2dde0fbfd9635cfe112a513879b49f99a8ea705f6043b0feab1ec4a86"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: review this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/GraphNodeChangeListener.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"c806a50f16dab090573b419536921bd4cbd2848948c62b30a8d0d2b656609374"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What\u0027s the point of storing the dimensions? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"30daaaf2dd101302e933fc2808319b5f6cc6258599ab267da0d4b06c54852444"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some methods are marked as main-thread only. This is true for some platforms, but for all? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"f623d2caed97d4e26c90b8029a6acac7c60ff3f9e307521e9ac8b95aeaefc2fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is unused and internal. Should it be kept? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1929}}}],"partialFingerprints":{"codehealthFindingId/v1":"65a4afdb329aea79bfdf473c40db95f546339064c96cbc237895ff41f7ca9bab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is unused and internal. Should it be kept? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":1946}}}],"partialFingerprints":{"codehealthFindingId/v1":"be5e094a8e5f2171b53d15b63d9bf53231512efadcfb941c63b3c55cddbce4b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Efficient calculation without loop. Lzcnt? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Texture.cs"},"region":{"startLine":2050}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2acdacdfc45a09fc178dbe2057174706c8cc656b7ce50278f29a4f18958737d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This naming is ambiguous. A render target can be a depth, stencil or color buffer. But we use \u0022RenderTarget\u0022 synonymously with \u0022ColorTarget\u0022. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/TextureFlags.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"7449b2013ef343a6eafc27772f8b902c0e43cd6cc5faa67ac57d2f0abb73877b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: InstanceCount is not used in any place. Consider removing it or using it in a meaningful way \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexDeclaration.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae3f69efa0425231643e568b00ffc9ec93fc63fbbca8bcfddce6fc829d9ed7e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: InstanceCount is not used in any place. Consider removing it or using it in a meaningful way \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexDeclaration.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"a293f7ad9310460c3844638cbd07aeffe8b9d93758706c615a534e4a2b150f3a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stale comment? Use string.Intern? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexElement.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"546edfcbbb25891f4e304b89abf34380f03ddb5b97053db778dfb7433f87b29a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stale comment? Use string.Intern? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexElement.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c86d43e2b10f01040bb2a4336a819cefad252fa705be09cf4481d66769aaed4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The code is not optimal if we want to combine several transforms on a vertex buffer. We should have a better API for this. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b16b1bf5a89796cc4547c8b72b226ce5b25a9f48afb00a269f15b01542e60a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Write some unit tests! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"330a3eb221d22024ef522613ed0e3545305a4302dee6bc5232b52c25d70fa386"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Usage index in key \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b95b05f0bef7b9a39d4c1229a15038469c612cd5e38e9e9084a5a362290fe5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Usage index in key \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3b0e7c47390a053fb7f78f593a01ef680d0c2e060033aafaffcc892ec157f3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We need to understand more how we can handle this more accurately \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"7187fc97d62f21cbee1d7fca011a8c66ae2a835b65f282aa5d6a9095225e4dfc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We need to understand more how we can handle this more accurately \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/VertexHelper.cs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"62224f53278429f07ec2576c2bf6e724e56d4bafc1ff0d5c0053b2135310cf8e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The way to calculate the count is not always correct depending on the ViewFlags...etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Buffer.Vulkan.cs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4f5fe173b766402e153e8b8239f0a0ed6b3e2def50607732a6ac38b195f1281"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //// TODO D3D12 Hardcoded for one viewport \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea0aadfeea1056aabbe95409d801b7904d2644371c77c6cba181f9a0c1a03af4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN API: Stride is part of Pipeline \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d41831e57006ee80e61dd2fb2564d3b26c88be097e5f5f5af6322251d3a454a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Handle multiple buffers. Collect and apply before draw? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"00851ae488f7d21a8be5644960cd53608d79979ce0d5fc92af627d1b31b643eb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: subresource parameter is currently ignored \u2014 Vulkan always transitions all \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"779c11d95df491fd549e159c1f983e75e4c0baaad9974e4060f713b831e07471"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Detect if inside render pass. If so, NativeCommandBuffer.ClearAttachments() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":936}}}],"partialFingerprints":{"codehealthFindingId/v1":"edbca1619ef55fbac87f13dc8eefb6e85fe5be278c4f83098d81041852968404"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: One copy per mip level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1048}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b8c639707b99af9afc40238c59a4b15f2f5d5d3a331a46663c73eb51eb587a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: One copy per mip level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1247}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fa97fae6e8ea6c2b8cfb218067aaa69c34f2ce74a369596d70c6a6e2fb4c017"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: compute all regions at once in a single call \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1092}}}],"partialFingerprints":{"codehealthFindingId/v1":"c59d37631df40837e375e1f014941a5488f2b83240589d6cd2c0c4ae94e5dfdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Handle depth-stencil (NOTE: only supported on graphics queue) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1573}}}],"partialFingerprints":{"codehealthFindingId/v1":"733aaf1d9bb0734657751dfb0d0826c72b76a586b63b27c24b70f19f92e40f88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Handle non-packed pitches \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1574}}}],"partialFingerprints":{"codehealthFindingId/v1":"72363f4fb92685c4e1e6c71b2f7f80000873fea46b989354a38b80f4037e0be9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Use correct view depth/array size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1790}}}],"partialFingerprints":{"codehealthFindingId/v1":"3de6f392b3792b5f70ba3f800da4575c306317fbccbdd2a89af2176b350f63f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Can we use a custom render pass for this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":1801}}}],"partialFingerprints":{"codehealthFindingId/v1":"125f02dd239cfca1e52312f4fa4538ab17e7c2cb07786f9cbe5ab90eec89e236"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] ResourceBarrierTransition"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/CommandList.Vulkan.cs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"86445cdf9e606490d5413998caef330484867d327c829a70f5ffcf3cb2e3f151"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Special case for unused bindings in PipelineState. Handle more nicely. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/DescriptorSetLayout.Vulkan.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"335d5df4467fd394efdeebd700a05efd2d8ee6de60035135d75b51baa5d2a44d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Filter? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/DescriptorSetLayout.Vulkan.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"583d2b7b8a2c939c7bc055ed70b9c8538af186fe01f3d1a5791f56b682489668"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Handle immutable samplers for DescriptorCount \u003E 1 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/DescriptorSetLayout.Vulkan.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"297b725722f9f5046784eaad90730c0fafdbe55aace86cb419cfbfb932eb7e4e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapter.Vulkan.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c1e0e46a0c116be4359b5f208b2614429c0d58f8fd81c276469ce24bd65895"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapter.Vulkan.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"829af8fbaedc96467bc9533f40fe4c3573789eeab5af573bcf260c48c2069675"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"0889716ae50b77fc8166f1c97c88892f14211e775428a09d42946f0084cc163b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsOutput.Vulkan.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d23e6d4b2fc81cf41897831ef7c2a3d0518f1b2d7e53f33aeb74d702a806339"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsOutput.Vulkan.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"efadaa2f583de0156e4296ed388fd06fcc731b9e19442e6fdee0877fa6999440"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/PipelineState.Vulkan.cs"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"412e5644a106b83639813cdda7f9e81cc1e871fa970e3d67bb43b24844ab8a1f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"8781a64cb9ff052cd5a69716b47ae566fbe504a0c213b01e924753f6fd8ec15b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN api \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsAdapter.Vulkan.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55f1a24ed98f4e17386c360cbf5196f2380354e0beb6d6880009b210ad71ab2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO D3D12 recycle old ones (using fences to know when GPU is done with them) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"da1d31b46c31e8392f887188939248c10b9fe29be7bc9d4d2e32740ef87a62c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO D3D12 ResourceStates.CopySource not working? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b3563e519110ee2d6e30d6a0ee8d026a8f45a4da61663378fedc5fa5bc23fae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO D3D12 in case of concurrency, this lock could end up blocking too long a second thread with lower fenceValue then first one \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":967}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5dbac0b7f10177d865ee06c0786132e738a9eaf6eda904bf74a85e04dc76bee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do we want to use spinlock instead? (need to measure impact, not good if too long wait) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":1053}}}],"partialFingerprints":{"codehealthFindingId/v1":"24e79670d7f888d23d0cb4b51562ec06d6db0aaf601abef76ca691d7085055c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do we want to use spinlock instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDevice.Vulkan.cs"},"region":{"startLine":1077}}}],"partialFingerprints":{"codehealthFindingId/v1":"750f4af9341a47e04a2d6b77d1786ceefa3190f93bdfbb0246b3e462f45b4721"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO D3D12 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/GraphicsDeviceFeatures.Vulkan.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"970af2608e8b46385f75a105a6f056a37709c4ec34e5122e7bedd29359972dbb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: This is currently an argument to Draw() overloads. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/PipelineState.Vulkan.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"af498a10115833b6e4e162cb3b60d7055559beb70a531e7e891cb47886dceb3f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Multisampling \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/PipelineState.Vulkan.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d94c5a142974984e2b93b1c5362160e819f4c5d946d8961d78ff4e316d5ab37"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Only if depth read enabled? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/PipelineState.Vulkan.cs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"70f26d5a1f9ba1034d181bcc119e06e37bdb40b7ca46f63f7c8533d42ab18096"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Only if depth write enabled? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/PipelineState.Vulkan.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d1dcaa76afaa661b0195c259ed2f00e6ef1ed44e5fa312c90a02a93ec6c1b4b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //                    // TODO: We should track all user created render targets that points to back buffer as well (or deny their creation?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab53a3199703084599ea1cab87422a1d31bbb676a204311cb456968b6be569ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Queue family is needed when creating the Device, so here we can just do a sanity check? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9d8f544663482faec3db90081b40da35c2847f01bc1b8c814334a334b1ff570"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Handle PresentInterval.Two \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0eeaaed750702f44bc3eadde4cac567585a7d104660a5b29374e705bba321bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Use off-screen buffer to emulate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/SwapChainGraphicsPresenter.Vulkan.cs"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"630d24bd9670cf50a105f53be4a9564b31e2cd3e369b59397e3fdb3303fbc3cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Can we restrict more based on GraphicsResourceUsage? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eff23dcd4c12b6b67991c2c5681158b6234e0d005635c7b260cd694d74d14f4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Input attachments \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"f57ed2705074d4c3ce658e6b1aeae96b018ef6b70dfc0dd27193ae70742be2d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Multisampling, flags, usage, etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bfe8c0675f68a3f6f37f96e7253d601e7ce17f7b30b987318fc926ac3248d00"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Check if pitches are valid \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"51c4c94cec3269b194e5ed62faf5aa0ce8beb125566829e901d3b05154521328"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Binary compatible \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"547f69b1d455196de0eac6ae18226cc78af8d25874e45b01e4fe89407cd9425d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO VULKAN: Complete supported formats \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"965fb9ab43e385b45259d38b3fe209fb777f84bd90debbaebb463c957e462fc5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Temporary depth format (need to decide relation between RenderTarget1D and Texture) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Graphics/Vulkan/VulkanConvertExtensions.cs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"37f842a3376173eb73741f7e62e2fb119a7dacd35f633c7fed82d4ad4be41826"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] GetVirtualButton"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Input/InputManager.cs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2d217299f0e164942b4e1dfabac14c86499454d597e57ad1cb3dc5ee85bde91"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] NumPadDecimal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Input/Keys.cs"},"region":{"startLine":909}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b86d321209bb6aaa65cf34d76785ee8801ca561e242b48329587af7d1b155b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO EntityProcessors \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/DynamicNavigationMeshSystem.cs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"84ac22ffc413859b008c4963ed4a4079f08a54a7cc382c0183dc7994fc2913cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Cancel running build, TODO check if the running build can actual satisfy the current rebuild request and don\u0027t cancel in that case \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/DynamicNavigationMeshSystem.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c4548f9567469425077f31164e850ca4dd4422a7859019058e6d22423cda646"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Link these parameters to the builder \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/InternalNavigationMesh.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"02e67e532f6911ff7e8d537f968677883b1c880bc4880a2f01aadfaa9b5db240"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support off-mesh connections \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationBuilder.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7c82c672fde225c40a2fdc088c03ba8c10ffb89b6bf19bf905f3082ee47be97"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Generate tile local mesh input data \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/NavigationMeshBuilder.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"485d31cc864f6bdd8998624ebd3f507cb7d94fc687b1b5d9657f3a399d92502b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Plugins \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Navigation/Processors/BoundingBoxProcessor.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"f555c6662514ada033d133ac3830b728edb0e5a25a2c54203f2f86155e6d508f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Reset low-level data only. This method also gets called when moving the entity in the hierarchy! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Components/ParticleSystemSimulationProcessor.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"290b35df61c7bcc5e1572f9f228b74088a4f30f0a87ec5ba088caefac99da88a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO This will have to change at some point when we have better idea of how customizable the fields will be. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Initializers/InitialDefaultFields.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"120ca38382ff358db88673b790ebd9b6a01aeaee8fbce3662bd6d9fa4e2861b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Part of the graphics improvement XK-3052"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Materials/ParticleMaterialComputeColor.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"2edb05f0a5081cfce3f15102c1d0d6bce6239cc56c4db313a947a07150971462"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Part of the graphics improvement XK-3052"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Materials/ParticleMaterialComputeColor.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"123f09b267f0b7f12fcd61f8709c5ce9c0c6e720fcdbdc1ffb3014af84780ac2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Part of the graphics improvement XK-3052"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Materials/ParticleMaterialComputeColor.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"2618a2e717aa69733c72ca4f20d6f3c15286e4b791f0b33d1cb02550fad781e9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Part of the graphics improvement XK-3052"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Materials/ParticleMaterialComputeColor.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f061766d17f858efca947d3ec4c0540ce39847238fd9dd76d3ac47cbc905853"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: for loop. Remove IEnumerable from sorter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Materials/ParticleMaterialComputeColor.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"1475b533d0dcaad0fb889c6fe1d753e846c8f7eac0fcf22a6fccbf9e29548d5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Rotation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleEmitter.cs"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7d944f61db8e7e83177e72e7fe0824792d403f8c096c06072a1305cf2318589"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Rotation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ParticleEmitter.cs"},"region":{"startLine":1172}}}],"partialFingerprints":{"codehealthFindingId/v1":"7edb1a2806fdf6bd8fde1389e52734943c5c8d0ed4c85ca722b28761ff2405d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Iterate PermuatationParameters automatically? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Rendering/ParticleEmitterRenderFeature.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"441c2b3f298567300442843d2fd4582dd92c5f9b34194236587c614f3f256123"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ParticleMaterial should set this up \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Rendering/ParticleEmitterRenderFeature.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9a96333786c85a88d107804bc308781cd32ca5ef331a8fec77796af2ec62cb7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We assume same material will generate same ResourceGroup (i.e. same resources declared in same order) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Rendering/ParticleEmitterRenderFeature.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea17a94752a285737931f36543665821fa06ae6b64e5a60fbde2f6f117e860f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Build this per view, not per node!!! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Rendering/ParticleEmitterRenderFeature.cs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"28879b1878991800b2f5e2061575f64909049654bebe351c00af6471442275fe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: stackalloc? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Rendering/ParticleEmitterRenderFeature.cs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"9911559ab2f72943aba23824b852169791d7404595bdfccc234281fb69a35c95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: stackalloc? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/MeshRenderFeature.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"9413da5a8523977c8f239f2d929ae949bdfa1df0f3507130ae6f900d65b27096"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Use viewProj \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/ShapeBuilders/ShapeBuilderOrientedQuad.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"13dff4b56ffcf8aeff00e0c82c88d33d5220e2d2c11ac7b00ffd764f2d6fc977"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Maybe use a Int32 key rather than float? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Sorters/ParticleSorter.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e3d7b5eceabc58110d762c5bdcca57dd62a415c6315a32ddfe2f6b036ed857"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - Time difference ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Particles/Spawners/ParticleSpawnTriggerLifetime.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"0557e980b089feaef1cc60af37c6689daa9c94faa8db810fcb61bb5fddaa7f79"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: shouldn\u0027t we return true here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Data/ColliderShapeAssetDesc.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"560217b5b57635ae9ba9106f774b453be03612fe49535dcdb77e60d84cdb73fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo propagate to other bones? need to review this. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsComponent.cs"},"region":{"startLine":554}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cfc06112b87e8e0c303060d790862294b84a06a4f03c7ab6872611e062c5e95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Could consider fully detaching and then rebuilding, but ideally this would cause null refs on Rigidbody OnDetach calls \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsComponent.cs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"857f50a68eddd98b5bfc5a3e9688e83d1c377874f225d75057890430419e4df2"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] ProcessCollisions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsComponent.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d025808f7e8ec02d176e4a88c5c7221e95e4ec534d4f21a1ab7ad918f389c8a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement the shader and enable this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsDebugShapeMaterial.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"f33d8fca54800d9e3f92b0e0b9fb843fb3deeaecfbb5fafeab58181e0b6e33bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO enable this once material is implemented. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Engine/PhysicsShapesRenderingService.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d8e12812b323638333007d594e8d1ee5fc2ce07008af920e24aee2648fca94e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ////todo verify, winding order might be wrong? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Shapes/ConvexHullColliderShape.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2b6e5049bccb6553478f83c5b86ca8f5beef98af901db29c04f592b16b3fbe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo test if helps with performance or not \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c90303c9992ddfa57bff572d2cbad2bda5d784921a4245c2b85fea39df11b1d"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] MaxSubSteps"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Physics/Simulation.cs"},"region":{"startLine":1037}}}],"partialFingerprints":{"codehealthFindingId/v1":"235874b9fb601aa5c9113859703ebc08a174dd6993fe8ea3ab59e820a5290a18"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use bit packing? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/IndexExtensions.cs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"0727e56700dfdb422b378b40cca0841db76a9079f1a77df5d55ee0c3964b14f4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: extend to non-simple vertex declarations, fill with default values it missing declarations etc. ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/MergeExtensions.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a8382fc6c53f6e2384f2afbbd49c6b486b42d190e257f195ce5626b8b1886bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : be careful of null vertex buffers too ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/MergeExtensions.cs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"23b4230d860fa30807d5aafcf8cac8a51a413107f7b8da93e8f8767e27990bec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERF: Avoid this copying with MemoryMarshal.Cast \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/MergeExtensions.cs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"7238ad0e97432a156d0930191b911f96256b41beb1821d51eaf9bc48ac0a101c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERF: Avoid this copying with MemoryMarshal.Cast \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/MergeExtensions.cs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"90893cbbd35b3712e1ffe76f75d5ba2a2f8d92eeb4c9a9de235f4b32ce210601"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO have a generic delegate for sorting \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/PolySortExtensions.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fc702d6f14d9446a3575f72fab52755beae1750913e85bd24782abf670b7bce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle primitives other than triangle list \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/SplitExtensions.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"465baaf6d24a28aa4150a0cf2a2eff4962b308ea8050a93ad9649a2793dee7cd"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] GetVertexBufferData"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Extensions/VertexExtensions.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce8d503a89b35322167d5764ce279b01a1089cf6897d532c67cac5afe195c087"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This comparison excludes sRGB to/from non-sRGB, which are indistinguishable in memory \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGXNoCompute.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae163c9ed8c507f3a4f2503a2422c0b14a7365fd12b0b874d829445dc67a7cac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is alocating a string, we should try to not allocate here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/DrawEffect.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4c6fa596cd49a1def3d0d413089a141d14ea90f0757a983c8fd0420e3f9f788"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Free previous descriptor sets and layouts? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/DynamicEffectInstance.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"599a5322bcc38bd932292aa2b10b128354c7eb4958a5e8e5cd4c0f299f341d16"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: GRAPHICS REFACTOR: Avoid direct access, esp. since permutation values might be separated from Objects at some point \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/DynamicEffectInstance.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"a27422adb5f01a0db594771b4c03ffb351898095837dc20897c1cdab69e45679"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: sdfx too \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2611e548395d54ad35ca94646b6e542dea93af55f263ab7b4e7c4c662d3f979"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: THIS IS JUST A WORKAROUND, REMOVE THIS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"66ee78959080aa6c64502bf61982acae048c18e32762418a0ff3ae6002f142e3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we keep it so that failure never change? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"69258430afb26b11764a7454bba11d72a9411f74ba9007b050ea77852d90b66a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the \u0022/path\u0022 is hardcoded, used in ImportStreamCommand and ShaderSourceManager. Find a place to share this correctly. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"d98f1dec2c00d03c64a2f7d6b73dde9af2e3b913062c0837141a638184c9bdfc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: improve this by updating earlyCompilerCache - cache can still be relevant \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc9135ece21074bd99e8e344d16e3e72002b9b496700a67493b39cc0a1b1624b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: cache keys in a HashSet instead of ToHashSet \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e456a863957e5d245bde3a78a021e9967d982c7e55ab801ef48128c42634b8d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo should be reference counted instead of disposed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"45251ad0a3f398486a0412ec7e80178f9e209fbb5ab3451bb0154bb78ac16070"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR we could probably compute a hash for faster lookup \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/EffectSystem.cs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"813e76b74a5d7290dc4eebb4b09beaa1170ab234a73109869af4c515de07e8af"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add Brightpass filters based on average luminance and key value, taking into account the tonemap \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/BrightFilter/BrightFilter.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"a03c7d165a04a3ffb120799f3c016d5f3d3036e0d8dec5a6c8a2721ec71b8435"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO This could be put as part \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ColorTransforms/ToneMap/ToneMapMikeDayOperator.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf9840f30cb4ba53e1b0865968181c6532101c522456f2df07bdf54ffc0d6512"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Currently capturing two effects, because sdfx permutation triggers DynamicEffectCompiler \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthMinMax/DepthMinMax.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b745148a39dd255c3a826bb9d2bd59b832a6362e9e3366dd3b709c7a10a492"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Check potential different behavior with OGL where vertical addressing (V) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb21d40401baf11bc19dc80c52dc2cdd6eaf885bf66a3929e55bf133ef65264a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Add support for the Phase. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcf489cd88a26423071ee05bff7c5fbcc1b4bf7e8678c22cefc008b71ddaa105"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO use MRT to speed-up the process \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/BokehTechnique/Hexagonal/TripleRhombiBokeh.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"de9987575cac4ced46d3810625b656be3202c407e048caec4d7129fcf9d11e12"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO provide an alternative control with physical lens parameters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/DepthOfField.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"34fed1d2553585ec87fc93c5a9fc67adf7b4ed774eaa5fd325658c1c49eaec78"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO use ImageMultiScaler instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/DepthOfField.cs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"d303fcc081810e39c467922e2079ca8d77d282b86e8f3dfed256b23153fbeb0b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO replace this by physical camera parameters (aperture, focus distance...) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/DepthOfField.cs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3a854e894d05976e7db8fd4f8f5191842d6ad05c6a6b85c27e6385f1a283ee3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO single pixel is really small, average some disk area instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/DepthOfField.cs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6e28ebd7bcd8727b8445fd809298a7ad43b3e41ea0995412626de04387af7a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Quality up: make the opaque areas \u0022bleed\u0022 into the areas we just made transparent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/DepthOfField.cs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7d829b00a073096c4fe1030131d559b0d5d307749cfd20b768f44ec3923653e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Quality up: instead of merging all the layers for each pixel, merge only \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/DepthOfField/DepthOfField.cs"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"177afcbbdf3cff29d17182be0427c351ea0d3c048d914e8312530ae64852b6f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: cache if necessary \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/GaussianBlur/GaussianBlur.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"370091332b39b04d2030edaa21b969be69f4fd0e4f3a652efe066f3df7f4448e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO we should have a method to get a non-multisampled RT \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/GaussianBlur/GaussianBlur.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e9eccdac820d84951715de022299a1c5cec2b1e5865e8d77e84374bf8c620c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we want to handle the output the same way we handle the input textures? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageEffect.cs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e452de56ea28165e660e08bbad7aecafc8b087fe9043fd740c5c79bec80ca5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we want to handle the output the same way we handle the input textures? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageEffect.cs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda539daf63e957675882a1673249cc377c9bb9cebd8fa50f43991559d6bc001"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do not use slow version \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageEffectShader.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bde560313a736d5a66e446a49e1bbf0e753167e52bceb8cd6d3901fb0cab254"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR Do not use slow version \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageEffectShader.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"00d816b6cd36d818fe7fc4aaa4465d6333c55efe0689b71f134be240a3917f6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support for intermediate output with non-matching size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/ImageScaler/ImageMultiScaler.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"9528dc5267198c7bc8e113f9c02d3a416b1016f6c2e20e13e73f24673cec612e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement support for texture projection and attenuation? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/LightShafts/LightShafts.cs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"76976bbfa7b614104ec89ca67e054dc1ccf57e36351e7666ff0eb8f8695ff133"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use Texture.Swap from ContentStreaming branch to make it faster! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/LocalReflections/LocalReflections.cs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a0ef98223d6ced058b5ab574065aeb363377ad38f8c4c0ef69c70977dcdf84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Workaround to that the output filled with 1x1 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/LuminanceEffect/LuminanceEffect.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f178c474ea8ac4ce5e7b6ace899c01aca77c7f4c51dac31bc46b264e3ae33e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Unload previous anti aliasing \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/PostProcessingEffects.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecf9458ee94090c5eab0a7ee541f6a8e6eb747c7a22b3d937e5ee3a66d7c7a22"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check how to reset other effects too \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/PostProcessingEffects.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"597f1b1b397d3ccaf3fd069d600425e9500aeeb63fc30aaf11eb8c9dd17cb669"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is not super pluggable to have this kind of dependencies. Check how to improve this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/PostProcessingEffects.cs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"d99bb8ec690af4d5f4418e5ece456874d66af9a355b312bb031eea781b220c30"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add an option to set the material index framebuffer bit depth? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringBlur.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"00cf488441079b2e41a228dd8bff9d8e8c53f346fb1d141eb9a80dc3df518ee5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: STABILITY: Find a more accurate (and maybe faster?) way of detecting orthographic matrices. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringBlur.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"f56bb0f7ed0c9c54f6ebbdb8b406e9d5c35ce0be90321c3ff1fa5de0ae1f66ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERFORMANCE: Only upload the actual number of elements active in the buffer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringBlur.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eeacd29af887a3af91090f423feb3f9f1da14aa274bc57f44157af50e80891f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERFORMANCE: Only upload the actual number of elements used? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringBlur.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"35275735ad458d85a32d38e5ab4e893b4b9f54b2b13143975c438c961e873bb6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: STABILITY: This might cause issues if there\u0027s a hash collision. The material won\u0027t be saved. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0ab456728b9b1175076fec529259bf610b5129ab8cac926c5b06a5a253d2b56"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Instead of saving this shit, how about just generating a hash of the kernel inside the material?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"699bc2450cb8c43d3e1a146c97a6c2c3610e5f21ee0e2e490fecab4b9a7fd086"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use a better hash function (and maybe a higher bit depth for the hash). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7c6a65586e829b031428ffbfefba7068165a8f0220f03376ede7625f0e9c1db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERFORMANCE: This function is slow because it compares the whole kernel. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"344a0696c48ed492711b338581d385b8d87a6b7fc8d14a983b92118b103ab5f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is this check necessary or does \u0022SequenceEqual()\u0022 already check for that? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"34078deac0d853eeb151e2891393617076adaaca2750391cd3603d68d1466d3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Don\u0027t even instantiate the dictionary if this is set to false? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f5ca774b170ab18a19338328ce04d9249dab7921d8df08d2ca2ee92464aa895"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //HashSet\u003CMaterial\u003E MaterialsHighlightedForModel = new HashSet\u003CMaterial\u003E();    // TODO: PERFORMANCE: Is this faster than the regular dictionary below? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c8876f8d6034b83f7fd092aaf6b0ed15cb9437ddd2f9466ed64ff560ecd9e18"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERFORMANCE: Or use ConcurrentDictionary() and multithread the code? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"c46ba10cc2add060c656de80d2f605b23f9333fa6ed2212d64c1e2bb52994a79"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // \u0022SetScatteringWidth()\u0022 throws an exception if the range is exceeded. // TODO: How to handle this? Don\u0027t throw at all? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d360ea61fb4767940838e86db2e4fe7721447c95ded9cef4103df9dc5b45790"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: STABILITY: What to do if the scattering width is present but no kernel? The post-process wouldn\u0027t be able to handle that correctly. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1990e814e092785f1c5604ae09b782516931afc6a5f183d6fd19614a6f1ba55"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Generate a material array per view? This could in some cases limit the number of materials present in the array. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"50b032d3c1b74eb24ac8c8b7ed70a2ff893cd8966fab6fa2f8d4de0cf3eb0f88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Not sure if the following line is even necessary, because we don\u0027t use any material parameters of material 0 anyway. I mean not even the kernel of material 0 is set. So either set both or none. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"79c12967948443125d0df5eee2f64a5bbf77f4c1a39756c3e006c323d6e0c1ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //Dispatcher.ForEach(((RootEffectRenderFeature)RootRenderFeature).RenderNodes, (ref RenderNode renderNode) =\u003E   // TODO: PERFORMANCE: Use this instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Images/SubsurfaceScattering/SubsurfaceScatteringRenderFeature.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba7329ca40e547548537ebb555e4b965f583a5b0067c3aa91384dcd891ecc80a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this customizable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"58b8244f9dff45f58d088badd8c9aed6fc08e60448ce8124c3738e3cc5e7765a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Another approach would be to receive a IList/Array directly and have a method GetVertexAtIndex(i) with special care for i in [vertices.Length; vertices.Length \u002B 4[ range. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"620114c5519d51d9390add2d3db4f5330b47e236b94b35df4eff12cd3e981546"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This might not be enough and we might want to pretend those points are at infinity (see incomplete implementation later)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dbc15aa143e89d4c6cea8d5914264360e94938c0d1332fb3702516b149ad406"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Currently O(N^2); \u0022By using the connectivity of the triangulation to efficiently locate triangles to remove, the algorithm can take O(N log N)\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"67e8ddf4a2ba815c93bd2802627cd8221e89bf6f2da8095ccc1761f016e604a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Pretend super tetrahedron is at infinity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":671}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2bbc5e7ae7707f4f525f50502ed8590dcde451de682215625a1f9475520460e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*int infinityCount = 0;\n\n                // It will store:\n                // non-infinite elements indices\n                // infinityCount elements indices\n                int* infinityIndices = stackalloc int[4];\n                bool* supertetrahedronUsed = stackalloc bool[4];\n                for (int i = 0; i \u003C 4; \u002B\u002Bi)\n                    supertetrahedronUsed[i] = false;\n\n                for (int i = 0; i \u003C 4; \u002B\u002Bi)\n                {\n                    var vertex = tetrahedronPointer-\u003EVertices[i];\n                    if (vertex \u003E= vertices.Length - 4)\n                    {\n                        infinityIndices[3 - infinityCount\u002B\u002B] = vertex;\n                        supertetrahedronUsed[vertex \u002B 4 - vertices.Length] = true;\n                    }\n                    else\n                    {\n                        infinityIndices[i - infinityCount] = vertex;\n                    }\n                }\n\n                // Trivial: trying to add first vertex in super tetrahedron\n                if (infinityCount == 4)\n                    return true;\n\n                if (infinityCount == 3)\n                {\n                    // 3 from super tetrahedra out of 4\n                    // Find which is not used\n                    var unused = -1;\n                    for (int i = 0; i \u003C 4; \u002B\u002Bi)\n                    {\n                        if (!supertetrahedronUsed[i])\n                        {\n                            unused = i;\n                        }\n                    }\n\n                    Vector3 normal;\n                    switch (unused)\n                    {\n                        case 0:\n                            normal = new Vector3(1.0f, 1.0f, 1.0f);\n                            normal.Normalize();\n                            break;\n                        case 1:\n                            normal = -Vector3.UnitZ;\n                            break;\n                        case 2:\n                            normal = -Vector3.UnitY;\n                            break;\n                        case 3:\n                            normal = -Vector3.UnitX;\n                            break;\n                        default:\n                            throw new InvalidOperationException(\u0022Invalid state when computing tetrahedron\u0022);\n                    }\n\n                    var plane = new Plane(points[infinityIndices[0]], normal);\n                    var result = Predicates.insphere(ref points[tetrahedronPointer-\u003EVertices[0]], ref points[tetrahedronPointer-\u003EVertices[1]], ref points[tetrahedronPointer-\u003EVertices[2]], ref points[tetrahedronPointer-\u003EVertices[3]], ref p);\n                    return CollisionHelper.DistancePlanePoint(ref plane, ref p) \u003E 0.0f;\n                }\n                else if (infinityCount == 2)\n                {\n                    // Build a plane that contains both points not at infinity, and that is also parallel to the line formed by the two points at \u0022infinity\u0022\n                    var infinitePerpendicularLine = points[infinityIndices[3]] - points[infinityIndices[2]];\n                    var plane = new Plane(points[infinityIndices[0]], points[infinityIndices[1]], points[infinityIndices[0]] \u002B infinitePerpendicularLine);\n                    var result = Predicates.insphere(ref points[tetrahedronPointer-\u003EVertices[0]], ref points[tetrahedronPointer-\u003EVertices[1]], ref points[tetrahedronPointer-\u003EVertices[2]], ref points[tetrahedronPointer-\u003EVertices[3]], ref p);\n                    return CollisionHelper.DistancePlanePoint(ref plane, ref p) \u003E 0.0f;\n                }\n                else if (infinityCount == 1)\n                {\n                    // 1 from super tetrahedra out of 4\n                    // Find which one is used\n                    var used = infinityIndices[3] \u002B 4 - vertices.Length;\n                    // TODO\n                }*/"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/BowyerWatsonTetrahedralization.cs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cd305785950e0d18177fc9ac285dd79fcfc20c46f36e433d27be01e972d37bc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Just like the ForwardLightingRenderFeature access the LightProcessor, accessing the SceneInstance.LightProbeProcessor is not what we want. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/LightProbes/LightProbeRenderer.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb38a27da06e4a0cf9d0e62b521174bdc9bc7d086270a2d67134c8afe6ce218"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: 32 is hardcoded and will generate a NullReferenceException in CreateShaderPermutationEntry \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d4f0996270ae016c831e61d9e4b34e885899dfe98ba0b3d07c7e8e3f39c5727"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use another mechanism to filter light-indepepndent views (such as shadow casting views) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4389eba4e2f96bf1770aa1837bfe3279e0199530bd6f2066ac67f5586a97d2b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use another mechanism to filter light-indepepndent views (such as shadow casting views) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aca31c885a397880b12ca4429b4fe941575a665d1c80b4d5ba119123f546ec9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Cleanup end of frame instead of beginning of next one \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f317c5beac4fdf1dcacdf6d8845d72437c2a631a16966afdbb49ec603745d7b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Try to run that only if really required (i.e. actual layout change) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"15f62cf21fc05d57501122fba44dabb7e1d3278a81696ebe8ffe27c91bbce236"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: New mechanism for light selection (probably in ForwardLighting configuration) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/ForwardLightingRenderFeature.cs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"c290c8bde9e1f37f3708ed016cb82623748b7c3512db60a923079ae57ad78d69"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERFORMANCE: I would say that casting this for every light is slow, no? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a5060f6b535c6273fdaaa3f9b692cadafab13933dd82ed7bc4288a03df26fac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check for \u0022hasNextRenderer \u0026\u0026 projectionTexture != null\u0022 instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2bbd98720772c0c0d213474f556fb7445af2f132e71c205388a15edd38d19bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // If the light projects a texture (we check for this because otherwise this renderer would \u0022steal\u0022 the light from the spot light renderer which handle texture projection):    // TODO: Also check for texture projection renderer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa287db63ae7cdb986e8e4266937e3bdb93f679e86b2397efe4c519bc8e9c3b8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Additional culling on x/y (to remove corner clusters) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a40fd9f9689afba24586b17ea0ab2f5c0e189037e7aeae53768f9895e4fccd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Additional culling on x/y (to remove corner clusters) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aa2db0f3849a9bb87492ebd39b41a061445fac85917b96cc1b9786aaa68ab9d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: culling (first do it on PointLight, then backport it to SpotLight and improve for SpotLight case) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightClusteredPointSpotGroupRenderer.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8d45f92a7a8294ec23942df3231097e0b4998bd403e2c5d5d5ca3c93d8c6b6f"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 169 \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":"sources/engine/Stride.Rendering/Rendering/Lights/LightDirectionalGroupRenderer.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a9db1c5857f135034b9efa1eadd1de049c2b130bf8d18be465b83d4c4161b97"}},{"ruleId":"D17","level":"warning","message":{"text":"IneffectivePragmaPair: #pragma disable 169 is restored on the very next line \u2014 the pair suppresses nothing; delete it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightDirectionalGroupRenderer.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aec65e059049f03af79896c1404373c0f0f844f1b272b228c0a7c2916b0f422"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This shouldn\u0027t be here. This should be moved to the LightGroupRendererDynamic class at least. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightGroupRendererBase.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"be6fdf5400edcd762a11e925cf46f0bf9f86c0903800ff948963227c7943efcc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Eventually move this loop to a separate function that returns a structure. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightGroupRendererShadow.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5df359fd99b2692814cc21e322e7b37bf406efbbc9ae25f5c78720e9e594e1e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Eventually move this loop to a separate function that returns a structure. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfcdebad31c8e7c24bca685baae350c319b40a0fa3e0ff243488f84a5dc6abd0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Refactor this into a little structure instead. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightGroupRendererShadow.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"08a1fc2ad2fea5c1e181e98075f773e5c98a97bb3e5aeab7a95b194e58451cee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: assign extra lights to non-shadow rendering if possible \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightGroupRendererShadow.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b4cf49304e77b0021a510f83407f32eb7621a5e375a8e03907e9937147f33af"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: assign extra lights to non-shadow rendering if possible \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aa695f938e7ad05d3e06a41653a7e39584b0940fe95697f0e99a39e45cdfc01"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO THREADING: Make CurrentLights and lightData (thread-) local \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightPointGroupRenderer.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cd2866c0510764dd592b510f6b89615ca2f66552906604d57e34ac3e93de2d4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO THREADING: Make CurrentLights and lightData (thread-) local \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca31880b8facc443a7b02fa3f469a60e15435f7f6fd488279c2cb7f6f697253"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Since we cull per object, we could maintain a higher number of allowed light than the shader support (i.e. 4 lights active per object even though the scene has many more of them) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightPointGroupRenderer.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"b779a8f46069332834f5d231a204b2b39f5341aa4666c573f02d787b44f34646"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Octree structure to select best lights quicker \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightPointGroupRenderer.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"83219bdbcce25bff431470836256319521ecd97cc9d8c38572a7c67467449e3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Octree structure to select best lights quicker \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"586d059aed6dcbfeb5ad2470501b9f0479f5ccbabc4b54c36e514723c4b0e7b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Still collect everything but sort by importance and remove the rest? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightPointGroupRenderer.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"de8bfc4e34e3a5d975cddd11cbd8d5e734476ce4c947e0fd974933c4b3828467"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Still collect everything but sort by importance and remove the rest? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"611887a6a3288b8953bb478bbe3800f86dbeeae0a5d526ab490a892e01159b2a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Only for PerView; PerDraw could be little bit more loose to avoid extra permutations \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightShaderGroupDynamic.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"104f04f850cc46b9c1ff34c1ff416d51247aa7698f34ff7df60c130a50535a78"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERFORMANCE: Why do these two values differ all the time even if no lights have been added/removed? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightShaderGroupDynamic.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"17e417c846c302a7c2c7b39efe8b3cc3935eac4ebb09a461a6e1790cb80c2f64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some kind of sort? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSkyboxRenderer.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"463cb8171ff6f183a54e2e8ea686044b84bbd8ff38bfd265206f18bd48a87842"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We could improve this by calculating a screen-aligned triangle and a sphere at the end of the cone. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpot.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"3046067a27172453f446018d0826f04d86fecfc162027ee51e0d1763ba5c435e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check if we can improve this calculation with a better model"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpot.cs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"50429ad4a2cdeed4c8c72f64662ac29854da2d452ea026efdc9ea06b308cefde"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This function does not receive any ITextureProjectionShaderGroupData! One of the consequences is the fact that light shafts wont support texture projection. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b1b9db34b059edd59a7f9e632f480821f21c39149d363ba139e225fc21aea7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //textureProjectionRenderers.Clear();   // TODO: MEMORY: Ideally this shouldn\u0027t be cleared every frame (because it would cause the renderers to be reallocated every frame)! But the question is, when should we clear it? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"a200dc8f665b245b6f6fbdcfdee548b0477a924aa14d283aa31a06ee792f6f0f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: MEMORY: Ideally this should also be cleared at some point. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"f49740e6b1c3bcbbd4e4962ed262b15b783752f8b66556d80394a3d2e0d40519"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove this branch?! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotGroupRenderer.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"8791e9623dfdeb230784803a9cb07bbfc7f32cc8581141632175d81cc1df59fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move to separate file! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b2566be445f27f3583c1f799d10df41e8357acda959e6aac77471922bd124ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move to separate file! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d7e32c1e074d8f5ef320baa65a4c564f5039c9c6a890be2da7d63fe3adc2aee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What is this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab026bddea73176f6eee3ccdd1c2efde251cbe131be248bd318f3eb805b48bb4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*\n        public override void Reset(RenderContext context)   // TODO: Implement this?\n        {\n            shaderDataPool.Clear();\n        }\n        */ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"106e822eec8083ee56ca0f0b24bc28ff8e8b3e196a50ff25bb3cd4d0f826d7ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Override! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"c49d5d08defb4786ca627dc52603b647b91d4af237e10e6f4688929bd19ec152"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PERFORMANCE: This does redundant work. The view projection matrix is already calculated within \u0022LightSpotShadowMapRenderer\u0022. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b79de5c23cb2e9a38779c801252d61ea204801d650409c5d1e1684cf3c4822"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Calculation of near and far is hardcoded/approximated. We should find a better way to calculate it. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"601e8f193725ad9bcde6dd7cc980e3bb72b8710bde80a875c30e22835af6929a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Calculation of near and far is hardcoded/approximated. We should find a better way to calculate it. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightSpotShadowMapRenderer.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"68d4ba124988228c144816bea8d425d789d2ae6a46dc0563158ac108a9d6ad22"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be configurable. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"66a2264be78447c16705ab59dbb17b56907794f56536f8e1e6f51bb9ef0d963d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be configurable. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightSpotShadowMapRenderer.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c93938b5295948908d4e434461d62c3577c7116e023476a8030aaf1401fb66f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add an offset so we don\u0027t have to do it in the shader? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc33f63bb941605d293cad28c5e34eae0c6d1710e6fc307b6e860b8b1a9f5b72"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This function is not being called anywhere. Find a way to integrate it and do the light attribute extraction here instead of within \u0022ApplyDrawParameters()\u0022. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c2e9e02dcc50c4c42ae0e5cb343940fbb53d53424e6d1a03021733ee28c33a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove the shadow map parameter. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e88a210e0b3b42ab314e1e0a9e0c07ebc32bb05a593cdf0f991a84636722ae0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Find a way to use this class! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cf33ee96a76f159cc6116ec2f5e994fb8eebf4a316e3f7d8983dbbd74f5a102"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make private \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c75186b2e4cf00a9e92d5de101996538a6128092cefc4d31d47596605e1c177"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*\n                        // TODO: Just save the shaderdata struct directly within \u0022LightDynamicEntry\u0022?\n                        var singleLightData = (LightSpotTextureProjectionShaderData)lightEntry.ShadowMapTexture.ShaderData;   // TODO: This must not depend on the shadow map texture!\n\n                        worldToTextureUV[lightIndex] = singleLightData.WorldToTextureUV;\n                        projectionTextureMipMapLevels[lightIndex] = singleLightData.ProjectiveTextureMipMapLevel;\n                        projectiveTexture = singleLightData.ProjectiveTexture;\n                        */ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b4142e6f377feb66bc67f193e858b0ad89f2878e6cd22e8dbaedc204283141a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this to \u0022Collect()\u0022 and use \u0022LightSpotTextureProjectionShaderData\u0022, but IDK how! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"8000c2b8ca28021bf2bfac3fb0f2afb2e54fb514d0baa9f8c5077862e5ed9704"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Why is this set if it\u0027s already in the collection? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"333bb902869c61cde2fcf9900ed613ffd890a0f832b579531e5e6edf6a0917d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Does this get set once per group or something? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Lights/LightSpotTextureProjectionRenderer.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"26d17a5884a4da7c969f70aeda82ef0fbdc696e5c675ab74f9a646033b5b4707"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: lerp, clamp ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/BinaryOperator.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7f03ccb6ace1af486010b87c860e832b27930b9b911dd88941ce13226811a2c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: change this (ComputeColorAdd?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"c50877d7d1a6701e1c92318c3acc7c309fa14be4c914a56ea61a7c1b87c473fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //\u0022ComputeColorDarkenMaya\u0022 //TODO: change this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"b607d7845870af745fe06a7b040fa70e90e6ea3b7ae59c21183f8780ebce67ee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //\u0022ComputeColorDifferenceMaya\u0022 //TODO: change this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1ef92a0388ce71f7df13f5605bc0571bb4216dda29b42412c3e0d5355d717ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //\u0022ComputeColorLightenMaya\u0022 //TODO: change this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"da3ee8fc170fd784a9a4c256745e37f164536168409e76c7cdaecbe7460d142c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //return \u0022ComputeColorMultiply3ds\u0022; //\u0022ComputeColorMultiplyMaya\u0022 //TODO: change this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfd6009495a9e74e8fd07bf7879c5f6bdad101e902383c4f77fc54073a8fdcab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: change this to \u0022ComputeColorLerpAlpha\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"561744bfdbf08a71b172e6892c3774b6877fa36523ab5ac5fb451c58297e1dc9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //\u0022ComputeColorOverlayMaya\u0022 //TODO: change this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"38c518f1cbe2965bd81b233f9113b97356b271a6a182eb647f55b636da9d8ce2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // \u0022ComputeColorSubtract3ds\u0022 \u0022ComputeColorSubtractMaya\u0022 //TODO: change this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeBinaryBase.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee20a75f1ec257a7c6a3ddc3e0889abd88eef02eb789e31959ebd529d85b439a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: custom enumerator? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeColorParameters.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bb2baf63b517ac9bf99eca8256763b973689d872b5be84af28bc9c8a8933172"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: use typed AssetReferences \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeShaderClassBase.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec529f1f1f2991b10b1eff2b2368c75c91881b5fba683d97c39fef6009975fcc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: correct generic order \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeShaderClassBase.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"01b67954facfd05ca31a611255cfba692ab872b4062c5a076756f8f0dae045ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This class has been made abstract to be removed from the editor - unabstract it to re-enable it! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeShaderClassScalar.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"880fda97a1145883ce5261b476d24f5b1a7e6ee74dedfd5bda292b3520b833dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use a generated UsedTexcoordIndex when backing textures \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeTextureBase.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"80372f66ab53b9255533280573213ef80c4e499dce813aab4fb178595514620d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Workaround bad to have to copy all the new ShaderClassSource(). Check how to improve this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ComputeColors/ComputeTextureBase.cs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6d85d8e9445d535094fb55564077c8d47293007df04600bc3a2af75fcfcd762"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This structure is just a temporary workaround because the MaterialSurfaceShadingSpecularHair shader keeps generating a variable of this type, which is only defined inside the shader. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialHairShared.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4a52c666ccfe2953aae5ca043d5d97e170f480108d35d8a0caf5a4f7deea098"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is this the correct blend mode? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialHairShared.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"303151f111209aff5dab08581af4f6d278670ef6c949a46364f7e087370e61da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is this the correct blend mode? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialHairShared.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9b48a7ab7002eef251bb36b017860219ee8b2cc65cf95d19226124cbf51664e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use IComputeColor instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialSpecularHairModelFeature.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"5667cbbea49554a1ad8251646d12a007de2c0825c096a146af1aee57aaa0bb86"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use IComputeColor instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialSpecularHairModelFeature.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"b71e3f65cd1142d2c0eb77b5a4d468da83c229bb92ec5a7c654f5c4722470565"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Document which texture must be used for this, so there is no confusion like in the Mizuchi documentation. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialSpecularHairModelFeature.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca6ef17e0817d56c11aa74b4b0462a8993e7a4108d900c97509bdf2bda23196"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Document which texture must be used for this, so there is no confusion like in the Mizuchi documentation. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialSpecularHairModelFeature.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bcb7db0f2408e84045a2c07361ecd572e270125b3930a28b383d784d7f1aabc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Look through the compositions and don\u0027t add the discard mixin if it has already been added? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialSpecularHairModelFeature.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4ed35e0d6cd68bfe379eecf9c573c329c3e4fe3d245cc854fd8c56c4730e196"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: That doesn\u0027t seem to work well because the diffuse shader doesn\u0027t get recreated when the specular one is being recreated... unless I\u0027m wrong about that. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/Hair/MaterialSpecularHairModelFeature.cs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"49dc5d5de8785fc0ad536902913e34bf3bfe9a4ac8385889cd3d19f65586b062"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we apply it to any Diffuse Model? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialAttributes.cs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf10112cb77368ccf9f6226b6dde4613fe73bec5a8163811713ec73c71c0abb8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Because we are not fully supporting Streams declaration in shaders, we have to workaround this limitation by using a dynamic shader (inline) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialBlendLayer.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"18cc6dfe69c7ea9dc9fc7fc2900452f7627dd7c06c431df9e9dbc37254133259"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use StreamInitializers instead of streams initializers hardcoded in MaterialPixelShadingStream.ResetStream \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialBlendLayerContext.cs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a659c0f2b63ef2aafdd8a67134f18b88851ec3cf1c7950954b5dc495922de1b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Quantify/clean all the functions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"02e7037c2664314a9ad1c4ed248beaa84bc80f1738e2beb1e928ee446131d57d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Add reflections desaturation for environment reflections? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialClearCoatFeature.cs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"814b14605ff960f42abd7adfe5f23c6f9a40f15df10800688772e0361caf251f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: It would be better if the passes would get executed like this: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialGenerator.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9630fb4aafd7b217cf8218b74fa123a1726ea437a55d43ad0840497177981e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This class should use instead pluggable ovrride so that the system can support new overrides \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialOverrides.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a41ded1fb579f19ec796d43962770edd1428b96cd98ab8035fce2d7eb642b4d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR: Negative scaling belongs into TransformationRenderFeature \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialRenderFeature.cs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"2370271f42560d5f8f0f5715ae491b61e302919bb35528e9051a2064d89b5629"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // this suppose Displacement from Texture -\u003E TODO make it more flexible so that it works with any kind of displacement. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/MaterialTessellationBaseFeature.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1c907710ec9fab98781e3c94b23b63964c5de53a1fb04efdde45583ec3b8f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Document this class \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/ShaderGeneratorContext.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca5955b39960c4675766d73678ae54146c0b92f18c1168b71d1a8b7431a23b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Generate a hash with the scattering kernel and scattering width! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/SubsurfaceScattering/MaterialSubsurfaceScatteringFeature.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3399bd78e76acdfb4253b23c627d719fc06eb7ba1e3e7e939e371232f557e8e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*\n            {\n                Game game = Services.GetSafeServiceAs\u003CGame\u003E();\n                SubsurfaceScatteringSettings settings = game.Settings.Configurations.Get\u003CSubsurfaceScatteringSettings\u003E();\n                //SubsurfaceScatteringSettings settings = services.GetSafeServiceAs\u003CSubsurfaceScatteringSettings\u003E();  // TODO: Query the settings like this once the system is ready.\n            }\n            */ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/SubsurfaceScattering/MaterialSubsurfaceScatteringFeature.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"25118bd15b32010ea9fc152bd6c7a72eb035ed2c07bd8c32facd848fdadb8577"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make the editor only display RGB, not RGBA. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/SubsurfaceScattering/ScatteringProfileFunction/MaterialSubsurfaceScatteringScatteringProfileCustom.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"d200ef1cf0c0844037a127d634e809558bd0c91cef76536ef9d4aaaae8ad1aa8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Divide by three so we don\u0027t have to do it in the pixel shader.       // TODO: Must this depend on SCALE? The original implementation doesn\u0027t take it into account, although it seems logical. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/SubsurfaceScattering/SubsurfaceScatteringKernelGenerator.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"f98d18859c596c1705b57e1cded1b247ce8f2c8d62f8a2f86dc1372013ba566f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace this by the above member! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Materials/SubsurfaceScattering/SubsurfaceScatteringSettings.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8defcba9a7ba28067e8e183074ac814329fc0bb007fcf341183038b4b813b45"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Skinning could be shared between multiple Mesh inside a ModelView (multimaterial, etc...) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Mesh.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"899d11d217e194d89e09cc3334ef1aa121e9e81c0a7785dfd92e873115244b9f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use real effect slot \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/MeshRenderFeature.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1bf44e36d308f1a387eb4d3632bcb9c0e81f16d132060367181df2e3b418140"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This can properly be removed and stored as a RenderView, [RenderPerViewNode start..end] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Nodes/ViewObjectNode.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c5385fcf7e4c03f00447889cd41406764c5461bc5e0bde8546a977cdce3597c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should probably shrink down if not used anymore during many frames) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderDataHolder.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddcba0b22ffd18b2f8d35e528701472ce5e5ebdca9e5de8ddac4e68e177c5f01"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO should we clear values if references? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderDataHolder.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"5337b33f4eb3dfc8456a166fd9f3c1bb97fae7609fb1b632508791a2cf230a7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO should we clear values if references? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderDataHolder.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"7512b808ebd30c129a3c6d72cf5e885737953602e1541f7b39bc762236567a8b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Temporary, for now we use the CommandList itself as a lock \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderDrawContext.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c27fc6123a3d141e30e1fbe358192f506bdaa079b1098b24af499599907d46a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add a way to support custom constructor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderDrawContext.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d1ac79be9bd72b2cef88f2c217d1c85cf33e88f6f3aa814c6f0468f8108fcdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Backup scissor rectangles and restore them \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderDrawContext.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"a88221949e14e4976c0fc42e6f23c879b772d46794e8bad5479c14ed9976ea64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Extract with MaterialRenderFeature \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderMesh.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"5701d3b8995564a5fd5bd61d703d7e1e2e5cb824c9a2e0a85bf38032b5217ecf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR store that in RenderData (StaticObjectNode?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderMesh.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ff40f82f84f7539c5d807827fb478078f401d160ea97e76d227c745a4ad5c77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Switch to a \u0022StaticPropertyContainer\u0022 that will be optimized by assembly processor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderObject.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"91df1763015149c87e5a997636652bf5f9eb148c00972e4b16a63c430e45471d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should probably switch to RenderData (but right now its local to either VisibilityGroup or RenderFeature) or the previously mentioned StaticPropertyContainer to have more flexibility. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderObject.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d7c7d1b231982add3c690df46140db1826a1845f75f31b6929d14fd5036759e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR should probably be controlled by graphics compositor? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderSystem.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"06c574c2af5ac77a00cd4bfcf25aa8630fb8d4b198cb922363fe194144809240"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check which stage it belongs to (and skip everything if it doesn\u0027t belong to any stage) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderSystem.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"c006087521a57c74588034cb4d204592158e08c3d8dc84b2f23d122521298bed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For now, we build list and then copy. Another way would be to count and then fill (might be worse, need to check) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderSystem.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"8582c5fc442e913538f906482af4c0726ebca8a220021bf7fdda5394860fee05"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR likely to be replaced soon \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderView.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c596d684d52b060cbdfc1fc8e6bd1f79544990b390f180a8a0a22fa1f7a81da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be configured by the creator of the view. E.g. near clipping can be enabled for spot light shadows. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RenderView.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"e670f473e7bd00a69beea3e9567a066ed7551cf8e8effa58b84b5b3097682732"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we keep that separate or merge it into RootRenderFeature? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f3fdb8f0997ac7f6d407308e0e887b386e33068853aa7a6744f586d05e88d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Proper interface to register effects \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b1ed40b161f75129691680506c6251c1605e70200e29b2e960bb18b806571fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Assign weights so that PerDraw is always last? (we usually most custom user ones to be between PerView and PerDraw) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"7438f28e966d4f1d0d5f39b643ce95f80b7c66c6a7740cdcd05caf30710a22e0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle duplicates, and allow removal \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"750bb518ae6e8b4d598e0574b3ae9c0d1b4faa1f863522ff18bf4b082b64c3cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle duplicates, and allow removal \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"424310a8f4d332bc04c6664f050247c5cb2b9f0e8e348cc5f1af3732c7ac654b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle duplicates \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"57b728120b79a4c1c668e44dd491ff389e2037f83a7cfcb2e5599062c92c521f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we allow/support this to be called after Initialize()? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"092333a8a9a5e1ff1c77eb56a83acab2864ac875796e7848b02e06ef4d29393f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO dispatcher \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9e41713a1fb5a06edc5da535d53f12a31b36e6dabb48a2f8c1cdf780a50f0ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Temporary until we have a better system for handling permutations \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"faa2c1a40185e0ab3a16a83d6f57c29e205ad847bc40d767d1640067c20fc43a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should this be a first loop? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f904d800bd896348f6994df5bc6fab4dab6afc4ee2e282d324a55e3faeb3c6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rewrite this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":810}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb6f9a668817492756f2f3f3f7abe12a706cced64d10512789981c0baea3f0f5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR how to invalidate if we want to change some state? (setting to null should be fine) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":844}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8955176cb7cc84bc9e7d79d88c8daa6c84585faeb35196ccb0b282cfa469663"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR support removal of render stages \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/RootEffectRenderFeature.cs"},"region":{"startLine":1073}}}],"partialFingerprints":{"codehealthFindingId/v1":"55bfbc5c309a907a91791951c2ae885f9188dbee7092acc0e373a6036b180727"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Min and Max distance can be auto-computed from readback from Z buffer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2d59647f2599a8682ebdfaf24780d0c7e3301fa2af9cfe1d6fd0f290e15cc38"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: User preference? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"c11f5fc3e265e612684906285d5e723be6b994aa2b76def8b9f5b7b036500711"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Adjust orthoSize by taking into account filtering size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"a94b07ade220161e84634db748d07cac1bd1f65c9d617e4b82adecfec038053a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should be setup just once at creation time \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightDirectionalShadowMapRenderer.cs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"be0a41c1e4c3946d26118719dc68f8d9f9695c5792d4f8c2d1334b21832c80d4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should be setup just once at creation time \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererCubeMap.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f6f497a90fc3588f1cd728999acf0d667dab23d52303a6759e4b89d074ad823"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should be setup just once at creation time \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightPointShadowMapRendererParaboloid.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf3ddfff8824579330457c88d9fe6545783e0dbed53dfc77194945b65e961a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename? Some classes have \u0022...ShaderGroup\u0022 others have \u0022...GroupShader\u0022 in their name. Wth? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightShadowMapShaderGroupDataBase.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d490d9dabc8eb88e5077cc09539fa030a13463ec1cc317c5fc09514b6b2988"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Min and Max distance can be auto-computed from readback from Z buffer  // Yeah sure... good luck with that. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightSpotShadowMapRenderer.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d5f607488a5e5b817324141737272dffe50641a872bff7985c2e228ebf49286"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For some reason this multiplication by two is required. This should be investigated and fixed properly. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightSpotShadowMapRenderer.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4dae1863e4fced212658cbcc873f995e45028afdb269072713389220fa5eb4f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Shouldn\u0027t this be a local variable?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/LightSpotShadowMapRenderer.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b5386343cbaabfc25b51e56a570368e26d25b7a113e838c0566a0547edd39f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Extract a common interface and implem for shadow renderer (not only shadow maps) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"17eeb90785fb82799a37aff709f9e6dc40e569f4cd7ede422f5868120b5f948e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Group by DirectLightGroups, so that we can have different atlas per lighting group \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f76b533115dfc7a45f0ef995e26e32fdb88e70834477becb9551c57605e3cde"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Allow multiple textures per LightingGroup (using array of Texture?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"01706efe166bffa35ee60f0ab8896950280239e84e9a5f0523d6f30683e8215d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle FilterType texture creation here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9976a976928c34f83aa87dca9985ec54328614e1e90cde27951bba9eb6bbd46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This does not work for Omni lights \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c586ba04a2501dc4a0f7b27554e6d88e7e491c98a2768694463f59da3c7d5f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Allow format selection externally \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f080d3a29f53d6bf53346593a07f8871936086ca87eb69c6b9bc5bd5e5bd46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR Only lights of current scene! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"972b4c4030c33bc549d6522d61b2c8bc4bf3a18fbb36b4e3e711e596514b9e00"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle GraphicsProfile \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"522ad4da26bd325b4e5b394dbfa9952adb917a0c550baf13be228b0090774f4c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Validate \u003C 0 earlier in the setters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Shadows/ShadowMapRenderer.cs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f9320e7dff5e70812a586a768e8a58dec8e23ab0652d6f8647d5da9e09d039"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Here for update engine; TODO: better separation and different attribute? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/SkeletonUpdater.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"338a544cbb1608b097c90560d0c5d6557dde15c678a32562b5f5e118dad40639"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR: Extract copy of matrices \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/SkinningRenderFeature.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"466cceecc11392404ac0169ee53cccccd406510bec4362108c0872d92dd951ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Point-normal-constructor seems wrong. Check. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/SortModeDistance.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a92cf625f2d5468ba063e45ecf0167a87d939abc4a0179405f92a526020dd25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Point-normal-constructor seems wrong. Check. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e72ce2245d35fdb144ffb4535606158d9aa506f0b18bd7f23367df2250f75bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move this code or grant camera view matrix access to this processor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Sprites/RenderSprite.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"d625e438c9f9e425ae30cbfc213cf0c3cb78fd9c9e7a48d4be3ddb5113b36ffe"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: should we use the Max, Min, average of X and/or Y? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Sprites/SpriteFromTexture.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"0285ebe8de4617059e5efed645a3a99e2f9e1577ddf54a7fbbbad20495c14802"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO string comparison ...? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Sprites/SpriteRenderFeature.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf915d25ff40c947dd3a2ac5bd6626c078ff4ab69c9c8c239af7493ff84cf318"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO string comparison ...? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ddeddd8e9e65e6d655d03a9ff46dad1eb36967060bb876e3e0025f0a8b69e75"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should probably be moved to Prepare() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Sprites/SpriteRenderFeature.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"adf1d7f8774f49dae0be5de995e6f8128f1a14f8f2f4886f3a765a1b0e1c31fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should probably be moved to Prepare() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"3585f2d586839b9d0d41721dc76a73bdfd38ee46b4cf2d9e48e0b4eab7e511cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This could be done in a SIMD batch, but we need to figure-out how to plugin in with RenderMesh object \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Sprites/SpriteRenderFeature.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"c133649f061dabc1e7e0174272cfd49ed4de2ba80a70bcc13a621752541306df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This could be done in a SIMD batch, but we need to figure-out how to plugin in with RenderMesh object \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"68d25b9cd8fe0536b81a1110871c49b4d93a996a99837d78e6aa24b3dd1f1cdc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO move this code corresponding to picking out of the runtime code. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/Sprites/SpriteRenderFeature.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"7be0dfbba31a344b4d8b8264fb5be0074cdd3018e3a323c4201b8775e6672794"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO move this code corresponding to picking out of the runtime code. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"126ebae34ce217ab6c39b95745a022c9f8c7d0f3f08fa29101704cdf16c5bdcd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this at a more global level so that it applies on everything? (i.e. RootEffectRenderFeature) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/TransformRenderFeature.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"26034a373602f136542c744b37feb0fb961825fed719e171f244ffd9f438d956"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Extract world \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/TransformRenderFeature.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e9e664b39be41896b1f3a6de0bfd2989f911d208c2cf27de02d98601c5280d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Move that to RootEffectRenderFeature? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/TransformRenderFeature.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9121eb8b65073eeafa7b0f48bd27bc1816f50fdb88c390e3bb00bbb27a9655f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR avoid cbuffer read \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/TransformRenderFeature.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ca44898c24890022be6d00d8bed7af41d022649f70466228445675f5de8f19e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Report a warning if ViewSize is 0 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/TransformRenderFeature.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"0470fb89eb0dc2d3b4fbbe826632439d3a02504583408055ff5a2fda10598a59"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Have a PerObject cbuffer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/TransformRenderFeature.cs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9542e4f6b60ca7651ecd68a8ce2bb06ea468ffacfe15b18865133498c51fca7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support multiple viewports \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/ViewportState.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a8b79ad251a60f24c993bc037596f0c6ae6d8666e64e57416429a713386c28"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR not thread-safe \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"43d58b0c915b9d321bfc819288425dd4f1881535f07487b3b96aa0c0e3775070"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR Create \u0022VisibilityObject\u0022 (could contain multiple RenderNode) and separate frustum culling from RenderSystem \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"26ea8d6422b03afa2f2fe1fa5285dd15fb8a43beea0e5f4091deeb07eda26e05"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR optimization: maybe we could process all views at once (swap loop between per object and per view) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"a22b4ad08508f5da136f3122d25cc606752b204ecdc0a810945950c86b228ea1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR frustum culling is currently hardcoded (cf previous TODO, we should make this more modular and move it out of here) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d8cd94b836d5996c1f6d5e4b8def6c31f176b9c11434b0acfa7ef231d6088c8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR we currently forward SceneCameraRenderer.CullingMask \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f20db21ac1a10fbd474eb7de0863cc289a3c00460394b1ef16971977a370121"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR we should be able to push multiple elements with future VisibilityObject \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba2ca4264322c14760eefce7ad537f7aff1d9af0070af45c9afa5ee1d551307"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Could easily be optimized to read and set value only once per uint \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"0425db4ddcc9d679da50f370a94b097684a4aaa09a9911e3c09e6f18463ac016"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR optimization: only reprocess object with the given RenderFeature? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Rendering/VisibilityGroup.cs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"58890909c64d5305bcadb547f62dd1b4096deb80b2f697bb1b806630d5b89447"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add StreamingManager stats, update time per frame, updates per frame, etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Streaming/StreamingManager.cs"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d74b831571b04d432bed05bea82d688193f8cef03dba3791459b386281148f4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: here we should apply resources group master scale (based on game settings quality level and memory level) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Streaming/StreamingManager.cs"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"da8ccac8d435b10acb7c567cd087702982d896d7ace46ccbbe35194567b3cda1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use move quality samples and use max or avg value - make that input it smooth - or use PID \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Rendering/Streaming/StreamingManager.cs"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"10a8dff3c91d0740ac783d40637eda332e6d03473894988b02ee7fffb9bad548"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support for multiple components? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioNodeLinkProcessor.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"d79393a33663a0a11c026a0c6f29b405b8da98dff3ddc34df1c6eb86a3258599"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO this whole renderer is not optimized at all! batching is wrong and depth calculation should be done differently \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"db8bccf6e39c0fcbc45dfb316a9c8642f7ef08f0667921019689cfe8903c7c70"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the current impementation to determine if the sprite is selected does not work. This should be fixed later at some point \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"44b64af8aef5262d49357ac5c883ecfd6d9fd4be7b8cd0769ac36bc213402e92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO remove this code when material are available \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"41ca77e2f427bbf89daf1e73d420ed4a57cac286a4d62350830437578c1332c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo this should be done in a shader \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.SpriteStudio.Runtime/SpriteStudioRenderFeature.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"00dda06378901315e9eb799d4a188d78088d37ae6b253abe023d7c4b470cd31d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use a custom compositor as soon as we have visual scripting? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI.Tests/Regression/ModalElementTest.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"5138034a239cfc70e050b2cdc985ea58f6eb33da88e93ff1a602d5a020615836"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] ContentPresenter"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/ContentPresenter.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb1cea0ce1b63c0fefe4d7feaf2d4ece9a841d469d2180ce0413ded8c03cd2f6"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] ImageButton"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Controls/ImageButton.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"297d9058bf86140d1e4c20876ef72ae040cc96bdd7845dd97804e1e159b6ccfe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should reassign everything outside to last row or 0? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Panels/Grid.cs"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ad723383f5627d8e4680b137a2b87c4977c455725b7ef301b94991ccabe5c72"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO XK-3367 This only works for a single view"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.Picking.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"00cf8b2978bdfb599ad78fc526c875102c43bc2859bc43c5ea31c5abbfa6cd46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add the pointer type to the event args? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.Picking.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b98c65a6a842e2c50055654ffc9a80cd5fc4564145e646d34b282940ad08f40"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: avoid hardcoded index 0 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a3aaf003067e758760f11b9c8b3a43451a9c29f21283377bd8a4ceab804fbf9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO GRAPHICS REFACTOR: Proper bounding box. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c3446dae6e856d27f2115facc608a50c545132764b5f3af8817adbe5eb1b4d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: heuristic may need tuning per codec / resolution / file size. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/Backends/FFmpegVideoBackend.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"518be301e6b2e93111f7ad76a11b30da624d66999c629a771796a53109746296"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: log? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/FFmpeg/FFmpegCodec.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"54601c1a89dcd4aa8828e08af204e7ebd5dcd21d98a5ba047119282d83830948"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: log? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/FFmpeg/FFmpegCodec.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"6474a5e9f1cf36f77e5f75d14a651b3e072970e4e13b0ceac8eae8014aa8ac84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: log? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/FFmpeg/FFmpegCodec.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"cac933f10b03d9cf74c7c0f95bde9533a6603c43afb3f7635611175752caf7c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: log? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/FFmpeg/FFmpegMedia.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9e9136b2d5d873f49cf350a984569e958cc764b83f7418099a78cef6336fd04"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: log? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/FFmpeg/FFmpegMedia.cs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b05b77d3ff20c5c52890c18584127443b4f3e1e9cfb38c382ff168d7b41099a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO revert options after Stop \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoInstance.cs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"2068f1b2a70719fe6ea2ac3f3f3a1204f21f7fdb8a5a4f32b2fb4b47c9a2beb4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME log only certains exceptions, rethrow all the rest \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoProcessor.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"79216667466c1c9040dac87324103d84ec657d6be6cd42f5309d508807cc4e2c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME log only certains exceptions, rethrow all the rest \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoProcessor.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"2264cd5a5edca774f6934c0372fc36def913f45b0cca4e1e897e1cfc810fbeb7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //using (drawContext.PushRenderTargetsAndRestore()) // TODO: STABILITY: Use this instead of manually storing and restoring the render targets. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoTexture.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"76c6ebbe9725ddf0e8dee29b3ad15c7bc9417242250b6e76cf99090e6e63638d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //using (drawContext.PushRenderTargetsAndRestore()) // TODO: STABILITY: Use this instead of manually storing and restoring the render targets. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoTexture.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"43684e6fa87c0b69cfc5d59b060d483481ce5a342a49ccdd262db27a87c055c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: STABILITY: This wont work if we\u0027re using MRT! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoTexture.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"12d28064c23e1a35fe37b5fc0cf4a0c0221f5418de81590220fb8e6538e90801"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: STABILITY: This wont work if we\u0027re using MRT! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoTexture.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"9506c4ace0218ee7c46ae05442b0f73404806c0fb1c7efb597fd1f48faf14038"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: STABILITY: Supply the parent texture instead? I mean here we\u0027re using SampleLOD in the shader because texture views are basically being ignored during sampling on OpenGL/ES. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoTexture.cs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"d345ecda62715f89a5048cf6875ccd7ce0adb711bbbfaa1698df20971fa21e58"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: STABILITY: Manually pass the mip level? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Video/VideoTexture.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"7991b6b394af2dc7cd61ba5cb63fe1e72647baf98ad118af436400f305efa1ed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (not implemented) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OpenXR/OpenXRHmd.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ad74cff5e4f6525d7d9f5c728f7e28840f6f4fe4ee17c929e53b9156f774c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: OpenXR doens\u00B4t have a renceter api. Recenter in this case needs to be done from the \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OpenXR/OpenXRHmd.cs"},"region":{"startLine":671}}}],"partialFingerprints":{"codehealthFindingId/v1":"d05b466815cb7625755ec85d629e34f1eb0e80d786f0d859988c6a5280517f32"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Make controller vibrate for duration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.VirtualReality/OpenXR/OpenXrTouchController.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f77c5bd1ca164fb508e250a5cbbeeab123e43d8b3ce351189c23af2900c5430"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this is not called for some reason. must\u0027ve been handled before it gets to here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/ConnectorDragBehavior.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"c43aa30c1dd91a8ff38a0ae21cfe5202d0067d59d1a2b28e749eba94cd5103ab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO cached this maybe. not efficient here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/ConnectorDragBehavior.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0905bbb0990e6ddd0143b80786afa66d1b201282e1d34226cc5e779f8c40db2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Done on logical tree for now because visual tree is not valid during behavior OnAttachAndLoaded() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphContextMenuOpenedBehavior.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce34c2fe2d5b7e169af47c5848a642e4beee3f5ac2ef04f04f44f7f25d683a72"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Done on logical tree for now because visual tree is not valid during behavior OnAttachAndLoaded() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"46ba9b419e4f9ba46e7278c056904c449a4381e08e83f451aa073527c835738d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO throw exception! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"45db03432884ea8b6eff30ce9a557b2f35d2b67e222ef799b51e54fc6f0222f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Many different cases for this. Might to return to this in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"cce7486352568b3941c0a37360f4bdfc59ca168a2bcabcbe8868c621852b3b61"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Many different cases for this. Might to return to this in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b9df8ffe759d6bdaf7f2a8380ccd35494eff801627766f2e712b036f85a4834"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Many different cases for this. Might to return to this in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"acf7797605fdacd0de97dbe03c4ba99797f365669d1e9b59f36971914abf1d07"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Many different cases for this. Might to return to this in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba681840e121fb22e206d7b463b2d03c2cfa7cebc19914a5a2371c124ae53ef0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Many different cases for this. Might to return to this in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphSelectionBehavior.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"33db16dbd3f8680722d8f89aa1aa1e0e9e4e86a07f7d330c8c997002e1d656e7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Many different cases for this. Might to return to this in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphSelectionBehavior.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c46f2a4535abc759a19d645c179558d5bb0c04a18c54e3ea4fcc89c59a1fd5d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO For now, change to observablelist later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ae2b5530c43fe15b99216c41b4f5f932104fb441891420ee37731ca49f0f8f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO For now, change to observablelist later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/GraphSelectionBehavior.cs"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa3723aa59a90e21080e190c3767f0e65ebf4d7392d5dc17c7eebaf3fd6a5d29"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO For now, change to observablelist later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphSelectionBehavior.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d413e459fe64166e4cb08451c91ac174fadb4150f4733e3a45e9cf15b1cb2e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Move the logic core else where! Or perhaps the components inside logic core. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphBehavior.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"43b99e6f9f7a0ad2a2f9259307acdbbb3ff9db667b902862fb7abfddc432c036"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: properly support reset! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphBehavior.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"c82ec2d004b6e962748d2a378d4f8f64955100748dc4316c7ad70530649fa925"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO We might not need this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphBehavior.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"a98974d321c70a933ee31f2639b23a5461a8bd8d5aac12b0117d290edbf68e7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Need a better way to removing incoming edges \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphBehavior.cs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"392985558a6dda132bf8bd56e7a6ec9d7a50827d27f137b19c594972f39e0a5b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make an efficient remove \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Behaviors/NodeGraphBehavior.cs"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a29c221a059d740b236936353f589b6f6ceadef9a1c3706e67e50c76f5f08ab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Need to let the styling come through for the paths! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Controls/NodeEdgeControl.cs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"e65d8b6d8000bad8b013ac742916846a26e9a70e1aa9fb54a2bf5d23dd0646ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Should I be doing this here??? should I be uing setcurrentvalue?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Controls/NodeEdgeControl.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"380aa0047d861d02e8f0751cd43d7def72d1164a7ab2675c8dc490c6a5fc00e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*\n        // TODO Move somewhere else\n        public static T FindParent\u003CT\u003E(DependencyObject child) where T : DependencyObject\n        {\n            //get parent item\n            DependencyObject parentObject = VisualTreeHelper.GetParent(child);\n\n            //we\u0027ve reached the end of the tree\n            if (parentObject == null) return null;\n\n            //check if the parent matches the type we\u0027re looking for\n            T parent = parentObject as T;\n            if (parent != null)\n                return parent;\n            else\n                return FindParent\u003CT\u003E(parentObject);\n        }*/ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Graph/Helper/UIHelper.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"c83feb6c627834bce149f05e0c0c29bf07c7f2ecfd8363d42996a246eb6f5890"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this class should be rewritten to properly match the new design of dependent properties, which is using hard-link between nodes instead of path-based. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum.Tests/TestDependentProperties.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a834d474d428b6333bf694d1ad91d5be92ddaac120d4cad513b78a3087d13a0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should probably be removed, UpdateValue should be called on the corresponding child node presenter itself \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/Presenters/INodePresenter.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb80e81bd445e5fcce27b6112fd310e728a319ea2830fe65a2146f32f441cefb"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME With the obsoleting of Stride.Core.Annotations.NotNullAttribute, it might become partially broken."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/Presenters/MemberNodePresenter.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"10771f4a337f794175af08bc572181d475e28ca736d22d8a2808665557c54a3a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: generalize usage in the templates \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa6a24fa9a229e16ed912511ab1e43fe506a57dfca45354bae2144ac0390decc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: normally it shouldn\u0027t take that path (since it uses commands), but this is not safe with newly instantiated values \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c35787052e6d41ab65ae7dcd74e92049bc51114942e5ae72fe663be2fb46257"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // fixme adding a test to check whether it\u0027s a content type from Quantum point of view might be safe enough. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcc75fa5cfa37bdbd20b24fa22804c00ea6703f693eae044e02444b3118ad0f5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find a way to \u0022merge\u0022 display name if they are different (string.Join?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc2c4d7b2e03a4f3031635c1e7ca73b836ec3454610bb84139b950f928027dc5"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] MemberInfo"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModel.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7fb6c71d2b36b61b4891d14a8358724486d50c39161bf2fd52e0922d61c1038"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: properly implement CombineKey \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Quantum/ViewModels/NodeViewModelFactory.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"8af8280565062f139a73c6fe37228c9d4162cf61e1dd1dec3518494656293048"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should return false ideally; \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Tests/TestWindowsManager.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"54fd87ef503bfa1552e91fdc6dc93cdb455990a18c382f41dae4a761fb2eddd3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move this in a ViewModel-dedicated assembly \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/DropCommandParameters.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2fc149f89603e245af6af6b07f7bb6f57f0f0592d599e9405e200f6eb17ba51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Register/Unregister handlers when the PropertyName changes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Behaviors/OnPropertyChangedCommandBehavior.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"552c020dadb811faa841161f3def0a48cbc5982cf99669dce2763660ce478340"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: have a proper way to initialize the services (maybe at application startup) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Commands/UtilityCommands.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeaea598016abf92a9e4babc878f7baead1e82171fd14bfd6cfec4f242547644"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this will update the selected index because the collection view is shared. If UpdateSelectionOnValidation is true, this will still modify the SelectedIndex \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/FilteringComboBox.cs"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8a5c608be9aaafb8bbd22d3f79661366aa4ff5d32a0c28c9dd10242643d0ebc"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] ItemsToExclude"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/FilteringComboBox.cs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cb072fb3b820fc820e34effa8a9b44b525c8ac0a8f4d11184a52725a6dd6598"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This seems to be blocking when exiting the Game Studio, but doesn\u0027t seem to be necessary \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/GameEngineHost.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"50dcf1971152640e941a5cb78a9b828f02f64fe2dfe65cb729745d1a1f92370c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do we want SWP_NOCOPYBITS? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/GameEngineHost.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"515e59622930fb943c097fd3eee137b5b92f000834bd97b0479318676fc61eb1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Find a proper solution to replace this workaround. Good luck."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/GameEngineHost.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"0103596f6e7396497f1b5630ae467742b2a01bd3bd5481b71b57bca719b9d4b0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Tracking drag offset would be better, but might be difficult since we replace the mouse to its initial position each time it is moved. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/GameEngineHost.cs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeda3bf5efdd72481aa635860fa4106ef2fc0dcdb84e5eb5f6eaafe8580be706"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: turn back private \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/NumericTextBox.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"64ab2e65daab0566182f3900919e316e45388b7d47b00e70ee36bb22076fe336"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This method has been implemented with a lot of fail and retry, and should be cleaned. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeView.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"50592f1abbd2b5e2afb6d4801cd3d07e5dcf0d034127ddad67448430b62546ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Also, it is probably close to work with virtualization, but it needs some testing \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/TreeView.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"99b306d63412ee764acd16b2074d777ea772851816973f0d329a1626a1fc0dc2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the toggle button has been disabled \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Controls/VectorEditor.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"0de23b61bfce3821331ec631b04e8fbe4a41f577e391640865120794afa8dcb1"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this should be turned private. Review usage in BehaviorProperties. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Extensions/WindowHelper.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"300f4c11cdd0f8b032976d2556615193e0ca260c3004d0201b89a3d4da39d145"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make these enum independent from their System.Windows equivalent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation.Wpf/Services/DialogResult.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0365d65132bc24185b2dfa2cc1c93d2e5527f2b4369fdf3167b1fdb629318b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make these enum independent from their System.Windows equivalent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation/Services/MessageBoxButton.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4d219edad6350b51c19962e4973c46348dfa51d300ff6d097d590eab016dccd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make these enum independent from their System.Windows equivalent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation/Services/MessageBoxImage.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"576cac041c1cf4dddf93cb2a96bbf72df233422a519fabe59fde3ffd07eda78a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make these enum independent from their System.Windows equivalent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Presentation/Services/MessageBoxResult.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"89cf0845e307f7100c8dae79c083d27f9c3bdc214e68c8193f7729e6ec59f208"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rework reference system and enable this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum.Tests/Helper.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"34ea86741d86dc7808a2a01ad39711494c95826fcc7675f4606b9895d8ed711d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: more things could be checked! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum.Tests/TestCollections.cs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e77b23ea9944135543970848547805748e5687b95c566b21b808e553b5fd83b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: would be nice to be able to keep the same boxed node! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum.Tests/TestGraphNodeChangeListener.cs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"72abd95c2f673052e828924728279036c0f4778334e3d0b3657cff1057c10bf8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: would be nice to be able to keep the same boxed node! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum.Tests/TestGraphNodeChangeListener.cs"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"45beceed3b00b3d02ce9f228257f05092e6c4a8ff39624e89d6be47f371dc58e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: In case of CollectionUpdate we could probably visit only the target node of the corresponding index \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/GraphNodeChangeListener.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9681bc163b71df742ee57646e02d7612ecd27f60488e9027746279b19562da1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: In case of CollectionUpdate we could probably visit only the target node of the corresponding index \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/GraphNodeChangeListener.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e94aec7e8dfb720a4cfa217ef8f7507f495b490118e23838d003ac1212f2bf0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: turn back protected! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/GraphNodeLinker.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"51756e300f9779b140d82f1062ecb4995a91e13dd45cce8cfd28b15ed001301a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Switch to tuple return as soon as we have C# 7.0 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/GraphNodePath.cs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4fc6ca7cb156cc4a1fbfe86c6b25cbed6cd32afe1d61af28e1201175afe864d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME can it really be null here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/NodeContainer.cs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed7b50ac98633f259588c61fab15f82a4c628ba831e2b4b7c79445e141909e2e"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] CreateReference"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Quantum/References/Reference.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fed4613ebfcae13ca0f702642c449de7bd5bb8abe6956c71d06c051af8c659f"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack: get the real service provider (not the wrapper) \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/presentation/Stride.Core.Translation.Presentation/MarkupExtensions/MarkupExtensionHelper.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"796fc101d3ff4565bf3bb896fadeecfd9265a7d1a08b362a8c0761310b5499cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this optional \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/Direct3D/ShaderCompiler.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"00829f50cbcc8aaa2e1a22108e71364782f664ebf8edf9e8617e84da4aa73d31"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: name output by spirv-cross might not match what we expect so skip name check for now \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/Direct3D/ShaderCompiler.cs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"feeda8db6ecb445100a29104e0e8a45433fc713981754b69aaeeb39295ca2f37"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: temp \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/EffectCompiler.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"3324f6591f6d60c45fb37abdbea1b71ee2e3d02613aec4fe09619f2851c8035a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: temp \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/EffectCompiler.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"75ad52eab51d05ec05f45736e34ddf32b856dabcd4533bf968e809db7ae9fcbb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We could compile stages in different threads to improve compiler throughput? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/EffectCompiler.cs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fcb0f56f3cf8df30561cee341d56ef37588b0c5d33022d9d8c2c5acb690d592"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move that code inside ShaderCompiler (need a new interface for processing SPIR-V) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/EffectCompiler.cs"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c7f9d250e15d0b12e5abe84131fb7c41d9ab92ef60d4e02922d0711e6e4c3f2"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] EffectEvaluator"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/EffectEvaluator.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"4377d746605086c6c9625e72d865fb825700d937d104792e8b29f393f0b33c54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support namespace \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/SDSLC.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"18de4b4414f20c2a807e05cd6e3ebcfe3e642d0a77d3fe4a7b0133b2ac550745"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add SourceLanguage.SDSL \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/SDSLC.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"6946c4881ee3b19233dced94ae56e4f5aa20c4fa23852c2363505a4f447534a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we want to record macros with a custom OpMacroSDSL? (mostly for debug purposes) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/SDSLC.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"db796e4ef18afc37fa615c02dc520c7f2213b75b0a3eacce8f4db07516a96990"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check Decoration.Block? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"c502e377dfb3e03a5b3d0d56ddf29cee240bc19570653e2563dd5a3e2de5f16e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Analyze and skip cbuffers parts which are unused \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"2218254209db6692b98475be5f13b080a9ba07228fa1b95dbf398aaf32ccda8f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we want to remove unecessary types? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"b160e486ac9580823958bc71201a93e84544d3be1642f864f088643ef5e30418"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we use RowCount instead? (need to update Stride) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.CBuffers.cs"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"15453aaff7918ee2b697bdc99e013fca12a1638817d94045a3d9f533a89be09a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do this once at root level and reuse for child mixin \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.Reflection.cs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"637eed9896ba90219606e3f63bc358ed5a588e8f94655e6a48259e814036a45d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Special case, Stride EffectCompiler.CleanupReflection() expect a different format here (let\u0027s fix that later in Stride) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.Reflection.cs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d0e99093a300d7cc1eae14d5c24f7ea52e61263df84088c1194a2ecbc53894a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: some common code to generate name, so that it doesn\u0027t deviate from ToClassName() called later when doing ShadersByName lookups \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.ShaderInfo.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"011c3d5694aae3c719f5c52598e98997ef549a4f41de6a9cfa813d668b75d310"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: future language improvement: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"51baa39e2fc9fbc079143747eeb487b4ff3761d77cac4bcb9d66f40f6e090119"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Review: it seems like Stride compose variable the opposite way that we expect \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b0c3b2255dded25ff5d33d63f9c945b2224ecc5da7b6f3cb655e1eb075b17a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we register Compositions by ID in the global context instead, to avoid having to check Stage all the time?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/SDSL/ShaderMixer.cs"},"region":{"startLine":830}}}],"partialFingerprints":{"codehealthFindingId/v1":"590bd1c2db9b2ae5a8ae05c735a17a18fc71a0c9e2aca3760804ea804dee61d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the \u0022/path\u0022 is hardcoded, used in ImportStreamCommand and EffectSystem. Find a place to share this correctly. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Compilers/ShaderSourceManager.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"5449e02c2d9f3289ec43080678072486cb4144dec185fb07b82f5db5304d9e60"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: harcoded values, bad bad bad \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/Compiler/EffectCompilerBase.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"a684a4d7edd7edbdf1d211d203388c4505b45ebb1b565435c119e8267cb016bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check if we really need to write the bytecode everytime even if id is not changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/Compiler/EffectCompilerCache.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"31181a6416d72fa3e93e0ed7121f0d63dba7f0bcce0543c7b6fade9840bb19b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: avoid List\u003CObjectId\u003E creation? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/Compiler/EffectCompilerCache.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"c85ebf04212f5dc71b1b4515a7878e10c03dbaa0b274c575c0f24ee5f620a31b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ResetEvent, and exit signal \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/Compiler/EffectPriorityScheduler.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"cedc5fa4eb71e7e1171599985a1b6c5fd4dd5d345211a1baf630643f3e1dd3c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Optimize: Pre-calculate bytecodeId in order to avoid writing to same storage \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/EffectBytecode.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5a8b2055f020900a92f3f114c01dcf372cb30d459a68a825979306bce344e27"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use a copy of the compilerParameters? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/ShaderMixinContext.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee361d6eb3ae9cd4e6b6915256c096c2d6ad398deef4ac7d919bb35caec822de"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO cache mixin context and avoid to recreate one (check if if thread concurrency could occur here) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Effects/ShaderMixinManager.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"1effeab787fe3ba2e136f1cf91d925427cde1e7011f57bd343efb71e2aad17c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should probably be better to use fully qualified name of types to avoid conflicts. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators/EffectCodeWriter.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd5a8699fd3adfee15e6e28de602ab8e34d6ce726654d4c27e77b8d14478dd80"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Generators/EffectCodeWriter.cs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f33dccc42e3922bf4e80b8e45ffef3fb904e243a7fdaef360e6de0d46faeaa3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add sampler parameters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/SymbolTypes.cs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"7515ae7b6390262ca081d4c0dc062068b753ba29d29ddd01ac87faad24349ae8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: emit it only when this specific method is *selected* as proper overload (signature) \u0026 override (base vs this) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Core/SymbolTypes.cs"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d9f6d2a85f4e34ec8e2c3b2e77e3f31b2e5af8a8af0d683bfdc2651caa0db7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: figure out instance (this vs composition) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"7931713c6a60afeea4dccd1bc6f01d9d9230f2b6610b301374c1d6a6ac13f16e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: review XOR/OR/Shift etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":1490}}}],"partialFingerprints":{"codehealthFindingId/v1":"030565300d81ff4532ef144c4fcde939103bc82e27ccd3c1ecd7ae2b41f61690"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Review choice between if/else like branch (OpBranchConditional) which evaluate only one side, or select (OpSelect) which evaluate both side but can work per component but is limited to specific types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Expression.cs"},"region":{"startLine":1568}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb94cc29e44f1abe76f1b539e9e89e5391f06ad9228d43e55c0f281229570a98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Shader is inherited (TODO: do we want to do something more \u0022selective\u0022, i.e. import only the required variable if it\u0027s a cbuffer?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Literals.cs"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"212e00ae564f33224d8b0ff2caaf9ea2f6b08f2a87a7d764e8d43441311c36f5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Ideally we shouldn\u0027t depend on struct OpName, so we should use UserTypeGOOGLE? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Shader.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"986d68f797fe764807ee822a33461161b5a870cb9b2611655b1ceca3aa456670"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: some of them could become proper const, we could simplify those and use simpler system with constant ID (like StorageClass.Uniform) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.MethodOrMember.cs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"48ec0b0033892fd50dbbc8bdce856d44b7d23f158884f1116a6ae1d3c411c43b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make it a warning only? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/ShaderElements.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"85003322e93c9d9c882e39e26204c59586ebee0739bffc437a1c0eb3a237367d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check conversions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.Flow.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"bceeed49adee59652fc063e744a36da25e05af687fa9e69f3eda890c0df2f9ce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: type check with conversion allowed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/AST/Statements.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"0799e0e1bd1c048439a96ae7268222fa86b9b92d846f6d3b5c9d726d8c46e096"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check if error can be added here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/SDSL/Parsers/DirectiveExpressions/DirectiveUnaryParsers.Prefix.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f09c0251ff2a16c61775036f51e627d3f00c788a6a78c7b23f8e3219623d981"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this a function in scanner \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Parsing/Scanners/ErrorLocation.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"769ad49898cb595f9733f7218225e7a6dc033d1ed649cfb8c6e2e98d89bb2c17"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: StructureType \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.CBuffer.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aefe1042a269c069acdcd64bab59aa83c594e8040043d4ed24f910616269ac4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: cache same instantiations within context? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Class.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"241925045470ab225cf54d069b0fcd5a784daee1dfef8a5290b16981e67834db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: special case for operators expecting different types (i.e. bit shifts) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"51b7fbce70545d8442e947e0fd6cd06a2b3a0282e2d82315b130204ddb6b52ee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some specific cases where one of the operands doesn\u0027t need to have exact same type as resultType (such as shift in OpShiftRightLogical, or signedness for some other operations) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca92bd514ec6fe243f8962bdb4c1bc7549f8ed4a05e4f1469908fab40eb2c02"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do a \u0022check pass\u0022 later to make sure this won\u0027t happen after generics instantiation? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7323c47fdd06cdd051bbf75ad1dcb7bf19302bb7c81bbc4626992ee01a66962"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do a \u0022check pass\u0022 later to make sure this won\u0027t happen after generics instantiation? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Builder.Expressions.cs"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f0a483fbef03fe8c8af8634b40a7f0b651283aadbb6507a6c22252a065fddf6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: cache results (either here or even more generally for any composite constant even if non-zero) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Building/Context.Constants.cs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cd06f7a17abef37d48771c31ea64d92a90f101f23190428c84341a97aa6b8fc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what happens in case of partial write? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Analysis/ReadWriteAnalyzer.cs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bbf07253356f4ef72fed83362661b1ec135b48fa9939d9940bf214d7e610e93"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make sure register allocation is contiguous \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Cleanup/DeadCodeRemover.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"d99dd84fc624eff6a2bc59cb29a851052efad1b6be2dec75567cb7c27e34ec3c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: review the case where we don\u0027t use automatic forwarding for HS/DS/GS stages, i.e. SV_POSITION and SV_PrimitiveID \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Generation/BuiltinProcessor.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"106c1326de8e6bc4e88066f99e1baf3ba3773f86cc47dc4f30e82acc16d5f57e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check it\u0027s really the 2nd parameter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Generation/EntryPointWrapperGenerator.cs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7fa6aeacb9d464cd59f973893f7dee7c8ff489f1bc9e5808c351cb542f660a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check all parameters instead of hardcoded 0 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/InterfaceProcessor.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"2674240964360605d90e363b08e99fb406cb3b3149fb78ff752376a50b167c64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this shouldn\u0027t be necessary if we allocated layout during first forward pass for any SV_ semantic \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/InterfaceProcessor.cs"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f41b56ea4a74bb53b83009306e57658fd6a6aa409d3a8c49c9ebbb887f077f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this won\u0027t update accessChain.Memory yet but setting accessChain.Base later will fix that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Transformation/StreamAccessPatcher.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd452afb1a85b27261c2af4a9fa0ec5a3c740da4ee77df65518d7d959aeb5508"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove when accessChain.Indexes update properly the instruction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Parsers/Spirv/Processing/Interfaces/Transformation/StreamAccessPatcher.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e8bd6a6b68703e879472b0db04ae643f68c1e556e94d31ba7642889ee11648d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Include this in the preprocessing of instructions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9747e115cb1f82e56800f30f6325e109f27aff97e574df8b693460507e6b3e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Include this in the preprocessing of instructions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv.Generators/SPVGenerator.Helpers.Naming.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"df89fe44064cfacce9ccc92ef319fd64a1186d96e9bcea83a401401d7cad141e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Does it apply to other operand kinds as well? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders.Spirv/Parsing/OpDataEnumerator.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ee643c7d18fb10e9c98f102c97c95b20af34acb47964e4a3087922d43615350"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Public set? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders/ShaderBytecode.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a4072c7a455be7376163647a8e82604f5614307eadbb6e698b1ddaca040db57"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is a workaround for OpenGL, where the shader bytecode is actually GLSL source code. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shaders/Stride.Shaders/ShaderBytecode.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"26136ce55975751bf20961574acad85b1168d2012982537677306bebe648d719"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: doing a grep instead will be better \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/shared/Process/AndroidDeviceEnumerator.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"87fee6cc32e79bd9a0e10c56341d36f4ad6c9605b29a94031cb6f08ce64a12d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Mute connection only, not message loop? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/DeviceHelper.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"eebdf74e50d54a85efb4c2d78e8eccb346ae87ae2073b02d1be1b6cf5c0fc5b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Mute connection only, not message loop? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/IOSTracker.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf38879567ee1961948959f12f4fb6024cbb5bb25c818174913798e3aafffcff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Lock will be only for this folder but it should be shared across OS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/Program.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a77328aada33a4e4ce1b99eb8b470616f634230d36426243b79cd55ca6c7f15"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Ideally, separate socket-related error messages (disconnection) from real errors \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/Router.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"555aeafaeba768d463fab673579343bf9db2b493108dae4ca47f09c54edb4b78"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Ideally, separate socket-related error messages (disconnection) from real errors \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/RouterServiceServer.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"bacff20d9b7c5bca4045be631c5b5703166363a1afc8f8ebaad1366e3393265b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Proper Url parsing (query string) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/Router.cs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"db1cebf1e1a0eb901d4d06e47066a94dd3efdcad3a7b5eb826d0390cd99aa1a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move that in a better namespace? (currently a shared file) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/Router.cs"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"61c85295b136bcca1697d60443c760f5baadeb88a895c086ad61b750f84e1192"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle server disconnections \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.ConnectionRouter/Router.cs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2f90f8ca4a87fdbbe756860955ceb5cf511ed74619b7965e1f51e2ea5b9e18a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: report error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Extractors/CSharpExtractor.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b031508c5b9a237477c92de5a483e59454f471d3cc66abf4e598e4dde479e76"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: report error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Extractors/CSharpExtractor.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87b6e3313c9c744bd612517ebfa84c81f310bb38617e43148f3767764b603eb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: report error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Extractors/CSharpExtractor.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"55530fe40cb92c9f103d89909687a9ad8f557973d8cb3770a594e90436bf36d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: report error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Extractors/CSharpExtractor.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dd2187892037e9a2ba719f2dda6a1b3742b66d6b7d3ed1b50c1e277640b85b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: report error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Core.Translation.Extractor/Extractors/CSharpExtractor.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a91a73880c9144f0c7fe46c1db4122318596590d3593ee24834b13d9386d2cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Asynchronously initialize Irony grammars to improve first compilation request performance? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.EffectCompilerServer/EffectCompilerServer.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5155ef6539065f67eb9e923713231b2ecf90069a40629c538e3509794202cf0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is that how we really want to do that in the future? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.EffectCompilerServer/EffectCompilerServer.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"20f83e6b9b8748a72145dd7c80a32a21f7c179701096ae0626d605013ef718e7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should come from an \u0022init\u0022 packet \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.EffectCompilerServer/EffectCompilerServer.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff8f83579ba6d1898eeb2197328a8ffeac6a74bae9c74402116b5f406c5abcc0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: maybe not necessary anymore with RouterServiceServer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.EffectCompilerServer/EffectCompilerServer.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"6516d2790ecd5c526f5438194d1c3a01dc236ba57fafdecf988cd4f6f3ab2213"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Need to resample the animation created by the pivot chain into a single animation, have a look at the file hierarchy in Assimp\u0027s viewer to get a better clue"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca103e4d5b8367804ba0a8f55e5eb1a581119fecea7f2aa36ab77a0ab4d6ee14"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: change this to support shared meshes across nodes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":851}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aec67d9ccedc1db6226c351f27144274941bb835638d51418513a784e9526ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO TEMP: Set a default diffuse model \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"4640f227a67efdbe560464eb6077501d91fd9c8a7deb3bf9a6ed3affe80906a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO TEMP: Set a default specular model \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"71d123d8be77be27b75d9d20c833581a94e360ef08a71cc2e25e4ac99a84abe0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1339}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf3dba1083750ab21d55e59b6dfb8f925eb41ac5d710c4ee08ecd8b32212ef7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1343}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b7bc623be9c73595cddc5ef7b11306e3ade6d1c3adbaff694b811d09d9ae87e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1347}}}],"partialFingerprints":{"codehealthFindingId/v1":"57eac4d82e4195b7d144d0dc449c3de94f7b129dff27ee88e65265f5ef3067f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1351}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a3d887fc691f3d1e1d4fa9393a46e8db7b3a2df9efad852e08a8b062de50c47"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1355}}}],"partialFingerprints":{"codehealthFindingId/v1":"df41077b27b25640aee370e3a60d4781dcb5aaffc443c71c9491c30243816b50"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1359}}}],"partialFingerprints":{"codehealthFindingId/v1":"b362d2119b0111cc9f25be62b724b3d7a8b948d4506adc9a2aaac470c823b4f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1367}}}],"partialFingerprints":{"codehealthFindingId/v1":"9956ac14a6ccfce4f7e031f78cf96362934b2d33d9e6c2f6d5c6bb69395f8c42"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1371}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef62b7b4cd27863b169ca27ffc0cf2053705c81b01fb2a5356f3d8a5f30227db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: compare with FBX importer - see if there could be some conflict between texture names \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.Importer.3D/MeshConverter.cs"},"region":{"startLine":1502}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a37f740fbd24bd6a083d1ba8b68523952ae4b408c5e95b81d17bd81738870ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*if (node.Texture.SubImageArray[i].Width == 3)\n                    {\n                        //xOffset \u002B= 4;\n                        //node.Texture.SubImageArray[i].RowPitch \u002B= 4;\n                        Console.WriteLine(node.Texture.SubImageArray[i].RowPitch); // TODO: Fix row pitch for 24 bits textures? Why is this commented?\n                    }*/ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/AtlasTexLibrary.cs"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"d766b75169e0f14af2c885f8283cb00ed02f66e34dcc9b682a4cd52067c4ed1c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: temp if request format is SRGB we force it to non-srgb to perform the conversion. Will not work if texture input is SRGB \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/DxtTexLib.cs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eb6446efafafdc322ea12adc469ae21e6109113e85e314d372362c78b7d48f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Report bug to DirectXTex \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Backend/TexLibraries/DxtTexLib.cs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeab29aa831fe6e9e098168c26e8b19a58d13be80138ade25d07e3ef791a2449"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Improve this function so that it checks that actual data (will probably need to add the region to check as parameter) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.TextureConverter/Frontend/TexImage.cs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"863a22d3a640aaa15baa7ad20afb3cabfb84c00ab1f805b20af42a92145bc6aa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: include span \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/tools/Stride.VisualStudio.Commands.Interfaces/Shaders/RawSourceSpan.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd3a634447849e95ca3b55be11c86923ab3af65009b0f98340cbfe5c6ae1168"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: VSEXTPREVIEW_OUTPUTWINDOW \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":"sources/tools/Stride.VisualStudio.Package/Stride.VisualStudio.Package.csproj"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"97e1f959e208e108549bc386ec9ea640074339937e20773ab2a5fb518922a9d4"}},{"ruleId":"D18","level":"warning","message":{"text":"Monorepo: only 1 of 15 solutions was scored: This repository contains 15 .NET solutions, but a scan analyzes ONE. Every score, lens, and finding here reflects only \u0060build/Stride.slnx\u0060 \u2014 the other 14 (\u0060build/Stride.AssemblyProcessor.slnx\u0060, \u0060build/Stride.Launcher.slnx\u0060, \u0060build/Stride.VisualStudio.slnx\u0060, \u0060samples/Physics/BepuSample/BepuSample.slnx\u0060, \u0060samples/StrideSamples.slnx\u0060, \u0060samples/Templates/FirstPersonShooter/FirstPersonShooter.slnx\u0060, \u002B8 more) 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":"f17c1fea779bed9932470a09e48f9cd77ebb7a1e37607f62cf97934cb40482f1"}},{"ruleId":"D18","level":"note","message":{"text":"Thin analysable surface across projects: 1 project(s) carry only a thin slice of real code (e.g. \u0060Stride.Native\u0060 with 39 significant line(s)). The mean analysable-surface weight is 100 %, lowering Solution Shape by about 0.02 point(s). Consolidate thin projects or grow them into substantial, well-scoped assemblies."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dd0b92fd965c2065080f16843920964ee00f7696ea03d87cdf61aed4cd2c746a"}},{"ruleId":"D19","level":"note","message":{"text":"The welcome page links to \u0027stride3d.net\u0027, but the documentation landscape (the landing page) is not shown, so it is unclear whether Stride\u0027s main website or the engine docs take precedence.: Link the documentation landscape to the welcome page and add a short note about where to find the latest engine release notes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c241a4e5bfd664ec853c878656252c9e46478dfc5508b74c85a01ad06a575cb"}},{"ruleId":"D19","level":"note","message":{"text":"This README is a test-assembly note and does not describe how to run tests for Stride.Assets.: Document the build/test setup required for Stride.Assets projects so new contributors can get started."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"sources/engine/Stride.Assets.Tests2/readme.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ca597fbd4dd12418783ecd41dfb676b0d833470147e3e76133fd9745f1dbdf5"}},{"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":"D22","level":"warning","message":{"text":"Redundant test methods that duplicate the parameterized \u0027Sample\u0027 method. \u0027TopDownRPGAot\u0027 and \u0027TopDownRPGTrimsWinForms\u0027 appear to be hardcoded wrappers for specific samples, violating the DRY principle and making the test suite harder to maintain.: Remove the hardcoded methods and use the parameterized \u0027Sample\u0027 method with explicit test case attributes or data sources. (signatures: void SampleScreenshotTests.Sample(string name) | void SampleScreenshotTests.TopDownRPGAot() | void SampleScreenshotTests.TopDownRPGTrimsWinForms())"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2f68996620fa2162d27167ef6f86293fc7067db1d02aa0b7b7402a209d37a781"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent naming for test execution entry points. \u0027RunTests\u0027 is used for specific nodes, while \u0027RunFilteredAsync\u0027 and \u0027RunSelectedCases\u0027 handle different scopes. The naming does not clearly distinguish between synchronous/asynchronous or scope-based execution.: Unify the naming convention for test execution methods, e.g., \u0027ExecuteTestsAsync\u0027, \u0027ExecuteFilteredTestsAsync\u0027, or ensure the distinction between \u0027Run\u0027 and \u0027RunAsync\u0027 is consistent across the API. (signatures: Task TestsViewModel.RunTests(TestNodeViewModel testNodeViewModel) | Task TestsViewModel.RunTests(TestNodeViewModel testNodeViewModel, bool interactive) | Task TestsViewModel.RunFilteredAsync(Func\u003CITestCase, bool\u003E predicate) | Task TestsViewModel.RunSelectedCases(bool interactive) | Task TestsViewModel.RunFailed(bool interactive))"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"925cd2f1fda544a1ae02e80c69bf88706693725909a4bfc66ab34f9fb7c4655d"}},{"ruleId":"D23","level":"note","message":{"text":"Bounded contexts not declared: At 573k LoC spread over 115 projects the codebase is both large and multi-module, so explicit bounded contexts are needed. 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":"Projects may be oversized for their cohesion: 13 of 114 project(s) overshoot their size bounds, lowering Project Cohesion to 7.7/10. The most over is \u0060Stride.Graphics\u0060 (62987 LoC, 322 public types across 9 namespaces). Review these for cohesion \u2014 split a project that spans unrelated responsibilities."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a94650dc74886a0f1f08eb9fb6775f1fc395279ef7e901c970c9d26f767a72"}},{"ruleId":"D28","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":"e1fc639895d748fdae82f41981aefacbccefd4b5ca7928445549db81824d3ede"}},{"ruleId":"D28","level":"note","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":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"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":"f2d9609d8fd9da231a7409e28c21a49a91bd1427558a1d8651eb04f5937205e8"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"1fd2d1465d66b4addaef30c5764f2aca1b881eeddc7562606399da4ce31a03cf"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"7b92fb62d72adda975e9b9d4cdb37cdcf8f359722ae38679dcc73c7707e3ca6c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"8b00764e071c7ba489e77d9e96191d8ad2bfb407caa7d8bbf49cd2acc87168f9"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"2250aa707262473532b9dc728c5a6c637434dcddbc84925530df16dfb3cf13c8"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"a5bf0a0eabbaf9e1989cdbfc9d46d17a47ddb22008f8215c35da79db87f2552b"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"14beea9b9db4819b335382b00dd471311b9e63e053a8bb8a3c1ddfa2c9a8b296"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"b71b49bd21f657ba8c28234e0edacb7f4cc0d8b97956502b55da6b454fb39c07"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"798eaba1608c7dd00de24b8ca4adffb09bf7079396c67fe1adb5cb8a7527b25c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"8b094174105531f6122e5093dd9d335dd39f28e47b0d2877bc578ae83f446906"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"10461e898a3f71b72cde51e8b2f59650c9d9285fe2c056f43928631f985046b4"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"9d613070d9ba55622fb921298e745c9618bd6332c18cdd97ae9562f12b9d8a51"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"2e8924c389555abda2111ee447d149c4d69a6c4a0126dfd28dbcab7d026cd158"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"fdd8ed2d29ae3e5b89fd51c51ebd6043d7128dee5295d2927924751919981f27"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"70a357b62aab692b18f5ab500f739dd9e6a15c0c31e2d5ab75b44d74152488ea"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"716b39270f32e1bf52cd03f757ad89aec203af551fe78699487cf1adaa2c7a94"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"2f899f280030f21a0ebb47b0f68c262294281d94c91f2167af9a3480835ccd2d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"47bd0d2f978811439b48c3f55a2b4b8c6c2b0cadbe937cdc2c4da3fbb1a60bec"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"fd551e7a50f5e15350329519417ee3d1781a3b1fb7c73ecb27731792579fd42b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"b0751fdcf21fc2555b064417c63cf4211f4601ad0a5fd755932821dd8cfe2fbd"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"640ce465af5c629e7efc943045c6ccf6a0b5d05b1ace0291c20626774965b2a2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"486907932c74a16695592e58f2dcbf24a606058dc98cbf13d4cb9540949d4b86"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"3b7e6fdc7d66732e9010e257d9155277f5ab4788c2c9655ac7675849920a3fac"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"15800a62df6644d8589b72d70a38ee942da6dcb372419629f7d9fd46b11ca83b"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"960b9f51e0e916bf0837354201ec08e84d252452c41555c6aa72bf026534011b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"a84486a6718c864742b86d44ba21e5481ccbecc7f0adeb22216cf54b4d9a88bf"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"f2b175e9d881fc67998e3a0ddfb6dac2aab9d48ded0e7545e48a3ca078b066a3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"73e03cf084e524149faf58dcc6ed19052fd7349667df19cd537651ff1ad86218"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"c9217b369fcc3aac97b0b11b6cd12bfc4f900af86b382e94ba6705368d5d2401"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"d5a2288621e4e3d9a7ba4675c8458636ac1df5855c25b9fa0ff8ad9ebcf69b6f"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"93d7c3c9d29711a27a11ebcb63a2a976cf9bd10791852b1f03f755adcdd3719a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"a8156585e8df1c50ea807a4d2a39a20c087e9b231e55c7a99f855443faa2055d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"eb5f9aba170a99283819282f388e3ec7f2f54c0139ff6b9ca94040967a09ef81"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"654113bd19e5abd3af5ccc6c20110abb4124082612a8bd5ca38bc9ca1d3104c9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"f25c355fa020de46a355e5623a9d42292e753d674d669b2c7c26e45e745c17a7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"e81434b1cd5f5e95cc41076e7945800d3b8cd583145c01d128e39420d47ffd36"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"3c97c800a4a9a7d8c9885c8820829b42f6e28258b4f30d4d07dd7c95369ec9c2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"490ae7189d7f92b135d232f1106cbf240f99c7ac5ee8ea0d7837fa6e79451382"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"b2dd7990405a49fd8e2eaba2306a828822c7244db50cf564b9d962684017fb8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"f0ff3344d22a09fda7c31b4c32e9ba1e43ed9db5daa6ce2b47be8d436e72b7d6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"fc09cc9b4ba608d33d5635dc50d5c6fbc6b65dc8ca5b91889fe6414027431d27"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"97393a9366a78241301fde460ded28dea641c6730574bbf437f9e43aab86992a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"919f6ddcdca28875664fea99cd3667980520c3bdeaeaf2bbe92e9ee805ba033c"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"97d25a4da1cbf65dc216e0f0aea79f640cecddc8f64caf0624decf8221b8f7f8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"9f36a8baa966a3403d03f05a2365296ab1c7eada355910299dab54039a5f0205"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"05fac91fce28db1ad0a1b9f46c84c5eb6e980c399e6e46ccbde8ff9f9b8c4516"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"a387463b662863e3fac4adadda735822c619465c8c3bdb078e05f65dbdcb6352"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"ff1cf59e6bcf8784c8d74ea2d31869c71427356bed47a51769b49260cdc3d9a1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"c5b1246a4113faefdd49cbffb3fd9bae207e8ce397b4fda938475b592971f709"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"4a72d90b798b8a8bcf35a2c5684c39f0154713b6abdb8bcf957bb9e3851a240a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D32","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":"9d8b91849a3b6d8e43cb1df471d808ee7cbab4a032a895fb1be1e84e3e6f5db6"}},{"ruleId":"D34","level":"note","message":{"text":"knowledge concentrated in recent work \u2014 freshness signal contradicted by repo activity: File-level freshness contradicts repo activity: 760 commits in the last 90 days, yet 57 of 95 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 clique: BoxCollider.cs, CapsuleCollider.cs, CylinderCollider.cs, SphereCollider.cs, TriangleCollider.cs: 5 files \u2014 \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/BoxCollider.cs\u0060, \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/CapsuleCollider.cs\u0060, \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/CylinderCollider.cs\u0060, \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/SphereCollider.cs\u0060, \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/TriangleCollider.cs\u0060 \u2014 all change together with no explicit dependency: a fully-connected co-change clique, not 10 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":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/BoxCollider.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e02d4a837eca757176ad5210c72cae60f49a36a2382184ce6857b9fe26e9a07b"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: CompoundCollider.cs \u2194 EmptyCollider.cs: \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/CompoundCollider.cs\u0060 and \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/EmptyCollider.cs\u0060 change together 55% of the time (6 of the 11 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":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/CompoundCollider.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a50d005f340ba3adbc99e7a7ea7c7e2cc7c8fc31cc49720ee7ba29edf5071334"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: CompoundCollider.cs \u2194 MeshCollider.cs: \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/CompoundCollider.cs\u0060 and \u0060sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/MeshCollider.cs\u0060 change together 55% of the time (6 of the 11 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":"sources/engine/Stride.BepuPhysics/Stride.BepuPhysics/Definitions/Colliders/CompoundCollider.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8da737dac3aefa47e9db932c20940ab4a3fbf715f87fab4a4b8f8cd3dc6f5e49"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: Buffer.Vulkan.cs \u2194 Texture.Vulkan.cs: \u0060sources/engine/Stride.Graphics/Vulkan/Buffer.Vulkan.cs\u0060 and \u0060sources/engine/Stride.Graphics/Vulkan/Texture.Vulkan.cs\u0060 change together 52% of the time (12 of the 23 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":"sources/engine/Stride.Graphics/Vulkan/Buffer.Vulkan.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9337871225ce799adcda26681c4d7f7274e140057f901cf7c385f006e3371c8e"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: GraphicsAdapterFactory.Direct3D.cs \u2194 GraphicsOutput.Direct3D.cs: \u0060sources/engine/Stride.Graphics/Direct3D/GraphicsAdapterFactory.Direct3D.cs\u0060 and \u0060sources/engine/Stride.Graphics/Direct3D/GraphicsOutput.Direct3D.cs\u0060 change together 50% of the time (9 of the 18 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":"sources/engine/Stride.Graphics/Direct3D/GraphicsAdapterFactory.Direct3D.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a2da40d6cfb531b3472c63c24eba50a5436765526cac3d189a9a1e00855802"}},{"ruleId":"D36","level":"note","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":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","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":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","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":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","level":"warning","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":"0752d0df7434000fcabf1048e2de30a7a1a8b982b3db9a19898c4dec199856b4"}},{"ruleId":"D36","level":"warning","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":"d657599f6f99da1927d3377533dfc0888b34c4d84aa7d5579841fd72d0e39bce"}}],"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-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-200","guid":"b0ce3b1d-7a29-fe50-8aab-9aba899d2988","name":"Exposure of Sensitive Information to an Unauthorized Actor","shortDescription":{"text":"Exposure of Sensitive Information to an Unauthorized Actor"},"helpUri":"https://cwe.mitre.org/data/definitions/200.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-312","guid":"96724ece-b0b2-a45c-83f9-0869fa3f6bea","name":"Cleartext Storage of Sensitive Information","shortDescription":{"text":"Cleartext Storage of Sensitive Information"},"helpUri":"https://cwe.mitre.org/data/definitions/312.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-359","guid":"b7dfe5b0-0351-645b-a311-b936102c2929","name":"Exposure of Private Personal Information to an Unauthorized Actor","shortDescription":{"text":"Exposure of Private Personal Information to an Unauthorized Actor"},"helpUri":"https://cwe.mitre.org/data/definitions/359.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-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-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":58,"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."]}]}