{"$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":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D33","name":"JS/npm Dependency Vulnerabilities","shortDescription":{"text":"JS/npm Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D33","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"summarizeResolution (cyclomatic 53): summarizeResolution has cyclomatic complexity 53 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/ink-cli/summarize.js"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ff06b6a3a7cf31f6be9a73152997449b3e7991d33a690587fc68170ac150a34"}},{"ruleId":"D1","level":"warning","message":{"text":"applyBattleRenderPatch (cyclomatic 49): applyBattleRenderPatch has cyclomatic complexity 49 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/state/battleState.js"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"43f25513dc086666548ac2355b1bc6de7e6025ee90caa1dd61666d35e55e8228"}},{"ruleId":"D1","level":"warning","message":{"text":"buildRenderStepsFromTimeline (cyclomatic 28): buildRenderStepsFromTimeline has cyclomatic complexity 28 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/shared/renderStepInterpreter.js"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc49774a9ead76e74524520a0f2de9793c868b0a564d703b67e16630f52b30cc"}},{"ruleId":"D1","level":"warning","message":{"text":"applyContentOverlay (cyclomatic 28): applyContentOverlay has cyclomatic complexity 28 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/shared/content/index.js"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5b5b996450f5cb232463303f9e837d814d66cda52e38a542797d54b941ae391"}},{"ruleId":"D1","level":"warning","message":{"text":"afterFire (cyclomatic 23): afterFire has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/bindings/lifecycle.js"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cebbe8338b65ac9c24d2b5b8844ccc9b757d2a72ae352be1e505cbf5101f6c6"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 22): (anonymous) has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/shared/viewStateBuilder.js"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"df385585270c66237512510d1dd287325d1fc18ae429eca6e8a433fad7d1a6dc"}},{"ruleId":"D1","level":"warning","message":{"text":"buildBattleStore (cyclomatic 22): buildBattleStore has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/session/builder.js"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"c22232a00040180a38711fffca32632f839798bba42cf0714dfd268d4fbaa5ab"}},{"ruleId":"D1","level":"warning","message":{"text":"playClip (cyclomatic 20): playClip has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/animation/battleAnimator.js"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8a1fde0727a43fbb0cf9eee97ee8fd7bbd6692e3a3005e7ada7fd372ffe825b"}},{"ruleId":"D1","level":"warning","message":{"text":"buildRunProgressView (cyclomatic 19): buildRunProgressView has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/shared/viewStateBuilder.js"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"70fe5d79f8f8e207f5ccb5273586418d56e998d82bc7bf191140a68ee0749025"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 19): (anonymous) has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/shared/viewStateBuilder.js"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"aba0fd6685854fa9ed1a7861f89e1702e8685ef8e93f21bbf05abf314f1d15d2"}},{"ruleId":"D1","level":"warning","message":{"text":"buildDisplayMapsFromContent (cyclomatic 19): buildDisplayMapsFromContent has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/shared/content/catalog.js"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a7041b9d5504d72dc675b060cd7fd055248cad6512903165d59f64d95d6ca63"}},{"ruleId":"D1","level":"warning","message":{"text":"runJsonMode (cyclomatic 18): runJsonMode has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/ink-cli/cli.js"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b2585b65215ad77e534431381a65d108612c004ae573a61aef2fad7dc353efd"}},{"ruleId":"D1","level":"warning","message":{"text":"buildMessageSpec (cyclomatic 18): buildMessageSpec has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/shared/flow/FlowScreen.js"},"region":{"startLine":1149}}}],"partialFingerprints":{"codehealthFindingId/v1":"17c5c1afe6d20f181a6609191139724580e774c1b786a9c217785ecb95c2f320"}},{"ruleId":"D1","level":"warning","message":{"text":"syncFlowScreen (cyclomatic 18): syncFlowScreen has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/shared/flow/FlowScreen.js"},"region":{"startLine":1398}}}],"partialFingerprints":{"codehealthFindingId/v1":"a08088b2170b03192c8345884759c212353e758bb0214c7826f34cae92aef0b9"}},{"ruleId":"D1","level":"warning","message":{"text":"play (cyclomatic 17): play has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/session/index.js"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87b88ee5833f3d4d1e0a9284a8eae32d629fb426173ae640ff3cf25440ce85c"}},{"ruleId":"D1","level":"warning","message":{"text":"renderShopMarket (cyclomatic 17): renderShopMarket has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/shared/flow/phaseUi/ShopPhaseController.js"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4448c8f6f2ab1918acee09cf27884df71cc9f759d6e883dd948bb4e474c768b"}},{"ruleId":"D1","level":"warning","message":{"text":"_normalizeBinding (cyclomatic 16): _normalizeBinding has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/core/src/State.js"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"532c400935a42b64fe7667cd64d5472a214e54be2dfd63cb91c493eb92e210ec"}},{"ruleId":"D1","level":"warning","message":{"text":"_inheritContext (cyclomatic 16): _inheritContext has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/core/src/State.js"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"5146baf3d4535bef443485fae7a10c0f1918a12d9ed0735e02cd684b30bfa596"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 16): (anonymous) has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/core/src/Scheduler.js"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"701cb65b1e520b376b5d16229690c00ac8dd4715c586b41bc79b829cace2ac20"}},{"ruleId":"D1","level":"warning","message":{"text":"enterBattlePhase (cyclomatic 16): enterBattlePhase has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/session/index.js"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"943d7d701526981f5a79a471e5cdf0eee231f434b0b49d55570642457c38b8eb"}},{"ruleId":"D1","level":"warning","message":{"text":"buildRunState (cyclomatic 16): buildRunState has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/session/builder.js"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb19962c1919114ad34ea4571c7c5400d424cf94cf424c80c12bc17619f826d"}},{"ruleId":"D1","level":"warning","message":{"text":"updateActorNode (cyclomatic 16): updateActorNode has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/view/battleViews.js"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea96478ceb612327d5c5e3e2e840ae8ad90f79364873edf4ff67ace1317806cd"}},{"ruleId":"D2","level":"warning","message":{"text":"summarizeResolution (cognitive 46): summarizeResolution has cognitive complexity 46 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/ink-cli/summarize.js"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c12522c067f3a437843d2ade030997b004cd2f9dd1923ef93fb75149616c60bb"}},{"ruleId":"D2","level":"warning","message":{"text":"applyBattleRenderPatch (cognitive 46): applyBattleRenderPatch has cognitive complexity 46 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/state/battleState.js"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd6a53a976333982a0541a4c20923464c498642856e6668896dc1e604913fcf9"}},{"ruleId":"D2","level":"warning","message":{"text":"afterFire (cognitive 40): afterFire has cognitive complexity 40 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/bindings/lifecycle.js"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f9fb702d763d94489a8448b52a02d7673e1fc243554a0ce7cd5bda7c275a464"}},{"ruleId":"D2","level":"warning","message":{"text":"applyContentOverlay (cognitive 34): applyContentOverlay has cognitive complexity 34 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/shared/content/index.js"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b97699bd1eb290243900747e0b7b89793950c3c08c5187d91e898df26fdb65"}},{"ruleId":"D2","level":"warning","message":{"text":"animateZoneBatch (cognitive 31): animateZoneBatch has cognitive complexity 31 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/animation/battleAnimator.js"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"e30245cc04940367484b948d181ce3d0cc3cfe9bdaeb841072df0ae147a3ce9e"}},{"ruleId":"D2","level":"warning","message":{"text":"refreshCardVisualState (cognitive 28): refreshCardVisualState has cognitive complexity 28 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/state/battleUiState.js"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"e122137cd7822fded6a684b7fa2cdb2884c3cc95e6ae5b48ca440cee21052dc4"}},{"ruleId":"D2","level":"warning","message":{"text":"buildMessageSpec (cognitive 26): buildMessageSpec has cognitive complexity 26 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/shared/flow/FlowScreen.js"},"region":{"startLine":1149}}}],"partialFingerprints":{"codehealthFindingId/v1":"197d24cf09d888164c3b76255c96954cc15240484dfa03b58ebe32803c8b644d"}},{"ruleId":"D2","level":"warning","message":{"text":"renderShopMarket (cognitive 26): renderShopMarket has cognitive complexity 26 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/shared/flow/phaseUi/ShopPhaseController.js"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"737d23b9ea809aced97e0ca0fc2f9ddabf159a53d3164cdaec27555d3732fd99"}},{"ruleId":"D2","level":"warning","message":{"text":"drawArtMotif (cognitive 24): drawArtMotif has cognitive complexity 24 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/view/battleSkin.js"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"78b50390ae5873b6167a6476be69f07cdc1751e72b080e069c784c8d59a76def"}},{"ruleId":"D2","level":"warning","message":{"text":"buildBattleStore (cognitive 22): buildBattleStore has cognitive complexity 22 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/session/builder.js"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7794fe407ecba7b680c7cf0ea82afaffdd5ed7312a894db60cf4c148ac065ab"}},{"ruleId":"D2","level":"warning","message":{"text":"syncRelicBar (cognitive 21): syncRelicBar has cognitive complexity 21 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/view/battleRelics.js"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"580d6c60daf8aeb5477693228ec6d3cbc4ae11d71fc201621e0cdbb66caf8ed7"}},{"ruleId":"D2","level":"warning","message":{"text":"drawDungeonBase (cognitive 21): drawDungeonBase has cognitive complexity 21 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/view/battleEnvironment.js"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"04215edc341f5a4db5af3cb7b8b60f409c1b69250b75616a299129fce99e49f9"}},{"ruleId":"D2","level":"warning","message":{"text":"buildDisplayMapsFromContent (cognitive 20): buildDisplayMapsFromContent has cognitive complexity 20 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/shared/content/catalog.js"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"6225d587aa172824593cddd29fe4d8b48973a27b34ac0d0a1bfb113572eb14dc"}},{"ruleId":"D2","level":"warning","message":{"text":"_inheritContext (cognitive 19): _inheritContext has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/core/src/State.js"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9de07feb43a1ecd76a993970fa6aad823d4531c275da6252d941eb3c45fb18"}},{"ruleId":"D2","level":"warning","message":{"text":"use (cognitive 19): use has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/core/src/Engine.js"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"91dd5faab5eb64ccfcb0669b5ad2fb8e28a4068efc13761d82140c9ed223847c"}},{"ruleId":"D2","level":"warning","message":{"text":"refreshLayout (cognitive 19): refreshLayout has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/input/battleInput.js"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"416170c2142292e4e4a8c8a8b3ebde7526ccda2cbd9bf98cf9b03b2cbe4ffd51"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 18): (anonymous) has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/shared/viewStateBuilder.js"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"64a78f74bbf4d64710430cc080b6fa528a48df30982fe06ce2d59ff3168dafea"}},{"ruleId":"D2","level":"warning","message":{"text":"mergeModule (cognitive 18): mergeModule has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/core/src/State.js"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae80206e51300fbd303335a6c45b87f38571cca6327aba78dbcba0400028c9c1"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 18): (anonymous) has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/core/src/Scheduler.js"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d33ffb0801686f013d72101a0bbb4ec03d3e44a0ddd2a30694efbe25cc10a59"}},{"ruleId":"D2","level":"warning","message":{"text":"runJsonMode (cognitive 17): runJsonMode has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/ink-cli/cli.js"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bea4342deffa49bfb565c6295f47806459f4b17159fbb95e0f8cc2078c5f105"}},{"ruleId":"D2","level":"warning","message":{"text":"updateActorNode (cognitive 17): updateActorNode has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/view/battleViews.js"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"0856af747a3ed8e918136fc155cf04a3fa5776e75e34140feedef377e7ab769d"}},{"ruleId":"D2","level":"warning","message":{"text":"setPaused (cognitive 17): setPaused has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/animation/animationQueue.js"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1ce3b093ff5605a1afc174922b198ed5c1b02826b4e195599fefdcc1bdf9f83"}},{"ruleId":"D2","level":"warning","message":{"text":"play (cognitive 16): play has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"games/sts/src/session/index.js"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"92bb49884405cd5a6a8b751a6407478b52c1ec8751629ab332f38623799e90bc"}},{"ruleId":"D2","level":"warning","message":{"text":"animateCardMoved (cognitive 16): animateCardMoved has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/animation/battleAnimator.js"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"274342f92fdc8be46a86b49eff4ab3d4100dd75bad30d46bba2f931dd1dcbbad"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: flow/FlowScreen.js: FileTooLong \u2014 1385 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/shared/flow/FlowScreen.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecce44e6edfefc9a604f48a2ea34448d060234b608ab2d548e53ff3f3fe1cfd5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: animation/battleAnimator.js: FileTooLong \u2014 813 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/animation/battleAnimator.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"91232129109f8bdbc0aeab356692b083c04164237465e6293c3ff32c3cbd889c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: view/battleViews.js: FileTooLong \u2014 680 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/view/battleViews.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f51a2f06f90fdd5769fe30e7ff15080416e1b4a0944002aae80d6b03b57b4bb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BattleAnimator: TooManyMethods \u2014 38 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/animation/battleAnimator.js"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6014933799ed2b2f8eda98c7ed7181ecee45fcd266638a7b131f908c00f391f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CobwebSessionHost: TooManyMethods \u2014 37 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/shared/CobwebSessionHost.js"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"a52ea15439aa00c497c7a9673f0e532c9adcc04c4a21a91a0e7b72a2d92ec05a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BattleScene: TooManyMethods \u2014 35 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"clients/phaser/scenes/battle/battleScene.js"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab113a2aaf8ed68bda6a48d3fedf08e75a82fb39f613c32f454a95470e6af24"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ba8a96f24e1d3f1085b80f0f2585a689635f6036cc59020bd0b26aa49413ae5f"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5ab5f7955dfd21f87a287361d2dcf619a9aa0613187bdc0af5171358eaeb005e"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9529389ff2749403c8877af29484a5ad50fd8200863f832407c34ecb09b496e0"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5258f24e028fa5ccd514ff095c9e01d68f58a0ef3b3707f88dbc0adc2767088d"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2d615bb9f019c41ce2a1d46eb21d33a1ec506f8c357899180c3279d20f344727"}},{"ruleId":"D38","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f650726c4a598655cf208be4f387bb56d63fd5745df38058bc3117265a234455"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":6,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}