{"$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":"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":"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":"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":"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":"D8","level":"error","message":{"text":"No automated tests: No automated tests \u2014 no test code was found in this repository. 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 suite could be collected \u2014 nothing here references a test framework (Vitest, Jest, Mocha, or the runtime\u0027s built-in runner (\u0060node --test\u0060, \u0060bun test\u0060, \u0060deno test\u0060)), so there were no discoverable tests to count. Tests written as plain executables or shell/PowerShell harnesses are not collectible this way and are not scored here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c9bf64cbb5a4ae13d6bcd01fa3bc8d2879d860c73bc67f176ee3c2cecb8adce3"}},{"ruleId":"D16","level":"note","message":{"text":"Small-team knowledge concentration: 1 file(s) are concentrated to one author \u2014 the ambient state with 2 active author(s), not 1 separate risks. The signal becomes meaningful as ownership spreads; no per-file action implied now."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8aa75b6daa18f1b578387fa04036c50b3163d47f957c8f5601bf083ed4489b0c"}},{"ruleId":"D19","level":"note","message":{"text":"The \u0027Features\u0027 section lists features but does not explain how each one is implemented (e.g. teacher dashboard, course upload) or where to find implementation details.: Add a brief \u0027Implementation Notes\u0027 subsection under Features that maps each feature to its corresponding tech and the files it resides in."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"readme.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"91a55c09fd3bee6897abf276f9b9218cac5c139a16a005c0ede865534406b910"}},{"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":"222ac9320a4fc50e79bf0429f976229a5c05d5dca191b9a496f9987737e82726"}},{"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":"1744159ecee5943dbedaa7b603219525bf45b5e6e53c576e53da4ab8785a1f06"}},{"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":"62fbfcf03e576aa748df1ce03e8c86bb7ec5c3bcf2c2c849f407d0c1f05bbd0e"}},{"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":"f2751613271015710cbd5ea48e057ef2f6b936e6cce35e56e05dff1fa381bb4d"}},{"ruleId":"D34","level":"note","message":{"text":"Dormant codebase: 87 of 88 significant files have no living knowledge \u2014 the codebase as a whole is dormant, not 87 separate risks. Re-engage owners or document before change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4c69f1e54b7dd6fe9029dd02df6ba8f8145b789f2f18dbdaa086c40ded49dba6"}},{"ruleId":"D34","level":"note","message":{"text":"Largest orphaned file: One of the largest files with no living knowledge remaining \u2014 a reasonable place to start a read-through before the aggregate risk above bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"client/src/components/pages/instructors/instructor-register-page.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e482eaa9f9ab6f34975700801fb590403566fc1a0d537a0dae1c15f0f462b44"}},{"ruleId":"D34","level":"note","message":{"text":"Largest orphaned file: One of the largest files with no living knowledge remaining \u2014 a reasonable place to start a read-through before the aggregate risk above bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"client/src/components/pages/add-course/edit-course.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"149dc48dc947ba8c8ac4f3cfe74db8c88431da1c6076cfa89716f909533d55c8"}},{"ruleId":"D34","level":"note","message":{"text":"Largest orphaned file: One of the largest files with no living knowledge remaining \u2014 a reasonable place to start a read-through before the aggregate risk above bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"client/src/components/pages/add-lesson/edit-lesson.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8944467c09fb872f8ec126626fde44a7b7619f725f01ca8568dd26b5d7296e1f"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: adminDbRepository.ts \u2194 instructorManagement.ts: \u0060server/src/app/repositories/adminDbRepository.ts\u0060 (context repositories) and \u0060server/src/app/usecases/management/instructorManagement.ts\u0060 (context usecases) sit in DIFFERENT parts of the tree yet change together 91% of the time (10 of the 11 commits that touched the less-changed of the two, renames followed) \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/src/app/repositories/adminDbRepository.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9359bb03f8efb09c59a3aeeb3219eaf1009934c727a486237b7db5bb1dff5437"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: listCourse.ts \u2194 courseReposMongoDb.ts: \u0060server/src/app/usecases/course/listCourse.ts\u0060 (context usecases) and \u0060server/src/frameworks/database/mongodb/repositories/courseReposMongoDb.ts\u0060 (context frameworks) sit in DIFFERENT parts of the tree yet change together 90% of the time (9 of the 10 commits that touched the less-changed of the two, renames followed) \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/src/app/usecases/course/listCourse.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"506744ad932c2a7514e19f8626f2f49d987302626af55b4437c6af5eafd56b33"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: adminController.ts \u2194 instructorManagement.ts: \u0060server/src/adapters/controllers/adminController.ts\u0060 (context adapters) and \u0060server/src/app/usecases/management/instructorManagement.ts\u0060 (context usecases) sit in DIFFERENT parts of the tree yet change together 83% of the time (10 of the 12 commits that touched the less-changed of the two, renames followed) \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/src/adapters/controllers/adminController.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"22c213132f5d4ac1b2617827d5816627825cec49398c2749ad64b0effeae3ce3"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: instructorManagement.ts \u2194 adminRepoMongoDb.ts: \u0060server/src/app/usecases/management/instructorManagement.ts\u0060 (context usecases) and \u0060server/src/frameworks/database/mongodb/repositories/adminRepoMongoDb.ts\u0060 (context frameworks) sit in DIFFERENT parts of the tree yet change together 75% of the time (9 of the 12 commits that touched the less-changed of the two, renames followed) \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/src/app/usecases/management/instructorManagement.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a219a44267acbc4e09cbc69c4a700ab6d885a0abe85309a3b4ab5fee0996f919"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: courseController.ts \u2194 course.ts: \u0060server/src/adapters/controllers/courseController.ts\u0060 (context adapters) and \u0060server/src/frameworks/database/mongodb/models/course.ts\u0060 (context frameworks) sit in DIFFERENT parts of the tree yet change together 73% of the time (8 of the 11 commits that touched the less-changed of the two, renames followed) \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/src/adapters/controllers/courseController.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"724d28c4c776a7628e056d08acdbd2f8f6661c6b3b7a24f0ef8e7e71fd739b0b"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: instructorManagement.ts \u2194 admin.ts: \u0060server/src/app/usecases/management/instructorManagement.ts\u0060 (context usecases) and \u0060server/src/frameworks/webserver/routes/admin.ts\u0060 (context frameworks) sit in DIFFERENT parts of the tree yet change together 73% of the time (8 of the 11 commits that touched the less-changed of the two, renames followed) \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/src/app/usecases/management/instructorManagement.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0730d61ac28b758950e1c581cf9b35e2a167419ad817acef06e202a56f26bbf"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: addLesson.ts \u2194 course.ts: \u0060server/src/app/usecases/lessons/addLesson.ts\u0060 (context usecases) and \u0060server/src/frameworks/webserver/routes/course.ts\u0060 (context frameworks) sit in DIFFERENT parts of the tree yet change together 67% of the time (8 of the 12 commits that touched the less-changed of the two, renames followed) \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/src/app/usecases/lessons/addLesson.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0325c62c354f862059055454549655e4d0209e06d332d009e3b71342dc335298"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: course.ts \u2194 courseInterface.ts: \u0060server/src/frameworks/webserver/routes/course.ts\u0060 (context frameworks) and \u0060server/src/types/courseInterface.ts\u0060 (context types) sit in DIFFERENT parts of the tree yet change together 67% of the time (8 of the 12 commits that touched the less-changed of the two, renames followed) \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/src/frameworks/webserver/routes/course.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a0eeb8b1acbd805f9286dab5a1d053f7b3e356dd1f81316ad81d18364ffdd2"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: addLesson.ts \u2194 courseReposMongoDb.ts: \u0060server/src/app/usecases/lessons/addLesson.ts\u0060 (context usecases) and \u0060server/src/frameworks/database/mongodb/repositories/courseReposMongoDb.ts\u0060 (context frameworks) sit in DIFFERENT parts of the tree yet change together 50% of the time (6 of the 12 commits that touched the less-changed of the two, renames followed) \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/src/app/usecases/lessons/addLesson.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"757ac141b834263e8e67d525ff46cdfde65e9198c1b2cccff9ea472c06526c72"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: instructorAuth.ts \u2194 auth.ts: \u0060server/src/app/usecases/auth/instructorAuth.ts\u0060 (context usecases) and \u0060server/src/frameworks/webserver/routes/auth.ts\u0060 (context frameworks) sit in DIFFERENT parts of the tree yet change together 50% of the time (6 of the 12 commits that touched the less-changed of the two, renames followed) \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/src/app/usecases/auth/instructorAuth.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8af481c48996693022974089070701459c3b505584cd518bc802bae8edfd5d2e"}},{"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":"4f40c0595d1400a8fd681e9180da4c3170830a1c70943c751e351703f3d89539"}},{"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":"9d256140c40af7585ef50d5121ed4d269c43306a1023fab1167d8f3855158495"}},{"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":"1f87ebbc82278c0b4a46f33bea6a82bffa7a10cd104fe98a5cfc1624e1b02221"}},{"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":"4af40a47f13663476321ab4a4dd5ef711617b217b45e59e3be88bd605f32335d"}},{"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":"883562879ba44829d2b06ba194af2d493fecc15074cfc02b7419fe30ec401105"}},{"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":"11b900a5c57497f41d669c5a995e2c1e31e3e6b9db8b887cb35bffccffe192f7"}},{"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":"74eb904e820771a701f0c124b4e4efa3e80a04509b86daf2f697dfd9edc6b609"}},{"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":"9eb2e9e16d0ea24a73aa4d3561f0e91dda279807d96a6f3b14be86d5f7c4e91f"}},{"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":"34fe851c6eec7341cad7bcb10d4a2fa2f2b7ad85f594106750090b968892af88"}},{"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":"b05c2c1605a2cdd89b22576fe9d4d73af2786d67aee78b47e6e02f2713d49752"}},{"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":"84643341414d5767acea471320e7b4f072e4d2c6fc4c183cc69bdaff160b9feb"}},{"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":"6ba74d777a1fa30f1f4662ba5cf0d44cd6927ef3be7221df19b0759340a1308f"}},{"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":"12c7af6aa67a7ef1f1c7516b4db4eca8c286d0bf62e865fd8eacd65d3e01885f"}},{"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":"5faab1feb5a1554589213b41a72d524a8e0d4ec9b8c77260c39a85c86368572d"}},{"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":"52b8c7f07469570922ef423cd92cacc7c907697d8e4cdbdc106b5f03624b719e"}},{"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":"1c0ad1b4f142e4964bbbe508262cb54939fc40fb0cab6fc1166a5a7728c8694b"}},{"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":"830091a201aefdbf3574e2f1ee7c0b61f82e822e17052217211c4f81b4310fba"}},{"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":"32341d3485bc945b9229238364a3aa377e42a38412a04a78f7cc914543bb2f18"}},{"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":"e122556833174922f0632531a1bcbd62d3ce3ea089202ab059be98e5cc514baf"}},{"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":"9440e34e182e46b60accce04dc11999f23dd1626a31b05fe42916dfbb1cc56b1"}},{"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":"7a2515ea3a14b2aa0e1eb230cdb72af93cec3d0160ac1ecc5aa8ea2276ae9887"}},{"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":"08ed3045311c895b8a07b65615e2bdef522d1b08d195f4af47c50e08a483b3df"}},{"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":"5d326b50455547b62c112d6c258f2e796cc5c913aee9a82219d599f954584ceb"}},{"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":"9ea4405c981aafa3b343d932de991d7c0c26fdb4ec5b65c4cc091ac9fffeaf48"}},{"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":"a2a6957381a6754f365e5d662b3f987a96413ddbd1a011c14839aafc865e2eba"}},{"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":"06885dc0bc283e7e72e81662b482045a644d76d55c2db98cce81518a43e17a1d"}},{"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":"aeda892046443a729de9a079c17c349bc3b490f71b81c915c13a2ed5a0565fc4"}},{"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":"c0a62dd00692cd3dbb219d5941358368ea85b01be81dea71d462e653bced25a5"}},{"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":"6a4a43f4a4bf021fc277eeeda510313e9012d568e0e59334b0182b2d0acb079f"}},{"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":"c9b0f3bbd5b5a9238e8f74388c11e3d8b40e0646100c42454395bc848fd46a93"}},{"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":"dac1250a58c7c142d1c9d40b9493112ed8bf31ba253c910b32ca4a59f11e67bc"}},{"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":"f162abd5e908c1fb7297d14908eb055f6cfe80c1b1b0e4db5e192301b7c917d8"}},{"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":"41b14df18e3352436b3e289745f39d035c95b5a4eb11a575cecb1e0fb39017aa"}},{"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":"27edba7120c380252211da2984eeaf77c63a17ca07ee81b0526f224b404d9066"}},{"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":"8c448fc19089e499d6344de389ed99c76bd4d66eb6e33e0e102fddc01bb5acc6"}},{"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":"31e905b093ae790a7fbb027b44cd4373be5428405d13aba5c22b0badb2328dfc"}},{"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":"0d8519c6bc0c579598bac34c0a69353e6da3b8d8cdb6af5ed1e402faed015b5e"}},{"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":"1f5f28cee1727b0584d111c19d39c8e93c67f6bf7fe7b0fd6c0e38a0e973ff72"}},{"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":"864a384762727fda54b047b378da32d75eaffaf35f59330ff406f89d5b2906ef"}},{"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":"d7a60ac1f0ba0efd7bafb0f0406830be33d311f3b1059c73ef10179df8ba99ce"}},{"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":"e1a726fc1636a6c5ee28b26fbd0abe98f98bcb5c033a680a93998fe4f7f7b036"}},{"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":"de01daa0034714e05786ff62107cf19917eb6087d05140d8612a836966ad602b"}},{"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":"34ef3efa4be8bc8e5dc4ece6bab9d582a7df6023255a3468ac7759eff6e571f9"}},{"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":"6c08997e1a0fdfe32274d3538170769c09b6deb11c776978199ecc9dc327e173"}},{"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":"8af57c5db2f8bfd8cd6e175897a786744eccaad024497da8710e03f50cbcd0d7"}},{"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":"25437483086fe3470337a7cdbbbe22501237b202019be30a2ef0b949e6cfc46c"}},{"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":"e5e48e30c27a6dd9bac89606907546f2a26caa6a3ecd68c95908be370d6c6d7a"}},{"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":"f351f2e65d2ddf6d6002186a8214cd7d79becdc9be41cb685d639e32dc71fab3"}},{"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":"a740bd0c3b1819a6100c8b4ca2860f0fab1e1d5ec807209b86d3c6eae01e187f"}},{"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":"67746cdd3bc723bcf39276f386d20725199814597d84d4c11e1b4a0f53ecb0b4"}}],"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-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-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":54,"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."]}]}