{"$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":"D7","name":"Architectural Integrity","shortDescription":{"text":"Architectural Integrity"},"helpUri":"https://codehealth.canine.dev/dimensions/D7"},{"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"},{"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":"D25","name":"ADR Conformance","shortDescription":{"text":"ADR Conformance"},"helpUri":"https://codehealth.canine.dev/dimensions/D25"},{"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"},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29"},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30"},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31"},{"id":"D32","name":"Data Compliance (PII/GDPR)","shortDescription":{"text":"Data Compliance (PII/GDPR)"},"helpUri":"https://codehealth.canine.dev/dimensions/D32"},{"id":"D33","name":"JS/npm Dependency Vulnerabilities","shortDescription":{"text":"JS/npm Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D33"},{"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"},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37"},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"UnitAI.MakeOperationalDecision (cyclomatic 51): UnitAI.MakeOperationalDecision has cyclomatic complexity 51 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1e12e389697280713d8d108d344156c3d4cdc46253d2ddea87468e40d0bf3c"}},{"ruleId":"D1","level":"warning","message":{"text":"WaypointMovementSystem.ProcessMovementTick (cyclomatic 40): WaypointMovementSystem.ProcessMovementTick has cyclomatic complexity 40 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Units/WaypointMovementSystem.cs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"5494a2b83ac3e5e77147f93f539dcfcdd13b47e696375aa75a388378ce016a6d"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationLookupSystem.FuzzyMatchAnimationType (cyclomatic 35): AnimationLookupSystem.FuzzyMatchAnimationType has cyclomatic complexity 35 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationLookupSystem.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"a342fd9b177dc8e545efa77600b0ae23081bc143951c1ff93033c5e147cdfc19"}},{"ruleId":"D1","level":"warning","message":{"text":"ForestClusterGenerator.ValidatePathfinding (cyclomatic 35): ForestClusterGenerator.ValidatePathfinding has cyclomatic complexity 35 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ca4bde0a5706f53fb18cbb9bc44e9268a4cd1cb27d286f69254d24ae5570caa"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationFileLoader.ParseAnimationFile (cyclomatic 34): AnimationFileLoader.ParseAnimationFile has cyclomatic complexity 34 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationFileLoader.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bf8165c6afd2ab81f658f32226ebf4d4288e6ca3690d3cb67d81e116cb34cb5"}},{"ruleId":"D1","level":"warning","message":{"text":"HumanoidAnimationController.PlayFallbackAnimation (cyclomatic 33): HumanoidAnimationController.PlayFallbackAnimation has cyclomatic complexity 33 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/HumanoidAnimationController.cs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc1f2ebd93bd0374739d96a8f3e6ebdf36ed1bc899d1499dafb9a967afc4400c"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationFilenameParser.Parse (cyclomatic 32): AnimationFilenameParser.Parse has cyclomatic complexity 32 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationFilenameParser.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"89b3a706f8555f19edcaab09f2c75f79b8a02678de9e6e17da038abe7cf587a1"}},{"ruleId":"D1","level":"warning","message":{"text":"CameraController._Process (cyclomatic 28): CameraController._Process has cyclomatic complexity 28 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Camera/CameraController.cs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"33a47b973b560299084772f5ffb77786a2a90c62701d474a375b0402c5597cef"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitEditDialog.ClearFields (cyclomatic 27): UnitEditDialog.ClearFields has cyclomatic complexity 27 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.UI.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff75c76c3a5be0f8773be4ddbe0a3a05d947656c823b915bd6d0c0ff4c00118d"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitEditDialog.LoadUnitData (cyclomatic 27): UnitEditDialog.LoadUnitData has cyclomatic complexity 27 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.UI.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"1815925689c792afbc7edfe8592b1bcc9ba2822b9e6747992e82ab3ea1e954b3"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationIdMapping.GetAnimationTypeForState (cyclomatic 27): AnimationIdMapping.GetAnimationTypeForState has cyclomatic complexity 27 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationIdMapping.cs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"8621b4a17e5eca4f8153c8618410ec3b894e3f5b3750f18fbf59e122320018a0"}},{"ruleId":"D1","level":"warning","message":{"text":"CombatSystem.ProcessCombatTick (cyclomatic 27): CombatSystem.ProcessCombatTick has cyclomatic complexity 27 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Combat/CombatSystem.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"2501b8da9a551179b56e1a9ea65c8ac9b6851284ca46fb3674343272eb455e41"}},{"ruleId":"D1","level":"warning","message":{"text":"SimulationManager.StartNightSimulation (cyclomatic 26): SimulationManager.StartNightSimulation has cyclomatic complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Simulation/SimulationManager.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d85a424cac401956e98d3b222dfc2981afab1dc548d03b31461a0aa261bbf69"}},{"ruleId":"D1","level":"warning","message":{"text":"JumpPointSearch.GetPrunedNeighbors (cyclomatic 25): JumpPointSearch.GetPrunedNeighbors has cyclomatic complexity 25 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"c97ab9e43fb7008889b5f673016197bbc300c69a32783971aecbc832148ea457"}},{"ruleId":"D1","level":"warning","message":{"text":"TacticalSimulator.SimulateNightPhase (cyclomatic 25): TacticalSimulator.SimulateNightPhase has cyclomatic complexity 25 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/TacticalSimulator.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ae4a2f154445106f0335070c9510d5888233ff97128b9006ab1f808cfae8eb6"}},{"ruleId":"D1","level":"warning","message":{"text":"BallisticTrajectory.CalculateBallisticArcTrajectory (cyclomatic 22): BallisticTrajectory.CalculateBallisticArcTrajectory has cyclomatic complexity 22 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/BallisticTrajectory.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"023d09913d9ba91fb6ceef67de7be0fc5785e6fcc05697ca323fddd3d6b0fd09"}},{"ruleId":"D1","level":"warning","message":{"text":"WeaponEditDialog.LoadWeaponData (cyclomatic 21): WeaponEditDialog.LoadWeaponData has cyclomatic complexity 21 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.UI.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"dca358430c11f78b0eef507857c55edb7e03eac31adb643a67313d90796f9b32"}},{"ruleId":"D1","level":"warning","message":{"text":"ProjectileSystem.ProcessProjectileTick (cyclomatic 20): ProjectileSystem.ProcessProjectileTick has cyclomatic complexity 20 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/ProjectileSystem.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ab4b874aaa6b4ed5c9076af407dc88cdb402f8db2b2c884e26d498c4d730036"}},{"ruleId":"D1","level":"warning","message":{"text":"WeaponEditDialog.ClearFields (cyclomatic 19): WeaponEditDialog.ClearFields has cyclomatic complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.UI.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"d05cc80e6ebabcb5eb525a6a52068608d4242f88feccc69412210933e9b94c5b"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationMatcher.FindBestMatch (cyclomatic 19): AnimationMatcher.FindBestMatch has cyclomatic complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationMatcher.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdaee1a1719ab678483b2a1946fd7fbd5c3abc3e4408ef624c674a04a32c429a"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitRegistry.ScanAndLoadUnitDefinitions (cyclomatic 18): UnitRegistry.ScanAndLoadUnitDefinitions has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"341d96c8d1bc3df2d6a407cf74ca8d05c333bb709e17a9aafa461dc78ffd088e"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitRegistry.BuildCache (cyclomatic 18): UnitRegistry.BuildCache has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"31de6b188e9534c3fb94e858bf66470bf88c4c4d05491e80945cd2db279066b6"}},{"ruleId":"D1","level":"warning","message":{"text":"AudioStreamLoader.LoadWav (cyclomatic 18): AudioStreamLoader.LoadWav has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/Utilities/AudioStreamLoader.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1816f04e0a51482f510c28e89890f27438e57426954cc7f38eb7273ac087c4"}},{"ruleId":"D1","level":"warning","message":{"text":"CollisionAvoidanceSystem.CalculateAvoidanceVelocity (cyclomatic 18): CollisionAvoidanceSystem.CalculateAvoidanceVelocity has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/CollisionAvoidanceSystem.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"a75666ca604aa81e18d3cb8be1542248c638737fc97acf3c949cce36d143816c"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitDefinitionData.MapUnitTypeFromString (cyclomatic 18): UnitDefinitionData.MapUnitTypeFromString has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Resources/UnitDefinitionData.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"0659abd82885e6f9b61b311ffa651b82914bb2ba488f8e2b01b42cf5ca0fe6d1"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitAI.SelectTargetFromState (cyclomatic 18): UnitAI.SelectTargetFromState has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"e46ab73f99144d5cc86a9f6f6ef18c0f04237d8ea8f659aafd6e07c9f55c9ea1"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitEditDialog.UpdateAnimationPreview (cyclomatic 17): UnitEditDialog.UpdateAnimationPreview has cyclomatic complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Animation.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"1263cf381e29041926b30ceeeb07ca22209d8d33317fab84f821833a594ce6c5"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitEditDialog.PopulateWeaponSelector (cyclomatic 17): UnitEditDialog.PopulateWeaponSelector has cyclomatic complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Assets.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"468cd6a66ff10b0fea44f8784361377274b96b8d8a2dd5b198eae176383d9c4b"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationStateSystem.GetMovementAnimation (cyclomatic 17): AnimationStateSystem.GetMovementAnimation has cyclomatic complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationStateSystem.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"650d88d828c5d41db708a2303f9d3021be68925fbe3e72a11d94ef86f9d75260"}},{"ruleId":"D1","level":"warning","message":{"text":"ModdingTool._on_main_tab_container_tab_changed (cyclomatic 16): ModdingTool._on_main_tab_container_tab_changed has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ModdingTool.cs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"c71a318d3c8928b4ab47afa1d003912912cf3750fd79f64a34385a058bda5f74"}},{"ruleId":"D1","level":"warning","message":{"text":"AnimationLookupTable.LookupWithFallback (cyclomatic 16): AnimationLookupTable.LookupWithFallback has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationLookupTable.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"915ebe0f4b5ed51daee616972124fa9c09d518ae3c36da68b6fdfd1121a4ae3e"}},{"ruleId":"D1","level":"warning","message":{"text":"ForestClusterGenerator.FindNextCirclePosition (cyclomatic 16): ForestClusterGenerator.FindNextCirclePosition has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"01228a01d9dc1845a4add0196b7db0a7630ab14423bbb3f86cc13f7985a58028"}},{"ruleId":"D1","level":"warning","message":{"text":"JumpPointSearch.Jump (cyclomatic 16): JumpPointSearch.Jump has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"81f3bf2cf0c6518b218d60faba741a704ef5eef0a6764ec1a728364d86e67e68"}},{"ruleId":"D1","level":"warning","message":{"text":"JumpPointSearch.HasForcedNeighbors (cyclomatic 16): JumpPointSearch.HasForcedNeighbors has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"b09fa44738948380f7747f481ed346bb8294e679ee33e9ee4fdda60b9ba71090"}},{"ruleId":"D1","level":"warning","message":{"text":"StanceSystem.GetStanceEffects (cyclomatic 16): StanceSystem.GetStanceEffects has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/StanceSystem.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"15861b66b9709172a130424760c1ccf5d433fb0af691435e2624964f3b7df8ae"}},{"ruleId":"D1","level":"warning","message":{"text":"UnitAI.ApplyOperationalDecision (cyclomatic 16): UnitAI.ApplyOperationalDecision has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c413858d3eb59ab1225d42af371ee57d08bcc420738a473e22534fde9bbf9fa"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitAI.MakeOperationalDecision (cognitive 111): UnitAI.MakeOperationalDecision has cognitive complexity 111 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"52fa40568d273a1a86c54e63d24bd13e017e12a922e343accbc352d719ea2073"}},{"ruleId":"D2","level":"warning","message":{"text":"CombatSystem.ProcessCombatTick (cognitive 86): CombatSystem.ProcessCombatTick has cognitive complexity 86 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Combat/CombatSystem.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa2a84f8932eb3a382b1e6bedb5dd669f427f32fe0aae69732f8d37c420a85bc"}},{"ruleId":"D2","level":"warning","message":{"text":"WaypointMovementSystem.ProcessMovementTick (cognitive 78): WaypointMovementSystem.ProcessMovementTick has cognitive complexity 78 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Units/WaypointMovementSystem.cs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6b157ab58b5b34a2e103dcd361653cbef77c0f0b5321316f6a881f52fc21637"}},{"ruleId":"D2","level":"warning","message":{"text":"HumanoidAnimationController.PlayFallbackAnimation (cognitive 65): HumanoidAnimationController.PlayFallbackAnimation has cognitive complexity 65 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/HumanoidAnimationController.cs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f474abc5835a026ca58851c4fc516793bed02bfe2967728c10ab98c0839e5ae"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationFileLoader.ParseAnimationFile (cognitive 58): AnimationFileLoader.ParseAnimationFile has cognitive complexity 58 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationFileLoader.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"589dc79886a4f1d4e9c766f525285c1fb58843bc6fb1bf73819c2e1bc06e1d6a"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationLookupSystem.FuzzyMatchAnimationType (cognitive 58): AnimationLookupSystem.FuzzyMatchAnimationType has cognitive complexity 58 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationLookupSystem.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7878ecfa4fc5d2526948d1fc8daed3b6fda70785efd264b24781ef6e30abc7"}},{"ruleId":"D2","level":"warning","message":{"text":"ForestClusterGenerator.ValidatePathfinding (cognitive 56): ForestClusterGenerator.ValidatePathfinding has cognitive complexity 56 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa5cdce338865d0e516a96f2b80baa0beadaec7e889ed196967da65b7059580b"}},{"ruleId":"D2","level":"warning","message":{"text":"JumpPointSearch.GetPrunedNeighbors (cognitive 51): JumpPointSearch.GetPrunedNeighbors has cognitive complexity 51 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ca52df5b6e96d271db381aa01c0c79a3c2badd0dd90908adbabb4691976698"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectileSystem.ProcessProjectileTick (cognitive 51): ProjectileSystem.ProcessProjectileTick has cognitive complexity 51 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/ProjectileSystem.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b05dea92684aa9729d956330e10cbbc61586e3b1de76ca8798c802e7d08d62e"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitRegistry.BuildCache (cognitive 50): UnitRegistry.BuildCache has cognitive complexity 50 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"67bbd79d994706b185da2eacf9b69396fbb55e6aaa80be38f80e49b302f08d0b"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationFilenameParser.Parse (cognitive 46): AnimationFilenameParser.Parse has cognitive complexity 46 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationFilenameParser.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcb8bb033eef369439bb3124f30e0ab1bb5c29dd5e57e8914b5e34c1707f6a1d"}},{"ruleId":"D2","level":"warning","message":{"text":"SimulationManager.StartNightSimulation (cognitive 36): SimulationManager.StartNightSimulation has cognitive complexity 36 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Simulation/SimulationManager.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"f41d006dd5f03f36594fca3c7fe66e55dd423da649fce0adea13d18dc080dd33"}},{"ruleId":"D2","level":"warning","message":{"text":"CameraController._Process (cognitive 34): CameraController._Process has cognitive complexity 34 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Camera/CameraController.cs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"871002c2514dd5242e10ed7ae39611cfe7ea47a3cdda7dc5fde3759335179b7b"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitRegistry.ScanAndLoadUnitDefinitions (cognitive 34): UnitRegistry.ScanAndLoadUnitDefinitions has cognitive complexity 34 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"d688eefa6d9c40bd4c932be7e71892542bfe68c6255379077adc125bc768aaad"}},{"ruleId":"D2","level":"warning","message":{"text":"ForestClusterGenerator.FindNextCirclePosition (cognitive 32): ForestClusterGenerator.FindNextCirclePosition has cognitive complexity 32 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"04386aaa005f0c24b418014dde48442acc682c18f559fd575111c1c3fc7f4439"}},{"ruleId":"D2","level":"warning","message":{"text":"BallisticTrajectory.CalculateBallisticArcTrajectory (cognitive 31): BallisticTrajectory.CalculateBallisticArcTrajectory has cognitive complexity 31 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/BallisticTrajectory.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3d91fc504d27d051e873eff74d62a732b78264ccee92d1058da319f02ccf622"}},{"ruleId":"D2","level":"warning","message":{"text":"TacticalSimulator.SimulateNightPhase (cognitive 30): TacticalSimulator.SimulateNightPhase has cognitive complexity 30 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/TacticalSimulator.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"858a0a59b80703a8370826e1873860fe522d5f5784d31a1ee7be70defe789909"}},{"ruleId":"D2","level":"warning","message":{"text":"CollisionAvoidanceSystem.CalculateAvoidanceVelocity (cognitive 29): CollisionAvoidanceSystem.CalculateAvoidanceVelocity has cognitive complexity 29 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/CollisionAvoidanceSystem.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"4204078fcafc37a9b61745b66611c0a673bc457bf107af129aae3fcf80150f9d"}},{"ruleId":"D2","level":"warning","message":{"text":"BackgroundMusicManager._Process (cognitive 28): BackgroundMusicManager._Process has cognitive complexity 28 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BackgroundMusicManager.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"a53d7528c52be388cb90a813d60b929ecad8da5041ae759d2adb7ef1990b653d"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitEditDialog.LoadUnitData (cognitive 28): UnitEditDialog.LoadUnitData has cognitive complexity 28 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.UI.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7fe29fb2643a6eb653449185cd17f6aca55d4f08da709895d78e72c412cede1"}},{"ruleId":"D2","level":"warning","message":{"text":"CorporationBuildingController._Process (cognitive 27): CorporationBuildingController._Process has cognitive complexity 27 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/CorporationBuildingController.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f2557d149ae213890ef39f52a4e6980adebb4ddf0336a29609e74e79e7bab1c"}},{"ruleId":"D2","level":"warning","message":{"text":"TransitionManager.FindCutsceneNodes (cognitive 26): TransitionManager.FindCutsceneNodes has cognitive complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/TransitionManager.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"db063f1967c6fcae4a8efdf18a4a7e0b4700f99cbfc81a893551d381dea9bc1a"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitEditDialog.UpdateAnimationPreview (cognitive 26): UnitEditDialog.UpdateAnimationPreview has cognitive complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Animation.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"36b7762536c074cdbdb0ede1a5f9882b8de9cc90e377227bd0a197d9bed7e999"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitEditDialog.ClearFields (cognitive 26): UnitEditDialog.ClearFields has cognitive complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.UI.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"de3546d418a49c165854e05358e97d510619bb3aef3f6189a32af209b25eed6d"}},{"ruleId":"D2","level":"warning","message":{"text":"AStarPathfinder.FindPath (cognitive 26): AStarPathfinder.FindPath has cognitive complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/AStarPathfinder.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c17fa4c7c7b3f987ad8b89f38b15f78a06959f21476976f51688f2665725531"}},{"ruleId":"D2","level":"warning","message":{"text":"JumpPointSearch.Jump (cognitive 26): JumpPointSearch.Jump has cognitive complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"165856cf6b8c22d8af5368dc3129adad5c74ba8f35fffbe69abad205d2b89e85"}},{"ruleId":"D2","level":"warning","message":{"text":"BattlefieldManager.HandleUnitSelection (cognitive 25): BattlefieldManager.HandleUnitSelection has cognitive complexity 25 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b5ceeea86d006028c27e8c220db98228aaa181991facbdc61fb617726cb222"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationLookupTable.LookupWithFallback (cognitive 25): AnimationLookupTable.LookupWithFallback has cognitive complexity 25 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationLookupTable.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"c42a5bb9d8047c5c897d5f9ae269761f06e2c1047db35c216962c326219e127a"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectionManager.SetWaypointEditorEnabled (cognitive 24): SelectionManager.SetWaypointEditorEnabled has cognitive complexity 24 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f485c44a01058ba310d13b67db316572c1dc5f7ff5fd47a47c63d2ac08be760"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectionManager.UpdateCommandQueueDisplay (cognitive 24): SelectionManager.UpdateCommandQueueDisplay has cognitive complexity 24 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":981}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4018757f03dd75c268adaded2486446bb41814d6c06d7269d8d50559dc28a17"}},{"ruleId":"D2","level":"warning","message":{"text":"AStarPathfinder.IsDirectPathClear (cognitive 24): AStarPathfinder.IsDirectPathClear has cognitive complexity 24 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/AStarPathfinder.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"154743f693b043e76f628fa4b9f8a3be82843778073b29099ad873ab2a042a17"}},{"ruleId":"D2","level":"warning","message":{"text":"JumpPointSearch.FindPath (cognitive 24): JumpPointSearch.FindPath has cognitive complexity 24 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a040af9907864700013166bad837020e27501092466795d956ffe1d005344253"}},{"ruleId":"D2","level":"warning","message":{"text":"PathfindingSystem.InitializeStaticObstacles (cognitive 24): PathfindingSystem.InitializeStaticObstacles has cognitive complexity 24 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/PathfindingSystem.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"446d0aaa56ca495e1c5f74d403f67e7dd58a5b49a0d7596575ab07bd033f0652"}},{"ruleId":"D2","level":"warning","message":{"text":"BattlefieldManager.HandleUnitHover (cognitive 23): BattlefieldManager.HandleUnitHover has cognitive complexity 23 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"e348f8a0f664622a39db1e06fe35a745f24067fa69e053a6390ac169442f3274"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationBrowser.SetDefaultDropdownSelections (cognitive 23): AnimationBrowser.SetDefaultDropdownSelections has cognitive complexity 23 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Dropdowns.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"73c49641c750a297e25e5c6419c7b2504f43f7c6cff5055f8403559f4b4120b3"}},{"ruleId":"D2","level":"warning","message":{"text":"WeaponEditDialog.LoadWeaponData (cognitive 23): WeaponEditDialog.LoadWeaponData has cognitive complexity 23 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.UI.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"1587f0d77508c18f4be557a1293c340944170af96f71c555ca8f2dc1e61be89f"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationMatcher.FindBestMatch (cognitive 23): AnimationMatcher.FindBestMatch has cognitive complexity 23 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationMatcher.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bbdbf0ff11d0bbae7a28b21ec1806972506e1a053e32ddc63551f0f6d13d35b"}},{"ruleId":"D2","level":"warning","message":{"text":"PathfindingGrid.UpdateDynamicObstacles (cognitive 23): PathfindingGrid.UpdateDynamicObstacles has cognitive complexity 23 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/PathfindingGrid.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"22de64af2bd1018c2f6caa1afd3409dc08c30dd6d259f42e3eedb689f27cb172"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitAI.ApplyOperationalDecision (cognitive 23): UnitAI.ApplyOperationalDecision has cognitive complexity 23 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"332a736b123b9c10554d623df50a37bd13f1c00d2cb690d0db144a01c0203414"}},{"ruleId":"D2","level":"warning","message":{"text":"CorporationBuildingController._Ready (cognitive 22): CorporationBuildingController._Ready has cognitive complexity 22 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/CorporationBuildingController.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ddf38c0ef0dd02626e9e06288241a9494a75605de167fbfb3ad6fb8be2eff38"}},{"ruleId":"D2","level":"warning","message":{"text":"ResourceManager.DiscoverAvailableWeapons (cognitive 22): ResourceManager.DiscoverAvailableWeapons has cognitive complexity 22 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"92237958c940149bd6922ad3c7fe3a7ca175a1af073adeda86ed70de070ed2e2"}},{"ruleId":"D2","level":"warning","message":{"text":"WeaponEditDialog.LoadSounds (cognitive 22): WeaponEditDialog.LoadSounds has cognitive complexity 22 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.UI.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1d06d4d96696f87de4f0f9afdda8c6f574d250532aed4ae715da3ef323675b2"}},{"ruleId":"D2","level":"warning","message":{"text":"POINode.GetNodeAABB (cognitive 21): POINode.GetNodeAABB has cognitive complexity 21 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/POINode.cs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b73170c82ceafa2e8094812000b2b8e763c42e7f209973ea76814f815895ccd"}},{"ruleId":"D2","level":"warning","message":{"text":"TransitionManager.ShowBasicResultsCutscene (cognitive 21): TransitionManager.ShowBasicResultsCutscene has cognitive complexity 21 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/TransitionManager.cs"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a1c7e8e573e0e8af5179e1f27384ff059569a64a6b0fc2e2b4e73032617d31"}},{"ruleId":"D2","level":"warning","message":{"text":"MilestoneEditDialog.LoadExistingMilestone (cognitive 21): MilestoneEditDialog.LoadExistingMilestone has cognitive complexity 21 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/MilestoneEditDialog.cs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1d376471e663309c7fab96478010cbf7153a7f9d46006c3c0025ca4b0bef4e9"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationLookupTable.PrewarmCache (cognitive 21): AnimationLookupTable.PrewarmCache has cognitive complexity 21 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationLookupTable.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"8283dd754192208b292534f2c1a85a3c1e16e3e754d288a234fe6a104eecf694"}},{"ruleId":"D2","level":"warning","message":{"text":"NightToDayCutscene.ShowBasicHeroResults (cognitive 20): NightToDayCutscene.ShowBasicHeroResults has cognitive complexity 20 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"fde5b75d919669d8f0d2ad4e1cd05b1cc552db67ba31bf3f70d0a084f06374e8"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitEditDialog.PopulateWeaponSelector (cognitive 20): UnitEditDialog.PopulateWeaponSelector has cognitive complexity 20 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Assets.cs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c595e99851ac86ab06ff0820a142151fdde5f300b53fb01405b9db7ee7d6656"}},{"ruleId":"D2","level":"warning","message":{"text":"WaveEditDialog.UpdateSpawnPointSliders (cognitive 20): WaveEditDialog.UpdateSpawnPointSliders has cognitive complexity 20 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WaveEditDialog.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"94c778b552a5aea368ed85f285fdf2cc28d611e9e23d67180bfa05e6218be422"}},{"ruleId":"D2","level":"warning","message":{"text":"CorporationBuildingController.BreakGate (cognitive 19): CorporationBuildingController.BreakGate has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/CorporationBuildingController.cs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"30ff0fda5433919d262c4168d3772d39c9ae8559e34cb771ada33979d120ad06"}},{"ruleId":"D2","level":"warning","message":{"text":"DefeatScene.ShowHeroCasualties (cognitive 19): DefeatScene.ShowHeroCasualties has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/DefeatScene.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6e5bb41b4f8cf5fc03becaabd4540840762c5e9a7a79ac0b88382ac40b1822"}},{"ruleId":"D2","level":"warning","message":{"text":"VictoryScene.ShowHeroStatistics (cognitive 19): VictoryScene.ShowHeroStatistics has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/VictoryScene.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"1780b2d2188a4a69dc0f2700c8a62e4c42664719e5e1b63346e7a07253cddd29"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitEditDialog.GenerateNextUnitId (cognitive 19): UnitEditDialog.GenerateNextUnitId has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.cs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab5b890098c30df52e8cfa2cc85ceda409f44677af6b769115b5617002c85f97"}},{"ruleId":"D2","level":"warning","message":{"text":"HierarchicalPathfindingGrid.FindAbstractPath (cognitive 19): HierarchicalPathfindingGrid.FindAbstractPath has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/HierarchicalPathfindingGrid.cs"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a4c0e6b3836a3669cfa3ca5170d379c6bb728a37ccdca573855a739884f6d75"}},{"ruleId":"D2","level":"warning","message":{"text":"JumpPointSearch.HasForcedNeighbors (cognitive 19): JumpPointSearch.HasForcedNeighbors has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"343be0f461d82a5df6d501c8fed97d000ed134b11cb6872bc17d54d8249c52c0"}},{"ruleId":"D2","level":"warning","message":{"text":"BattlefieldManager.RemoveAllDeadUnitsFromScene (cognitive 18): BattlefieldManager.RemoveAllDeadUnitsFromScene has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":1690}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3be096d11980b840b8306539bc4c6944f1f253cadb829d26bf597055fa7b9ae"}},{"ruleId":"D2","level":"warning","message":{"text":"BriefingScene.ShowBriefing (cognitive 18): BriefingScene.ShowBriefing has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/BriefingScene.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaa12707d6e4ee211af5c404bc9afbf0ab4155d921044225894cc4860c5f8555"}},{"ruleId":"D2","level":"warning","message":{"text":"DayToNightCutscene._Process (cognitive 18): DayToNightCutscene._Process has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/DayToNightCutscene.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"84aba09209bb54054f4338836782266d6edf7418325826d58009296afb952b0e"}},{"ruleId":"D2","level":"warning","message":{"text":"WeaponEditDialog.ClearFields (cognitive 18): WeaponEditDialog.ClearFields has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.UI.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b4eb50dbf209a8e5d37035fc980ede327ae1cffcbf9473aa50a5fb0a45d5939"}},{"ruleId":"D2","level":"warning","message":{"text":"TitleScene._Process (cognitive 18): TitleScene._Process has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/TitleScene.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4e38477666ab3999e98991f92405cd9f9b0c34965fff06b440d8de7e3118a8f"}},{"ruleId":"D2","level":"warning","message":{"text":"ExperienceCalculationSystem.CheckSkillUnlocks (cognitive 18): ExperienceCalculationSystem.CheckSkillUnlocks has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Experience/ExperienceCalculationSystem.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"97717f614c331940673f9a327fd459f1e82a0c0cd24192d7d76ffcbacc684b6a"}},{"ruleId":"D2","level":"warning","message":{"text":"VictoryConditionSystem.CheckVictoryConditions (cognitive 18): VictoryConditionSystem.CheckVictoryConditions has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/VictoryConditionSystem.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"19cdb36532c2816ac961113f6f53313e8005c32db85a5cb13581577994ec4984"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationBrowser.UpdateUnitDropdownForSkeleton (cognitive 17): AnimationBrowser.UpdateUnitDropdownForSkeleton has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Dropdowns.cs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"6055398c61d3916b508c12edd84eb3386bf7cdd8eeb54715be001275ff40dc3d"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitLogicRenderer.UpdateVisualState (cognitive 17): UnitLogicRenderer.UpdateVisualState has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UnitLogicRenderer.cs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8c63f73029cd80a8752b94f82352fa7e6ab0a0b37caa9a8bc672638b2be5bb"}},{"ruleId":"D2","level":"warning","message":{"text":"SafeResourceLoader.ValidateResource (cognitive 17): SafeResourceLoader.ValidateResource has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Utilities/SafeResourceLoader.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1d1b1a4343ee0c6d2924786007cbdec7bb1708c3389b3a5f2914bdbf8b9d5c7"}},{"ruleId":"D2","level":"warning","message":{"text":"HierarchicalPathfindingGrid.RefinePath (cognitive 17): HierarchicalPathfindingGrid.RefinePath has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/HierarchicalPathfindingGrid.cs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ce258778122cd94c8039e63426d29636734e2a87e2fa7ebe887cbcaeef77824"}},{"ruleId":"D2","level":"warning","message":{"text":"WaypointMovementSystem.CalculateWaypointPaths (cognitive 17): WaypointMovementSystem.CalculateWaypointPaths has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Units/WaypointMovementSystem.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcdd08a1bacf80830d23d3a617d653639bc0f5a2b9a4460bd847bd1ab12c668e"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitSelectButton._on_button_up (cognitive 16): UnitSelectButton._on_button_up has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc12ccfe88dcee394093ecfcdda31cb50fb0d7da64ece1ade654e685ae476c77"}},{"ruleId":"D2","level":"warning","message":{"text":"ResourceManager.DiscoverUnitsOfType (cognitive 16): ResourceManager.DiscoverUnitsOfType has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"782edbc04b3697110e4db8e402ff98e3f68e094d24fdbfb3e11408cabe8c1702"}},{"ruleId":"D2","level":"warning","message":{"text":"ResourceManager.DiscoverAvailableDefences (cognitive 16): ResourceManager.DiscoverAvailableDefences has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe076b62659ac87371ed542c3aee43e721425f725cfa610f8f486e8ae9a3028"}},{"ruleId":"D2","level":"warning","message":{"text":"ResourceManager.DiscoverAvailableScenarios (cognitive 16): ResourceManager.DiscoverAvailableScenarios has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aa4a0a172a42678b216e046977ace075c1179881486a034ddb4b395a76b7a84"}},{"ruleId":"D2","level":"warning","message":{"text":"Model3DPreviewHelper.ClearModels (cognitive 16): Model3DPreviewHelper.ClearModels has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/Utilities/Model3DPreviewHelper.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"695c6ee42e92f9424b797a379bf329f4f0c43c56ac5629edc5f2384d8dfe9912"}},{"ruleId":"D2","level":"warning","message":{"text":"AStarPathfinder.FindNearestWalkableNode (cognitive 16): AStarPathfinder.FindNearestWalkableNode has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/AStarPathfinder.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb988eef0d9ee81fe948e453827b0f452facb1dce6c9b115788c34867c3782d"}},{"ruleId":"D2","level":"warning","message":{"text":"JumpPointSearch.FindNearestWalkableNode (cognitive 16): JumpPointSearch.FindNearestWalkableNode has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f173e37ce39fbc94d50f9539485e71b8beea9e13564811468504fe393bb01ba"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitAI.SelectTargetFromState (cognitive 16): UnitAI.SelectTargetFromState has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2d4de84a64c4d7fee628690e42517edaca855dd387b9398bef0fb46eabe25cb"}},{"ruleId":"D2","level":"warning","message":{"text":"MovementSystem.MoveTowardTargetWithCollision (cognitive 16): MovementSystem.MoveTowardTargetWithCollision has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Units/MovementSystem.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f6319d4443a4ac2f17c73989012b77a8e28c0a2678f9351e2b12ff6893b5b9e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Managers/BattlefieldManager.cs: FileTooLong \u2014 1127 lines, 0 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbeb91454cdd4f413854283cee30bf22d1a615c118b52443d9d476b61f830e7d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Managers/SelectionManager.cs: FileTooLong \u2014 600 lines, 0 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"09ee0d17c74ad4ccb4554542204f33717476f51d78224a85df7e0c825490e86f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: UI/SettingsMenuScene.cs: FileTooLong \u2014 506 lines, 0 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/SettingsMenuScene.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"c47d6082d8f4f2f5696cedb02da28eb0f46b63a311fb45ab1aabaf47fe50fedc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Scripts/UnitLogicRenderer.cs: FileTooLong \u2014 613 lines, 0 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UnitLogicRenderer.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"17650dfcdf7589857503c14a5da207d861eae78abac9b8cd037258c6a3075ea7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BattlefieldManager: TooManyMethods \u2014 1113 lines, 83 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bc14be4db3d9317f2ee96bd58944e0d03f6729b83e20b87d3853e32a2611dc4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SelectionManager: TooManyMethods \u2014 591 lines, 44 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"b742e05ad1d1747b22f7820ec38b48fc81fbd2d345fb8ba2da5db3d1da678dcc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ResourceManager: TooManyMethods \u2014 440 lines, 40 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f9acb6281800902989403193e4cdec64ee45dc2fb7b2a736fa06c4330235959"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AchievementUIController: TooManyMethods \u2014 238 lines, 31 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/AchievementUIController.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"273d39961c14654afafc4e5a43c177683f183975b1d038f2d060b23e99ffdc9c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AnimationBrowser: TooManyMethods \u2014 569 lines, 31 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"46bc67e4a6597b404c5f837dd00fd356b64accc3375f0959284286a96800713b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgressionOverview: TooManyMethods \u2014 227 lines, 33 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ProgressionOverview.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"81f1c64efb49f10176c4aa25ca6c2f37ca9967f663f8d25ba6c0ddc66892bd6e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UnitEditDialog: TooManyMethods \u2014 1005 lines, 75 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Animation.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d5a54c45dea2a9c2b78e51f86e27c8f3628ee132f732a914da6d340979fcf0d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WeaponEditDialog: TooManyMethods \u2014 505 lines, 35 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.Assets.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"888e2d492f95a538433135bec23dfd38fed327d4ed341f4df53866c3e5cdd383"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SettingsMenuScene: TooManyMethods \u2014 498 lines, 36 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/SettingsMenuScene.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4983c733920a61e4630d0c08bed3cac514f914e7f6b77a039454bb8312a5772"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UnitLogicRenderer: TooManyMethods \u2014 604 lines, 53 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UnitLogicRenderer.cs"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe7411ca7f0b829f6dd2baa6b8c80042e249c4405c8297e0f3dc3d70c79181bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): Canine/Canine.TacticalBattleEngine/Navigation/AStarPathfinder.cs:255-288 | Canine/Canine.TacticalBattleEngine/Navigation/JumpPointSearch.cs:413-441"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/AStarPathfinder.cs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"07999fb73e90fcc81dec88b013bd56b85cfb146fb8f539bd9d555f8367d67898"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 3): RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/DefeatScene.cs:129-150 | RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs:160-181 | RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/VictoryScene.cs:128-149"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/DefeatScene.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"778c00d1392039971ed0909e75d2131bf0e9f1c7d077b80666478162526780dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): Canine/Canine.TacticalBattleEngine/Units/MovementSystem.cs:65-86 | Canine/Canine.TacticalBattleEngine/Units/MovementSystem.cs:114-134"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Units/MovementSystem.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccdca9ae7b6973d3901b0b9060af8437343197b0101da72d968a78ff0fa492e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/DefeatScene.cs:178-198 | RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/VictoryScene.cs:177-197"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/DefeatScene.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"594278ac063ccf9c35d4edc8933eec9b1f1341c26896526f773e52e07e9a39de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitsOverview.cs:332-352 | RevivalOfForest/ROF.Game/Scripts/UI/UnitDefinitionEditor.cs:425-445"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitsOverview.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"440722542004f99f7179a81b66b0d125543979941c9ccd3756c0f2054527e52d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.Assets.cs:51-70 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.Assets.cs:30-49"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.Assets.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f1709649e545414cd16f397c65f7fe0feecd820696e8e6085d979704f127aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Managers/GameResourcePreloader.cs:104-117 | RevivalOfForest/ROF.Game/Scripts/Managers/GameResourcePreloader.cs:123-141"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/GameResourcePreloader.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"20ac220a4b0cfac4e1629344021713f4f4ab8b15111274cb0e6dc1157dd22dfd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.cs:88-103 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.cs:145-163"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bde0f0cb9d642f160703b35987b76202e8c982df4b1ba66c17c8b635b02cf74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Assets.cs:79-97 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.DragDrop.cs:14-29"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Assets.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"263cc082997ddde4e2d5224672e65aaf73533630fc3b216e624b349de9f328ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): Canine/Canine.TacticalBattleEngine/Navigation/HierarchicalPathfindingGrid.cs:180-197 | Canine/Canine.TacticalBattleEngine/Navigation/HierarchicalPathfindingGrid.cs:229-246"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/HierarchicalPathfindingGrid.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"90157badc03c865627e751efdda2915b56e7d3c70871d33d98ed5d8b45acaa08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Camera/CameraController.cs:284-300 | RevivalOfForest/ROF.Game/Scripts/Camera/CameraController.cs:328-344"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Camera/CameraController.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2b402e7155bd29c476f74031a3b25acae9c89ba0be1a513b25e1433eb1b33d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.Assets.cs:161-177 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.Assets.cs:154-170"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.Assets.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"2df413d711139d71065b2c596f84e2a9fa9e02f6aff51d26874c826dd62d0e4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): Canine/Canine.TacticalBattleEngine/Simulation/ProjectileSystem.cs:185-200 | Canine/Canine.TacticalBattleEngine/Simulation/ProjectileSystem.cs:221-236"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/ProjectileSystem.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2d8a8ffba9d3c5477215d19ae14ac44df8231be2c812b887a48b1993ac9f0a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Managers/MilestoneManager.cs:220-234 | RevivalOfForest/ROF.Game/Scripts/Managers/SimpleMilestoneManager.cs:253-266"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/MilestoneManager.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"e74dde9cae0a71f63eb8725f7824f7a14ad6e88dd0c3a98dd4493af8a3c52a48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.cs:73-85 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.cs:126-140"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.cs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0301a17e363f470e5a1ea062150efe8f79eeaf3412e86d5683ccf29c5f518f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.cs:143-156 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.cs:225-239"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0301a17e363f470e5a1ea062150efe8f79eeaf3412e86d5683ccf29c5f518f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Animation/HumanoidAnimationController.cs:511-524 | RevivalOfForest/ROF.Game/Scripts/Animation/HumanoidAnimationController.cs:538-551"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/HumanoidAnimationController.cs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"53ba33ae63c052cb762f8bfd5655f10d1a8a7ed517d61499e69e8bba999b951a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs:606-619 | RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs:696-709"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dcc7ed3242cec1500eae24ad6a422b88454fc4a58e6f9328a9fbe3920486e72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs:200-213 | RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs:227-240"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"181aa09809fd5c34b9e56db040c13f8051d227c86ced35edbccf7cf9cbd8bad8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs:19-31 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.DragDrop.cs:21-33 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.DragDrop.cs:50-62"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"dab365a1189e4bcc5b3890e5cde4f596e3725033dc6becf651e9d8d996b51278"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Managers/MilestoneManager.cs:186-198 | RevivalOfForest/ROF.Game/Scripts/Managers/SimpleMilestoneManager.cs:224-236"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/MilestoneManager.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"7180b4736831985e38cf5174f8e5cb636b208f37d94734e3df5686731de72999"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs:44-56 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.DragDrop.cs:75-87"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"9efb91ffe5d3ad62431413525185919cc3d66eda563fdc178effbc6a33b48ca7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Canine/Canine.TacticalBattleEngine/Simulation/SpawnAreaSystem.cs:18-30 | Canine/Canine.TacticalBattleEngine/Units/SpawnAreaUnitFactory.cs:17-29"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/SpawnAreaSystem.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecba79aad32f63cdb541d1d89c376fefa7702611d32bbb197049808d11ffa17f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.cs:166-177 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.cs:187-198"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"574d34c40c6af89ca8dc97d16b2b1c6e55a7f8c965562d9ea8dcc1acee7122c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs:120-131 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.DragDrop.cs:191-202"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"02f80a49dae85d1be4a0943e5b412239485907965cdd156fb3eb93c4fe3995ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs:75-85 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.DragDrop.cs:135-145"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c9e3c4b779cf44d8fc9b2d9affeded97131b1ea8da5829b898881ca5acbdfc2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs:465-475 | Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs:520-526"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"88cab1a6bdb2049ce155289f8b509c1be536f9dcb9c0451031534a887633c0d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs:221-230 | RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs:285-294"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"b36b13674a2659d02d055d1f61d85a979996d89431c8b081d5455292b9ba6e75"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs:83-92 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs:146-155"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cb4247ca31c45b0d4b52473ce650f200cd50475b540271840d2c460c2c03689"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs:468-476 | Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs:506-515"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitAI.cs"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"92da1bb315c9a1f1e9fadcfa7dfcd23e1f6b4ef21e7f560b426bbddb9872073a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceOverview.cs:114-122 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitsOverview.cs:101-109 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponsOverview.cs:93-101"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceOverview.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f9b9970093d99bc8c0986eef64a84b6c3f03f815a22b3349b1e059852d5817e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs:833-841 | RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs:844-852"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"04b52f7b712c9b9989cbcf8bdb95843cfa67b24af07e8b8ef1fdb9d129cdda04"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs:63-71 | RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs:115-123"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"11b58ebb9ab74618d9e9d79ae9f6918db4ee68df6ec2eb10395b275a86b4db12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs:231-238 | Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs:251-258"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Environment/ForestClusterGenerator.cs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"f76cda710476bcdb1fa9809ce00ba45c45f37041adb959fe4f94fd6831c0ef93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): RevivalOfForest/ROF.Game/Scripts/Simulation/SimulationManager.cs:317-323 | RevivalOfForest/ROF.Game/Scripts/Simulation/SimulationManager.cs:358-364"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Simulation/SimulationManager.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab966cc795cc00da9c234a6b3bc4734b0f1e5f6a9f905204064e5e38dddbb05e"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Canine.TacticalBattleEngine: Canine.TacticalBattleEngine: abstractness 0.09, instability 0.00, distance 0.91 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fc7d124f8b547fdf713c3f28ac65a3ca07533558efafc894b26ff224298bd34a"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ResourceManager (LCOM4 8): ResourceManager\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":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"9214a6faa1de6590aa0f9cc1dd1b88cd7b623dd87cfc6554174a363f17a7826d"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: UnitEditDialog (LCOM4 6): UnitEditDialog\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":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cad1505d3e36a3ee0663616b11968ceee85773ae5f275e3bc24c68825708955"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: UnitLogicRenderer (LCOM4 5): UnitLogicRenderer\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":"RevivalOfForest/ROF.Game/Scripts/UnitLogicRenderer.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c582bb458ff4820931979c33eb0c68a402dab5f966fddd80527e473112d70bd"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: BasicCardSystem (LCOM4 5): BasicCardSystem\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":"Canine/Canine.TacticalBattleEngine/Modules/Cards/BasicCardSystem.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2568169236ff7ac69715c813436964cd9e1283d7e817114b64df23b60ff8f10"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TowerfallConfiguration (LCOM4 5): TowerfallConfiguration\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":"TowerfallProtocol/Towerfall.Game/Scripts/Configuration/TowerfallConfiguration.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"f86496b51222c016145324218255edb605d6f3170ea91280954e152cd505b168"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: BattlefieldManager (LCOM4 4): BattlefieldManager\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":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"f58b17a79913d8ab542f51d77f7d510279961853a4a5a8fc294ff91153751388"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TeamBasedFactions (LCOM4 4): TeamBasedFactions\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":"Canine/Canine.TacticalBattleEngine/Modules/Factions/TeamBasedFactions.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f6c31c094d422e4d3fbf3a984b14f9b0038545ff60c1544ef216648baf1976"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GoldManaResourceSystem (LCOM4 4): GoldManaResourceSystem\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":"Canine/Canine.TacticalBattleEngine/Modules/Resources/GoldManaResourceSystem.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"50a621f8a50260bc8b9d646f87e3fc4952cee02e46a2a1761196a30dd024810c"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SimulationRngProvider (LCOM4 4): SimulationRngProvider\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":"Canine/Canine.TacticalBattleEngine/Simulation/SimulationRngProvider.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"d27a4dd930c660d80e4a935e17dbdf4eb7f0a2b625a138866d8ddecb32355d7c"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SinglePlayerLogic (LCOM4 4): SinglePlayerLogic\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":"Canine/Canine.TacticalBattleEngine/Simulation/SinglePlayerLogic.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"da0465825b2f56b9d61b18efa098476568c7da22ae0a33a5169fbf05d1532663"}},{"ruleId":"D7","level":"note","message":{"text":"No checkable ADRs to assess: No architecture decision records were found and the project graph is acyclic, so architectural integrity could not be assessed. Add ADRs (with \u0060enforcement: analyzer|test\u0060) to make the architecture\u0027s rules checkable."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9bfa095522c5f2e53a7c1c0405fd8830d318409a6fb74f4288bab05aaf716e52"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured: The test suite couldn\u0027t be built/run in-image and no coverage report is committed, so line coverage was not measured \u2014 and it is EXCLUDED from the score rather than scored on a LoC-ratio proxy. Commit the Cobertura/OpenCover/lcov report your CI already produces (anywhere in the repo), or make the suite runnable in-image, and real coverage will be measured."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D9","level":"note","message":{"text":"Unit tests: 1966 unit test method(s)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3067d72f6515925eded797ae6deb86f74d157d3bd0b8e2d3a80edaa12ea95d24"}},{"ruleId":"D9","level":"note","message":{"text":"Integration tests: 0 integration test method(s)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b8ce5913e7f0487c282aa29038cefc209006d3bfe4e8418292f03d5a2d9bc5b9"}},{"ruleId":"D9","level":"note","message":{"text":"BDD tests: 0 BDD test method(s)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2335ff4716b8a3faefb3014515ddf9f836e46276f415e6cd56462b6bf7742991"}},{"ruleId":"D9","level":"note","message":{"text":"E2E tests: 0 end-to-end test method(s)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9a982d279a9674eceb951bedcbe3f8d344879045f8bee5f9f6f059139e0ed590"}},{"ruleId":"D10","level":"note","message":{"text":"Skipped (documented): Step3_ProcessCombatCacheFriendly_Should_Find_No_Engagements: Skipped with a documented reason \u2014 a deferral, not lazy debt: ProcessCombatCacheFriendly method was removed during refactoring. This behavior is covered by Step2 (CombatSystem level) and Step5 (full simulation level)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/IsolateRangeBugStepByStepTest.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"78690dcef9082aeae57e4eb2e9c3293ab2797700050261aa43cf1a2e25acc5eb"}},{"ruleId":"D10","level":"note","message":{"text":"Skipped (documented): SpawnUnits_WithNoCompositionRules_CreatesDefaultUnit: Skipped with a documented reason \u2014 a deferral, not lazy debt: Obsolete: Wave-based spawning doesn\u0027t create default units for empty composition rules"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/SpawnAreaUnitFactoryTests.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e2c9d06dd8c87a55b7af5d7542f199bd37012219486730b8e983e96b1200e25"}},{"ruleId":"D10","level":"note","message":{"text":"Skipped (documented): SpawnUnits_WithEmptyCompositionRules_CreatesDefaultUnit: Skipped with a documented reason \u2014 a deferral, not lazy debt: Obsolete: Wave-based spawning doesn\u0027t create default units for empty composition rules"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/SpawnAreaUnitFactoryTests.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"a25bdcf092555b8920fed467d357d43bc928c23c56549a7d9534104a307bffbb"}},{"ruleId":"D10","level":"note","message":{"text":"Skipped (documented): CreateDefaultUnit_GeneratesUnitWithCorrectProperties: Skipped with a documented reason \u2014 a deferral, not lazy debt: Obsolete: CreateDefaultUnit method removed in wave-based spawning refactoring"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/SpawnAreaUnitFactoryTests.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"189b8024a142089834a2e26fef239a46062b7ba9ac74ab5854ab0f1d4d90a228"}},{"ruleId":"D10","level":"note","message":{"text":"Skipped (documented): CreateDefaultUnit_IsDeterministic: Skipped with a documented reason \u2014 a deferral, not lazy debt: Obsolete: CreateDefaultUnit method removed in wave-based spawning refactoring"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/SpawnAreaUnitFactoryTests.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1c1eb3e8dadc5b557cb4346c30f8d45f6b9f1b3bdc555d1182803ea6345ecec"}},{"ruleId":"D10","level":"note","message":{"text":"Skipped (documented): CreateDefaultUnit_WithDifferentTeams_UsesCorrectTeam: Skipped with a documented reason \u2014 a deferral, not lazy debt: Obsolete: CreateDefaultUnit method removed in wave-based spawning refactoring"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/SpawnAreaUnitFactoryTests.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"950911310f27cb8aad481da173df2424873057dcf486ed65587f33e21f0d7fce"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: ReproduceBDDAmmunitionBug_WeaponSystemFiresButNoEventsSet: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/DebugTests/BDDAmmunitionBugTest.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"690efd70bde7e9471783f63bb3be9d65d46347936c5f28becf4e830780b5eb8a"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: Forest_Movement_Speed_Calculation: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/ForestMovesToPOITest.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"abe0e4f8ccbdcadd297db0e04c1aa4f5fdc9d981dd329661b7792d161dc0cf8e"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: PathfindingSystem_ShouldShowCoordinateMapping: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/PathfindingDebuggingTests.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"60e73bd7e6d55c4b539c43e4cee702fae7bd2752c380aa1962e5a23774501970"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: SetWalkable_ShouldHandleInvalidPositions: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/PathfindingGridTests.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b256cc2eb2529108bfc2aeb2ae75011b23f2f53c8fe7969b26a7784a109189"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: AddStaticObstacle_ShouldHandleEdgeCases: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/PathfindingGridTests.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"e23a296247ea874eaebdfe2d62230d401f7701e2830ab3acaaafe7e9c51f28c9"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions: Check_What_MockWeapon_Properties_Are_Used: Test method has no assertions \u2014 it may not test anything."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/TargetSelectionRangeBugTest.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e6032704e535df492f5351d5a7bb5b504f59383f410c66403786881c2901a36"}},{"ruleId":"D11","level":"note","message":{"text":"No tests discovered: Test reliability not scored \u2014 the test tier(s) built and ran but no tests were discovered, so reliability couldn\u0027t be exercised."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6e4c0ab67b9e87c02498c138fb50373fdab655734b894db638fb9443a28b824b"}},{"ruleId":"D14","level":"note","message":{"text":"Licenses scanned: 9 packages scanned; 3 distinct SPDX licenses."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1d29d66daec20840f6831f63c1b66b87c40390635ef3e9f728002964c77e88d4"}},{"ruleId":"D15","level":"warning","message":{"text":"git history depth insufficient: git history depth insufficient \u2014 install a full clone for reliable trend signal."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ab15c4a7c72fcad940ff795282e210fd7f3769431dab6bffd8ce9ee8f7ee13f1"}},{"ruleId":"D16","level":"warning","message":{"text":"single-maintainer \u2014 knowledge-concentration (bus factor) risk: single-maintainer \u2014 knowledge-concentration (bus factor) risk (0 author(s) across 0 commit(s) sampled)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b4b49d961df742f0e507f4cc5c8094fb077ba0391a27fd015d18320865187719"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Trees/Pine tree/The packed scene/PineBranch.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"c08555164f3c116f39efe2025189a4c604f7479966a65f9dece8acc53b7ae604"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Economy integration - show cost from unit.PurchaseCost \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Economy system integration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Show purchase confirmation dialog \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Play purchase sound effect \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Update player currency display \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Show insufficient funds dialog \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be moved to GameLogic layer with deterministic generation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Play unit placement sound \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Show placement confirmation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":749}}}],"partialFingerprints":{"codehealthFindingId/v1":"70928faf86be09b995a5789338362d94085a8d712ce04307f186e56be20265f0"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButton.cs"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ccc5075a66632237da5ee467448bff10c073d1d09cad0cb11740060df3fbe41"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/UI/UnitSelectButtonContainer.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"c083c8762ce846df5629474163d369f5291446fe0bb49a08d769a77922301655"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Get from unit definition when multiple skeletons supported \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationCache.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7021b40beabc126a9026e578bd42e602b00cc5bf6bf16e89177ee1fb86e3db2"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // Weapon format: WPN-XXX (contains hyphen, e.g., WPN-003, WPN-009) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationFileLoader.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f8cbb4feba6618e812ef8a855ed8e5f01ef81cc6be609f323d8958f443a6a4"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // Unit format: MON-XXX or UNIT-XXX (contains hyphen) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationFileLoader.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f8cbb4feba6618e812ef8a855ed8e5f01ef81cc6be609f323d8958f443a6a4"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // Look for pattern \u0022WPN XXX\u0022 at the start \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationLookupSystem.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f4335e98f640c85b126d46b103f8771909839977a0c482e26aa12a0591ce8c4"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // Look for pattern ANM-XXX \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/AnimationLookupSystem.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f4335e98f640c85b126d46b103f8771909839977a0c482e26aa12a0591ce8c4"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // AnimationPlayer takes ownership"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Animation/HumanoidAnimationController.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"659e5ea8f03e07da7f39d314809b5ec0ff15dd901a6498e87f8f8a7ee305363e"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Combat/ProjectileRenderingManager.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ddee16149d32a341d9c747471c0896cda07a2bd176ff17312d02b61b48366fc"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Combat/ProjectileRenderingManager.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ddee16149d32a341d9c747471c0896cda07a2bd176ff17312d02b61b48366fc"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - QuadMesh is shared and managed by Godot"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Environment/GrassFieldManager.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"317de3178022659a0e6c90b633b3c0763e67a490b241ec903e109ba4c85399fc"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Node is added to scene tree and managed by Godot"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Environment/GrassFieldManager.cs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"317de3178022659a0e6c90b633b3c0763e67a490b241ec903e109ba4c85399fc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Load from GameSettings Resource when Resource loading system 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: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Environment/NeutralUnitRenderer.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"3729c1b2011d99740b43d1fc8053e904a65b475a89aae6ca3e982bdb703a3f69"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages RNG lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Environment/NeutralUnitRenderer.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"caa2bea481295e49ec6f8685d988d9d59586c92a4880be0901ba549eece06e79"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Store target priority on UnitLogicRenderer 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: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":2144}}}],"partialFingerprints":{"codehealthFindingId/v1":"510df9cb77fe5128c89ba8ba38e21500d6a5439450b77cc19e7513ae73ed3f3e"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae85e9afa978fcd45e27983abd459e9731e4279e6f58fa2e05f826ff5a1926c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":740}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae85e9afa978fcd45e27983abd459e9731e4279e6f58fa2e05f826ff5a1926c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae85e9afa978fcd45e27983abd459e9731e4279e6f58fa2e05f826ff5a1926c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // WaveDefinitionWrapper ownership transferred to SpawnManager"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae85e9afa978fcd45e27983abd459e9731e4279e6f58fa2e05f826ff5a1926c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":1429}}}],"partialFingerprints":{"codehealthFindingId/v1":"3566e15bfbeae8f20341809d7a52b96a2fcf0114801ee43f0c9a3b5fb9124454"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":1595}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae85e9afa978fcd45e27983abd459e9731e4279e6f58fa2e05f826ff5a1926c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":2566}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae85e9afa978fcd45e27983abd459e9731e4279e6f58fa2e05f826ff5a1926c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/POINode.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5b7714490879c5c8f2f55270e426ddb2135456ee19297fd85deb0285bb8642b"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/ProceduralForestManager.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"a43f642b4edcebe0888fb237c511338db0617d5238fc243b6ab600e190ab3777"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/ProceduralForestManager.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"a43f642b4edcebe0888fb237c511338db0617d5238fc243b6ab600e190ab3777"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/ProceduralForestManager.cs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca1e014fac17eacdc79a63e08dbc24af418d462f606b3a1f5e176d1604080ad7"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/ProceduralForestManager.cs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca1e014fac17eacdc79a63e08dbc24af418d462f606b3a1f5e176d1604080ad7"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":671}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":752}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":1013}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SelectionManager.cs"},"region":{"startLine":1024}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23ff09bc9f657e310ae037f1da92636aa29afd515b4f030a3e55ef8798b2f79"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SpawnAreaNode.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"8492aa90b04fd5747afefd61152629590cf7b9baeabaf6b74070e83e814fbd24"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/SpawnAreaNode.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"8492aa90b04fd5747afefd61152629590cf7b9baeabaf6b74070e83e814fbd24"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // Maps HRO XXX to definitions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"d204142afa770db2bc2332eda5d69160ab09c1def4217a391255b1caa49aba25"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // Maps MST XXX to definitions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/UnitRegistry.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"d204142afa770db2bc2332eda5d69160ab09c1def4217a391255b1caa49aba25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Load DeathEffect 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: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bfaf7892138383f75b0e04a49625d80ddba42f67b2345627c558c07570a19df"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (FormatException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"5375ccb4aaecdd46b1be40f3ef49d74fa63254f64010d3a5ed5860569d9b4dfa"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (FormatException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"5375ccb4aaecdd46b1be40f3ef49d74fa63254f64010d3a5ed5860569d9b4dfa"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (FormatException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"5375ccb4aaecdd46b1be40f3ef49d74fa63254f64010d3a5ed5860569d9b4dfa"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (FormatException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"5375ccb4aaecdd46b1be40f3ef49d74fa63254f64010d3a5ed5860569d9b4dfa"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (FormatException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"5375ccb4aaecdd46b1be40f3ef49d74fa63254f64010d3a5ed5860569d9b4dfa"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (FormatException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"5375ccb4aaecdd46b1be40f3ef49d74fa63254f64010d3a5ed5860569d9b4dfa"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (FormatException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"5375ccb4aaecdd46b1be40f3ef49d74fa63254f64010d3a5ed5860569d9b4dfa"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (FormatException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Resources/ResourceManager.cs"},"region":{"startLine":740}}}],"partialFingerprints":{"codehealthFindingId/v1":"5375ccb4aaecdd46b1be40f3ef49d74fa63254f64010d3a5ed5860569d9b4dfa"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/AchievementUIController.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"644f4ee08bd38a28150a6eca047d2c7e6e4a74ee37a4ba02387047f6dc7045c1"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Label is added to scene tree, which manages disposal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/DefeatScene.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"236d2345dfdf2ea6221abd0904a18c4d924f6231d26c5d1ab16d2e44d092ff06"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Label is added to scene tree, which manages disposal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"97bd0a6edd43f0be445aff93e2bf4e3a2ef9c258c5f9651d9f9f3fa338624728"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Label is added to scene tree, which manages disposal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"97bd0a6edd43f0be445aff93e2bf4e3a2ef9c258c5f9651d9f9f3fa338624728"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Label is added to scene tree, which manages disposal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"97bd0a6edd43f0be445aff93e2bf4e3a2ef9c258c5f9651d9f9f3fa338624728"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Label is added to scene tree, which manages disposal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"97bd0a6edd43f0be445aff93e2bf4e3a2ef9c258c5f9651d9f9f3fa338624728"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Label is added to scene tree, which manages disposal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/NightToDayCutscene.cs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"97bd0a6edd43f0be445aff93e2bf4e3a2ef9c258c5f9651d9f9f3fa338624728"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Label is added to scene tree, which manages disposal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/Cutscenes/VictoryScene.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"967e355af07c3e72365185a1ae11f50dd2bf16a8ff196e26f53b6d22895270ed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement save game functionality \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/MainMenuScene.cs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5d0af4fa2c3a8a96bacc43c17a2c33c9b06d6c8c4b114b8c9e73afc621acb92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement credits screen \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/MainMenuScene.cs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5d0af4fa2c3a8a96bacc43c17a2c33c9b06d6c8c4b114b8c9e73afc621acb92"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS0067 // Event is part of interface contract but not used for this scene"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/MainMenuScene.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a1e5cd418df67f81edc89f7262f347b3ce74b795b46922fd7d9c014c93a9971"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Dropdowns.cs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"e102eb4a94fb627fc049062d06ffc7c2610233bc9c311e425649f95683aaa2c5"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Dropdowns.cs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"e102eb4a94fb627fc049062d06ffc7c2610233bc9c311e425649f95683aaa2c5"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Dropdowns.cs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"e102eb4a94fb627fc049062d06ffc7c2610233bc9c311e425649f95683aaa2c5"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea9ddee40228de15dc756c2e320133fbc5d089ac410bb0549de1094e3fe163c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea9ddee40228de15dc756c2e320133fbc5d089ac410bb0549de1094e3fe163c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea9ddee40228de15dc756c2e320133fbc5d089ac410bb0549de1094e3fe163c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea9ddee40228de15dc756c2e320133fbc5d089ac410bb0549de1094e3fe163c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea9ddee40228de15dc756c2e320133fbc5d089ac410bb0549de1094e3fe163c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Model.cs"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"afafb5a0a432f0e7b0827c2da4fe75d99836b30ea621d6c2010093696121b819"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/AnimationBrowser/AnimationBrowser.Preview.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a9bf8f8c48c6a1aae49f0fa58360e76df18837223fdfe38eeb0f19882941b48"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d713f326a15764c159f57b3848fa61b9c7bbd3b2c8c84492ce468d090f08020"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceEditDialog/DefenceEditDialog.DragDrop.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d713f326a15764c159f57b3848fa61b9c7bbd3b2c8c84492ce468d090f08020"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add Name field to ExperienceConfiguration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ExperienceEditDialog.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"be55876e2ead09099b3919d58c2e62346c0e6147f611c7d2e836309d86c81d77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add Name field to StatBonusConfiguration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ExperienceEditDialog.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"be55876e2ead09099b3919d58c2e62346c0e6147f611c7d2e836309d86c81d77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Determine which bonus type is being edited \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ExperienceEditDialog.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"be55876e2ead09099b3919d58c2e62346c0e6147f611c7d2e836309d86c81d77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be per-level bonus \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ExperienceEditDialog.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"be55876e2ead09099b3919d58c2e62346c0e6147f611c7d2e836309d86c81d77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: StatBonusConfiguration doesn\u0027t have a BonusType field - it has different bonus types as separate fields \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ExperienceEditDialog.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"be55876e2ead09099b3919d58c2e62346c0e6147f611c7d2e836309d86c81d77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create new ExperienceConfiguration with updated values \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ExperienceEditDialog.cs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"be55876e2ead09099b3919d58c2e62346c0e6147f611c7d2e836309d86c81d77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create new StatBonusConfiguration with updated values \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ExperienceEditDialog.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"be55876e2ead09099b3919d58c2e62346c0e6147f611c7d2e836309d86c81d77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement game settings loading when ResourceManager 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: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement settings panel population based on GameSettings structure \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for simulation settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for combat settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for victory settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for navigation settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for AI settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for morale settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for stance settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for animation settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for audio settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for economic settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Create controls for medical settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement saving all changes to GameSettings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement resetting all settings to default values \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"713b6fa2f770a9a569c395590f3209a7b23b1148beaf9b35955832b3f20ae491"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Label is managed by parent GridContainer"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/GameSettingsOverview.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3f5712255f75255d503ec64792d53d3e7ac18230e90fda2bfdf721565aa185c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Get actual cache statistics from ResourceManager \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ModdingTool.cs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1f982ea5415b701dfee64cf47cf2710996138a81f4c553d7843a378e3c9e21a"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages lifecycle when saved as resource"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ProjectilesOverview.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"64b86894622ea335e59bf2a4dbda972cc7b6b222561d36fcbaa0e576e3681d59"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages lifecycle when added to scene tree"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/ProjectilesOverview.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"64b86894622ea335e59bf2a4dbda972cc7b6b222561d36fcbaa0e576e3681d59"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/TreeSortingHelper.cs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"6581b222c523a8e85cc3ce346a5c872ea1fadbada28107db6aca152bab8451d9"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Animation.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"79e3140b8682cd8c54d91fa51a62ab7f5aac99043d9e2950e5e34cb411f974cc"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.DragDrop.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb5b1af01eec966b790a58ca680f6f1f707fb729db695b47986d8731f486a962"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.DragDrop.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb5b1af01eec966b790a58ca680f6f1f707fb729db695b47986d8731f486a962"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.DragDrop.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb5b1af01eec966b790a58ca680f6f1f707fb729db695b47986d8731f486a962"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.DragDrop.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb5b1af01eec966b790a58ca680f6f1f707fb729db695b47986d8731f486a962"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Scene.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"75afa5ffd1939366822c7e35c5dc84181e3a45ae0fca2755401037e9fb14b70c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.Scene.cs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"75afa5ffd1939366822c7e35c5dc84181e3a45ae0fca2755401037e9fb14b70c"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.UI.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"7246760111ca2dad08639b43a1904b3a7cab66b5983222d2b34aadd85542d4e8"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.UI.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"7246760111ca2dad08639b43a1904b3a7cab66b5983222d2b34aadd85542d4e8"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitEditDialog/UnitEditDialog.UI.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"7246760111ca2dad08639b43a1904b3a7cab66b5983222d2b34aadd85542d4e8"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/Utilities/AudioStreamLoader.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8477adbded33a828f6aa911ca891009987ddc344770a463dfd42fdffc059ccf"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/Utilities/GltfAnimationExtractor.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"544c99d3ec0dc0831c802d62c5aae6b8ede0404921a9b846750c4bab6d0a112f"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: System.Diagnostics.CodeAnalysis.SuppressMessage"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WaveEditDialog.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff0fa087069876fba259c8685d54224423fb097842678c162a119c5e596d0b55"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.DragDrop.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a44813ea77494e2c6970c237b30360060d4d6cf2bf66ff925cc2bf07101d041"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.DragDrop.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a44813ea77494e2c6970c237b30360060d4d6cf2bf66ff925cc2bf07101d041"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponEditDialog/WeaponEditDialog.DragDrop.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a44813ea77494e2c6970c237b30360060d4d6cf2bf66ff925cc2bf07101d041"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS0067 // Event is part of interface contract but not used for this scene"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/SettingsMenuScene.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"db8ab6cb019c5a04e323840350184bcb7fb221dc8435824240b9431fdf982fd6"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0067"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/SupportScene.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8a35fb91dbb05707ffd8b6d7b59d7f77061e5165bd0311604937ae8b4b262ca"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS0067 // Event is part of interface contract but not used for this scene"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/TitleScene.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"35bb68006037b23913c6c45723a09cdce611a6ec7a6a3337400213fc037c94fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement deletion functionality in P1.5 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/UnitDefinitionEditor.cs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e545abeeab84a4200a43d403687db93de63aa04f944523eb87d42950810ebd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Animation controller should jump to last frame of death animation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UnitLogicRenderer.cs"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"0787ecf7cffaa38768a7c2319ee3a9297b120a3fbfc9c85b2e4813c7eff24518"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UnitLogicRenderer.cs"},"region":{"startLine":1187}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b4a91757733aa6986741bc9eb3ba981bf60f6cb76d95d36ab7b91038fabcc16"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Godot manages node lifecycle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UnitLogicRenderer.cs"},"region":{"startLine":1297}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b4a91757733aa6986741bc9eb3ba981bf60f6cb76d95d36ab7b91038fabcc16"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This test tested private implementation (CombatSystem.FindTargetsInRange). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/DirectCombatSystemRangeTest.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c7adbf7ff69ac7a58739a5a139e23663a1a2825747252facad2a9bc02733394"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CS0618 // Type or member is obsolete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/UnitStateFactoryTests.cs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eec3842e46537ae26fa40309d8b0080adafb3cb0dcdcbec78cf9a4be8dcff36"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] CreateTreeUnitState_CreatesNeutralTreeWithFallbackId"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/UnitStateFactoryTests.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b7139b15df11c4c292d5e19dddcb54644adfaa4ab53c9ba97816930685d061"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // This marks the end of the ID section (SKL-XXX, WPN-XXX, UNIT-XXX, MON-XXX) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationFilenameParser.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1365ba14a61f1335f999a6b5ff985380b610ddaccb50d3eece4f8cd2acb6332"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Calculate actual movement direction from velocity or facing \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Animation/AnimationMappings.cs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d9d4ac8d3f0fc0211f660a3b64db2e7adc62dd5b1b3174055d2d2b8f14978bb"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1402 // File may only contain a single type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Commands/UnitOrderCommand.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b27062c9b444377ec4e38b10747e02d9e86773d3211373d8e0243a1cb0e5cbd"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1649 // File name should match first type name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Commands/UnitOrderCommand.cs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b27062c9b444377ec4e38b10747e02d9e86773d3211373d8e0243a1cb0e5cbd"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (OperationCanceledException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Events/CombatEventProcessor.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"47cd31db61a2495c62a73600097af8f277e0278cfb120c3232491a29fd01d8c0"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: empty catch (OperationCanceledException) \u2014 narrow/filtered/commented, treated as intentional"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Events/CombatEventProcessor.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"47cd31db61a2495c62a73600097af8f277e0278cfb120c3232491a29fd01d8c0"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1402 // File may only contain a single type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Settings/GameSettings.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bebde63ccc2c75a8df380988d83c9f4a235f7d248f82dbb5226523760fe3b94e"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1649 // File name should match first type name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Settings/GameSettings.cs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"bebde63ccc2c75a8df380988d83c9f4a235f7d248f82dbb5226523760fe3b94e"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1402 // File may only contain a single type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/DeterministicSpawning.cs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b2522c5b7b2e034fd5ee2a6976fa31a17c50763d3a4675ea7075fee4987827"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1649 // File name should match first type name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/DeterministicSpawning.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b2522c5b7b2e034fd5ee2a6976fa31a17c50763d3a4675ea7075fee4987827"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1402 // File may only contain a single type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/MoraleSystem.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"60cd9bfc10d6a3ff296ba4b378e4bf5fbdae9e97b14ee28827477c79c5a8f429"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1649 // File name should match first type name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/MoraleSystem.cs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"60cd9bfc10d6a3ff296ba4b378e4bf5fbdae9e97b14ee28827477c79c5a8f429"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1402 // File may only contain a single type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/ProjectileSystem.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fedb6d5dff2d7c92be3eef775f8f12e57003e4ba35ae7c3827d088e94c186c52"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1649 // File name should match first type name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/ProjectileSystem.cs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"fedb6d5dff2d7c92be3eef775f8f12e57003e4ba35ae7c3827d088e94c186c52"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: change to: ImmutableArray as we are storing snapshots. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/SimulationState.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"da3b60969accbe7db962a50a3d5f5335ac578dae1aaf226e23b08d6a10701583"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1402 // File may only contain a single type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/StanceSystem.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a23b369b8aadc7016a807f6b57f33d78689a7f6d40428f2c0ea09f0d229a56"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1649 // File name should match first type name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/StanceSystem.cs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a23b369b8aadc7016a807f6b57f33d78689a7f6d40428f2c0ea09f0d229a56"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: AI configuration should be passed as parameter instead of hardcoded \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: PROJ-123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/TacticalSimulator.cs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a70ec9a7858fb0425ef75c3649396d5ce92d17db8c859af87305aee5f31b9e"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1402 // File may only contain a single type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/TacticalSimulator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00c9b4551d8cfd910c9e3301aec80f183b10e2c47c000419dfd9de283f968809"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1649 // File name should match first type name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/TacticalSimulator.cs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"00c9b4551d8cfd910c9e3301aec80f183b10e2c47c000419dfd9de283f968809"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1402 // File may only contain a single type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitStateData.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ee6976b1fb53b1743bf830349001a52715cc1024d1caef2f2f45558fb290be"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable SA1649 // File name should match first type name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Simulation/UnitStateData.cs"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ee6976b1fb53b1743bf830349001a52715cc1024d1caef2f2f45558fb290be"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] CreateTreeUnitState"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Units/UnitStateFactory.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"0565c4a37d31ef20810a7072b4f899e7a8b2ec50ab895d54f2b3562c8af5f599"}},{"ruleId":"D17","level":"note","message":{"text":"Justified suppression: #pragma warning disable CA2000 // Dispose objects before losing scope - Godot manages UI nodes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"TowerfallProtocol/Towerfall.Game/Scripts/UI/CardUI.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"224b2a083a42ce13134bcabf349c9e304ce95616f32fb1e143547defee9b4300"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CS8785"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/Canine.TacticalBattleEngine.Tests.csproj"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d79ea704676a150831982447f817eaf2cbd3aa15a46ea3b2919cf16c0715f9d"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA2000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/Canine.TacticalBattleEngine.Tests.csproj"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d79ea704676a150831982447f817eaf2cbd3aa15a46ea3b2919cf16c0715f9d"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: UpdateTeamColor: Method UpdateTeamColor \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Combat/ProjectileRenderer.cs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaf068ef362c9a35c73c18762b2bf7bc863544ba5551aeb027d397a878434791"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DrawMovementPreview: Method DrawMovementPreview \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/BattlefieldManager.cs"},"region":{"startLine":988}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d13bd1272efd21407a8bbf02dae8046d041153d7ee305498e61f7f52bb5cc5"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: RegisterTreeAsNeutralUnit: Method RegisterTreeAsNeutralUnit \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/Managers/ProceduralForestManager.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"063cc37d063c93dbc71a814282902369a1226d261207fa35228b84d154c5851c"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: PopulateTree: Method PopulateTree \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/DefenceOverview.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ba48e2dc325bab77d157ac3d9e316149cade12f5dba42cc572c25627c35da20"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: PopulateTree: Method PopulateTree \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/UnitsOverview.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"69b457d24874808debf29483a45ca0170729412a74f797fb5426872bd9d0f74c"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: PopulateTree: Method PopulateTree \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Scripts/UI/ModdingTools/WeaponsOverview.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"42a00a3402e018ba5f75f273fecb978aa310700e549296c091b32b2316ff9f36"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: ConvertUnitStatesToUnitStates: Method ConvertUnitStatesToUnitStates \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/BehaviorTests/UnitMovementBehaviorTests.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"089cfb08c9b2a32bb447025f01d9fcdc06cdae147d873367f46c88ae9fc7f080"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: UpdateUnitStatesFromUnitStates: Method UpdateUnitStatesFromUnitStates \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/BehaviorTests/UnitMovementBehaviorTests.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"c117bc94b6f873b136501608170ae908d0f433bd5cd5fde6adbfa74fa0ca7dd4"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CreateComplexScenario: Method CreateComplexScenario \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/Integration/EndToEndSimulationTests.cs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"83cd5d78e16e888aace52ed658339c15cd7ae2121ab8585ba54dd19e1a384d12"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CreateComplexCommands: Method CreateComplexCommands \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/Integration/EndToEndSimulationTests.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"42bda702028bc1ef1e308f3a740b990de9aa6e2e8377655bdd69811e91434cc2"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: InvokePrivateMethod: Method InvokePrivateMethod \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/UnitTests/RotationSystemTests.cs"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ee1e22d9ea068ade97d5ca55cd4cb5f2924294ee75fa5d6c273a6c8ab458e38"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: ApplySplashDamageToUnit: Method ApplySplashDamageToUnit \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Combat/SplashDamageSystem.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"36f424df4f781d97641d3fd61945b6a768b904a019d48e25656d1c75b86d115f"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: DetermineHitResult: Method DetermineHitResult \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Combat/WeaponSystem.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"d34c3e9da50464de0cfddb20b4bf2bc3fb7c2d114ea7298290a331ca7edeed3f"}},{"ruleId":"D17","level":"warning","message":{"text":"Dead code: CalculateTangentialAvoidance: Method CalculateTangentialAvoidance \u2014 no references found in solution."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Navigation/CollisionAvoidanceSystem.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee8b7fc6f91eddc5d3f8e100a16005046de56400793cd4d5b871a9a65405fb7d"}},{"ruleId":"D18","level":"warning","message":{"text":"Build failed: The target solution did not build cleanly (errors: 35), which caps Solution Shape at 3/10 \u2014 the most basic shape signal is that it compiles. First errors: CS0117: \u0027UnitDefinitionData\u0027 does not contain a definition for \u0027UnitType\u0027; CS1503: Argument 2: cannot convert from \u0027string\u0027 to \u0027Canine.TacticalBattleEngine.Core.UnitType\u0027; CS0029: Cannot implicitly convert type \u0027Canine.TacticalBattleEngine.Core.UnitType\u0027 to \u0027string\u0027."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"24ff41d1fc14d3a19b969001a7e9697d13d34fc0453d84646f56c980eff97f2b"}},{"ruleId":"D18","level":"warning","message":{"text":"Monorepo: only 1 of 2 solutions was scored: This repository contains 2 .NET solutions, but a scan analyzes ONE. Every score, lens, and finding here reflects only \u0060CanineStudio.sln\u0060 \u2014 the other 1 (\u0060ROF.sln\u0060) were not analyzed and are not represented in the headline. To cover them, scan each solution as its own target and group them in a Solution or Product for a portfolio roll-up. If a secondary solution is an archived or vendored tree, declare it \u2014 \u0060.gitattributes\u0060 (\u0060path/** linguist-vendored\u0060) or \u0060.editorconfig\u0060 (\u0060[path/**] generated_code = true\u0060) \u2014 to exclude it from discovery the same way generated code is."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a714c749a7ed0270f25ef54f0d77846abefb01ce5214d0fe8c64e4324d302faf"}},{"ruleId":"D18","level":"note","message":{"text":"ROF (Production): 129 .cs files, 36863 LoC (26031 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/ROF.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c7d68b1d35a90e4abeef2fad2a3bdafbfd388da5a3f9849a60a2b5d82367835"}},{"ruleId":"D18","level":"note","message":{"text":"Canine.TacticalBattleEngine.Tests (Test): 265 .cs files, 72067 LoC (55580 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Tests/Canine.TacticalBattleEngine.Tests.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"71c6abf3ad3dc54d05912e20212ed241296d3c88badba68113505b179f565296"}},{"ruleId":"D18","level":"note","message":{"text":"Canine.TacticalBattleEngine (Production): 137 .cs files, 22460 LoC (13970 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine/Canine.TacticalBattleEngine.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"350fb20235aca0d5d01635277f6b3a4d3a8c64036ded352bb20fe1d119580144"}},{"ruleId":"D18","level":"note","message":{"text":"Canine.TacticalBattleEngine.Benchmarks (Production): 29 .cs files, 4924 LoC (3785 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Canine/Canine.TacticalBattleEngine.Benchmarks/Canine.TacticalBattleEngine.Benchmarks.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cb0b6140044494994909c635f26380a08f857f8453b8ffc63d87ab3afd7174b"}},{"ruleId":"D18","level":"note","message":{"text":"Towerfall.Game (Production): 6 .cs files, 807 LoC (624 significant)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"TowerfallProtocol/Towerfall.Game/Towerfall.Game.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb72ddcde5b18f326912097ef2565513eb378ad4cf819533c3989a85d6215a7"}},{"ruleId":"D19","level":"warning","message":{"text":"LLM evaluation failed: documentation evaluation failed: Name or service not known (canine-dgx1:80)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"84619704bc3bcb3f3b19b21245ed20bfef89f3b900efe4ba59acd9f2f01c53cb"}},{"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":"D21","level":"warning","message":{"text":"LLM evaluation failed: naming-consistency evaluation failed: Name or service not known (canine-dgx1:80)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f1ae115dd06b671c0a43940af011b21b5b96f5c4933cd4b95a9fc33856f94e45"}},{"ruleId":"D22","level":"note","message":{"text":"No exposed public API: No intentionally-exposed types (IsPackable or .Contracts) to evaluate."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2712d35e1d1ba8e91a90125d29842b77d4ca65e0eeaa52476c739f7165820a6f"}},{"ruleId":"D23","level":"error","message":{"text":"Dimension evaluation failed: Dimension threw: Name or service not known (canine-dgx1:80)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"23d3af50e7d3bd6d11e18aeaaed67b4c5bd5bf1a98b2e37c9096f9e9b60ad470"}},{"ruleId":"D24","level":"warning","message":{"text":"LLM evaluation failed: comment-value evaluation failed: Name or service not known (canine-dgx1:80)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0c868e6efee1b0dce8351bfc608279bd0d6c4f03b8a164d980102e4103c28c0d"}},{"ruleId":"D25","level":"note","message":{"text":"no ADRs to check: No ADRs found, so conformance can\u0027t be assessed."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5f96235c58be08aaae505ba823e9095f206fbc6a447f646e346ee9bd81a5f481"}},{"ruleId":"D26","level":"error","message":{"text":"Dimension evaluation failed: Dimension threw: Name or service not known (canine-dgx1:80)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fca9cb083949c29969d3435df65dbc359827f107d039c64b81132f075a6df164"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Concrete fencing 3.tscn"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5e7fe5f54fcde52fbadd9673e5715aaefc68694128e000997acee47e6a0b10"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Concrete fencing 3.tscn"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5e7fe5f54fcde52fbadd9673e5715aaefc68694128e000997acee47e6a0b10"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Concrete fencing 5.tscn"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6d0fa908a0151d86dbabae9f9cb759692e544d14309a8579ad1d80b0c908039"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Concrete fencing 5.tscn"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6d0fa908a0151d86dbabae9f9cb759692e544d14309a8579ad1d80b0c908039"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Concrete fencing 2.tscn"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"d841f354f1eb4745592a2070b2aff764279ee3dcdc25dc6a177dd79b046a7c13"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Concrete fencing 2.tscn"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"d841f354f1eb4745592a2070b2aff764279ee3dcdc25dc6a177dd79b046a7c13"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone small 3.tscn"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"77abdf1a12536a053fa3b1ab5a5e1be0e06c42c13ddf949d7486147be76220b4"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone small 3.tscn"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"77abdf1a12536a053fa3b1ab5a5e1be0e06c42c13ddf949d7486147be76220b4"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone small 3.tscn"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"77abdf1a12536a053fa3b1ab5a5e1be0e06c42c13ddf949d7486147be76220b4"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone small 3.tscn"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"77abdf1a12536a053fa3b1ab5a5e1be0e06c42c13ddf949d7486147be76220b4"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone small 1.tscn"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b9100affc0ea84f9b7d31ec143eb5a4fbc2d24835b3c0d59069061207b4d205"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone small 1.tscn"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b9100affc0ea84f9b7d31ec143eb5a4fbc2d24835b3c0d59069061207b4d205"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 3.tscn"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"817e276ff9f7c6ab3830d1905785577de40fd63c82b8a7e91a859b015d7c5a3c"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 3.tscn"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"817e276ff9f7c6ab3830d1905785577de40fd63c82b8a7e91a859b015d7c5a3c"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Bush 2.tscn"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"04c98e63bf4f5f50f72a4decb7f3297e4a10f36c972fb4b7a001976e1be63042"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 2.tscn"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"1874800007291ec6573befe98bc08d571f968c23db2d8a1fc05bb7b2fc854343"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 2.tscn"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"1874800007291ec6573befe98bc08d571f968c23db2d8a1fc05bb7b2fc854343"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 2.tscn"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"1874800007291ec6573befe98bc08d571f968c23db2d8a1fc05bb7b2fc854343"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 2.tscn"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"1874800007291ec6573befe98bc08d571f968c23db2d8a1fc05bb7b2fc854343"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 1.tscn"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"da130d12e66afd05174e583fd5c95058a6bb2c6a07ddc1069d5d6bf94eda230b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 1.tscn"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"da130d12e66afd05174e583fd5c95058a6bb2c6a07ddc1069d5d6bf94eda230b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Stone large 1.tscn"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"da130d12e66afd05174e583fd5c95058a6bb2c6a07ddc1069d5d6bf94eda230b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/House 2 floors private option 4.tscn"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"14fcebc4c86fbd49415b2e085e770aee96798c8b22ad05fe2a4ea07063c34388"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Water tower 1.tscn"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"0166cea2ffc8a2409fd9ec6ade0c796e27a1f70b44c176ae07f5ded64952b8a9"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Water tower 1.tscn"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"0166cea2ffc8a2409fd9ec6ade0c796e27a1f70b44c176ae07f5ded64952b8a9"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Water tower 1.tscn"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"0166cea2ffc8a2409fd9ec6ade0c796e27a1f70b44c176ae07f5ded64952b8a9"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/House 2 floors private option 2.tscn"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"69f10ac42816a94eb4289fd8e86412a0e5eda1c2f84b04fbd54e2e1432e82f36"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Bush 3.tscn"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"d581b10fe1dc81275b1a309b07dc21c7f9818ceafe3e0fc28fc7f35a5411e824"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Bush 3.tscn"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"d581b10fe1dc81275b1a309b07dc21c7f9818ceafe3e0fc28fc7f35a5411e824"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Bush 3.tscn"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"d581b10fe1dc81275b1a309b07dc21c7f9818ceafe3e0fc28fc7f35a5411e824"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Double street lamp.tscn"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"725b36ff1318f5b40ac43ad4eecaa2b40deb91bb50d7c81e83cb17c979558b00"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Double street lamp.tscn"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"725b36ff1318f5b40ac43ad4eecaa2b40deb91bb50d7c81e83cb17c979558b00"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/Double street lamp.tscn"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"725b36ff1318f5b40ac43ad4eecaa2b40deb91bb50d7c81e83cb17c979558b00"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Paved roads/road,_turn_right.tscn"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"7729cdaee64cdb73ba5c2ed68a780942323eb2b696898e15afe3282a35ba79d7"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Paved roads/road,_turn_left.tscn"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d24941b49474f05c6d1eff48a38361b7cac799921699573bd65f65135270e42"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Paved roads/road,_turn_left.tscn"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d24941b49474f05c6d1eff48a38361b7cac799921699573bd65f65135270e42"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Civilian houses/House 3 floors, general version 3.tscn"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"c927d87a71fdfbd179f44f317e9cb11d49857716b85f7288150eeb53faff7e9e"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: facebook-page-access-token: matched rule \u0027facebook-page-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":3871}}}],"partialFingerprints":{"codehealthFindingId/v1":"33027855c03758d8621fcf396786825da8a26170af0c094142d94a1c096bfe40"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: facebook-page-access-token: matched rule \u0027facebook-page-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4059}}}],"partialFingerprints":{"codehealthFindingId/v1":"33027855c03758d8621fcf396786825da8a26170af0c094142d94a1c096bfe40"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: facebook-page-access-token: matched rule \u0027facebook-page-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":5705}}}],"partialFingerprints":{"codehealthFindingId/v1":"33027855c03758d8621fcf396786825da8a26170af0c094142d94a1c096bfe40"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":3823}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4019}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4032}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4118}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4118}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4167}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4178}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4238}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4257}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"error","message":{"text":"Secret: aws-access-token: matched rule \u0027aws-access-token\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"RevivalOfForest/ROF.Game/Assets/Buildings/Corporation Building 1.61/The packed scene/Corporation building.tscn"},"region":{"startLine":4270}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a7bc1b566c4abbcd8cfc91d03fdc395f4ca53536af2c5f48e8fe8af04f2c7b"}},{"ruleId":"D28","level":"note","message":{"text":"Rotate the exposed credentials \u2014 git history can\u0027t be un-committed: These secrets are in git HISTORY: deleting the file does not remove them (the commit persists on every clone, fork and backup). The remediation is to ROTATE each exposed credential and treat it as compromised \u2014 not to delete the file. Rewriting history is disruptive and unreliable across existing forks."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: System.Net.Http 4.3.0: System.Net.Http 4.3.0 (transitive) has a High advisory; affects 2 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7cf85abffe732f2645ef95a624d6badc26f0263616284d6a4cc46ca8e983031d"}},{"ruleId":"D30","level":"error","message":{"text":"High CVE: System.Text.RegularExpressions 4.3.0: System.Text.RegularExpressions 4.3.0 (transitive) has a High advisory; affects 2 projects \u2014 one upgrade fixes all. https://github.com/advisories/[GHSA redacted]"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b96b7173c4377d5bea4d6fd7b52323631c631c44172b743bec6f266c10a4e538"}},{"ruleId":"D31","level":"note","message":{"text":"Not applicable: No Infrastructure-as-Code or container manifests found (Dockerfile, Terraform, Kubernetes/Helm, CloudFormation); nothing to scan."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2e57fca60a46af1c36cbca9e46b2039488d0488a6eab73ad6bc057cd95ef2432"}},{"ruleId":"D32","level":"note","message":{"text":"Not applicable: No PII/GDPR-handling patterns detected (p/gdpr ruleset) \u2014 no data-compliance surface to assess."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"df51e593e9b0b9805626d04fe36a3d12c504b5d7d5da30dc59b5b0f134b5753b"}},{"ruleId":"D33","level":"note","message":{"text":"Not applicable: No JS/npm manifest or lockfile found outside bin/obj (package.json, package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb); no JS dependencies to scan."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f46a134eeb447d8c90511e3106af3dac20b26868f5143d77eadbb96ed8f220c6"}},{"ruleId":"D34","level":"note","message":{"text":"early-stage repository \u2014 too little history to judge knowledge freshness: early-stage repository \u2014 too little history to judge knowledge freshness (0 commit(s) sampled)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"58b42e8ad1f5e125e8a2d365554e56d01e64a556b28e0c9985ff169722b7c54a"}},{"ruleId":"D36","level":"note","message":{"text":"Not applicable: No CI/build pipeline found (.github/workflows, .gitlab-ci.yml, azure-pipelines.yml, Jenkinsfile, .circleci); there is no build to attest provenance for."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"383f97e2d2c3d8c6d4adffc68d228db0928a3a8f5c3df1214c0f646687d2dbe9"}},{"ruleId":"D37","level":"note","message":{"text":"Not applicable: No vulnerability-disclosure policy file found (SECURITY.md, .github/SECURITY.md, docs/SECURITY.md, .well-known/security.txt). A coordinated-disclosure policy may live off-repo, so this is not evidenced rather than failed."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e748a9b8b3d154964dfb621b8675d34a302dda266d0196c5d83eb8ba4071d61c"}},{"ruleId":"D38","level":"note","message":{"text":"Not applicable: No JS/npm lockfile found outside bin/obj (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb); nothing for OSV to scan."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6ff7301b610918095afd57ac1c89dabddab1d8fdb34c0f0d687159a5a0df0b8e"}}],"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":0,"secretScannerRunsExcluded":0}}}]}