{"$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":"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":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"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":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D27","name":"Navigability","shortDescription":{"text":"Navigability"},"helpUri":"https://codehealth.canine.dev/dimensions/D27"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"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":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"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":"beat (cyclomatic 126): beat has cyclomatic complexity 126 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"fff62a218a42e79ba70d775972c395b3719c68d76cf64708aec4ec8daea89b78"}},{"ruleId":"D1","level":"warning","message":{"text":"validate (cyclomatic 50): validate has cyclomatic complexity 50 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":1625}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fbd0d42d3f5a377bc9b14ca0bbe8cc27d5a2f132876fd5a06431cdfe8833f6b"}},{"ruleId":"D1","level":"warning","message":{"text":"send (cyclomatic 47): send has cyclomatic complexity 47 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/discord.js"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"34bf76f4581dfba531463579c74cf1d2596b0831ba122cc84cd560ce78ccbaf0"}},{"ruleId":"D1","level":"warning","message":{"text":"send (cyclomatic 36): send has cyclomatic complexity 36 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/fluxer.js"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"f61fca402c94d29b7a46edf0c1ae17cbffbb42701c7e2226f2b7d8a21f4db256"}},{"ruleId":"D1","level":"warning","message":{"text":"send (cyclomatic 35): send has cyclomatic complexity 35 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/smseagle.js"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"a79b0e7d4be4f3993f13c4468a048a691762aae692e7a12d2601555a1544b0cf"}},{"ruleId":"D1","level":"warning","message":{"text":"send (cyclomatic 29): send has cyclomatic complexity 29 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/ntfy.js"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de2ebb2c2ff8f2b4ec6528df6ccf24e0c8081e9dd48411be05f9493ff4a09af"}},{"ruleId":"D1","level":"warning","message":{"text":"getData (cyclomatic 28): getData has cyclomatic complexity 28 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/uptime-calculator.js"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"124f3c6df7094231f7db85ebeae29a9f6aa6da2de457be0b389705ce23cc09d8"}},{"ruleId":"D1","level":"warning","message":{"text":"update (cyclomatic 26): update has cyclomatic complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/uptime-calculator.js"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"522b86bbe31703c1cf19e8edb41c6038108521041af378235f2d8b4ec89f1499"}},{"ruleId":"D1","level":"warning","message":{"text":"throwGeneralAxiosError (cyclomatic 25): throwGeneralAxiosError has cyclomatic complexity 25 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/notification-provider.js"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d3a94640ec0080c964958579f5f92da6fb752afc4101d372a049af40bf8d21"}},{"ruleId":"D1","level":"warning","message":{"text":"connect (cyclomatic 23): connect has cyclomatic complexity 23 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/database.js"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"383bfe9fdb59367c15121b602b2067e6312478144b3a08966c5cde2998c3aa67"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 19): (anonymous) has cyclomatic complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/routers/status-page-router.js"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a889219075fcb8062730fe0f296a15f3b2ce82b743855abcd9f0f0ccb14df0c"}},{"ruleId":"D1","level":"warning","message":{"text":"send (cyclomatic 19): send has cyclomatic complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/smtp.js"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"40ebb9691e2047f188dec623ffccf5fa3bba25e02f59642c40350348f3cd3c6c"}},{"ruleId":"D1","level":"warning","message":{"text":"http (cyclomatic 19): http has cyclomatic complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/monitor-types/globalping.js"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b4b7e907eabcbb34c110d448a46a7e81d6f63b0e47c8e936bfb4d9164618f0c"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 18): (anonymous) has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/setup-database.js"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5b6e229bcff648920eb46cf17321dbf52ddb662ce75dd0ad8390f4108631c5a"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 18): (anonymous) has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/server.js"},"region":{"startLine":1127}}}],"partialFingerprints":{"codehealthFindingId/v1":"15778762f551a7c8f566d1187de1e40e5b303a595a56acae87d8fd3a2c589807"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 18): (anonymous) has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/routers/api-router.js"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"43d9ef890d532599a11b3ea95b99c33ae99713cdec69b61decc7be25889752c4"}},{"ruleId":"D1","level":"warning","message":{"text":"buildWsOptions (cyclomatic 18): buildWsOptions has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/monitor-types/websocket-upgrade.js"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"93311db6c427e20e60142554c8be61823876dd08f266bf2b9879ec719d8bba97"}},{"ruleId":"D1","level":"warning","message":{"text":"dns (cyclomatic 18): dns has cyclomatic complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/monitor-types/globalping.js"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"845f5ebae08449f9ee9fadf969c952086deeb3e2d3701400d7c1e615ca2e223d"}},{"ruleId":"D1","level":"warning","message":{"text":"update (cyclomatic 17): update has cyclomatic complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/prometheus.js"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"d712d4649e361e4d957b78a69017b8da983deb11ca138f6d9e4d933edf032128"}},{"ruleId":"D1","level":"warning","message":{"text":"getDataArray (cyclomatic 16): getDataArray has cyclomatic complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/uptime-calculator.js"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff9e217588a28de6949c64a358ee23ff711e99cc26fd24d92b1887bb7ece0a0c"}},{"ruleId":"D2","level":"warning","message":{"text":"beat (cognitive 230): beat has cognitive complexity 230 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa32d7cb24c16c393478fbea50abd5c66988a3f0ce0e7414e96cf65a3ffb5e17"}},{"ruleId":"D2","level":"warning","message":{"text":"send (cognitive 76): send has cognitive complexity 76 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/discord.js"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"a072d5ba01e35a82889cf94d9878ed972cf6c74eda63992e4a9da1bf35aef64e"}},{"ruleId":"D2","level":"warning","message":{"text":"validate (cognitive 74): validate has cognitive complexity 74 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":1625}}}],"partialFingerprints":{"codehealthFindingId/v1":"d36fdaf1eb5464b86708d97720cd07338b476409433d5891d1fb22236534378f"}},{"ruleId":"D2","level":"warning","message":{"text":"send (cognitive 62): send has cognitive complexity 62 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/smseagle.js"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb3b3e7c04fce33da054e9bb4a6cf6fafa865b0f7a7cf46aa96d7ce84f83524b"}},{"ruleId":"D2","level":"warning","message":{"text":"send (cognitive 55): send has cognitive complexity 55 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/fluxer.js"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9494ecc92aa8cee3a4853ae1d4f8591c85e1e7a2ca9782834e6c01b8ea78690"}},{"ruleId":"D2","level":"warning","message":{"text":"update (cognitive 40): update has cognitive complexity 40 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/uptime-calculator.js"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"f53bd9782d00e92c98b605d59667ec919b619d3d69069049a4abab2c1467f5c6"}},{"ruleId":"D2","level":"warning","message":{"text":"send (cognitive 38): send has cognitive complexity 38 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/ntfy.js"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"66553f6479a5bcc452b41ca8e4fd4701537be202be6b38e10e6a46ed55d44769"}},{"ruleId":"D2","level":"warning","message":{"text":"getData (cognitive 34): getData has cognitive complexity 34 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/uptime-calculator.js"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"7400aa5587790c75dcf9f0469cdb30513cc685392ba537e0dd9aa317e06800bd"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 33): (anonymous) has cognitive complexity 33 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/server.js"},"region":{"startLine":1127}}}],"partialFingerprints":{"codehealthFindingId/v1":"75041b8428c1de951b6cc648bcabb2c045e30488ec180d64b007a5a4ad8fe21a"}},{"ruleId":"D2","level":"warning","message":{"text":"update (cognitive 31): update has cognitive complexity 31 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/prometheus.js"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6692659ff436cb126e2c606a5ecbfc32671f711f1045ffa52a4bb963786998d"}},{"ruleId":"D2","level":"warning","message":{"text":"connect (cognitive 30): connect has cognitive complexity 30 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/database.js"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ec14dd50f1e22b7085b1906ae2ef0fead9e4c7628fc623de3f62e0f620d0821"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 28): (anonymous) has cognitive complexity 28 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/setup-database.js"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"6763e66cef224505f9992588d103286c7df0a6f47e3e55b95211d63eccff9a2d"}},{"ruleId":"D2","level":"warning","message":{"text":"throwGeneralAxiosError (cognitive 28): throwGeneralAxiosError has cognitive complexity 28 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/notification-provider.js"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d107fcecc454a7f94ae1304abfb147a449dba770b9a9eb341eb7023e8258dd6"}},{"ruleId":"D2","level":"warning","message":{"text":"main (cognitive 26): main has cognitive complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extra/reset-password.js"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"7529247072da2efe415581fa6c80e423c60f4ec181167edc6ea35094d8322fd5"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 26): (anonymous) has cognitive complexity 26 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/routers/status-page-router.js"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f832631b722ccb55da5fe8175097358c0dd18b14d1c290e0d98174d924df80"}},{"ruleId":"D2","level":"warning","message":{"text":"buildWsOptions (cognitive 25): buildWsOptions has cognitive complexity 25 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/monitor-types/websocket-upgrade.js"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"944e2b93d2486ba3d351e4cfb552b904c38f661a488fe0b68bcfa2137650ca5b"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 24): (anonymous) has cognitive complexity 24 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/socket-handlers/status-page-socket-handler.js"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce40c97d6ed08a32472e130867b52694059b8ab7b9cb6935d34d81b10bd2cc9e"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 23): run has cognitive complexity 23 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/maintenance.js"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"2749c4db407f99d800e9fbaeb083bf1ae72b98101f28499de201fa206e7ae8c7"}},{"ruleId":"D2","level":"warning","message":{"text":"send (cognitive 22): send has cognitive complexity 22 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/smtp.js"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cb455b0dfc242f9bd22a8e70e8b3d302891985a6052e272c272957237e808f7"}},{"ruleId":"D2","level":"warning","message":{"text":"sendNotification (cognitive 22): sendNotification has cognitive complexity 22 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":1452}}}],"partialFingerprints":{"codehealthFindingId/v1":"e32a5b77d2ed49ec9637056884b26d9a6a638e5f40fdc9969f4410482f721baf"}},{"ruleId":"D2","level":"warning","message":{"text":"migrateAggregateTable (cognitive 21): migrateAggregateTable has cognitive complexity 21 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/database.js"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"98f2bd762654dca0834f5cdb874f9b049dfd0e4c098d299a8720216b24610425"}},{"ruleId":"D2","level":"warning","message":{"text":"determineStatus (cognitive 21): determineStatus has cognitive complexity 21 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/routers/api-router.js"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"da134345b2f779e2ba789e797e57578eaa577acb9026ad772cf999c7c1862b66"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 20): (anonymous) has cognitive complexity 20 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/routers/api-router.js"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"62bd2917faf989ecacf371df88b6f08acf877b03c126a41940fe253e4d4e3024"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 19): (anonymous) has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extra/simple-dns-server.js"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"e93526f5a9327c28c8cc47dde642540048468b58852ccac265af995d508ae55d"}},{"ruleId":"D2","level":"warning","message":{"text":"check (cognitive 19): check has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/monitor-types/group.js"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ca13942c8c3ad0d11741597530ac1179db7a74fbf0f3af7d82336a8aead7bd5"}},{"ruleId":"D2","level":"warning","message":{"text":"http (cognitive 19): http has cognitive complexity 19 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/monitor-types/globalping.js"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b901933d26a1f7b6c3dbf8728d08cc16699fee4a49a2256ac077184f026440"}},{"ruleId":"D2","level":"warning","message":{"text":"parseCertificateInfo (cognitive 18): parseCertificateInfo has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/util-server.js"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d964904f821953049d9bfbf6a5bbbd3128b495c7e86fdc1899ed29292b3f3e0"}},{"ruleId":"D2","level":"warning","message":{"text":"dns (cognitive 18): dns has cognitive complexity 18 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/monitor-types/globalping.js"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdab2140b20be4dd6a03faaea68905b1f3cca76df060193eb0d1d8e41514c17a"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 17): (anonymous) has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/server.js"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7bd43827fab15ad044075cd33a5d9af5d99d6d214e142067154dd296c4b0ec"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 17): (anonymous) has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/routers/api-router.js"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf81a767ba8934b250d7e14b44432a485cf9a538740a78981cb725b6edd256f"}},{"ruleId":"D2","level":"warning","message":{"text":"send (cognitive 17): send has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/telegram.js"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"763f9ee147e39de7f445fbe2b6f500e9817e29bc9ffb780765f2ccdf5e6cd5af"}},{"ruleId":"D2","level":"warning","message":{"text":"makeAxiosRequest (cognitive 17): makeAxiosRequest has cognitive complexity 17 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":1152}}}],"partialFingerprints":{"codehealthFindingId/v1":"fefa223e625afe82e393b1544b51f721b39e01a933fbfe97be0efedf3d378430"}},{"ruleId":"D2","level":"warning","message":{"text":"checkStatusCode (cognitive 16): checkStatusCode has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/util-server.js"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"253d691095bb0f2f09d0545979b8a4c90485621e5157e8d736d63b4fba12c6f0"}},{"ruleId":"D2","level":"warning","message":{"text":"allowRequest (cognitive 16): allowRequest has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/uptime-kuma-server.js"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"76330c636297517fab191716b035b0a975dde1346700dc962346c55ad90729ec"}},{"ruleId":"D2","level":"warning","message":{"text":"testDockerHost (cognitive 16): testDockerHost has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/docker.js"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"8703df8173a45b23439574a37d5bb900753e331dbf3dab8c35a2b72b1a66f50e"}},{"ruleId":"D2","level":"warning","message":{"text":"send (cognitive 16): send has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/slack.js"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2453ea78ec22a47a06e3b40d286d66f3a6a79a74df3ea1b927634d1c2a3ac48"}},{"ruleId":"D2","level":"warning","message":{"text":"generateCron (cognitive 16): generateCron has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/maintenance.js"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"567ecae8e6fff6f69e47b25b33eb8d8b212007fadfb5a66672b2f68585e40fa8"}},{"ruleId":"D2","level":"warning","message":{"text":"sendNotifications (cognitive 16): sendNotifications has cognitive complexity 16 (threshold 15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/domain_expiry.js"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"7144c61692e452ac8934557c67e029fd46801c42a8ac5d34b3f76b96a388d557"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/util-server.js: FileTooLong \u2014 1066 lines."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/util-server.js"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"f796e1ac907b57f9d676ea58b00ac2472226c2218a1b2736e3d65e02b82655a0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/server.js: FileTooLong \u2014 2022 lines."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/server.js"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aee3eb00859d0e3729c1d68384db74a55aa97cddfcad660a082184e6aa6d432"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: model/monitor.js: FileTooLong \u2014 2083 lines."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":0}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe5e65469c4060b0e5f0188da54f2081a2cd867a76fcc31f9569273248dde45c"}},{"ruleId":"D8","level":"error","message":{"text":"No automated tests: No automated tests \u2014 the solution has no test code. Untested code is the largest single risk to changing it safely."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3132564c6310e5d01a231f252a02d5d2f5a542c0a8fa29a14c89693f1e3df871"}},{"ruleId":"D9","level":"note","message":{"text":"No tests found: No test projects found in the repository."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c9bf64cbb5a4ae13d6bcd01fa3bc8d2879d860c73bc67f176ee3c2cecb8adce3"}},{"ruleId":"D13","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":"52594fa57a92c5c28ef336f218f39c9d88fae095461e6aca3d373468730cced1"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"1383a08c9e0b631a44b4712838eb4730f486f6b9ec9baca94226fb68c91e61e5"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"0790e639564b645a1ad189ce4a3afb4f301eb1279ff1036edb609d27459bec59"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"2a395a025dc750667160f1d03b4bfd8d2198d8cafb5c137afe8b2f006a346255"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"6ef89b0f73b982de93d5041b873bf59e7f89521092cec5bd2f15cdc313a9c500"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"abdff857368850fb8d77e7b2a897ea3cd6673a8a6a89e9b28a8f78f49611d1dd"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"cf88ff83838dcc7a2a3a844ca8b909db1e3bbecd3de3e8d79986cad30ca7a9e0"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"883c50447b77deb558e3d1f96f3aef1ecb076a7c88ac99edcb4ac1c251c2cf75"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"2b31977c58e2a6c02f1b24a0541fc549f5876b0d99dac2ce08f23ee46ec0047a"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"6e48c61769102db501ea3fa1562d37aa4c5100863560d1a2beca831faa242d38"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"8c63ba9d5b37f9e0d7377312bf4a2511cf7ac3b09367891e6d5f4829ea8e846e"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"31f92f373ae64a10a010217abdd0fe357086ad523869695f6028c232db9ddff6"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"8bffeaf082a2fe51195c503f9de65bf63e7ba93dbd5582e2a0a096788e89605b"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"cda9ca4e40d35b87b6b17bea3180e6455f6cce92959f0a81a8b90f0bf550f879"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","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":"7306a60525860a78421e5e06a6a94a2783086e9eb866f4f81153c47d0c0204fb"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/model/monitor.js: server/model/monitor.js changed 10 times in last 90 days, max complexity 126. 5 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8893dee7f6fee7b4a2d56724059c04423a29b049392167c0d33d619220cfad61"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/pages/EditMonitor.vue: src/pages/EditMonitor.vue changed 9 times in last 90 days, max complexity 50. 4 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/pages/EditMonitor.vue"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"52dfc9e7aff69d831c5989ddeff38b076ce535c6173b5f71d18b231e992c777a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/server.js: server/server.js changed 5 times in last 90 days, max complexity 18. 1 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/server.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cb25508116c92e5909e2b878e5117f87f38ac36a91ff253455c4a8f46bab0db"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/util.js: src/util.js changed 2 times in last 90 days, max complexity 24. 1 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/util.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19b556013fec71b9691d20e2d5b720bf7456824973a653cadb07e54c08cfe4e7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/notification-providers/discord.js: server/notification-providers/discord.js changed 1 times in last 90 days, max complexity 47. 1 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/discord.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7edbafaac87830e03f7aacb7251e1894272e1908b6811ac315c0f45bf634cbf"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/modules/axios-ntlm/lib/ntlmClient.js: server/modules/axios-ntlm/lib/ntlmClient.js changed 1 times in last 90 days, max complexity 32."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/modules/axios-ntlm/lib/ntlmClient.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a943e88b175d27708b7c9c6f99d2dbb02f1091b278bb67e35731cd694e92c6e4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/notification-providers/notification-provider.js: server/notification-providers/notification-provider.js changed 1 times in last 90 days, max complexity 25. 1 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/notification-provider.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"29976e1f3065f3f386eb501c2a0ba410331b85356ac2084d9592d95f6d245087"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/database.js: server/database.js changed 1 times in last 90 days, max complexity 23."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/database.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"040894aa0c8e01f36fd0bc35f3b1ed59bd5e3b1e575e0d691a04411fd7f8932d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/notification-providers/smtp.js: server/notification-providers/smtp.js changed 1 times in last 90 days, max complexity 19."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/smtp.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55afe913e65d0a0bceffda6032e7d23bf76851ec66ca30dccab8cee7c284bfb4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: server/monitor-types/globalping.js: server/monitor-types/globalping.js changed 1 times in last 90 days, max complexity 19."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/monitor-types/globalping.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0642a9820080928a95e6f44918bd4780bfdf34309a64e261c4442f2ce9f5b9b5"}},{"ruleId":"D19","level":"note","message":{"text":"A Node.js test runner guide exists, but there is no mention of how tests are written or run in the context of a backend project.: Add a short note on running and writing tests for the backend (e.g. \u0060npm test\u0060 vs \u0060npm run test-backend\u0060) so readers can find it without linking to an unrelated README."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test/backend-test/README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"414bf7d27b79805031ab42e83faff478fcce42d88c29219e2f5b3d1846d35390"}},{"ruleId":"D19","level":"note","message":{"text":"The \u0027Info\u0027 section gives migration rules and a template, but there is no guidance on how to run the migrations locally or what happens after running them.: Add a brief local-run instruction (e.g. \u0060npm run knex migrate:up\u0060) so new users can apply changes without relying solely on the docs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"db/knex_migrations/README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfd894d874ec7aa72d593336e2d13e2314a0b84a715e67a1fcfd73e3a968ade9"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a2081e803cc29f2efb9454d372df8e878a422636dc7bfac39e300a15defbc72a"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a4814a6e28bc1a55dc8d6c3547445a7bb95da9bfafe3956e81647453940c9e69"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c481847a716e1e6b12dd6fbc1f709f408e81285b4f74f3520b0b31f6656620be"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b8822f9a272dae1a5b2612fe990c24a7faeb0275789278c0d192199291564dc2"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"278b8a407358a513efa8e73001f439f29a5cd97daeffa66f6e238b7b4ce86c33"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6576aca2dd5920004c4a2d03d0ad0d7bad57469e1aeaaf5354366ba979684d64"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"53bdb41a1c2617f5516575c9714122ac8fc6b850477a55d372b77eba4603c22f"},"taxa":[{"id":"CWE-319","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7d74062388e40717ad88ab0f58b32389cd487b60aa36a652a8e2c8f177c1f74c"},"taxa":[{"id":"CWE-319","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5bc10573215bdddaf7ba2ca67ddc4a71399e24d8e76378f7981df5ee6fc53c80"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5bc10573215bdddaf7ba2ca67ddc4a71399e24d8e76378f7981df5ee6fc53c80"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5bc10573215bdddaf7ba2ca67ddc4a71399e24d8e76378f7981df5ee6fc53c80"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5bc10573215bdddaf7ba2ca67ddc4a71399e24d8e76378f7981df5ee6fc53c80"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5bc10573215bdddaf7ba2ca67ddc4a71399e24d8e76378f7981df5ee6fc53c80"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5bc10573215bdddaf7ba2ca67ddc4a71399e24d8e76378f7981df5ee6fc53c80"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"13320d78111be20ea1e9d5131a73a955120077bb8eb63e42d7efcd7580f59dca"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","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":"082dd3b5ddb8648385ae85a5ed1e86b07e54b8a653fab06e9cd26b6374e3aa3e"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","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":"2edfbb1b743087cf3ebfdbec07a43ec9dc312a2a6e5ce4c0cf119136e0908167"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","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":"785d2e34c678efe77e9ea7bb806097ec2d315069d7f6d8b39dc96ee8025c293c"}},{"ruleId":"D31","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":"65c00f7933aad63c00bac3df0626ec7679468cdb0990aaa2f32c1d2f2f7d0f92"}},{"ruleId":"D31","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":"557052d5e6d52ebefa44f85bfd412f49627c728db4bf366d4be871f73f0335ac"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6c94702ba2f966153e8e8d3269c883fc12511d5b3a3e82d576d4da7212fd2424"}},{"ruleId":"D31","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":"822d65a57c4d754228e22f6a2ca25443b163d666e30fb66c2a5378bd518b18a8"}},{"ruleId":"D31","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":"01e68b1a588b010be1a2ebff58b47bf4bbe84892c91098feb9ff1ae5e5ecf43f"}},{"ruleId":"D31","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":"223e1f0648f5239dd40e944647dd69e4f762ce9d4b8afe631b2d78bb008b8bca"}},{"ruleId":"D31","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":"0e7d065fbfb1359834b20e7766f6a2e45453409d964ea80fe956b7c1c888aaa1"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: resend.js \u2194 Resend.vue: \u0060server/notification-providers/resend.js\u0060 (context notification-providers) and \u0060src/components/notifications/Resend.vue\u0060 (context components) live in DIFFERENT modules yet change together 73% of the time (8 shared commits) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/resend.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3ac37facef86b0aa063e65cb04f60de9c7a078ad942ee06eb1a71845915f4d5"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: 2025-12-29-0000-remove-line-notify.js \u2194 index.js: \u0060db/knex_migrations/2025-12-29-0000-remove-line-notify.js\u0060 (context db) and \u0060src/components/notifications/index.js\u0060 (context components) live in DIFFERENT modules yet change together 73% of the time (8 shared commits) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"db/knex_migrations/2025-12-29-0000-remove-line-notify.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"247ed313ff8c574d61f509ed83f56b35c47e3848c72e021314c78ed83342a26a"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: 2025-12-29-0000-remove-line-notify.js \u2194 NotificationDialog.vue: \u0060db/knex_migrations/2025-12-29-0000-remove-line-notify.js\u0060 (context db) and \u0060src/components/NotificationDialog.vue\u0060 (context components) live in DIFFERENT modules yet change together 73% of the time (8 shared commits) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"db/knex_migrations/2025-12-29-0000-remove-line-notify.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae4d0aeca35cc0958249886086ad724273078b5130dee25a4e27c78ae3bbbcaa"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: 2025-12-29-0000-remove-line-notify.js \u2194 websocket-upgrade.js: \u0060db/knex_migrations/2025-12-29-0000-remove-line-notify.js\u0060 (context db) and \u0060server/monitor-types/websocket-upgrade.js\u0060 (context monitor-types) live in DIFFERENT modules yet change together 73% of the time (8 shared commits) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"db/knex_migrations/2025-12-29-0000-remove-line-notify.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd0f84754c81de1c749d86af737368d6b12684a154ad5417805bc4686d3317d1"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: ActionSelect.vue \u2194 EditMonitor.vue: \u0060src/components/ActionSelect.vue\u0060 (context components) and \u0060src/pages/EditMonitor.vue\u0060 (context pages) live in DIFFERENT modules yet change together 62% of the time (8 shared commits) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/components/ActionSelect.vue"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95c23d6e7e33ad986b7ded784f81f8ed969612125fddf1804ee955b615a66f37"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: monitor.js \u2194 mssql.js: \u0060server/model/monitor.js\u0060 (context model) and \u0060server/monitor-types/mssql.js\u0060 (context monitor-types) live in DIFFERENT modules yet change together 59% of the time (10 shared commits) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/model/monitor.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e81cd2c28128207c57fdc4593aeeb45135f32e4553ff0da9b05afd38b3c1343"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: resend.js \u2194 index.js: \u0060server/notification-providers/resend.js\u0060 (context notification-providers) and \u0060src/components/notifications/index.js\u0060 (context components) live in DIFFERENT modules yet change together 56% of the time (9 shared commits) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/resend.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b2e4bfbbfd574483b3d24916f5c398e257f5a15d9d3bebad9304187284d5e1c"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: resend.js \u2194 NotificationDialog.vue: \u0060server/notification-providers/resend.js\u0060 (context notification-providers) and \u0060src/components/NotificationDialog.vue\u0060 (context components) live in DIFFERENT modules yet change together 50% of the time (8 shared commits) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification-providers/resend.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e683a32b0eba4a7cd60f4362e8f3526167fcf236b4cf7e8bde4f0e13e59bf316"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: notification.js \u2194 Resend.vue: \u0060server/notification.js\u0060 and \u0060src/components/notifications/Resend.vue\u0060 change together 73% of the time (8 shared commits) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"server/notification.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dae62826639edf645b017329cd081b4203a6c89d351844501868ed56e1f930d4"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: NotificationDialog.vue \u2194 Resend.vue: \u0060src/components/NotificationDialog.vue\u0060 and \u0060src/components/notifications/Resend.vue\u0060 change together 73% of the time (8 shared commits) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/components/NotificationDialog.vue"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d3a617ecff0ff5bb390cf37ee08cb7c92b9ed529aa0d9fd8aafd2bbe9e5ca0c"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0e17f71490e4d120a48b2b2881ab866c93b272bef2febb673a3e8e42b2c288ab"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"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":"6b3de1d17b7cebb4234f58583089636727d0651385d10a3b138551e6cf113141"}},{"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":"6c6f3e68d79e344d64a78d1d160c82cabd323f15c8034e6e61a1ed41411d0afe"}},{"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":"fd45dba56dc8930adbfddecbbc1d6d4696710192689c4ab06e75a1c6b7bea8ed"}},{"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":"83d4a12c6049b65dad5ef70cce2aff0f49975283508359ee7b483d29a3ccb273"}},{"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":"808a710a24e805765e34a9008222ed1a64c1884a93cb9a6576ca6a1cb8b0e0d3"}},{"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":"b2d14ef3e94173862cddd66f6bb99fccd74bcfbb7fb89cb43beab8307fe8d65d"}},{"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":"5ce75d3832466f7b6659020abe4edd006e7b8018e2a32c49a2487efc6b8cc589"}},{"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":"a444e5e81fcdb9373f8f380b61a248319d0c5ef9bc58774bbaf6eb3a19510678"}},{"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":"cf7cda77c6196eeccf09f120796b4ce42e96ef1fbbe052525535e80c1ebf7190"}},{"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":"e89b3e1c3650e8b202da0744ac938e3360d7b9b72d9025c5d3fdbe5571253c62"}},{"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":"55fa71fbdccde3d636cbd7a15cfb2d5b7043cf2ea27a96fc4c78d40bc2639642"}},{"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":"1386eb6c5667c8ff68139fb2f14d792411aef2a32dfb4a0caadb7e0066fac097"}},{"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":"1c031a34aa44a85109ec666f893e8d77ccacfab6de41b83df2a24298c4f591eb"}},{"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":"7cad7ac313af3ba5814b4548f0b78d420cef3bd9f83486cb1ba87698f69e9b54"}},{"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":"baab8f42ef173625568528d1b2e5f9d2c704df9f656ecd68df80d604ebb2e7bd"}},{"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":"2f0bccbcc5852b676e1e6ab32692674b3cc545fd78e2ca4b7399a09983b8d7d6"}},{"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":"911a3dc3493cbfba4facf303b03e143b653dd8a7e283a5958f4a2b6240b416b2"}},{"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":"77f3987f4500021a05c87d81608dd042415d99efc3e5a9b89f7f63316102a283"}},{"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":"b0d0b4e46423375eda32f64fe0d1542008f0417ef6affc23d920701ce2898a3c"}},{"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":"342031b45890470a9ab853f2e245327664dfc67456a7401dbed97fb8f5f05c82"}},{"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":"9c03c1bdd01571a752eaa94c59a99de34ff2f6f9f1505682e7c1d21cf32c60de"}},{"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":"571d3960ef8727c44b84bff9f6aa17862b44dae891ac84fcc00ce341cbd6627f"}},{"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":"bc80c296b3dfb58720a0036b934fce73f19c838aa6fe4a7bc3a0eb136eea42b0"}},{"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":"f00b3dc3f71db08f2ed6ee6df893269a5146d4aeee3854bfe185e835f8063d0c"}},{"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":"f65ffed80e8638dfbf057e612bc2538c9c3c2c44b99252de07396909fc67aa9a"}},{"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":"6cc1f4db75708829ef8f6027921ae2b1afc9f794a2a1173f8b5886939237216d"}},{"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":"adf39d2eac076ace9b249ad341feddcfdb0fb7f069b211168dfc813809c82b87"}},{"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":"03d59f7eac7565ebf10d33990011df12a1d80486cda2c05438e813464e9c90e3"}},{"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":"227149e6ef4fc4ee98e674b993c2a4a82e1e1b06c33189372c65226b43bc9803"}},{"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":"fbc3682806a9a46c8ab6b1378dce5889c1b50d37eec62223ae0155c3af9397a7"}},{"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":"336359dd75dee2175b389e5c300c99545dabf115ff3b8c3d8747721c6cd0c9fd"}},{"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":"5e34af14cd570f4d5f087cbaac6e87fc8649140cd8d1d3b5f878c283714bdb10"}},{"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":"0002e21d6ff488618cd9e1181a1aee6171c46a92eb1e9135832e6c3c1a59f471"}},{"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":"7f18e0c2b911f08acbc083fa590bd330743dfcd6a82ae93e76f378d22a245c37"}},{"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":"2913e6e0e7d87c406f2386403fd066f2198f1365197a649af8d8696d56913437"}},{"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":"6d5c15c22d2480e80efdd6cb7eec402391e21d73d6ea54bcda347f64f45b1a11"}},{"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":"6db05ff2ad6b9c10711daa67293ce7d301a64c39577c9bb10281805751ea9c93"}},{"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":"08480d77f402e58ca671c9bb2e02ca2496dce86ac7ca78c0879c64c16198e926"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"47e6a4355aad1d2107aca62d5ade9af9e6a24fff1364b2757a2ff3518afba71b"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fb76ea45eb6e1ef25e7e5211bc2b006c757506b868031bc613cc822dcc4fe119"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e4e84fe7b633f17ada0c59787a2f3eab5c9a30261767aec0c92e0a16848ef02f"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"358d1d409c3f6f461c6b34698100d6eb2b0c15dddf41609b31f598919f7ffc9f"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f47ba42c5144f11e31c542f925ea085d0178b1725b9897bf5345c75cb35df524"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f1733d91060d6ce8050b702a60d52239f6443fd7e02ce20e987f93249e1baa31"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b7c38a8ec70505f6557416d744b987113305e1207935e9fc78e30a6942cd564a"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c624aec11ea2dd3b965dedcc343cfc5108785a7933d7222672cc291df6bf8e15"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cb32b453e3ac6798443e20448c50af695392f822da94670fb49d93efc9778fc9"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d69574da984b4e9940b25f3856921d52bfcba35695da59c0a75b1f74464c1ed4"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5e4629f3b090bb98705376c8acd4a3ce8869f87ca1ce37d59f4a69ed1c88ca53"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fc4fa5b8329a851fe56a79258f644884c2527da9acbcd32efe2b6115514b19cd"}}],"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-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.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-319","guid":"7af97476-9f0d-4458-9163-3d2043918a1a","name":"CWE-319","shortDescription":{"text":"CWE-319"},"helpUri":"https://cwe.mitre.org/data/definitions/319.html"},{"id":"CWE-327","guid":"e51910ff-67b5-3c51-aa3d-92837d9eab90","name":"CWE-327","shortDescription":{"text":"CWE-327"},"helpUri":"https://cwe.mitre.org/data/definitions/327.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.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":93,"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."]}]}