{"$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":"D7","name":"Architectural Integrity","shortDescription":{"text":"Architectural Integrity"},"helpUri":"https://codehealth.canine.dev/dimensions/D7"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"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":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D25","name":"ADR Conformance","shortDescription":{"text":"ADR Conformance"},"helpUri":"https://codehealth.canine.dev/dimensions/D25"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D33","name":"JS/npm Dependency Vulnerabilities","shortDescription":{"text":"JS/npm Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D33","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"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":"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":"run (cyclomatic 69): run has cyclomatic complexity 69 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-db-import.js"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfce894c1478c33ab169d1fafe3823146b82e035102d0ffa5c029a57422324a4"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 68): (anonymous) has cyclomatic complexity 68 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":1959}}}],"partialFingerprints":{"codehealthFindingId/v1":"70c7701466464015aedcb6ee07b02b76f0d1e9e4aa7d45ab776c9f1632a293d0"}},{"ruleId":"D1","level":"warning","message":{"text":"run (cyclomatic 64): run has cyclomatic complexity 64 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-overview-api.js"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b21fdd1d949fa97224474865a6d0e7bf0341aa8ebd983208f1afc21d7122387"}},{"ruleId":"D1","level":"warning","message":{"text":"updateTask (cyclomatic 62): updateTask has cyclomatic complexity 62 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"6687063d1a975a1d8b756f9cec23d34e599b21469280101f49b34d10a7bdaf9c"}},{"ruleId":"D1","level":"warning","message":{"text":"run (cyclomatic 60): run has cyclomatic complexity 60 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-dashboard-shell.js"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4695c236cab704584cd8d4e263086926fcdf546710abee70babed636753abf9"}},{"ruleId":"D1","level":"warning","message":{"text":"run (cyclomatic 60): run has cyclomatic complexity 60 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-db-store.js"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"2923f1bcbd4d8a12c735ead4111a483b409e553c9f524e6b7ceb213f2590fd30"}},{"ruleId":"D1","level":"warning","message":{"text":"routePath (cyclomatic 49): routePath has cyclomatic complexity 49 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasGeometry.mjs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"f752288b94b9f2fa0e11ae182b3ff0e98283c8415c1abefc76f06a933848dbe9"}},{"ruleId":"D1","level":"warning","message":{"text":"exerciseEndpoints (cyclomatic 42): exerciseEndpoints has cyclomatic complexity 42 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-db-endpoints.js"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c3ee435cb30371686331e866503046cc01200767ce6f841667a116beec332d"}},{"ruleId":"D1","level":"warning","message":{"text":"runTests (cyclomatic 40): runTests has cyclomatic complexity 40 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-specify-clarify-regression.js"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"c516bcb75787c3118bb90a77104ee99365e3714f8f140e493ddf2e0054a6f2e2"}},{"ruleId":"D1","level":"warning","message":{"text":"run (cyclomatic 39): run has cyclomatic complexity 39 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-update-e2e.js"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"48f95e2af83da36221147fe6633cdaadaf7851c7b98a42de0818218f079ac5cf"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 36): (anonymous) has cyclomatic complexity 36 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/overview.js"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"40d40eb890873ddc87351462fe5a6c8128e37735efa070f011a015a621b04779"}},{"ruleId":"D1","level":"warning","message":{"text":"run (cyclomatic 33): run has cyclomatic complexity 33 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-search-api.js"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"8648278e79e1e6855c688edc10d5e5ea1e4da5294b4c4a111c3276822303b50c"}},{"ruleId":"D1","level":"warning","message":{"text":"run (cyclomatic 33): run has cyclomatic complexity 33 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-db-drift.js"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"07da88bf50a98ca891618c85f600611b790d55a22863b3f5c8b348bda6c7077c"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 33): (anonymous) has cyclomatic complexity 33 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":3076}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae26c70fdb509eaf62640acf6853ac9f1f3a2b17e1fe17740576474c7375107"}},{"ruleId":"D1","level":"warning","message":{"text":"buildOperationalTaskStateMarkdown (cyclomatic 31): buildOperationalTaskStateMarkdown has cyclomatic complexity 31 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/rules-api.js"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"6da55e8dcf914d47930ad830762e74defe116be58b6543e9860338116657bf25"}},{"ruleId":"D1","level":"warning","message":{"text":"getProjectActivity (cyclomatic 31): getProjectActivity has cyclomatic complexity 31 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2191}}}],"partialFingerprints":{"codehealthFindingId/v1":"d807fd353ebd4d479c81428af89185cba4bda14a4b1edaeaa4dd0d0df3b007f9"}},{"ruleId":"D1","level":"warning","message":{"text":"runCli (cyclomatic 30): runCli has cyclomatic complexity 30 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/snippets-doctor.js"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"c237bd19abb59a7ba7b3d233474abb7af26f2a2bfa8a061cd0ba5df4a2d2fefb"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 29): (anonymous) has cyclomatic complexity 29 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":1893}}}],"partialFingerprints":{"codehealthFindingId/v1":"79d227bee2c21b537f7b33b6f28731e58372271421f97658109faf7e230afea2"}},{"ruleId":"D1","level":"warning","message":{"text":"runTests (cyclomatic 28): runTests has cyclomatic complexity 28 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-handoff-smoke-integration.js"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfa280d1fa3225284a967f7d6e4baf86157beba2c87573f787a108e0ff159ead"}},{"ruleId":"D1","level":"warning","message":{"text":"collectStatus (cyclomatic 27): collectStatus has cyclomatic complexity 27 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/snippets-doctor.js"},"region":{"startLine":623}}}],"partialFingerprints":{"codehealthFindingId/v1":"32cb277af2ec58e859dd909baaa5588ded1a722ab8c941902fe263f331a562b1"}},{"ruleId":"D1","level":"warning","message":{"text":"deleteTask (cyclomatic 27): deleteTask has cyclomatic complexity 27 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1146}}}],"partialFingerprints":{"codehealthFindingId/v1":"973ff169b6a721fb62113071313bc7b518e9fd23f1d3d4f04603f419c55829d8"}},{"ruleId":"D1","level":"warning","message":{"text":"buildHandoffMarkdown (cyclomatic 27): buildHandoffMarkdown has cyclomatic complexity 27 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2945}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea8c8371ba219b0346be587ebcd6ab40213408aebd364840fef5a729ccacb8d6"}},{"ruleId":"D1","level":"warning","message":{"text":"call (cyclomatic 27): call has cyclomatic complexity 27 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-fixtures/specify-mock-worker.js"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"646404b74fc3ae615ca7bf88e06dea9b22c1f8dc772f540150773e99b7d0e311"}},{"ruleId":"D1","level":"warning","message":{"text":"passesFilters (cyclomatic 26): passesFilters has cyclomatic complexity 26 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/smart-search.js"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"20526b544cb7015554d90dea81e88c63ff310c55532c2d2afe5ffd04eac94f6a"}},{"ruleId":"D1","level":"warning","message":{"text":"migrateProject (cyclomatic 26): migrateProject has cyclomatic complexity 26 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/migrate-tasks.js"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7bd63cc3bc4b674b71417f4365293486e1290c1d90ddb43b33ad6ec5e553a5e"}},{"ruleId":"D1","level":"warning","message":{"text":"canvasReducer (cyclomatic 26): canvasReducer has cyclomatic complexity 26 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/state/canvasStore.mjs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3e773a254eb9e8a89eb639707a4f95c0495c67c358523f2a28827a34f467480"}},{"ruleId":"D1","level":"warning","message":{"text":"runTests (cyclomatic 25): runTests has cyclomatic complexity 25 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-compliance-detection.js"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"23d59b3e8675fa343f7651fd93986f6db7dfcde1eca8f3d7659c6d5c88104fde"}},{"ruleId":"D1","level":"warning","message":{"text":"createTask (cyclomatic 25): createTask has cyclomatic complexity 25 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"e40d60b95933aab0a0ce6065de4b9f8fdeadfe52c057d0d491484daa20e770f6"}},{"ruleId":"D1","level":"warning","message":{"text":"_normalizeResponse (cyclomatic 24): _normalizeResponse has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-worker-bridge.js"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce5ffde43188041c81ceab183bf51a534b91ecb536146431154ba8fbe27fa940"}},{"ruleId":"D1","level":"warning","message":{"text":"telegramAuthMiddleware (cyclomatic 24): telegramAuthMiddleware has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf4c02fdf8ebbd3e070eab99b44e307681713c0a3ac8733714ef21ff8ff5468f"}},{"ruleId":"D1","level":"warning","message":{"text":"rebuildCache (cyclomatic 24): rebuildCache has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"c451d30651f54f573de3c50fbdbf8d89bd1e2761789d6ca46277cf712fc01e10"}},{"ruleId":"D1","level":"warning","message":{"text":"run (cyclomatic 23): run has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-hzl-integration.js"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5fee60fb28604a7ab5b783cd3c4786bbdd85d6f2a7b2e944ffc914aa4178ae8"}},{"ruleId":"D1","level":"warning","message":{"text":"persistSpecifyProposal (cyclomatic 23): persistSpecifyProposal has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dfcf320d39d096f4dc2a4e9ad2622397bf3bf4c120bf1882b0c2531ca243caf"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 23): (anonymous) has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":2781}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4607a281a6d76f11dbc2459a38146e494a91b32addf0ef392b223f67e3a2e39"}},{"ruleId":"D1","level":"warning","message":{"text":"handleSpecifyStep (cyclomatic 23): handleSpecifyStep has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":2975}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddf8902515ed4469804e1747bacfbf127057d325bc989bc1e0527fea97902346"}},{"ruleId":"D1","level":"warning","message":{"text":"setTaskParent (cyclomatic 23): setTaskParent has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1503}}}],"partialFingerprints":{"codehealthFindingId/v1":"377daee51086b0ada4bf18b95e0d445380bfdb5a2db927493f29a8fe49212e01"}},{"ruleId":"D1","level":"warning","message":{"text":"renderStatusEventMessage (cyclomatic 23): renderStatusEventMessage has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2376}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa6a702180f845d5616cbc2208579f7e1fdff33017e1b17ee696a93e44509eb2"}},{"ruleId":"D1","level":"warning","message":{"text":"fetchInsight (cyclomatic 23): fetchInsight has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/github.js"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"74fb34f4a6dc6cd05b8307894b21e1cb15eb9681315ce4bc3a57f2b734e6e33e"}},{"ruleId":"D1","level":"warning","message":{"text":"runPass (cyclomatic 22): runPass has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-links.js"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"5766ce1ac5e27863f2cf791af992cfffce47f0cfc4c27a75769579fea7fc6a45"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 22): (anonymous) has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/overview.js"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"635fdc60095fb2547feda6224c5776164389c05b66ad46d9cef92a6e972c4f95"}},{"ruleId":"D1","level":"warning","message":{"text":"claimTask (cyclomatic 22): claimTask has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1717}}}],"partialFingerprints":{"codehealthFindingId/v1":"b05a222ffa47c3474e3949bdcd633ad1b635c912122ee07f24fc0908554c4b29"}},{"ruleId":"D1","level":"warning","message":{"text":"addComment (cyclomatic 22): addComment has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2095}}}],"partialFingerprints":{"codehealthFindingId/v1":"24fef4600ab342b8328dcaf5066082cc19deac12e42e20b9e6709730206ec2fe"}},{"ruleId":"D1","level":"warning","message":{"text":"canvasSaveConnection (cyclomatic 22): canvasSaveConnection has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":3467}}}],"partialFingerprints":{"codehealthFindingId/v1":"76781ce279497258487e178c3aea36654536c85ef425423ef37e69ea5017be3b"}},{"ruleId":"D1","level":"warning","message":{"text":"runTests (cyclomatic 21): runTests has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-handoff-package.js"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e34fe4c36f2dc03d84142a9831c57d378f552b0ab194b38b23aaeed89d82e1c"}},{"ruleId":"D1","level":"warning","message":{"text":"_validateQuestion (cyclomatic 21): _validateQuestion has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-policy.js"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"72dffc3efa9045e8d7b3f0ce592b305a50c452fc0e7c182e1c5fa309878be7a9"}},{"ruleId":"D1","level":"warning","message":{"text":"_toFbTask (cyclomatic 21): _toFbTask has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d2987aa05d0a469761201452541d66d36df530c370c40983e7e8c4c57c2327"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 21): (anonymous) has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":3564}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ab7f9c2a3527ef0c9bad73ad0237d1f5b8ddd112150923f5d171639e531025"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 21): (anonymous) has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/tools/ov-audit.mjs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"69a37444153a1d78fab00c62c5e35b24f59e613fa0affce42fde25c0959afd4b"}},{"ruleId":"D1","level":"warning","message":{"text":"parseNode (cyclomatic 21): parseNode has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasMarkdown.mjs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"09feec08161e87f55e60bb2b2a233ed31decfdddf93d95ee93301085bec96542"}},{"ruleId":"D1","level":"warning","message":{"text":"_validateProposal (cyclomatic 20): _validateProposal has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-policy.js"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e8b673038e5418858ce0cfaf3cb9b5998868cbbb6829062820d257a9f4751c4"}},{"ruleId":"D1","level":"warning","message":{"text":"_validateUpdateInput (cyclomatic 20): _validateUpdateInput has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/project-lifecycle.js"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f9ddbe1b046c3d32657653ffefdbd7565ac9fc9dd2d99183070eb6966da41ef"}},{"ruleId":"D1","level":"warning","message":{"text":"getNotifiableStuckTasks (cyclomatic 20): getNotifiableStuckTasks has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2603}}}],"partialFingerprints":{"codehealthFindingId/v1":"a46b28a5cf78cb80b1dfe631386ddd1742e286eb400699387b8fe0b7e0b971b4"}},{"ruleId":"D1","level":"warning","message":{"text":"fetchRepoStatus (cyclomatic 20): fetchRepoStatus has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/github.js"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"78e4f377c4a40b0382a429b27a5f19dbf151d8eada58e52062c18f9ecf5cce48"}},{"ruleId":"D1","level":"warning","message":{"text":"testInfoEndpointPublic (cyclomatic 19): testInfoEndpointPublic has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-t168-t177-integration.js"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"23633d24d24ed27d222500bf9a53b62912ec957e20083aba12b368c0b684dcab"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 19): (anonymous) has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":2141}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4dafd8536dd2f1eb753a76cde7a679fbde531e33e07994876b8919fdc334df4"}},{"ruleId":"D1","level":"warning","message":{"text":"startServer (cyclomatic 19): startServer has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":3897}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a55222d1ef6d02882dfddb8717a58128ea21ae2d322add114e77f8e606c6c4"}},{"ruleId":"D1","level":"warning","message":{"text":"healProject (cyclomatic 19): healProject has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/project-lifecycle.js"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2116e11b88e4393d37e38aeda64702a1154ebc1e9120d41b5f79183c7a1ef48"}},{"ruleId":"D1","level":"warning","message":{"text":"updateProjectMeta (cyclomatic 19): updateProjectMeta has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/flowboard-metadata.js"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"44315764eda22c53b073718ac2c99442030edaba11a6f0fc96af7342982be3ad"}},{"ruleId":"D1","level":"warning","message":{"text":"runPass (cyclomatic 18): runPass has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-dblclick.js"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"e74aa3e59ec88840c77187a4f8a7767956453dcd0bcadccc39fc13a536748b35"}},{"ruleId":"D1","level":"warning","message":{"text":"rankTasks (cyclomatic 18): rankTasks has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/smart-search.js"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"20d2cb5f01774841cdb5a19ae40287f6bec7d4c67af9024f6f7970086f114bc6"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 18): (anonymous) has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":4039}}}],"partialFingerprints":{"codehealthFindingId/v1":"2478f485cf2819614d8728868fe96c636cb53e1dd02e55fe66de89b0f7fcd3b1"}},{"ruleId":"D1","level":"warning","message":{"text":"getComplianceStatus (cyclomatic 18): getComplianceStatus has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2735}}}],"partialFingerprints":{"codehealthFindingId/v1":"caf97496da6d689839b02b3fb6ed70844b82ff6b4ebcc5e16200ea635cdf65d4"}},{"ruleId":"D1","level":"warning","message":{"text":"run (cyclomatic 17): run has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-task-move-reparent.js"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"4154d5dc7e1800bbb9eb6fd1311e3827d71ac698bf45197318fc09d3e8aec4b9"}},{"ruleId":"D1","level":"warning","message":{"text":"call (cyclomatic 17): call has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-worker-openclaw.js"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec65dba761221f33b2f4e3ee58eec76f4d21b1e2771efb5057c42ad4c9f925e4"}},{"ruleId":"D1","level":"warning","message":{"text":"applyActions (cyclomatic 17): applyActions has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/snippets-doctor.js"},"region":{"startLine":733}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb2868d0d177bc1c6bcd383129352af78e31d144f5acc1cbe362cfd41751572"}},{"ruleId":"D1","level":"warning","message":{"text":"moveTaskToProject (cyclomatic 17): moveTaskToProject has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1429}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b905bedb85cc2404d472ddac10086f057513f0eb8702f360d3784b44509b61"}},{"ruleId":"D1","level":"warning","message":{"text":"getOpenQuestions (cyclomatic 17): getOpenQuestions has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2308}}}],"partialFingerprints":{"codehealthFindingId/v1":"404fac7bdd422ac278ef68c7a5da60ba7648b27b93d246db1a21e2a556178c47"}},{"ruleId":"D1","level":"warning","message":{"text":"getStuckTasks (cyclomatic 17): getStuckTasks has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2517}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a1b8490b0445795f9736e1b7f5f1f525c75128d470e79bff31a2578394ba281"}},{"ruleId":"D1","level":"warning","message":{"text":"computePortPositions (cyclomatic 17): computePortPositions has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasGeometry.mjs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d2d7ad63f28d3e9189d0d10f5797a6d13b86985b8ebda04061143528487ff32"}},{"ruleId":"D1","level":"warning","message":{"text":"canvasSaveConnection (cyclomatic 16): canvasSaveConnection has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c2c4cfaa4bd4f740a49605d29d1a48da1e9e5287eda456f8b116a17b275986a"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 16): (anonymous) has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":2435}}}],"partialFingerprints":{"codehealthFindingId/v1":"12d09b5bac0aada59b845b20ce6f350a557cf8ceae75871d3966e640164894e4"}},{"ruleId":"D1","level":"warning","message":{"text":"deleteProject (cyclomatic 16): deleteProject has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/project-lifecycle.js"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7d724b632fefac17fac7e4a376673ef205da9de6a3b7eab9e7ca175004af717"}},{"ruleId":"D1","level":"warning","message":{"text":"classifyAgentId (cyclomatic 16): classifyAgentId has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/agent-identity.js"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a178710757b6a43fa5979bffa1e36b4747d17929b2a5248d6424de49849157"}},{"ruleId":"D2","level":"warning","message":{"text":"updateTask (cognitive 105): updateTask has cognitive complexity 105 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff4fbe3c290f630da51ed3d4180e143dc8ac4e33cb197a29a4645ceae9136f2e"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 92): (anonymous) has cognitive complexity 92 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":1959}}}],"partialFingerprints":{"codehealthFindingId/v1":"da7ce158b6b53c00914aff0fca56a5e61b06984888789696af9eb573731ac0bc"}},{"ruleId":"D2","level":"warning","message":{"text":"routePath (cognitive 89): routePath has cognitive complexity 89 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasGeometry.mjs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"b295ff355710754c6f12feeb4e7ea2cff79d88ac9bc8ddcc86712ad0bec507c8"}},{"ruleId":"D2","level":"warning","message":{"text":"runCli (cognitive 64): runCli has cognitive complexity 64 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/snippets-doctor.js"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"748289c67ad300c2819d866a118c634e9f5df2a269e1ba55c8596dc1ec6d39a6"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 63): run has cognitive complexity 63 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-dashboard-shell.js"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"9611e32cba05f5789307ef9774ca9a1d3bfbee16b7abc1589823a05acb3ac2ce"}},{"ruleId":"D2","level":"warning","message":{"text":"deleteTask (cognitive 57): deleteTask has cognitive complexity 57 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1146}}}],"partialFingerprints":{"codehealthFindingId/v1":"72bfd8cdd1fc22640d435669d0f6aaa8726c4bc6cc76208b26e74e154ab28da9"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 55): run has cognitive complexity 55 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-db-import.js"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"af7e558b1ddbdc96dad6b6781c05ddbd7c11a73e0c7b5be9a856da85fd09b7fc"}},{"ruleId":"D2","level":"warning","message":{"text":"getProjectActivity (cognitive 51): getProjectActivity has cognitive complexity 51 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2191}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b22e4eb7ecaeee7b9cf6d5da7de914ea2a301e647a4823eed18bed53a2e6e1a"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 50): run has cognitive complexity 50 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-overview-api.js"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebfba38c9fc97f8ecbbb0c7c84bbeb759aa3487ad1c3d2750997a5670ce90602"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 49): (anonymous) has cognitive complexity 49 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/tools/ov-audit.mjs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"61889fc29fb8a670e05c81d7204499e711eb516c16322b6439f9929391469f66"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 48): run has cognitive complexity 48 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-db-store.js"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1652ba3a98beb4bc1176efc2b73643d651dad66d7874ae98fd2fd7b5365b9008"}},{"ruleId":"D2","level":"warning","message":{"text":"buildOperationalTaskStateMarkdown (cognitive 45): buildOperationalTaskStateMarkdown has cognitive complexity 45 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/rules-api.js"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb3fc3a5bf7fabddd29fabc52caadbc7aec0df24c961ff0ad668e39b256f09a8"}},{"ruleId":"D2","level":"warning","message":{"text":"migrateProject (cognitive 42): migrateProject has cognitive complexity 42 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/migrate-tasks.js"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"c727d6e9300a3074c4dff8c71026c011c2ad66c0b6e247942e5cedfa8aa82ecc"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 40): run has cognitive complexity 40 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-update-e2e.js"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"78828556d8211a2f45a7767c891f3db7c37840f648a807a400abd5ddb76818d5"}},{"ruleId":"D2","level":"warning","message":{"text":"rebuildCache (cognitive 40): rebuildCache has cognitive complexity 40 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4a14b636e023d70e93b28828db63609d3f2cbe2d4625bc027740e6387cf9acb"}},{"ruleId":"D2","level":"warning","message":{"text":"runTests (cognitive 39): runTests has cognitive complexity 39 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-specify-clarify-regression.js"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"da9a050bf8705b66097d6650cf8b7c3c2261e3b2dbeedeebb3e3c2b37686f790"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 38): (anonymous) has cognitive complexity 38 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/overview.js"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a9f04f4aadf1020af5d5a4d1b5211784c6ffe350cfa4cf1a9bba6c127c9c5c0"}},{"ruleId":"D2","level":"warning","message":{"text":"collectStatus (cognitive 36): collectStatus has cognitive complexity 36 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/snippets-doctor.js"},"region":{"startLine":623}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e64cb348e79c07b3f6e56eb35c40c8c089e69fcce1293015f8f9719a4aee53e"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 36): (anonymous) has cognitive complexity 36 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":3076}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ed14a92fe7e86c3bc0e3f2b6f6cc009cd4d13e59cae3380d125db20aef7efcf"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 35): run has cognitive complexity 35 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-search-api.js"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"0859bd192f1b81678ecdea96d22f6d11b24691d362621e7d91c332063774201f"}},{"ruleId":"D2","level":"warning","message":{"text":"passesFilters (cognitive 35): passesFilters has cognitive complexity 35 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/smart-search.js"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"908584e0a8a0d4c964989912c70c2349a641fd65aa685840ea8cf7a2a1749d85"}},{"ruleId":"D2","level":"warning","message":{"text":"buildHandoffMarkdown (cognitive 33): buildHandoffMarkdown has cognitive complexity 33 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2945}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ff03aeffc44a3e34975fe3cc74af11498f282fc6856dfe4e6553365d73aee9"}},{"ruleId":"D2","level":"warning","message":{"text":"fetchInsight (cognitive 33): fetchInsight has cognitive complexity 33 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/github.js"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce9339a8b79d707dd14c57e545b88de8960e7ab84b314fbc8a954b5ba31f1285"}},{"ruleId":"D2","level":"warning","message":{"text":"call (cognitive 33): call has cognitive complexity 33 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-fixtures/specify-mock-worker.js"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dabde117122cfde487fbeefbec7dc5da5b2d2239a57e377f1162a9cb2ce3e5e"}},{"ruleId":"D2","level":"warning","message":{"text":"exerciseEndpoints (cognitive 32): exerciseEndpoints has cognitive complexity 32 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-db-endpoints.js"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"709ba842e78dcd17d2ce23be30ef99c49c8a16b1ed8ae162dc724395b2e79822"}},{"ruleId":"D2","level":"warning","message":{"text":"_validateUpdateInput (cognitive 32): _validateUpdateInput has cognitive complexity 32 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/project-lifecycle.js"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0a888a0cc460cc071df9f0d96d3c9c1701c6e61e9d56cff7082eb40bc6e0924"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 31): run has cognitive complexity 31 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-db-drift.js"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"26691bb91526ca9afe51254635ed3add05145acde0981ea7eb1c7c26faab16ff"}},{"ruleId":"D2","level":"warning","message":{"text":"_validateQuestion (cognitive 31): _validateQuestion has cognitive complexity 31 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-policy.js"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a5d3c284a10942ee6ac95f391165faf2d62f1d979951ef7927a666702381d7"}},{"ruleId":"D2","level":"warning","message":{"text":"applyActions (cognitive 31): applyActions has cognitive complexity 31 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/snippets-doctor.js"},"region":{"startLine":733}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ccccf52efecbcb99120325e8e5362b88fc6d3d87b48559efb7f4b7299448fe9"}},{"ruleId":"D2","level":"warning","message":{"text":"rankTasks (cognitive 31): rankTasks has cognitive complexity 31 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/smart-search.js"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9aa9be009593201f7224da174bd7bceacbe0cda1a7be19dc79db31e3f76114c"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 31): (anonymous) has cognitive complexity 31 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":1893}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dac8ae9167f5ca7a35be3ec16206eb412165890dbbf88de8e9277df65fa8235"}},{"ruleId":"D2","level":"warning","message":{"text":"getComplianceStatus (cognitive 31): getComplianceStatus has cognitive complexity 31 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2735}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1972b7f3e7c3bfe2d808c8a835be6f18282b1e6365015d84d3ff30ae65aedf5"}},{"ruleId":"D2","level":"warning","message":{"text":"startServer (cognitive 30): startServer has cognitive complexity 30 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":3897}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ce253ef34960f30a5f345822672dc896a0eebb5cef523f57ad813247ce42306"}},{"ruleId":"D2","level":"warning","message":{"text":"createTask (cognitive 30): createTask has cognitive complexity 30 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"cda268c283b18d7d5fa0822fb9fbf3a86341261aacf7d53bd36b0645660dcd83"}},{"ruleId":"D2","level":"warning","message":{"text":"renderStatusEventMessage (cognitive 30): renderStatusEventMessage has cognitive complexity 30 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2376}}}],"partialFingerprints":{"codehealthFindingId/v1":"433f3f5ad9e13196726db3f3977688022937aa39889327ad39bf7bde2020c7c1"}},{"ruleId":"D2","level":"warning","message":{"text":"_validateProposal (cognitive 29): _validateProposal has cognitive complexity 29 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-policy.js"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e7a87fb10de8703b7fb874d4982942e7b462ee3f5ad3c4b63041d3fc3690da"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 29): (anonymous) has cognitive complexity 29 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/overview.js"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"70372c63d7c1986f8ca32d707ce5c15e21d1d726024591b4ffad5d28644a27f9"}},{"ruleId":"D2","level":"warning","message":{"text":"renderNoteMarkdown (cognitive 29): renderNoteMarkdown has cognitive complexity 29 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasMarkdown.mjs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3389391aa097968fba4c98ba7d4e2211f5944c8470db3549962b2fdc8a1e402"}},{"ruleId":"D2","level":"warning","message":{"text":"parseNode (cognitive 28): parseNode has cognitive complexity 28 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasMarkdown.mjs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa01264a48cb41bc744868324d1cfd5c4036d5bb59085cba6cf2692d9620b12d"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 27): run has cognitive complexity 27 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-hzl-integration.js"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ec50bad5af0af67194cee6fc6c2366cc09bf998ba09c628ec841593e0a9e0c0"}},{"ruleId":"D2","level":"warning","message":{"text":"runTests (cognitive 27): runTests has cognitive complexity 27 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-handoff-smoke-integration.js"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"08d7c999217e5d5fec049fc4959c66a2481a80c68f294e4222c34434070b4b2e"}},{"ruleId":"D2","level":"warning","message":{"text":"setTaskParent (cognitive 27): setTaskParent has cognitive complexity 27 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1503}}}],"partialFingerprints":{"codehealthFindingId/v1":"430361055853d297ce9bd3d0b6afbdd4f024f6b7440a6dfea7c65936556de3e8"}},{"ruleId":"D2","level":"warning","message":{"text":"handleSpecifyStep (cognitive 26): handleSpecifyStep has cognitive complexity 26 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":2975}}}],"partialFingerprints":{"codehealthFindingId/v1":"a758dd19403dabea47ef06bb042ad5fdb308a2b4be391f5cf0925978b1fbcbce"}},{"ruleId":"D2","level":"warning","message":{"text":"updateProjectMeta (cognitive 26): updateProjectMeta has cognitive complexity 26 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/flowboard-metadata.js"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"36ebf2780d5a056cb2ec510f69063707576de89a6b62f9fc878e2e8ddfec5b67"}},{"ruleId":"D2","level":"warning","message":{"text":"persistSpecifyProposal (cognitive 25): persistSpecifyProposal has cognitive complexity 25 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"56e23be78f8029637b7411808125f04f17fe040c5380feb54b59f31b3edeb31d"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 25): (anonymous) has cognitive complexity 25 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":2141}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f5f3b88db85afe16e44f2a386af3778bfee325cffd5ffb0c74a9f32a30bfbd4"}},{"ruleId":"D2","level":"warning","message":{"text":"getNotifiableStuckTasks (cognitive 25): getNotifiableStuckTasks has cognitive complexity 25 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2603}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d676d8241197a05613eb94d09d345ec18aa5b59421d676be2421df329c80cd"}},{"ruleId":"D2","level":"warning","message":{"text":"canvasSaveConnection (cognitive 25): canvasSaveConnection has cognitive complexity 25 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":3467}}}],"partialFingerprints":{"codehealthFindingId/v1":"e080c94d2a10d15dbe618e1d82df9163f76d06193efe970690dd6c49499eb3b1"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 25): (anonymous) has cognitive complexity 25 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":3564}}}],"partialFingerprints":{"codehealthFindingId/v1":"e787417ecfe35b290d8d0ec10075337138046c3617944e46faac3203d4959725"}},{"ruleId":"D2","level":"warning","message":{"text":"runTests (cognitive 24): runTests has cognitive complexity 24 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-compliance-detection.js"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9ef155c365cdcbd0ff9da235174607c3dcf2ebfe526498bb725ade385352413"}},{"ruleId":"D2","level":"warning","message":{"text":"_normalizeResponse (cognitive 24): _normalizeResponse has cognitive complexity 24 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-worker-bridge.js"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"c53d021cd6c8068b4323358b41703978380ba64b97b898c3f9b3c8880699c807"}},{"ruleId":"D2","level":"warning","message":{"text":"extractJsonObject (cognitive 23): extractJsonObject has cognitive complexity 23 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-worker-openclaw.js"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"3991f7ddfbdd10592b169ee5a925b8e1c49ba7499f913ae94db389493982fb1d"}},{"ruleId":"D2","level":"warning","message":{"text":"addComment (cognitive 23): addComment has cognitive complexity 23 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2095}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f558d0d56b026aedccb5be6f2cf99c69b6d7078166fff3e7550e2591a97b7cb"}},{"ruleId":"D2","level":"warning","message":{"text":"getStuckTasks (cognitive 23): getStuckTasks has cognitive complexity 23 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2517}}}],"partialFingerprints":{"codehealthFindingId/v1":"190ea3cc44afdc5d5c8d2fab21dc321034d06af231e6145d0b7ff024d50067fa"}},{"ruleId":"D2","level":"warning","message":{"text":"autoPlaceNote (cognitive 23): autoPlaceNote has cognitive complexity 23 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/canvas-placement.js"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4584d32496e39d6bbe4c48fdc7ed0387cc640253102fdea9548013b1a951f28"}},{"ruleId":"D2","level":"warning","message":{"text":"main (cognitive 23): main has cognitive complexity 23 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/install-trigger.mjs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7635fd396175172d9350fd00322ef2034641ac58c902ee06131feeae768b522"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 22): (anonymous) has cognitive complexity 22 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":2781}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a2d2b4e99622552d89c6607f0db585b6e54eda8f81059a1f8ddd774a857b17"}},{"ruleId":"D2","level":"warning","message":{"text":"deleteProject (cognitive 22): deleteProject has cognitive complexity 22 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/project-lifecycle.js"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e96c8dd109087be2dd00f4684d7e87ecef0ce149d3bd42221aa62797bfd42cf"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 22): run has cognitive complexity 22 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/migrations.js"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"327fe51a80d37bd914d2bccaace8ab1cab5083faa64328aeb5ee3e4794237ce3"}},{"ruleId":"D2","level":"warning","message":{"text":"fetchRepoStatus (cognitive 22): fetchRepoStatus has cognitive complexity 22 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/github.js"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"213194be3500271046f1503dded0f6ec3ecf84ca8dc925edfd85e43b593f405e"}},{"ruleId":"D2","level":"warning","message":{"text":"runPass (cognitive 21): runPass has cognitive complexity 21 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-links.js"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"069a91803833337c1303ed2ea21ba43868fdf66aa763677c4519a54a634b870d"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 21): (anonymous) has cognitive complexity 21 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":4039}}}],"partialFingerprints":{"codehealthFindingId/v1":"3076fe9454029010e527b5d717af427d4069d0f58c858cc6e472587120458ecb"}},{"ruleId":"D2","level":"warning","message":{"text":"getOpenQuestions (cognitive 21): getOpenQuestions has cognitive complexity 21 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2308}}}],"partialFingerprints":{"codehealthFindingId/v1":"88dd00727eaf6b7e3459181aa82f924cf073a76b6732ed6d0e945759d136d2d8"}},{"ruleId":"D2","level":"warning","message":{"text":"computePortPositions (cognitive 21): computePortPositions has cognitive complexity 21 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasGeometry.mjs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb985921aff5c886b94fb62c6b1fdd471b956b5fff606c04388952b6650d21f8"}},{"ruleId":"D2","level":"warning","message":{"text":"runTests (cognitive 20): runTests has cognitive complexity 20 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-handoff-package.js"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"805d763d423ba3892704bbd4582c5e5da0434d7b370fac1873c58032f61fd822"}},{"ruleId":"D2","level":"warning","message":{"text":"createSession (cognitive 20): createSession has cognitive complexity 20 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-sessions.js"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"01744c9cbb484148e3b9d9478a18e1c40fad2964536f64ba43971c74370c01be"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 20): (anonymous) has cognitive complexity 20 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":3208}}}],"partialFingerprints":{"codehealthFindingId/v1":"26bada9fc21f957552487b1d709c2cd851649450230aa8d96e4468f065364f0c"}},{"ruleId":"D2","level":"warning","message":{"text":"moveTaskToProject (cognitive 20): moveTaskToProject has cognitive complexity 20 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1429}}}],"partialFingerprints":{"codehealthFindingId/v1":"859e52247aeb15f1d33003adb14245364a3cf3bee417fd4b5996defe46e904f7"}},{"ruleId":"D2","level":"warning","message":{"text":"getCheckpointHealth (cognitive 20): getCheckpointHealth has cognitive complexity 20 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2673}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c89feb9029a6dbd82752e249c7ff30b8a4f0f5d8f9666b28b1ddc9c91459710"}},{"ruleId":"D2","level":"warning","message":{"text":"buildStuckNotifications (cognitive 19): buildStuckNotifications has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/stuck-notify.js"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2d60f19c242b8534190adb33a30aa2bc1098fcf875ba3724ec0ab895e269784"}},{"ruleId":"D2","level":"warning","message":{"text":"parseQuery (cognitive 19): parseQuery has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/smart-search.js"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c60b1f904d76a0ae1497ac415238cfd1bd301bfa43afe20ff25746f8b505c3"}},{"ruleId":"D2","level":"warning","message":{"text":"telegramAuthMiddleware (cognitive 19): telegramAuthMiddleware has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"68b51225838dd2f4fe51d2ecfa51b72b6b8aa6f95b9692020d82a28b2cc4f155"}},{"ruleId":"D2","level":"warning","message":{"text":"canvasSaveConnection (cognitive 19): canvasSaveConnection has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"406c86821cd71a684af819cb112ebcfe2c1e46cf5ce8a23ccb90e69b05b874fe"}},{"ruleId":"D2","level":"warning","message":{"text":"healProject (cognitive 19): healProject has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/project-lifecycle.js"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec77950b24a439a39e7da5737b2c5b3d8a8f0d002bf1a1e33a5dfceabf1ad24"}},{"ruleId":"D2","level":"warning","message":{"text":"main (cognitive 19): main has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/migrate-tasks.js"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"f16d737b8aca574acf0aaa88ad17329eeddc3bc30f05a1145f7dba1a427ced6e"}},{"ruleId":"D2","level":"warning","message":{"text":"claimTask (cognitive 19): claimTask has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1717}}}],"partialFingerprints":{"codehealthFindingId/v1":"2494d6a8adda87e12f5e1f699b8b9712210ac7e292a8b753261e02dd21ef4150"}},{"ruleId":"D2","level":"warning","message":{"text":"getActiveSubtaskClaims (cognitive 19): getActiveSubtaskClaims has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/parentActivity.mjs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebdb1b961eed0ae3de6776a386e4a631f407bbb0319afe25f7e47cd384f3dcd4"}},{"ruleId":"D2","level":"warning","message":{"text":"manhattanPath (cognitive 19): manhattanPath has cognitive complexity 19 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasGeometry.mjs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"560dec806922b1736c300f8aa7445db20b854e79f9a4c6f76b478023d12c0899"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 18): run has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-task-move-reparent.js"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"56c19d6005d39c41b25040e41f5ed623686790d9e3405514ec26c68369f94f5d"}},{"ruleId":"D2","level":"warning","message":{"text":"testInfoEndpointPublic (cognitive 18): testInfoEndpointPublic has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-t168-t177-integration.js"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"29dfbef8200b3fa0d8bd5ffeef14cf93040d1a98f0bc8d32da26b91017a945b7"}},{"ruleId":"D2","level":"warning","message":{"text":"runPass (cognitive 18): runPass has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-dblclick.js"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aeb6d362118b54b1c2ed847038de42f0e188698aa5e9002fd5aaea19f588544"}},{"ruleId":"D2","level":"warning","message":{"text":"call (cognitive 18): call has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/specify-worker-openclaw.js"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"9813d4a82627251b20103e6eaacb378a2508ffaf1cb0e5a895369a6b22b77fca"}},{"ruleId":"D2","level":"warning","message":{"text":"_toFbTask (cognitive 18): _toFbTask has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa4b3f63850f29eb95160e7aab266d6b6a899800ed5c04381098e460339a716f"}},{"ruleId":"D2","level":"warning","message":{"text":"getTaskSummary (cognitive 18): getTaskSummary has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1219}}}],"partialFingerprints":{"codehealthFindingId/v1":"010d5e5f13af8e06d3b9ae186b8ba7e35610cce36d6831155a9532b772fb4816"}},{"ruleId":"D2","level":"warning","message":{"text":"buildConnectedPorts (cognitive 18): buildConnectedPorts has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/canvasGeometry.mjs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ec3d4afddbd711891a4228b3518872bd96469ab0be69ba7b09abab2aa5d178a"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 17): run has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-file-visibility-api.js"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"7333b2acd6575ad311afd12e785bbe6303b3c0488aa094f51d64617bdbb95600"}},{"ruleId":"D2","level":"warning","message":{"text":"resolveProjectFile (cognitive 17): resolveProjectFile has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":2310}}}],"partialFingerprints":{"codehealthFindingId/v1":"f87ecf723d82babb54488f848aa4c68e62f811832d236ffd1a052761ab7295ed"}},{"ruleId":"D2","level":"warning","message":{"text":"getProjectStats (cognitive 17): getProjectStats has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1264}}}],"partialFingerprints":{"codehealthFindingId/v1":"2442d46e7b38069fd21725ca1f95f4d9c781c3a7edafe0210759b38d03a3c3bd"}},{"ruleId":"D2","level":"warning","message":{"text":"smartSearchTasks (cognitive 17): smartSearchTasks has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1594}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3a9c8f5ce2d888d2a72982fe6d4c8c268180ddeae7f3757f6a4e163ac9b934e"}},{"ruleId":"D2","level":"warning","message":{"text":"getProjectActivityDaily (cognitive 17): getProjectActivityDaily has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2263}}}],"partialFingerprints":{"codehealthFindingId/v1":"68019fcd94d2ce08c0445866e89c14f0a2c6da8d60e040f94b556c7def70518d"}},{"ruleId":"D2","level":"warning","message":{"text":"getHandoffContext (cognitive 17): getHandoffContext has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":2812}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b6f2a1ae82bea7eef9f9aba5fce731cf908dea6629e0d1bdb42b63ac3e8d6f"}},{"ruleId":"D2","level":"warning","message":{"text":"pollUntilUpdated (cognitive 17): pollUntilUpdated has cognitive complexity 17 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/utils/appUpdate.mjs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"75d273c35522d09c5297cbbb100e2c96f6f1fd970d9897b72bc5544f63db9880"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 16): run has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-inline-editor.js"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccf824db90df373e452e15da6f089285b99815a29632a32a7a80cba09d5232e1"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 16): run has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-canvas-create-task-smoke.js"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4d6da29dc03fded17b0098bf16323e88b75cd29eac648e83152ad9636148347"}},{"ruleId":"D2","level":"warning","message":{"text":"findSnippetRegion (cognitive 16): findSnippetRegion has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/snippets-doctor.js"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb0e7bd6dcb3c2e790871a24f4438c638d152c2be06615f42c4c355c9ee2b67e"}},{"ruleId":"D2","level":"warning","message":{"text":"cleanCanvasData (cognitive 16): cleanCanvasData has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":780}}}],"partialFingerprints":{"codehealthFindingId/v1":"7134466b06cca89992b4cd8ac03aea1cb1df4e238ccc5f8d2d09b14b76ff3618"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 16): (anonymous) has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":1549}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e507ebeda78d0db50f43a6df0f48cf4096d17f114f2a379a6e38f7679e6ea42"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 16): run has cognitive complexity 16 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/migrations.js"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"a82482cdfbb792407fc4c25e81c0076358898a07a7f3be17b959e3f22b7413e2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dashboard/server.js: FileTooLong \u2014 2518 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"008b5d40300ae85dacbdc97cf4e4b820ae9bac944a1fc68dbf8c6e10dd84e684"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dashboard/hzl-service.js: FileTooLong \u2014 2201 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"451c2716c76aa7400c229574c5ff99f16c6501508638d63928dfa55d8a04a2ad"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dashboard/test-snippets-doctor.js: FileTooLong \u2014 674 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-snippets-doctor.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3121f6a64912edccdd2d7ec0866f1e4d99cfb3bda902024ac4161323324dce84"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dashboard/snippets-doctor.js: FileTooLong \u2014 626 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/snippets-doctor.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92e0ceb3dec278352e57e33f8f6f27b32164c7320cd09ba51f6fba294382833d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dashboard/test-t168-t177-integration.js: FileTooLong \u2014 604 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-t168-t177-integration.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aad83e96e4216b4b885647d85509c54db998eb01982656be3889dc3f36b43fd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dashboard/test-dashboard-shell.js: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units), about 95% of them inside a single declaration: run (45-662). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-dashboard-shell.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"deb4f139abaaec368aa759414ef966e161563bc9014cae5acfc4d046e7032dfe"}},{"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":"D15","level":"warning","message":{"text":"Hotspot: dashboard/server.js: dashboard/server.js changed 78 times in last 90 days, max complexity 68. 32 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/server.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"76165b3b3e5ed3a82f8514b6d88d52ed07ef0007ad34d7baa2d12d7c28aaa008"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/hzl-service.js: dashboard/hzl-service.js changed 37 times in last 90 days, max complexity 62. 15 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/hzl-service.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c39a97de55218cda4ac70d46c3b703369b3580eddf6ee007e4e4c7d9875f3ae"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/test-dashboard-shell.js: dashboard/test-dashboard-shell.js changed 23 times in last 90 days, max complexity 60. 7 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-dashboard-shell.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"07407d60432ec03d17a71e08ceb89bbcc98c89faf6a6d77ea5bc7ba42fc304bd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/src/components/overview/widgets2.jsx: dashboard/src/components/overview/widgets2.jsx changed 34 times in last 90 days, max complexity 38. 18 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/components/overview/widgets2.jsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da44ed39cd5505e8db0c89ecca2a4ebd24eb70cdd4f21a726b01e9e734b8d64"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/src/pages/TasksView.jsx: dashboard/src/pages/TasksView.jsx changed 35 times in last 90 days, max complexity 36. 23 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/pages/TasksView.jsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4760123c676567cda1cdaea975e8023b95ae1017a459b06fc8bdcbd3864141bb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/src/components/DetailPanel.jsx: dashboard/src/components/DetailPanel.jsx changed 18 times in last 90 days, max complexity 66. 8 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/components/DetailPanel.jsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"992374e8ec093cdf081dae456593739f5f009f96a848cfd672467fe0337b09c2"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/test-overview-api.js: dashboard/test-overview-api.js changed 14 times in last 90 days, max complexity 64. 6 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/test-overview-api.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4215056999dc1c03d712c0d71e72be1f90ac32f75071504479988fb0ddb7c5b5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/overview.js: dashboard/overview.js changed 21 times in last 90 days, max complexity 36. 12 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/overview.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"be92223561b4750ede5817d7a44573d97629438ca5c7c82c44d0afc47f684be8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/src/components/SnippetUpgrade.jsx: dashboard/src/components/SnippetUpgrade.jsx changed 7 times in last 90 days, max complexity 93. 4 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/components/SnippetUpgrade.jsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bc1608841efb1814131b0984f90156f0a6723151c50fc3b5708842b1101f9ae"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: dashboard/src/pages/OverviewView.jsx: dashboard/src/pages/OverviewView.jsx changed 33 times in last 90 days, max complexity 19. 24 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/pages/OverviewView.jsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9d4d01ec606fd6ce9b7e2bd0ce8850d873a5ec3928a2c7850debb39758fd0ea"}},{"ruleId":"D16","level":"note","message":{"text":"Small-team knowledge concentration: 167 file(s) are concentrated to one author \u2014 the ambient state with 2 active author(s), not 167 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 Project Mode section explains how the server serves rule sections but does not state which rule sections are available or where they live in the docs tree (e.g., under /api/projects/:name/rules).: Add a brief list of the currently served rule sections and their locations so new contributors can find them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/project-mode/README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"76d70c29430649dd1d26c26e93226d121d1770ef99a20a0dc8a19dfc7eb6d992"}},{"ruleId":"D25","level":"error","message":{"text":"ADR not followed: ADR-0002: /api/status requires an explicit agentId: /api/status still accepts a no-arg GET request without an explicit agentId parameter despite the ADR\u0027s mandated explicit agentId. (docs/adr/0002-api-status-requires-agent-id.md)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/adr/0002-api-status-requires-agent-id.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af83553a54ffc8354a3e00602afccb43d72a7af956aac1ebb44479f98969a874"}},{"ruleId":"D25","level":"error","message":{"text":"ADR not followed: ADR-0003: The dashboard service has no agent identity: The public type \u0060AGENT_ID\u0060 constant is present, contradicting the decision that the dashboard has no agent identity. (docs/adr/0003-dashboard-has-no-agent-identity.md)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/adr/0003-dashboard-has-no-agent-identity.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa800d40dff085efede4336978d501b04c1c44b073fc6a3ddb1410ca3ca7e305"}},{"ruleId":"D25","level":"error","message":{"text":"ADR not followed: ADR-0009: \u0060blocked\u0060 is a flag, not a status: \u0027blocked\u0027 is a public type in the summary, contradicting the ADR that it must be a boolean flag on metadata.flowboard.blocked. (docs/adr/0009-blocked-as-flag-not-status.md)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/adr/0009-blocked-as-flag-not-status.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c78cd44dc1377f3f3e10defc6306ff1393422764ee3ad0bbe0e21ca57aa38a"}},{"ruleId":"D25","level":"error","message":{"text":"ADR not followed: ADR-0021: Specify worker runs as OpenClaw CLI one-shot \u2014 no dedicated agent, no FlowBoard LLM layer: The summary exposes no public type naming a dedicated OpenClaw CLI agent or FlowBoard LLM layer, contradicting the one-shot worker-as-OpenClaw-CLI decision. (docs/adr/0021-specify-worker-openclaw-cli.md)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/adr/0021-specify-worker-openclaw-cli.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b8fa9210b3635bf918d2a7068ad020695add6bba609fd2bed61d268858d0601"}},{"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":"c8012c42d297dc9578a0981eaaa3ed7c6e73ed5aa3dc41882e27c10ca099fea5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"860eac9ee94b9b3742f3319aa02e695a1a79f73587089893cffd7fb51295cfde"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"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":"3485272b8bface3ec27cb40a8f97917ec6c27267947a5be065848662f49db9f4"},"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":"6e22a7e1f2aadb2283a9b02303e2d15545a45c3702f904e8536e153dd0a1e4f3"},"taxa":[{"id":"CWE-22","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":"bdaa0555b31ebcd28f31eaf1a479a20f5796f4d70442c04ef2c67c63f6874262"},"taxa":[{"id":"CWE-22","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":"7d14e677cb3ea85c892a9350697a8e4ead1bcbf7a781739f59d4a5a9ae82004f"},"taxa":[{"id":"CWE-22","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":"3954a61c3e2f879588451379174c930d70fb7b204e9ca5847c03828736a21bd8"},"taxa":[{"id":"CWE-22","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":"68e9c7eef215e91071779d8295b6cea2fd9457d9669416122b93f21e8f61b8e5"},"taxa":[{"id":"CWE-22","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":"08b24a41eddce9c216722c36ef88e85cf22137e14d387040d89df99621190619"},"taxa":[{"id":"CWE-22","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":"dc1d0ab2993a4ed597809c85526d9a54740ee2eedb0d1b1362dc246e7067767f"},"taxa":[{"id":"CWE-22","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":"ac6c6fffe53738e0d112985fcda65fbfd25bb2c5abbe74e376bb70160b31c3a5"},"taxa":[{"id":"CWE-22","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":"0871cbc14ebc2fc0bb8c2ed57e3cdaf1d0cece532ed468560c5ef7f7c37e1f4d"},"taxa":[{"id":"CWE-22","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":"de511785e59732f4edf54e6c41926efb096e9bd48aebcbe83ca90b5e9e85c631"},"taxa":[{"id":"CWE-22","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":"b2901f01fa768e79bc4618216690fffe754ce324754f18117a0daa596d46a6ce"},"taxa":[{"id":"CWE-22","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":"47e7ae5fac3b3e763c99d7ff6b61d80fbe8c8d072ab4e0b3c383972c21b0d437"},"taxa":[{"id":"CWE-22","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":"a6a7e5d877d16b3680b648ec55b459fa98da3b4ef7b1263682b283be0a0719d8"},"taxa":[{"id":"CWE-798","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":"81b3d61243485bb2cdbf78d63012701af06999b745ba0470ca76e341329d88c6"},"taxa":[{"id":"CWE-798","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":"b285c8a2c71d9584d3505abd9156693c30fdd901e707360c770756e057dd55ee"},"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":"acbd42db55fdb5e886c1ceafadce2bc907f68e2b8367cfa631730841b6efa3cc"},"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":"eff7ce76d16ddeadefceea82b0c697f69e7da7af3dbc7bb23e2696f28b76f5e2"},"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":"71ba1bce2c0e45c796a6063a6b78187e6f86de54737e930ffa128482f5109d75"},"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":"f7f46ea970bf9bb98287d13fdbc262c94bbbb088b0505a4de895a20e40aa533d"},"taxa":[{"id":"CWE-319","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":"a0329ee39f47dc1af26ddc23e9ba57effe9d61b731c5e45128139aa10d501612"},"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":"3c3c6e29e9ab0fae96d56e18381b0e50176d209d90c2d3ae52674e1018895de4"},"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":"317aeea64bb2be9cdbd9242b985e4c40d8f098f91a0f2324623b41f170d28f64"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: overview.js \u2194 test-overview-api.js: \u0060dashboard/overview.js\u0060 and \u0060dashboard/test-overview-api.js\u0060 change together 71% of the time (10 of the 14 commits that touched the less-changed of the two, renames followed) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/overview.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2d7e8fb76cc5d0f9c7992f98ed1ddccecc0e3fefc617b0b886071e9a5bfe4be"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: Button.jsx \u2194 Input.jsx: \u0060dashboard/src/components/Button.jsx\u0060 and \u0060dashboard/src/components/Input.jsx\u0060 change together 70% of the time (7 of the 10 commits that touched the less-changed of the two, renames followed) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dashboard/src/components/Button.jsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b5389ca0e9d3d994690302afc7e39921f868e7721d1f7145b86609bb37dbf81"}},{"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":"3c3bb43453c9451923bfbf5335b5aae5e00ab0a612932c0bc93d959cb3b81e1e"}},{"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":"1b24e7f01ac04a0a09bbdf24a8576d6f8cfe8effe499b45f455b04f040653a42"}},{"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":"5beacdc36f77613f98c04544bd481f0db46f9bcdae294d0c5c93cfeca95d871d"}},{"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":"c4ca3c4ec2c8d46387c6263629bb0ea20c3a476cd79886ad792857c58160f583"}},{"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":"da44b41e5eef31333afd8e8f816b281eb7e7e5f90b6f7ee624ca5fa5b7a5c575"}},{"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":"07f4970d7aebeb9dd7aefbafd33beafeffb861aa18296667766db1bd8a6ff474"}},{"ruleId":"D38","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"58228fb83b5b6d9d8f0638ed3da6c7eb5a5637545fd2d5cd5779e09c5c7d08da"}}],"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-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-22","guid":"b68d9ca7-bdde-d057-a6cc-9f8b1e739552","name":"CWE-22","shortDescription":{"text":"CWE-22"},"helpUri":"https://cwe.mitre.org/data/definitions/22.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-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-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":32,"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."]}]}