{"$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":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"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":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"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":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","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":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D32","name":"Data Compliance (PII/GDPR)","shortDescription":{"text":"Data Compliance (PII/GDPR)"},"helpUri":"https://codehealth.canine.dev/dimensions/D32","relationships":[{"target":{"id":"CWE-359","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-312","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-200","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-359","CWE-312","CWE-200"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"AC1","name":"Text alternatives","shortDescription":{"text":"Text alternatives"},"helpUri":"https://codehealth.canine.dev/dimensions/AC1"},{"id":"AC2","name":"Forms \u0026 labels","shortDescription":{"text":"Forms \u0026 labels"},"helpUri":"https://codehealth.canine.dev/dimensions/AC2"},{"id":"AC3","name":"Page structure","shortDescription":{"text":"Page structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AC3"},{"id":"AC4","name":"Keyboard semantics","shortDescription":{"text":"Keyboard semantics"},"helpUri":"https://codehealth.canine.dev/dimensions/AC4"},{"id":"AC5","name":"ARIA correctness","shortDescription":{"text":"ARIA correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/AC5"},{"id":"AC6","name":"Visual \u0026 motion safety","shortDescription":{"text":"Visual \u0026 motion safety"},"helpUri":"https://codehealth.canine.dev/dimensions/AC6"},{"id":"AC7","name":"A11y enforcement","shortDescription":{"text":"A11y enforcement"},"helpUri":"https://codehealth.canine.dev/dimensions/AC7"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX5","name":"Architecture \u0026 structure","shortDescription":{"text":"Architecture \u0026 structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AX5"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"P7","name":"Outbound HTTP resilience","shortDescription":{"text":"Outbound HTTP resilience"},"helpUri":"https://codehealth.canine.dev/dimensions/P7"},{"id":"P8","name":"Schema migrations","shortDescription":{"text":"Schema migrations"},"helpUri":"https://codehealth.canine.dev/dimensions/P8"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"id":"R1","name":"Type Safety","shortDescription":{"text":"Type Safety"},"helpUri":"https://codehealth.canine.dev/dimensions/R1"},{"id":"R10","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/R10"},{"id":"R11","name":"Import Boundaries","shortDescription":{"text":"Import Boundaries"},"helpUri":"https://codehealth.canine.dev/dimensions/R11"},{"id":"R2","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/R2"},{"id":"R3","name":"Large Files","shortDescription":{"text":"Large Files"},"helpUri":"https://codehealth.canine.dev/dimensions/R3"},{"id":"R4","name":"Test Coverage","shortDescription":{"text":"Test Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/R4"},{"id":"R5","name":"Dependency Freshness","shortDescription":{"text":"Dependency Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/R5"},{"id":"R6","name":"Tooling","shortDescription":{"text":"Tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/R6"},{"id":"R7","name":"Dead Code","shortDescription":{"text":"Dead Code"},"helpUri":"https://codehealth.canine.dev/dimensions/R7"},{"id":"R8","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/R8"},{"id":"R9","name":"Circular Imports","shortDescription":{"text":"Circular Imports"},"helpUri":"https://codehealth.canine.dev/dimensions/R9"},{"id":"S1","name":"Web-Security Posture","shortDescription":{"text":"Web-Security Posture"},"helpUri":"https://codehealth.canine.dev/dimensions/S1"},{"id":"SC1","name":"Supply-chain hygiene","shortDescription":{"text":"Supply-chain hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/SC1"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"SpelTyper.typeNode (cyclomatic 143): SpelTyper.typeNode has cyclomatic complexity 143 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea931f8e346c5bdc1210623af2f505c74c2b6416a4ec645c6774b30cb1eebc9d"}},{"ruleId":"D1","level":"warning","message":{"text":"useDataMapper.useDataMapper (cyclomatic 117): useDataMapper.useDataMapper has cyclomatic complexity 117 (threshold 15). Most of this is not in the body itself: 1 of the 117 points is its own statement and the rest belongs to 32 function literals inside it that branch (lines 197, 477, 289, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/useDataMapper.ts"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"00292fc7f3d0549fac632dd5135d1cb8b9e9846afb0292a090042eb0c3e2af3a"}},{"ruleId":"D1","level":"warning","message":{"text":"CompareVersionsDialog.VersionsForm (cyclomatic 62): CompareVersionsDialog.VersionsForm has cyclomatic complexity 62 (threshold 15). Most of this is not in the body itself: 14 of the 62 points are its own statements and the rest belongs to 22 function literals inside it that branch (lines 319, 214, 397, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/CompareVersionsDialog.tsx"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a3a598969934b3518a07d894c57cb48603a2e6d919d75d01d26717ad3bddd8a"}},{"ruleId":"D1","level":"warning","message":{"text":"FromJsonTypingResultBasedDecoder.decodeValue (cyclomatic 55): FromJsonTypingResultBasedDecoder.decodeValue has cyclomatic complexity 55 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/json/decoders/FromJsonTypingResultBasedDecoder.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"efc9bc5b641fbfe4bc4ca2304a7aa32616b3c2022a5d3ffaf404f729c563ed88"}},{"ruleId":"D1","level":"warning","message":{"text":"drawText.buildFragmentsForTokens (cyclomatic 44): drawText.buildFragmentsForTokens has cyclomatic complexity 44 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 26 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/drawText.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"778a5eb0bca3b6d5fa01da8c26be3ab50c3a12e72038fada0265f3425fab7240"}},{"ruleId":"D1","level":"warning","message":{"text":"reducer.graphReducer (cyclomatic 44): reducer.graphReducer has cyclomatic complexity 44 (threshold 15). Of this number, 33 points are the body\u0027s own statements and 11 belong to 7 function literals inside it that branch. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/reducer.ts"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"061aab9c571bc4a489c87b204783b29daa6e0188db81733dc241d36d85772429"}},{"ruleId":"D1","level":"warning","message":{"text":"DbScenarioActivityRepository.fromEntity (cyclomatic 43): DbScenarioActivityRepository.fromEntity has cyclomatic complexity 43 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/activities/DbScenarioActivityRepository.scala"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"06267f0be745c472c0883985a100c36ab58c51139680a40a8040a8755bf58378"}},{"ruleId":"D1","level":"warning","message":{"text":"FieldRow.FieldRow (cyclomatic 43): FieldRow.FieldRow has cyclomatic complexity 43 (threshold 15). Of this number, 39 points are the body\u0027s own statements and 4 belong to 4 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/FieldRow.tsx"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"a376e0c27d489f55997edf9ca5cdb548f3dfd055fa4f6b6be9ac2d2c0b266891"}},{"ruleId":"D1","level":"warning","message":{"text":"InterpreterInternal.interpretNode (cyclomatic 42): InterpreterInternal.interpretNode has cyclomatic complexity 42 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"3018fd8fbf5565ee9bb034faac1c3f92c86a474093a55526ea3d72c4fcec4f87"}},{"ruleId":"D1","level":"warning","message":{"text":"ContextTreeNode.ContextTreeNode (cyclomatic 41): ContextTreeNode.ContextTreeNode has cyclomatic complexity 41 (threshold 15). Of this number, 34 points are the body\u0027s own statements and 7 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/builderComponents/ContextTreeNode.tsx"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dfabb873d8eb9572a670192d01e47ea77eaf658ba728bca752bbfbc1ef19408"}},{"ruleId":"D1","level":"warning","message":{"text":"SpelExpressionSuggester.expressionSuggestionsAux (cyclomatic 39): SpelExpressionSuggester.expressionSuggestionsAux 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":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelExpressionSuggester.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"360ea801001baaef39ce5e5d77d46ceb39adbbcb3d79450ec3cd878e1b62d020"}},{"ruleId":"D1","level":"warning","message":{"text":"Table.Table (cyclomatic 39): Table.Table has cyclomatic complexity 39 (threshold 15). Most of this is not in the body itself: 7 of the 39 points are its own statements and the rest belongs to 14 function literals inside it that branch (lines 184, 213, 244, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/Table.tsx"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"6920485d141447532973830dc2ca5903a4d014f20e7e2f52f66c23d6586d1f8c"}},{"ruleId":"D1","level":"warning","message":{"text":"ScenarioLabels.ScenarioLabels (cyclomatic 37): ScenarioLabels.ScenarioLabels has cyclomatic complexity 37 (threshold 15). Most of this is not in the body itself: 3 of the 37 points are its own statements and the rest belongs to 17 function literals inside it that branch (lines 289, 385, 171, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioDetails/ScenarioLabels.tsx"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"36181ac2ed6cf056e8bbec79680af90ae63c469ef901e7e5d52749c2b2d65439"}},{"ruleId":"D1","level":"warning","message":{"text":"DataMapper.DataMapper (cyclomatic 32): DataMapper.DataMapper has cyclomatic complexity 32 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 13 belong to 7 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/DataMapper.tsx"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"f623ecfc77a806fcd56f92e7ce189659e793b399d055701e1af6adcc69be7348"}},{"ruleId":"D1","level":"warning","message":{"text":"FieldSwitch.FieldSwitch (cyclomatic 31): FieldSwitch.FieldSwitch has cyclomatic complexity 31 (threshold 15). Most of this is not in the body itself: 7 of the 31 points are its own statements and the rest belongs to 12 function literals inside it that branch (lines 214, 94, 141, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/field/FieldSwitch.tsx"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e5eeee9db258d87247369e123ea2984fb25ddbe9145f11d789664fff92980e6"}},{"ruleId":"D1","level":"warning","message":{"text":"DictKeyParameterAdapter.adaptDictKeyExpressionToAvailableEditors (cyclomatic 27): DictKeyParameterAdapter.adaptDictKeyExpressionToAvailableEditors has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/dict/DictKeyParameterAdapter.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1671439cdf3a7ba80427a499e5b08d18c39414830dc643aacb4c045aedb4e02"}},{"ruleId":"D1","level":"warning","message":{"text":"ButtonRoot.ButtonRoot (cyclomatic 27): ButtonRoot.ButtonRoot has cyclomatic complexity 27 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 10 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarButtons/ButtonRoot.tsx"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"860347dffba5796643f3aaebe819480dec2cb2b23a99d935334e02a2f56d803a"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeSwitcherUtils.adjustEdges (cyclomatic 27): NodeSwitcherUtils.adjustEdges has cyclomatic complexity 27 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 11 belong to 6 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/NodeSwitcherUtils.tsx"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7f86826baf365e1247c9cb6ac3d67883d0b40ef9197c7bb4117ba1d86e3b4a1"}},{"ruleId":"D1","level":"warning","message":{"text":"ConditionBuilder.ConditionBuilder (cyclomatic 26): ConditionBuilder.ConditionBuilder has cyclomatic complexity 26 (threshold 15). Most of this is not in the body itself: 8 of the 26 points are its own statements and the rest belongs to 11 function literals inside it that branch (lines 63, 90, 98, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionBuilder.tsx"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"6424f0107572fff630041679ec0604af5fb372e79fdce09c33ab4da12b8ce6b9"}},{"ruleId":"D1","level":"warning","message":{"text":"FlinkProcessRegistrar.register (cyclomatic 25): FlinkProcessRegistrar.register has cyclomatic complexity 25 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"abe0c7a70b1c92148f6294d0a989746bc96d29aa53e11e6fe9b539c727c6b2b2"}},{"ruleId":"D1","level":"warning","message":{"text":"Variable.Variable (cyclomatic 25): Variable.Variable has cyclomatic complexity 25 (threshold 15). Most of this is not in the body itself: 7 of the 25 points are its own statements and the rest belongs to 7 function literals inside it that branch (lines 124, 269, 108, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/Variable.tsx"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1ebac8bd878a8a6d8545e19c48f9a4595b8403602f1a062841227b5b306e6a2"}},{"ruleId":"D1","level":"warning","message":{"text":"useActivitiesSearch.useActivitiesSearch (cyclomatic 25): useActivitiesSearch.useActivitiesSearch has cyclomatic complexity 25 (threshold 15). Most of this is not in the body itself: 1 of the 25 points is its own statement and the rest belongs to 6 function literals inside it that branch (lines 107, 59, 73, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/useActivitiesSearch.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0a1041bc9a6dbb1e6a83a95cfcb6801d233e433bd8d9a025d66255d4e34f19e"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectionContextProvider.SelectionContextProvider (cyclomatic 24): SelectionContextProvider.SelectionContextProvider has cyclomatic complexity 24 (threshold 15). Most of this is not in the body itself: 1 of the 24 points is its own statement and the rest belongs to 6 function literals inside it that branch (lines 231, 153, 168, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/SelectionContextProvider.tsx"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c91064a486bf8b483487fb85d66db42c9a6b9e098b3b54bf4786d80c332e2d6"}},{"ruleId":"D1","level":"warning","message":{"text":"PrettyValidationErrors.mapIdErrorToNodeError (cyclomatic 23): PrettyValidationErrors.mapIdErrorToNodeError has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: PrettyValidationErrors.formatErrorMessage (cyclomatic 69) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/validation/PrettyValidationErrors.scala"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dc93326db8a44dff20d6f25dea50d6f82760b16d145f6b059d8b0c26cd9d970"}},{"ruleId":"D1","level":"warning","message":{"text":"FromJsonSchemaBasedDecoder.decode (cyclomatic 23): FromJsonSchemaBasedDecoder.decode has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/swagger/decode/FromJsonSchemaBasedDecoder.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"0737835b914a4cf2b30f188d349b17550ff5c6b8cb67d3e670cb4bfb4b2f11e3"}},{"ruleId":"D1","level":"warning","message":{"text":"ToolbarWrapper.ToolbarWrapper (cyclomatic 23): ToolbarWrapper.ToolbarWrapper has cyclomatic complexity 23 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 4 belong to 4 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarWrapper/ToolbarWrapper.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"9835da53e36bfbbc2b9767132d6b710967bc00b3643765842d80326640173863"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionCompiler.compileNodeParameters (cyclomatic 22): ExpressionCompiler.compileNodeParameters has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/ExpressionCompiler.scala"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"806e42ca2f490085d32b92c917d8fb8849890046f0f86322ea342128648f3339"}},{"ruleId":"D1","level":"warning","message":{"text":"TableEditor.Table (cyclomatic 22): TableEditor.Table has cyclomatic complexity 22 (threshold 15). Of this number, 11 points are the body\u0027s own statements and 11 belong to 7 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Table/TableEditor.tsx"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"858247491424c0d75eb4d8e9ef33dd46d03e9330426da71bf1c923f293aa052e"}},{"ruleId":"D1","level":"warning","message":{"text":"DeployButton.DeployButton (cyclomatic 22): DeployButton.DeployButton has cyclomatic complexity 22 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 10 belong to 5 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioActions/buttons/DeployButton.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"d858d48f3d749524f3fafd8f5df519432095f692e643b472eff83abd6e11ae15"}},{"ruleId":"D1","level":"warning","message":{"text":"RedeployButton.RedeployButton (cyclomatic 22): RedeployButton.RedeployButton has cyclomatic complexity 22 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 10 belong to 5 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioActions/buttons/RedeployButton.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae18409d27a856ddd6a88c6ebf142bbb8e1c9c1778627f39c031f7110d213b46"}},{"ruleId":"D1","level":"warning","message":{"text":"drawText.tokenizeDataRecords (cyclomatic 22): drawText.tokenizeDataRecords has cyclomatic complexity 22 (threshold 15). Most of this is not in the body itself: 3 of the 22 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 70, 63, 68, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/drawText.ts"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d9388eaa8d75a3ff07526dcbe8d39cc0090239ecce29a8edb2358c642ba3185"}},{"ruleId":"D1","level":"warning","message":{"text":"AssignabilityDeterminer.isSingleTypeMatchesTargetObjType (cyclomatic 21): AssignabilityDeterminer.isSingleTypeMatchesTargetObjType has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/AssignabilityDeterminer.scala"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"59efbec9a92b45f85eeadf9d01ccec557ecaf56ce5b75f17366365fe0010c710"}},{"ruleId":"D1","level":"warning","message":{"text":"reducer.reducer (cyclomatic 21): reducer.reducer has cyclomatic complexity 21 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 7 belong to 7 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Table/state/reducer.ts"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"457ec6a178328c3cf8aebacf785ee622c9afd34495b9b83b662c118de3833e81"}},{"ruleId":"D1","level":"warning","message":{"text":"useDataRecordsActions.useDataRecordsActions (cyclomatic 21): useDataRecordsActions.useDataRecordsActions has cyclomatic complexity 21 (threshold 15). Most of this is not in the body itself: 1 of the 21 points is its own statement and the rest belongs to 10 function literals inside it that branch (lines 140, 22, 39, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/useDataRecordsActions.ts"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"400b729b4126a848e3c8bdd8ae7473bc6d700b5bf1b53aff6bf61ce20b8e4965"}},{"ruleId":"D1","level":"warning","message":{"text":"LiveDataThroughputs.LiveDataThroughputs (cyclomatic 21): LiveDataThroughputs.LiveDataThroughputs has cyclomatic complexity 21 (threshold 15). Most of this is not in the body itself: 2 of the 21 points are its own statements and the rest belongs to 9 function literals inside it that branch (lines 80, 114, 37, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/liveData/LiveDataThroughputs.tsx"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"399a5108016c387f8c3f6bdb8dc71f60a16fc23c762604aeb41f06ead7b9d21b"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonTemplateFromJsonSchemaDeterminer.defaultValueBasedOnSchema (cyclomatic 20): JsonTemplateFromJsonSchemaDeterminer.defaultValueBasedOnSchema has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/JsonTemplateFromJsonSchemaDeterminer.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"0711be01e99713d3a928c9e4271e0482c1cf415770407e6350a5852cbc265331"}},{"ruleId":"D1","level":"warning","message":{"text":"Selection.getValueRef (cyclomatic 20): Selection.getValueRef has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/java/org/springframework/expression/spel/ast/Selection.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"088997c06e87bbddfb8457ace593bb41a913109d45b3519574e6a4d4a3d426e1"}},{"ruleId":"D1","level":"warning","message":{"text":"collapsibleSwitchList.CollapsibleSwitchList (cyclomatic 20): collapsibleSwitchList.CollapsibleSwitchList has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 1 of the 20 points is its own statement and the rest belongs to 3 function literals inside it that branch (lines 105, 82, 100). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/settings/collapsibleSwitchList.tsx"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"cda3e570c0cc4680403cd1ded4906504e78bc81c8f905deee7b5186be1d271dd"}},{"ruleId":"D1","level":"warning","message":{"text":"use-mouse-sensor.useMouseSensor (cyclomatic 20): use-mouse-sensor.useMouseSensor has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 1 of the 20 points is its own statement and the rest belongs to 5 function literals inside it that branch (lines 220, 292, 335, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"899d60e83b3c11b06db3a1d401ad1ff7291aa54232798536ce520b6121bfdbf8"}},{"ruleId":"D1","level":"warning","message":{"text":"NumberUtils.convertNumberToTargetClass (cyclomatic 19): NumberUtils.convertNumberToTargetClass has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/utils/src/main/java/org/springframework/util/NumberUtils.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"504c00c4ba42324af8bb6e0d885275b42c5f72ad8c66ea2d2a12be9e9bf0fb68"}},{"ruleId":"D1","level":"warning","message":{"text":"SpelExpressionBuilder.SpelExpressionBuilder (cyclomatic 19): SpelExpressionBuilder.SpelExpressionBuilder has cyclomatic complexity 19 (threshold 15). Of this number, 10 points are the body\u0027s own statements and 9 belong to 4 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/spelExpressionBuilder/SpelExpressionBuilder.tsx"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a4ccbb3430f20a3cc60859b6336a0a8367035dc2e8bac74fc02dc06e4a0e4dc"}},{"ruleId":"D1","level":"warning","message":{"text":"extendActivitiesWithUIData.extendActivitiesWithUIData (cyclomatic 19): extendActivitiesWithUIData.extendActivitiesWithUIData has cyclomatic complexity 19 (threshold 15). Most of this is not in the body itself: 1 of the 19 points is its own statement and the rest belongs to 4 function literals inside it that branch (lines 41, 100, 126, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/helpers/extendActivitiesWithUIData.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"65965c3635fad9ea72d994c0fe885e1b8441ecadb639856dc08d7466578510db"}},{"ruleId":"D1","level":"warning","message":{"text":"ProcessUtils._findVariablesDefinedInProcess (cyclomatic 19): ProcessUtils._findVariablesDefinedInProcess has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/ProcessUtils.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7ecb48db8e2925277fa58e0bcf201f986b67c3460bc398944e65d87e1d4cf60"}},{"ruleId":"D1","level":"warning","message":{"text":"NuSpelExpressionParser.skipToCorrectEndSuffix (cyclomatic 18): NuSpelExpressionParser.skipToCorrectEndSuffix has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/parser/NuSpelExpressionParser.java"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9ab6303ed255b944b44778f9e6dd6517acbddd331f1d7c6c2f9d7829881d1b9"}},{"ruleId":"D1","level":"warning","message":{"text":"CustomCompleterAceEditor.CustomCompleterAceEditor (cyclomatic 18): CustomCompleterAceEditor.CustomCompleterAceEditor has cyclomatic complexity 18 (threshold 15). Of this number, 9 points are the body\u0027s own statements and 9 belong to 7 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/CustomCompleterAceEditor.tsx"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"9be00f61913cae6f7f1a534255a5ede3381f4455a173b42c33d682f7486b8a6e"}},{"ruleId":"D1","level":"warning","message":{"text":"ToolbarsContainer.ToolbarsContainer (cyclomatic 18): ToolbarsContainer.ToolbarsContainer has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 2 of the 18 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 145, 200, 193, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/ToolbarsContainer.tsx"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"9af5682cfb1906517eca669c45c9b0550d2ff7fa8f4708f67e61b67b386ed7fd"}},{"ruleId":"D1","level":"warning","message":{"text":"InputOutputLayout.InputOutputLayout (cyclomatic 18): InputOutputLayout.InputOutputLayout has cyclomatic complexity 18 (threshold 15). Of this number, 9 points are the body\u0027s own statements and 9 belong to 6 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/io/InputOutputLayout.tsx"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"0769339d32759ebeb8d8764aac12a48ffc7f431632cc93eb605401fa60e2ffb3"}},{"ruleId":"D1","level":"warning","message":{"text":"NameValueListEditor.NameValueListEditor (cyclomatic 18): NameValueListEditor.NameValueListEditor has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 4 of the 18 points are its own statements and the rest belongs to 8 function literals inside it that branch (lines 62, 131, 56, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/NameValueList/NameValueListEditor.tsx"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d7db65d0743b25c0db6f79e3f64e97ddca79be3c4766b1b001b4339853fa5aa"}},{"ruleId":"D1","level":"warning","message":{"text":"DeploymentService.runDeploymentOrRedeploy (cyclomatic 17): DeploymentService.runDeploymentOrRedeploy has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentService.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9ae7b4fcaba549ddb83cd5f075a9475277da6198b973f14553ddeb9d770a840"}},{"ruleId":"D1","level":"warning","message":{"text":"spelUtils.parseConditionAst (cyclomatic 17): spelUtils.parseConditionAst has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/spelUtils.ts"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa6527251e80b55f36dd02d331d2285b96d69fb1405b1c661a91a7beb6406919"}},{"ruleId":"D1","level":"warning","message":{"text":"EdgeFields.EdgeFields (cyclomatic 17): EdgeFields.EdgeFields has cyclomatic complexity 17 (threshold 15). Of this number, 9 points are the body\u0027s own statements and 8 belong to 4 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/EdgeFields.tsx"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2ab112db495150b396f96e9a5dab3ee6225d0cf03e95da6bba55de366fb10fe"}},{"ruleId":"D1","level":"warning","message":{"text":"EdgesDndComponent.EdgesDndComponent (cyclomatic 17): EdgesDndComponent.EdgesDndComponent has cyclomatic complexity 17 (threshold 15). Most of this is not in the body itself: 3 of the 17 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 105, 139, 137, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/EdgesDndComponent.tsx"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"29accc6671d9b870ecacf904dbb2df1f1d727112713c23fcf197b2155f97871e"}},{"ruleId":"D1","level":"warning","message":{"text":"typeUtils.typingResultToSample (cyclomatic 16): typeUtils.typingResultToSample has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/builderComponents/typeUtils.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"0feaf5148cd39d221c28aea9a508b9a0ac932726b353d89953273f745c40b297"}},{"ruleId":"D1","level":"warning","message":{"text":"Variable.refClazzToValue (cyclomatic 16): Variable.refClazzToValue has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/Variable.tsx"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a925e78d6557f0de178b7c80cb070fa4964358655300cd993fb0787a42d5f4"}},{"ruleId":"D1","level":"warning","message":{"text":"ActivityItemHeader.HeaderActivity (cyclomatic 16): ActivityItemHeader.HeaderActivity has cyclomatic complexity 16 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/ActivityPanelRowItem/ActivityItemHeader.tsx"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"26814ead483b280498b3c6052622dabb39bbcc170f213f5fff3847002cc8b8b1"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeCreationHandler.useNodeCreationHandler (cyclomatic 16): NodeCreationHandler.useNodeCreationHandler has cyclomatic complexity 16 (threshold 15). Most of this is not in the body itself: 3 of the 16 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 42, 18, 104, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/NodeCreationHandler.tsx"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"532820ad4fffb553808751a671571e8be745ba75271d7647bd64a702030f5f84"}},{"ruleId":"D1","level":"warning","message":{"text":"usagesTable.UsagesTable (cyclomatic 16): usagesTable.UsagesTable has cyclomatic complexity 16 (threshold 15). Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to 11 function literals inside it that branch (lines 66, 195, 74, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/components/usages/usagesTable.tsx"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"721c6c6116d103a2a1acd0a73366c93f1baad1d4e82c9fc123fa28b36c3b4903"}},{"ruleId":"D2","level":"warning","message":{"text":"SpelTyper.typeNode (cognitive 146): SpelTyper.typeNode has cognitive complexity 146 (threshold 15). Drivers by points: if/else 45 (59 pts), match/switch 32 (51 pts), loops 10 (27 pts), boolean chains 9 (nesting depth added 50). 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":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"f84fc6781efef4135dcf5510e11896fa9ac622d1272cfdb03e90319e4adc7d27"}},{"ruleId":"D2","level":"warning","message":{"text":"useDataMapper.useDataMapper (cognitive 125): useDataMapper.useDataMapper has cognitive complexity 125 (threshold 15). Drivers by points: if/else 49 (64 pts), ternaries 19 (32 pts), boolean chains 26, loops 2, error handling 1 (nesting depth added 28). Most of this is not in the body itself: 0 of the 125 points are its own statements and the rest belongs to 32 function literals inside it that branch (lines 197, 289, 477, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/useDataMapper.ts"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"71e90f8ea6c6e95bf75af900f29117e20968dfe3a93826c5bb1105d45d35976b"}},{"ruleId":"D2","level":"warning","message":{"text":"drawText.buildFragmentsForTokens (cognitive 116): drawText.buildFragmentsForTokens has cognitive complexity 116 (threshold 15). Drivers by points: if/else 33 (95 pts), loops 4 (9 pts), boolean chains 7, ternaries 2 (5 pts) (nesting depth added 70). Of this number, 40 points are the body\u0027s own statements and 76 belong to 2 function literals inside it that branch. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/drawText.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0fcfdebc9109229fc40ab85a98033da8412599df74598072333f497e31852a8"}},{"ruleId":"D2","level":"warning","message":{"text":"SpelExpressionSuggester.expressionSuggestionsAux (cognitive 107): SpelExpressionSuggester.expressionSuggestionsAux has cognitive complexity 107 (threshold 15). Drivers by points: match/switch 8 (40 pts), loops 9 (36 pts), if/else 20 (28 pts), boolean chains 3 (nesting depth added 67). 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":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelExpressionSuggester.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"aef8ee0b2f592e60240de3a1e13c5b711473405cd0aa16e79192c2fa1d6fa85e"}},{"ruleId":"D2","level":"warning","message":{"text":"DbScenarioActivityRepository.fromEntity (cognitive 62): DbScenarioActivityRepository.fromEntity has cognitive complexity 62 (threshold 15). Drivers by points: loops 24 (61 pts), match/switch 1 (nesting depth added 37). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/activities/DbScenarioActivityRepository.scala"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"a046aa5ffb0b6f98e316d4cb69202e28cc614cfbdeb8a762efad5ed7b857c14f"}},{"ruleId":"D2","level":"warning","message":{"text":"K8sDeploymentManager.runDeployment (cognitive 56): K8sDeploymentManager.runDeployment has cognitive complexity 56 (threshold 15). Drivers by points: loops 10 (55 pts), match/switch 1 (nesting depth added 45). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentManager.scala"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"89c8bc851e2db12f3191509d12c4faf6aec53c5216d8d8997dc247cbc123f000"}},{"ruleId":"D2","level":"warning","message":{"text":"DomainServices.create (cognitive 55): DomainServices.create has cognitive complexity 55 (threshold 15). Drivers by points: loops 10 (55 pts) (nesting depth added 45). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/factory/DomainServices.scala"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b76a36f5b77ae686059469f7088ae04f24099b2b45c865fea2a48c15a58f7ca"}},{"ruleId":"D2","level":"warning","message":{"text":"NussknackerAppFactory.createApp (cognitive 55): NussknackerAppFactory.createApp has cognitive complexity 55 (threshold 15). Drivers by points: loops 10 (55 pts) (nesting depth added 45). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/factory/NussknackerAppFactory.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb9fdf914856a2118a165eb28d3d88429389cc7064fd922147285c86a22bce1d"}},{"ruleId":"D2","level":"warning","message":{"text":"CompareVersionsDialog.VersionsForm (cognitive 51): CompareVersionsDialog.VersionsForm has cognitive complexity 51 (threshold 15). Drivers by points: if/else 16 (18 pts), boolean chains 16, ternaries 15 (16 pts), match/switch 1 (nesting depth added 3). Most of this is not in the body itself: 14 of the 51 points are its own statements and the rest belongs to 22 function literals inside it that branch (lines 486, 397, 176, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/CompareVersionsDialog.tsx"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"535d827cc8cc3d3f90b0c09546db79fca7912415306e3e50d2f69eb79ae1b21c"}},{"ruleId":"D2","level":"warning","message":{"text":"FromJsonTypingResultBasedDecoder.decodeValue (cognitive 47): FromJsonTypingResultBasedDecoder.decodeValue has cognitive complexity 47 (threshold 15). Drivers by points: loops 9 (26 pts), if/else 7 (12 pts), match/switch 5 (9 pts) (nesting depth added 26). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/json/decoders/FromJsonTypingResultBasedDecoder.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bab8b5d06f538128fc2fa44939dfe57f8fcd9a0c31d761d5370bce9199a7a41"}},{"ruleId":"D2","level":"warning","message":{"text":"ContextTreeNode.ContextTreeNode (cognitive 46): ContextTreeNode.ContextTreeNode has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 24 (37 pts), boolean chains 7, if/else 2 (nesting depth added 13). Of this number, 44 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"designer/client/src/components/builderComponents/ContextTreeNode.tsx"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"5907362422a14d7dd64ed79c6f6396858d61ca314f08b6b15507835f4960251d"}},{"ruleId":"D2","level":"warning","message":{"text":"ScenarioLabels.ScenarioLabels (cognitive 46): ScenarioLabels.ScenarioLabels has cognitive complexity 46 (threshold 15). Drivers by points: if/else 18 (26 pts), ternaries 7 (12 pts), boolean chains 8 (nesting depth added 13). Most of this is not in the body itself: 2 of the 46 points are its own statements and the rest belongs to 17 function literals inside it that branch (lines 184, 171, 289, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioDetails/ScenarioLabels.tsx"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fdcb77af3c3da5ab33a270bb0191390bd2350fe22cb72a96a9901872d40c613"}},{"ruleId":"D2","level":"warning","message":{"text":"NumberUtils.convertNumberToTargetClass (cognitive 45): NumberUtils.convertNumberToTargetClass has cognitive complexity 45 (threshold 15). Drivers by points: if/else 18 (42 pts), boolean chains 3 (nesting depth added 24). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/utils/src/main/java/org/springframework/util/NumberUtils.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7a3728972190c45a47dba12948dfd6fd31bde8558934d3ae591b1dbcf8b7382"}},{"ruleId":"D2","level":"warning","message":{"text":"FieldRow.FieldRow (cognitive 40): FieldRow.FieldRow has cognitive complexity 40 (threshold 15). Drivers by points: ternaries 14 (23 pts), boolean chains 15, if/else 2 (nesting depth added 9). Of this number, 37 points are the body\u0027s own statements and 3 belong to 4 function literals inside it that branch. 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":"designer/client/src/components/dataMapper/FieldRow.tsx"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"15e0d82347042de50cae4aedc08624d0087e78d567b05ccdf5bc748f190aeef0"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeSwitcherUtils.adjustEdges (cognitive 39): NodeSwitcherUtils.adjustEdges has cognitive complexity 39 (threshold 15). Drivers by points: if/else 10 (20 pts), loops 4 (7 pts), boolean chains 6, ternaries 3 (5 pts), match/switch 1 (nesting depth added 15). Of this number, 25 points are the body\u0027s own statements and 14 belong to 6 function literals inside it that branch. 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":"designer/client/src/components/graph/node-modal/NodeSwitcherUtils.tsx"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bf255c6e9841b6d4c71ed1ac71a03b74129b6a6504fc34ddd22e201d74778f3"}},{"ruleId":"D2","level":"warning","message":{"text":"Table.Table (cognitive 39): Table.Table has cognitive complexity 39 (threshold 15). Drivers by points: if/else 20 (23 pts), boolean chains 9, ternaries 5 (6 pts), loops 1 (nesting depth added 4). Most of this is not in the body itself: 3 of the 39 points are its own statements and the rest belongs to 14 function literals inside it that branch (lines 229, 86, 213, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/Table.tsx"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"30948fc77f28592a3462876a3e6acea5fcd5f5f8c726d749356c3f9ce61488d7"}},{"ruleId":"D2","level":"warning","message":{"text":"Selection.getValueRef (cognitive 38): Selection.getValueRef has cognitive complexity 38 (threshold 15). Drivers by points: if/else 14 (30 pts), boolean chains 3, loops 1 (2 pts), ternaries 1 (2 pts), error handling 1 (nesting depth added 18). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/java/org/springframework/expression/spel/ast/Selection.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bc04c22dc90c865e73adc0a642b5c14ca95ded0fc7652d2cd6dfce65096b458"}},{"ruleId":"D2","level":"warning","message":{"text":"useActivitiesSearch.useActivitiesSearch (cognitive 38): useActivitiesSearch.useActivitiesSearch has cognitive complexity 38 (threshold 15). Drivers by points: if/else 13 (28 pts), boolean chains 5, loops 4 (5 pts) (nesting depth added 16). Most of this is not in the body itself: 0 of the 38 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 107, 59, 73, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/useActivitiesSearch.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e48e87d54513242f939e590363fa248726b3692bf0d11e1b788107148bacf5"}},{"ruleId":"D2","level":"warning","message":{"text":"Migration.migrate (cognitive 36): Migration.migrate has cognitive complexity 36 (threshold 15). Drivers by points: loops 8 (36 pts) (nesting depth added 28). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/db/migration/V1_058__UpdateAndAddMissingScenarioActivitiesDefinition.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"847dedcb536e87e68c44589f2a4c4defa54555dcffe3b4a007eef2f5a99a9f8e"}},{"ruleId":"D2","level":"warning","message":{"text":"MigrationService.migrateCurrentScenarioDescription (cognitive 36): MigrationService.migrateCurrentScenarioDescription has cognitive complexity 36 (threshold 15). Drivers by points: loops 8 (36 pts) (nesting depth added 28). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/migrations/MigrationService.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"297ab7f01f248b5df31a527342bfab9b3bae6a26cc85f17a79a2855e5e43d8e5"}},{"ruleId":"D2","level":"warning","message":{"text":"NuRuntimeApp.createProgram (cognitive 36): NuRuntimeApp.createProgram has cognitive complexity 36 (threshold 15). Drivers by points: loops 8 (36 pts) (nesting depth added 28). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime-app/src/main/scala/pl/touk/nussknacker/engine/lite/app/NuRuntimeApp.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5980f554ebd8f3baa07818bd545fd7bc09d9983f339ae10ac5ea6dbc38681fd"}},{"ruleId":"D2","level":"warning","message":{"text":"CaseClassTypeInfo.getFlatFields (cognitive 35): CaseClassTypeInfo.getFlatFields has cognitive complexity 35 (threshold 15). Drivers by points: if/else 15 (21 pts), match/switch 3 (11 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 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":"engine/flink/scala-utils/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinfo/caseclass/CaseClassTypeInfo.scala"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"633e4596e59ca53eb14ef7f3a1596990da69be7348d4d78920b270aab5a759eb"}},{"ruleId":"D2","level":"warning","message":{"text":"ButtonRoot.ButtonRoot (cognitive 33): ButtonRoot.ButtonRoot has cognitive complexity 33 (threshold 15). Drivers by points: ternaries 21 (29 pts), boolean chains 4 (nesting depth added 8). Of this number, 18 points are the body\u0027s own statements and 15 belong to one function literal inside it that branches. 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":"designer/client/src/components/toolbarComponents/toolbarButtons/ButtonRoot.tsx"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"6712c21316830bbe5cff444669817c03cb75c27ba817fd2c8a96efbddced7d25"}},{"ruleId":"D2","level":"warning","message":{"text":"NumberUtils.parseNumber (cognitive 30): NumberUtils.parseNumber has cognitive complexity 30 (threshold 15). Drivers by points: ternaries 5 (20 pts), if/else 9, boolean chains 1 (nesting depth added 15). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/utils/src/main/java/org/springframework/util/NumberUtils.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ffd98e628794cb7055dd5234b21255097c63653c4b03229e0935a032ff12b8e"}},{"ruleId":"D2","level":"warning","message":{"text":"InterpreterInternal.interpretNode (cognitive 29): InterpreterInternal.interpretNode has cognitive complexity 29 (threshold 15). Drivers by points: match/switch 9 (16 pts), if/else 8 (12 pts), boolean chains 1 (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee70ecdccc4d81b5db30158652154c31d237ddb735d4f4c1ac68df6c16e5b5a6"}},{"ruleId":"D2","level":"warning","message":{"text":"Variable.Variable (cognitive 29): Variable.Variable has cognitive complexity 29 (threshold 15). Drivers by points: boolean chains 10, if/else 6 (10 pts), ternaries 4 (5 pts), error handling 1 (2 pts), loops 1 (2 pts) (nesting depth added 7). Most of this is not in the body itself: 6 of the 29 points are its own statements and the rest belongs to 7 function literals inside it that branch (lines 124, 269, 108, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/Variable.tsx"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"086414c3d6f60c6038e40437dd4b6535d076976241cf79e9621785d25ffefdc0"}},{"ruleId":"D2","level":"warning","message":{"text":"FieldSwitch.FieldSwitch (cognitive 28): FieldSwitch.FieldSwitch has cognitive complexity 28 (threshold 15). Drivers by points: boolean chains 13, if/else 9, ternaries 6. Most of this is not in the body itself: 5 of the 28 points are its own statements and the rest belongs to 12 function literals inside it that branch (lines 214, 94, 141, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/field/FieldSwitch.tsx"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bcc71d9ffbfbd42201a8edf4963241ed52676c75d14a0c635676556cab8ee0b"}},{"ruleId":"D2","level":"warning","message":{"text":"ReloadableProcessingTypeDataProvider.reloadAll (cognitive 27): ReloadableProcessingTypeDataProvider.reloadAll has cognitive complexity 27 (threshold 15). Drivers by points: loops 6 (21 pts), match/switch 1 (6 pts) (nesting depth added 20). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/provider/ReloadableProcessingTypeDataProvider.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b054fc6410479e3784eacdd99444c84094936e86b6d125c54ffd4867cfb521"}},{"ruleId":"D2","level":"warning","message":{"text":"ConditionBuilder.ConditionBuilder (cognitive 27): ConditionBuilder.ConditionBuilder has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11 (13 pts), boolean chains 7, ternaries 6 (7 pts) (nesting depth added 3). Most of this is not in the body itself: 8 of the 27 points are its own statements and the rest belongs to 11 function literals inside it that branch (lines 63, 90, 98, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionBuilder.tsx"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"7722c4496dce43f938fbab2b8580c1e524faf68ecad70592363d758a7e272ab3"}},{"ruleId":"D2","level":"warning","message":{"text":"drawText.tokenizeDataRecords (cognitive 27): drawText.tokenizeDataRecords has cognitive complexity 27 (threshold 15). Drivers by points: if/else 9 (12 pts), boolean chains 8, ternaries 3 (6 pts), error handling 1 (nesting depth added 6). Most of this is not in the body itself: 2 of the 27 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 70, 63, 68, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/drawText.ts"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"4babea637c3035f31be5ee20989c183e3fbf87ccd8fa666ffe0d7076ef2697b4"}},{"ruleId":"D2","level":"warning","message":{"text":"reducer.graphReducer (cognitive 27): reducer.graphReducer has cognitive complexity 27 (threshold 15). Drivers by points: ternaries 9 (20 pts), boolean chains 4, if/else 1 (2 pts), match/switch 1 (nesting depth added 12). Most of this is not in the body itself: 8 of the 27 points are its own statements and the rest belongs to 7 function literals inside it that branch (lines 376, 280, 361, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/reducer.ts"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"88e8136b25aaf53f751b73130c4a883c728ea874afbeaadca45a9e8054e334a7"}},{"ruleId":"D2","level":"warning","message":{"text":"DataMapper.DataMapper (cognitive 26): DataMapper.DataMapper has cognitive complexity 26 (threshold 15). Drivers by points: boolean chains 14, ternaries 8, if/else 4. Of this number, 13 points are the body\u0027s own statements and 13 belong to 7 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/DataMapper.tsx"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"165f92e920d0182b3e0164634ff52bd0687c8705f8baed0a1d4f9718ce783f00"}},{"ruleId":"D2","level":"warning","message":{"text":"TableEditor.Table (cognitive 26): TableEditor.Table has cognitive complexity 26 (threshold 15). Drivers by points: ternaries 12 (19 pts), boolean chains 4, if/else 2, match/switch 1 (nesting depth added 7). Of this number, 17 points are the body\u0027s own statements and 9 belong to 7 function literals inside it that branch. 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":"designer/client/src/components/graph/node-modal/editors/expression/Table/TableEditor.tsx"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"932c6f873ffe574c2834dc8b996708874100f947551ade231871fe7cb8673cef"}},{"ruleId":"D2","level":"warning","message":{"text":"DeploymentService.runDeployment (cognitive 25): DeploymentService.runDeployment has cognitive complexity 25 (threshold 15). Drivers by points: loops 7 (25 pts) (nesting depth added 18). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/newdeployment/DeploymentService.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ec66055af7423de11dba29910d5ee95aa3b815e2ae5a959b77c9de3ffab784b"}},{"ruleId":"D2","level":"warning","message":{"text":"SpelExpressionBuilder.resolveSpelPath (cognitive 25): SpelExpressionBuilder.resolveSpelPath has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (18 pts), ternaries 1 (3 pts), boolean chains 2, loops 2 (nesting depth added 10). 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":"designer/client/src/components/spelExpressionBuilder/SpelExpressionBuilder.tsx"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea86cb4dcb2a6b6d8a09557f0f589cf62a6bfaae05bd635265779654a8ec9fe4"}},{"ruleId":"D2","level":"warning","message":{"text":"DeploymentService.runDeploymentOrRedeploy (cognitive 24): DeploymentService.runDeploymentOrRedeploy has cognitive complexity 24 (threshold 15). Drivers by points: loops 5 (14 pts), match/switch 5 (10 pts) (nesting depth added 14). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentService.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"044206fb106350465c5c4f11e30a9fafa456877eeb8e52eab5d9494461b301a7"}},{"ruleId":"D2","level":"warning","message":{"text":"DistributedLeadership.stop (cognitive 23): DistributedLeadership.stop has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 4 (10 pts), boolean chains 1 (nesting depth added 12). 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":"designer/server/src/main/scala/pl/touk/nussknacker/ui/ha/Leadership.scala"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f356b6f203f9b10ad82028e7edbe95a06598644267826d4608da69515eac8be"}},{"ruleId":"D2","level":"warning","message":{"text":"FlinkProcessRegistrar.register (cognitive 23): FlinkProcessRegistrar.register has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12 (13 pts), match/switch 10 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"64758dc7a3ecebac48c58ee3e0de3628938eabc1cec0a4ee8b1fb2b3e5ca5280"}},{"ruleId":"D2","level":"warning","message":{"text":"K8sDeploymentManager.cancelScenario (cognitive 23): K8sDeploymentManager.cancelScenario has cognitive complexity 23 (threshold 15). Drivers by points: loops 6 (21 pts), if/else 2 (nesting depth added 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentManager.scala"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7260edaf9831a102a868ee23a39456588f444eb9b1cbc017f8ea482b6451d26"}},{"ruleId":"D2","level":"warning","message":{"text":"collapsibleSwitchList.CollapsibleSwitchList (cognitive 22): collapsibleSwitchList.CollapsibleSwitchList has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 11 (16 pts), boolean chains 5, loops 1 (nesting depth added 5). Most of this is not in the body itself: 0 of the 22 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 105, 82, 100). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/settings/collapsibleSwitchList.tsx"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c3fc5eea27fc33a97dba23c6ab429a30bc3c2285093059addc09ab927b75064"}},{"ruleId":"D2","level":"warning","message":{"text":"alignCells.alignCells (cognitive 22): alignCells.alignCells has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 8 (16 pts), if/else 3 (5 pts), boolean chains 1 (nesting depth added 10). Most of this is not in the body itself: 6 of the 22 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 41, 34). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/alignCells.tsx"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"66e24039a67d2d521278915b056f85b5a12dbca513d0eb42e8fbfb3cd2b363d2"}},{"ruleId":"D2","level":"warning","message":{"text":"AssignabilityDeterminer.isSingleTypeMatchesTargetObjType (cognitive 21): AssignabilityDeterminer.isSingleTypeMatchesTargetObjType has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 7 (10 pts), boolean chains 7, if/else 4 (nesting depth added 3). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/AssignabilityDeterminer.scala"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"c14e417fa16d1d243669e07c0390329c8bd7b8850ace2e770750042a92cad463"}},{"ruleId":"D2","level":"warning","message":{"text":"QuestDbFEStatisticsRepository.createRepositoryResource (cognitive 21): QuestDbFEStatisticsRepository.createRepositoryResource has cognitive complexity 21 (threshold 15). Drivers by points: loops 6 (21 pts) (nesting depth added 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/db/timeseries/questdb/QuestDbFEStatisticsRepository.scala"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7e1c5aa09146b936e69afc7fa8d98ed82a34488e18a312d97300acab21c6628"}},{"ruleId":"D2","level":"warning","message":{"text":"PeriodicProcessService.deploy (cognitive 21): PeriodicProcessService.deploy has cognitive complexity 21 (threshold 15). Drivers by points: loops 6 (21 pts) (nesting depth added 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"94aa34b5e7289ba1c1277828065f407da1049df75d144d2f583d02e8ab5a871a"}},{"ruleId":"D2","level":"warning","message":{"text":"NkGlobalParametersToMapEncoder.decode (cognitive 21): NkGlobalParametersToMapEncoder.decode has cognitive complexity 21 (threshold 15). Drivers by points: loops 8 (21 pts) (nesting depth added 13). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/NkGlobalParameters.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7b1baf3f2892fabadee52d983f5dbe8ac29a31b6ad9d8387d9e2101ba3cd720"}},{"ruleId":"D2","level":"warning","message":{"text":"Projection.getValueRef (cognitive 21): Projection.getValueRef has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (14 pts), boolean chains 2, loops 1 (2 pts), ternaries 1 (2 pts), error handling 1 (nesting depth added 8). 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":"scenario-compiler/src/main/java/org/springframework/expression/spel/ast/Projection.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"7457b48bb567f664cc0beeeebfbd28225668b02314f8a791f2a741f689a123dc"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectionContextProvider.SelectionContextProvider (cognitive 21): SelectionContextProvider.SelectionContextProvider has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (9 pts), boolean chains 7, ternaries 2 (4 pts), error handling 1 (nesting depth added 3). Most of this is not in the body itself: 0 of the 21 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 231, 153, 168, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/SelectionContextProvider.tsx"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"6853c922aa4876ce008fedd14b0c783c414e19d7e07f71c7e928aaa7c218018a"}},{"ruleId":"D2","level":"warning","message":{"text":"ParametersUtils.migrateKafkaParams (cognitive 21): ParametersUtils.migrateKafkaParams has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (16 pts), boolean chains 5 (nesting depth added 9). Most of this is not in the body itself: 8 of the 21 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 155, 140, 174). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/ParametersUtils.ts"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f0fda7332143582c3c04710f653c9cb4002211c06021c4bc928aae3ce02e547"}},{"ruleId":"D2","level":"warning","message":{"text":"AceEditorJsonBasedSnippets.getEditorContext (cognitive 21): AceEditorJsonBasedSnippets.getEditorContext has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (10 pts), boolean chains 7, loops 2 (4 pts) (nesting depth added 6). 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":"designer/client/src/components/graph/node-modal/editors/expression/AceEditorJsonBasedSnippets.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f24845ca8213362cdad321fb8b060dc2318ccf9851382e5bf1d33573041b40c"}},{"ruleId":"D2","level":"warning","message":{"text":"extendActivitiesWithUIData.extendActivitiesWithUIData (cognitive 21): extendActivitiesWithUIData.extendActivitiesWithUIData has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11 (15 pts), boolean chains 5, loops 1 (nesting depth added 4). Most of this is not in the body itself: 0 of the 21 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 41, 100, 126, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/helpers/extendActivitiesWithUIData.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"f00ebc8eff3013e81768b6b3caf0fbce126cb62c2dbbf1b4f297f8ff614f5af9"}},{"ruleId":"D2","level":"warning","message":{"text":"UIProcessValidator.resolveNodeNamesForResult (cognitive 20): UIProcessValidator.resolveNodeNamesForResult has cognitive complexity 20 (threshold 15). Drivers by points: loops 4 (14 pts), match/switch 2 (4 pts), if/else 2 (nesting depth added 12). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/validation/UIProcessValidator.scala"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"21487b84aa6b62bf3d589dfbceb86d8721a85ce5a5050a3f50bad52b4b3a3d9c"}},{"ruleId":"D2","level":"warning","message":{"text":"Ops.waitForJobState (cognitive 20): Ops.waitForJobState has cognitive complexity 20 (threshold 15). Drivers by points: loops 5 (15 pts), if/else 2 (4 pts), boolean chains 1 (nesting depth added 12). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/minicluster/src/main/scala/pl/touk/nussknacker/engine/flink/minicluster/MiniClusterJobStatusCheckingOps.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e199735e22142db3aeaa098100164de58247062e71bf96ae6981716aa3e71ca"}},{"ruleId":"D2","level":"warning","message":{"text":"use-register-tracking-events.useRegisterTrackingEvents (cognitive 20): use-register-tracking-events.useRegisterTrackingEvents has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 2, ternaries 1 (nesting depth added 10). Most of this is not in the body itself: 0 of the 20 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 142, 171, 139). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/event-tracking/use-register-tracking-events.ts"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"d913fab45cb9483c1f7c9609874f4096c7d31edb8b0c93bcbf250c632bd41794"}},{"ruleId":"D2","level":"warning","message":{"text":"ParametersUtils.flattenSpelRecord (cognitive 20): ParametersUtils.flattenSpelRecord has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 3, ternaries 2 (3 pts), loops 1 (nesting depth added 6). 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":"designer/client/src/components/graph/node-modal/ParametersUtils.ts"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"c62cbe38faf5f273142dd7b2fd86d6765cbd3f9a307a09ca24c0f01217bf47d3"}},{"ruleId":"D2","level":"warning","message":{"text":"ProcessUtils._findVariablesDefinedInProcess (cognitive 20): ProcessUtils._findVariablesDefinedInProcess has cognitive complexity 20 (threshold 15). Drivers by points: if/else 3 (7 pts), ternaries 3 (6 pts), boolean chains 3, loops 1 (3 pts), match/switch 1 (nesting depth added 9). 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":"designer/client/src/common/ProcessUtils.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3be205d450c87c698341ce9f6d288cbacc095976ce0d1cad05566f5e34bfe38"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionCompiler.compileNodeParameters (cognitive 19): ExpressionCompiler.compileNodeParameters has cognitive complexity 19 (threshold 15). Drivers by points: loops 5 (9 pts), match/switch 6, boolean chains 4 (nesting depth added 4). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/ExpressionCompiler.scala"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"e634f487d597c61cfff866ad3eb5aabe56b4d4dbcb9724e62cbf06b14caceb54"}},{"ruleId":"D2","level":"warning","message":{"text":"DictKeyParameterAdapter.adaptDictKeyExpressionToAvailableEditors (cognitive 19): DictKeyParameterAdapter.adaptDictKeyExpressionToAvailableEditors has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 7 (11 pts), if/else 5 (8 pts) (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/dict/DictKeyParameterAdapter.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"3367b9b8e8f38ac83d794fd77c800bd9fe4ce531d2c37334801e1451fa162496"}},{"ruleId":"D2","level":"warning","message":{"text":"reducer.reducer (cognitive 19): reducer.reducer has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (10 pts), ternaries 3 (7 pts), boolean chains 1, match/switch 1 (nesting depth added 9). Most of this is not in the body itself: 4 of the 19 points are its own statements and the rest belongs to 7 function literals inside it that branch (lines 15, 35, 35, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Table/state/reducer.ts"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3cd8d4becdeb3d6c3d25af29f4a5f5a55a4f7c3a02a07d8a3b7b6159b3d4722"}},{"ruleId":"D2","level":"warning","message":{"text":"DeploymentsStatusesSynchronizer.synchronizeAll (cognitive 18): DeploymentsStatusesSynchronizer.synchronizeAll has cognitive complexity 18 (threshold 15). Drivers by points: loops 3 (9 pts), match/switch 3 (9 pts) (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/newdeployment/synchronize/DeploymentsStatusesSynchronizer.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fd25d03882d1fbdb2f2d72e16f33f5bb65267ba9a19103850cde0e63a4cd546"}},{"ruleId":"D2","level":"warning","message":{"text":"CaseClassTypeInfo.getTypeAt (cognitive 18): CaseClassTypeInfo.getTypeAt has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (12 pts), match/switch 1 (4 pts), boolean chains 1, loops 1 (nesting depth added 7). 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":"engine/flink/scala-utils/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinfo/caseclass/CaseClassTypeInfo.scala"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"683c9f3d7288fa121d7ebaffdedc9958ec00753395365008b6e9b3578d2b2b13"}},{"ruleId":"D2","level":"warning","message":{"text":"NuSpelExpressionParser.skipToCorrectEndSuffix (cognitive 18): NuSpelExpressionParser.skipToCorrectEndSuffix has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 8). 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":"scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/parser/NuSpelExpressionParser.java"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8932346c248f5317fc15253e21ecf52207e96651dd43272e71b3281641f1193"}},{"ruleId":"D2","level":"warning","message":{"text":"ToolbarWrapper.ToolbarWrapper (cognitive 18): ToolbarWrapper.ToolbarWrapper has cognitive complexity 18 (threshold 15). Drivers by points: boolean chains 13, ternaries 3 (5 pts) (nesting depth added 2). Of this number, 15 points are the body\u0027s own statements and 3 belong to 4 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarWrapper/ToolbarWrapper.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1e326a200dd66940580b267fe18187c7e1694bbbb35d60de1f5739e7cc2d62a"}},{"ruleId":"D2","level":"warning","message":{"text":"spelUtils.parseConditionAst (cognitive 18): spelUtils.parseConditionAst has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 2 (4 pts), boolean chains 3 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/spelUtils.ts"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b71a3a1d93f73ec2749d0488c5350e86de4935f7e5a5a27b69bec54c350bd33"}},{"ruleId":"D2","level":"warning","message":{"text":"DeployButton.DeployButton (cognitive 18): DeployButton.DeployButton has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (6 pts), ternaries 4 (6 pts), boolean chains 4, match/switch 2 (nesting depth added 3). Of this number, 9 points are the body\u0027s own statements and 9 belong to 5 function literals inside it that branch. 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":"designer/client/src/components/toolbars/scenarioActions/buttons/DeployButton.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"61ba5ee3bfac86efb210ca3332631114d9c49647d26cba47508ddad91d77ce79"}},{"ruleId":"D2","level":"warning","message":{"text":"RedeployButton.RedeployButton (cognitive 18): RedeployButton.RedeployButton has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (6 pts), ternaries 4 (6 pts), boolean chains 4, match/switch 2 (nesting depth added 3). Of this number, 9 points are the body\u0027s own statements and 9 belong to 5 function literals inside it that branch. 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":"designer/client/src/components/toolbars/scenarioActions/buttons/RedeployButton.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e24931c72ba7a4f5167bd754b6435333d9646ea175ac0ee8cbbf5979b02b730"}},{"ruleId":"D2","level":"warning","message":{"text":"useDataRecordsActions.useDataRecordsActions (cognitive 18): useDataRecordsActions.useDataRecordsActions has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, boolean chains 4, loops 1 (2 pts), ternaries 2 (nesting depth added 1). Most of this is not in the body itself: 0 of the 18 points are its own statements and the rest belongs to 10 function literals inside it that branch (lines 22, 39, 82, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/useDataRecordsActions.ts"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"9801613b50866ca2950ce82868a5bcc10392b109b84b410127acfe69f8f6d849"}},{"ruleId":"D2","level":"warning","message":{"text":"AddProcessDialog.AddProcessDialog (cognitive 18): AddProcessDialog.AddProcessDialog has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (7 pts), boolean chains 5, ternaries 4, error handling 1 (2 pts) (nesting depth added 3). Most of this is not in the body itself: 2 of the 18 points are its own statements and the rest belongs to 7 function literals inside it that branch (lines 71, 109, 64, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/AddProcessDialog.tsx"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"add3041d4c8be9097725ba3a52a0950a990b38ab8c4943220d3fceb7c2f6f14f"}},{"ruleId":"D2","level":"warning","message":{"text":"LiveDataThroughputs.LiveDataThroughputs (cognitive 18): LiveDataThroughputs.LiveDataThroughputs has cognitive complexity 18 (threshold 15). Drivers by points: boolean chains 10, if/else 5, ternaries 2, match/switch 1. Most of this is not in the body itself: 1 of the 18 points is its own statement and the rest belongs to 9 function literals inside it that branch (lines 37, 80, 114, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/liveData/LiveDataThroughputs.tsx"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c5a81b874bc9829825bc5001e22e7d88dacaf4ce28c3d3b26819cbabbbd85c9"}},{"ruleId":"D2","level":"warning","message":{"text":"DbScenarioActivityRepository.doModifyActivity (cognitive 17): DbScenarioActivityRepository.doModifyActivity has cognitive complexity 17 (threshold 15). Drivers by points: loops 6 (15 pts), match/switch 1 (2 pts) (nesting depth added 10). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/activities/DbScenarioActivityRepository.scala"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"38cfd0ae65bc26b03d94b92e69273832d1801e68dad6275f2b97751222597e29"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonTemplateFromJsonSchemaDeterminer.defaultValueBasedOnSchema (cognitive 17): JsonTemplateFromJsonSchemaDeterminer.defaultValueBasedOnSchema has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 6 (15 pts), if/else 2 (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/JsonTemplateFromJsonSchemaDeterminer.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"318a0cdc1d93c862498ede924b06a7dfc15befb2d955952304560bfc6a98bd6c"}},{"ruleId":"D2","level":"warning","message":{"text":"CustomCompleterAceEditor.CustomCompleterAceEditor (cognitive 17): CustomCompleterAceEditor.CustomCompleterAceEditor has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 7, if/else 5, ternaries 4 (5 pts) (nesting depth added 1). Most of this is not in the body itself: 7 of the 17 points are its own statements and the rest belongs to 7 function literals inside it that branch (lines 72, 85, 63, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/CustomCompleterAceEditor.tsx"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4163896e5dca455957526fbd3af86884c5ef39652e96aa3e5b14e9f4d037880"}},{"ruleId":"D2","level":"warning","message":{"text":"SpelExpressionBuilder.SpelExpressionBuilder (cognitive 17): SpelExpressionBuilder.SpelExpressionBuilder has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 9, ternaries 5 (6 pts), if/else 2 (nesting depth added 1). Of this number, 9 points are the body\u0027s own statements and 8 belong to 4 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/spelExpressionBuilder/SpelExpressionBuilder.tsx"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"58f370c8f97398f26ed4335f74b841b8e7d97974f3eabc7ff34eb53dc71688ce"}},{"ruleId":"D2","level":"warning","message":{"text":"EdgesDndComponent.EdgesDndComponent (cognitive 17): EdgesDndComponent.EdgesDndComponent has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 11, if/else 3, ternaries 2 (3 pts) (nesting depth added 1). Most of this is not in the body itself: 2 of the 17 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 105, 139, 137, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/EdgesDndComponent.tsx"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"88959db73494adb41185aa155304727d71349d9682778674b810d87189f2d5b7"}},{"ruleId":"D2","level":"warning","message":{"text":"use-mouse-sensor.useMouseSensor (cognitive 17): use-mouse-sensor.useMouseSensor has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1. Most of this is not in the body itself: 0 of the 17 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 220, 292, 335, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"0993f4e79445ae986d1dae7b50a6568a51ea83696b3443a8e866cfbce5160a93"}},{"ruleId":"D2","level":"warning","message":{"text":"NameValueListEditor.NameValueListEditor (cognitive 17): NameValueListEditor.NameValueListEditor has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 9, if/else 5, ternaries 3. Most of this is not in the body itself: 3 of the 17 points are its own statements and the rest belongs to 8 function literals inside it that branch (lines 62, 131, 56, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/NameValueList/NameValueListEditor.tsx"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"e803afdc083c588e6040610aaaa3a631fed98ea81bd6a2777ece0a60acc1d48f"}},{"ruleId":"D2","level":"warning","message":{"text":"ScenarioStatusProvider.getScenarioStatus (cognitive 16): ScenarioStatusProvider.getScenarioStatus has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 3 (9 pts), if/else 7 (nesting depth added 6). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/scenariostatus/ScenarioStatusProvider.scala"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"452d8d481a96721dfae900f8be9a6f6f8339626f0cc61452717d638d104a1b09"}},{"ruleId":"D2","level":"warning","message":{"text":"OptionTypeComparator.compareSerialized (cognitive 16): OptionTypeComparator.compareSerialized has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (16 pts) (nesting depth added 6). 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":"engine/flink/scala-utils/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinfo/option/OptionTypeComparator.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fde34da9557bed4479dcf59c3b42aa3da973e31b3a682db5c0ba16dc6c7a938"}},{"ruleId":"D2","level":"warning","message":{"text":"NuSpelExpressionParser.parseExpressions (cognitive 16): NuSpelExpressionParser.parseExpressions has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 1 (nesting depth added 9). 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":"scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/parser/NuSpelExpressionParser.java"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec3c551fcf8b3ad44d75974fe87c3650b8b431b54ac79159392cbc52dc5bbf21"}},{"ruleId":"D2","level":"warning","message":{"text":"SpelReflectionHelper.convertArguments (cognitive 16): SpelReflectionHelper.convertArguments has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (8 pts), loops 3 (7 pts), boolean chains 1 (nesting depth added 7). 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":"scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/SpelReflectionHelper.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0bf4428b33badb68bdb30b3def8f28399aa5dfc449b9c6b7d5d4f97421e3274"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectStyled.selectStyled (cognitive 16): SelectStyled.selectStyled has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 10 (14 pts), boolean chains 2 (nesting depth added 4). Most of this is not in the body itself: 0 of the 16 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 35, 24, 10, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/stylesheets/SelectStyled.ts"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"d186d4348f5dfd4fa9322ddc1df2307a1edcca204379ee57a5d0a9f084351848"}},{"ruleId":"D2","level":"warning","message":{"text":"ButtonMenu.ButtonMenu (cognitive 16): ButtonMenu.ButtonMenu has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 10 (13 pts), if/else 2, boolean chains 1 (nesting depth added 3). Of this number, 13 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarButtons/ButtonMenu.tsx"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"290dffa7f18619d3731faaa0cd84d33c7501a49f2c06f8d7fa62d4646981d7dc"}},{"ruleId":"D2","level":"warning","message":{"text":"RawDisplay.useBoundedSelection (cognitive 16): RawDisplay.useBoundedSelection has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 4, error handling 1. Most of this is not in the body itself: 0 of the 16 points are its own statements and the rest belongs to one function literal inside it that branches (line 11). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/io/RawDisplay.tsx"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9e9be230af9c20421b307b0365a372bb4b297174f1d88d83cf5cae2c4699137"}},{"ruleId":"D2","level":"warning","message":{"text":"dataMapperUtils.expandDottedKeys (cognitive 16): dataMapperUtils.expandDottedKeys has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (10 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 6). 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":"designer/client/src/components/dataMapper/dataMapperUtils.ts"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"e579c8c04c57cde8417978ee95f25e022f4fbf15482cf2201dc04e9f89cc5b71"}},{"ruleId":"D2","level":"warning","message":{"text":"dataMapperUtils.parseSpelToFields (cognitive 16): dataMapperUtils.parseSpelToFields has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 2, loops 1 (nesting depth added 5). 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":"designer/client/src/components/dataMapper/dataMapperUtils.ts"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"478fd97f92bbe5ae1d2892ae732fb51153c4a3b0a47168e12946119d9ac92707"}},{"ruleId":"D2","level":"warning","message":{"text":"EdgeFields.EdgeFields (cognitive 16): EdgeFields.EdgeFields has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 7, ternaries 6 (7 pts), if/else 2 (nesting depth added 1). Of this number, 9 points are the body\u0027s own statements and 7 belong to 4 function literals inside it that branch. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/EdgeFields.tsx"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c7d250b41c39570e9da8502688ddcb00fd8eb26b41208d37fa45fab540cb4ff"}},{"ruleId":"D2","level":"warning","message":{"text":"ToolbarsContainer.ToolbarsContainer (cognitive 16): ToolbarsContainer.ToolbarsContainer has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 7, ternaries 6, if/else 3. Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to 5 function literals inside it that branch (lines 145, 193, 200, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/ToolbarsContainer.tsx"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb7cca74c27597f4c3e83a81d8e6bd4f405db0b49775b3ae4942a78717d9ea6"}},{"ruleId":"D2","level":"warning","message":{"text":"InputOutputLayout.InputOutputLayout (cognitive 16): InputOutputLayout.InputOutputLayout has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 11, if/else 5. Of this number, 8 points are the body\u0027s own statements and 8 belong to 6 function literals inside it that branch. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/io/InputOutputLayout.tsx"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"029b4983858a3efe4348f70c0235f6bbbd257d684787dee36765ade46233e1b8"}},{"ruleId":"D2","level":"warning","message":{"text":"InitializeChatStream.initializeChatStream (cognitive 16): InitializeChatStream.initializeChatStream has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (9 pts), error handling 2 (3 pts), ternaries 2, boolean chains 1, loops 1 (nesting depth added 4). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"designer/client/src/components/aiAssistant/InitializeChatStream.ts"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"74a69a1d004cf0d6006213d358f1ca297521965fe134835cd5227f3b70b673e6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: useDataMapper.useDataMapper: FunctionTooLong \u2014 useDataMapper runs 371 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 271 over it, 3.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/useDataMapper.ts"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e91cc7a0ee38f37921a411ae0ad8a27abbbce9bd8d5cc094922ec1d5739ce34"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: FieldRow.FieldRow: FunctionTooLong \u2014 FieldRow runs 349 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 249 over it, 3.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/FieldRow.tsx"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"49ca2a0b0e3d972eb8c94def78e774400e0395227ecdecfd2f3759ffd45e975e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: description/NodesApiEndpoints.scala: FileTooLong \u2014 1675 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1175 over it, 3.35\u00D7 the bar. 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":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/NodesApiEndpoints.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a0bbaddd9a9c50fbb2cba982f4ba25d2f1877fe860efc55adab6c71c58b218c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: DataMapper.DataMapper: FunctionTooLong \u2014 DataMapper runs 329 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 229 over it, 3.29\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/DataMapper.tsx"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b127b4956c7b202923d9103e4fae0a79b206e792d1517cf925ca3963ad18c816"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: CompareVersionsDialog.VersionsForm: FunctionTooLong \u2014 VersionsForm runs 329 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 229 over it, 3.29\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/CompareVersionsDialog.tsx"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7079a2a4864015515e6a77fba866a1fb64f55b472f9d4a3f60599ed047af29a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: TableEditor.Table: FunctionTooLong \u2014 Table runs 322 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 222 over it, 3.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Table/TableEditor.tsx"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"10ebd648b6aa8ab8c26f9357c54ba3239a084a4f6a5611e051dbac619898ba9d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: FlinkProcessRegistrar.createInterpreter: MethodTooLong \u2014 createInterpreter runs 321 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 221 over it, 3.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"2490ccb51be9836f39f31e48e18ec00f91434a4892105f4bdb2422086a1783d7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: FlinkProcessRegistrar.register: MethodTooLong \u2014 register runs 314 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 214 over it, 3.14\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"38fe0813397f575939ef9458044d9baa1e4f318b4089e2db4161412518d092e7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HttpService: TooManyMethods \u2014 87 methods. The bar is 30 methods; this is 57 over it, 2.90\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/http/HttpService/HttpService.ts"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8672e229b7cc912929d871b9b839dc848e9fdc041c43eea14d1da73291da680"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: ConditionBuilder.ConditionBuilder: FunctionTooLong \u2014 ConditionBuilder runs 229 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 129 over it, 2.29\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionBuilder.tsx"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4885bad430507bb1fde1c373baa4bb08dcbd6a07f34a9e6ce2ffd5cc2d3ee8a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: reducer.graphReducer: FunctionTooLong \u2014 graphReducer runs 225 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 125 over it, 2.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/reducer.ts"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c6cb95a05710f2bf01dfd4c90335cbda5fab858179c2dec91c0ab0653b954c4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: ScenarioLabels.ScenarioLabels: FunctionTooLong \u2014 ScenarioLabels runs 220 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 120 over it, 2.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioDetails/ScenarioLabels.tsx"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec9fa767505e58b3f731daaf9b2de6590185551a6b5755a1b86494fb2df17f7b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: SpelExpressionBuilder.SpelExpressionBuilder: FunctionTooLong \u2014 SpelExpressionBuilder runs 215 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 115 over it, 2.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/spelExpressionBuilder/SpelExpressionBuilder.tsx"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bacca4e9c72db6f0222c167357a569b72f8c23d361cbde3a6b40ca95c14fdb3"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: HttpService: ClassTooLong \u2014 832 significant lines (blank, comment-only and punctuation-only lines excluded), 87 methods. The bar is 400 significant lines; this is 432 over it, 2.08\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/http/HttpService/HttpService.ts"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"154ea75e591ad76724c28cf11d3657e0d54ccb046716c2d3d14fb8009e09ee1b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: InputDataRecords.InputDataRecords: FunctionTooLong \u2014 InputDataRecords runs 199 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 99 over it, 1.99\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node/NodeContent/TestingContentElements/InputDataRecords.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecb1c878234f0346d2b7aea78f30ceb1d0a866890c7f220c19b3fa7e603639db"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: Variable.Variable: FunctionTooLong \u2014 Variable runs 188 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 88 over it, 1.88\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/Variable.tsx"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc4158467ee09b28ff39613fa8980b9809cf180767de7b6d8c49360176b84471"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: HttpService/HttpService.ts: FileTooLong \u2014 902 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: HttpService (74-1340). The bar is 500 significant lines; this is 402 over it, 1.80\u00D7 the bar. 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":"designer/client/src/http/HttpService/HttpService.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"28820b58ad109c4a62a5716d21b625e2f2769feca2f692c989b53b72281e750a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: AddProcessForm.AddProcessForm: FunctionTooLong \u2014 AddProcessForm runs 169 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 69 over it, 1.69\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/AddProcessForm.tsx"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"af2a9a21684f47856e41b314fa19725d869504a8273a6c530fa4c5c4cfbca3a1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: NodeTypeDetailsContent.NodeDetails: FunctionTooLong \u2014 NodeDetails runs 164 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 64 over it, 1.64\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/NodeTypeDetailsContent.tsx"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"7461a54bb4e2b9e183a128f218a2a1d639e4e3e03fe7e2db7007b528c01b49f5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: activities/DbScenarioActivityRepository.scala: FileTooLong \u2014 818 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DbScenarioActivityRepository (37-991). The bar is 500 significant lines; this is 318 over it, 1.64\u00D7 the bar. 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":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/activities/DbScenarioActivityRepository.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c70004c826a808e693c2aac6a64376039724a6532ca1924b77ed1802ebf1d544"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: spel/SpelTyper.scala: FileTooLong \u2014 749 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 249 over it, 1.50\u00D7 the bar. 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":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"14377dcc587484dba875e261bbd9f95b8b8f43ae45aed7c4b01c8ce18afb5cbb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: usagesTable.UsagesTable: FunctionTooLong \u2014 UsagesTable runs 149 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 49 over it, 1.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/components/usages/usagesTable.tsx"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"42ae13bd0101572c15983040cb5e87a57095ef7edf725b114a8bcd18b4bc005d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: ContextTreeNode.ContextTreeNode: FunctionTooLong \u2014 ContextTreeNode runs 148 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 48 over it, 1.48\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/builderComponents/ContextTreeNode.tsx"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"3902df73f34c131973e9b4b72d44070a34180b5585e4254e8c8f06e34273b567"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: nodecompilation/NodeCompiler.scala: FileTooLong \u2014 723 significant lines (blank, comment-only and punctuation-only lines excluded), about 80% of them inside a single declaration: NodeCompiler (202-962). The bar is 500 significant lines; this is 223 over it, 1.45\u00D7 the bar. 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":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeCompiler.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"66597ec12df43f9a78e626bad8e79df27a2f6ec36e2b76b510607ca17c413c6a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Graph: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/Graph.tsx"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eaa4dd1d21e53738b4c3709bb6511df0a1c72de96f76d5585b44770e9eef44a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: periodic/PeriodicProcessService.scala: FileTooLong \u2014 667 significant lines (blank, comment-only and punctuation-only lines excluded), about 79% of them inside a single declaration: PeriodicProcessService (34-740). The bar is 500 significant lines; this is 167 over it, 1.33\u00D7 the bar. 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":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8083ab01bf86c2a7717f34fbb3e4b3d43b0b470590af9c3406b0417d24aba3df"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scenarioActivity/Dtos.scala: FileTooLong \u2014 666 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 166 over it, 1.33\u00D7 the bar. 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":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/scenarioActivity/Dtos.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf8da272ece4cfaf9ec8d088db631eded8e3044ae22496a3113f18f45406504"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DbScenarioActivityRepository: TooManyMethods \u2014 39 methods. The bar is 30 methods; this is 9 over it, 1.30\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/activities/DbScenarioActivityRepository.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d92b2f5f9e8e8e5f5ffc3a0546db02596097ede4dfecbc8f92774e64ac0c9a8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: tablePart.TablePart: FunctionTooLong \u2014 TablePart runs 126 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 26 over it, 1.26\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/scenarios/list/tablePart.tsx"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2be77c6795d57c85ada09a60255c732bd9fc5509611fdf136a62202654de1a8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: DeployButton.DeployButton: FunctionTooLong \u2014 DeployButton runs 125 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 25 over it, 1.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioActions/buttons/DeployButton.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"896e4720d966fc685b9b7d563b665f1d360d20d60d350b3554e6a7cefc4bb524"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: EdgeFields.EdgeFields: FunctionTooLong \u2014 EdgeFields runs 124 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 24 over it, 1.24\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/EdgeFields.tsx"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca6d79a807df81ac1fce19f2d29fb6af1a02f4d16995ff88f863b2df526212b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: RedeployButton.RedeployButton: FunctionTooLong \u2014 RedeployButton runs 124 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 24 over it, 1.24\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioActions/buttons/RedeployButton.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"485641c9cfd9c42fd23788ddd5dbffaa6aa6ba138c3707352414ae2344e30206"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: styles.aceEditorStyles: FunctionTooLong \u2014 aceEditorStyles runs 124 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 24 over it, 1.24\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/theme/styles.ts"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf533603ad4034f54c8bce20e56637fa90c47fa68ac76e543e9341fa2dca796a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ScenarioActivityApiHttpService: ClassTooLong \u2014 492 significant lines (blank, comment-only and punctuation-only lines excluded), 18 methods. The bar is 400 significant lines; this is 92 over it, 1.23\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ScenarioActivityApiHttpService.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d9932e5a849e5791f74d6f5d0903af6a5f2a18b5f0e87667cd3f707e6a850ca"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: filtersPart.FiltersPart: FunctionTooLong \u2014 FiltersPart runs 123 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 23 over it, 1.23\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/scenarios/filters/filtersPart.tsx"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"682fa3a6c6ca35f654c8f0a5961fb118d78996f2c4b09d310accdbb8c3272adc"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: use-touch-sensor.useTouchSensor: FunctionTooLong \u2014 useTouchSensor runs 121 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9c9b46b8c869497460a456bf1a3fbd38dff006b5d8e61a7d43e028c62f1503e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: ConditionRow.ConditionRow: FunctionTooLong \u2014 ConditionRow runs 120 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionRow.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8921b1bb05f13a735222bbc20d4104592591c8ed63415a2ef8145ce65f94f8d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: nuTheme.nuTheme: FunctionTooLong \u2014 nuTheme runs 119 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/theme/nuTheme.tsx"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cff9043475b7473c61c7b64f9a2dd56320a443c2d5a06a98225cd03065b3249"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: FieldSwitch.FieldSwitch: FunctionTooLong \u2014 FieldSwitch runs 118 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 18 over it, 1.18\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/field/FieldSwitch.tsx"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ad81552af496a4f3911981b305ed0547585cccaa16b4bf93ed1e7888a7d44e9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: useActivitiesSearch.useActivitiesSearch: FunctionTooLong \u2014 useActivitiesSearch runs 116 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 16 over it, 1.16\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/useActivitiesSearch.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"61b8034d4a0f0385e3f8a15a144d907c90dd76e0fb0c58df054659879f4c0587"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: use-mouse-sensor.useMouseSensor: FunctionTooLong \u2014 useMouseSensor runs 114 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bdf0209e88087f1a5a1e1ca95c97b02292e2e9a81d53821b65d6074da172d1d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GraphBuilder: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/build/GraphBuilder.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"45b46e83362de399f9afc96fd987c6f3649167020df2d8a5a92ba8a3e3b04836"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: graph/Graph.tsx: FileTooLong \u2014 554 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 54 over it, 1.11\u00D7 the bar. 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":"designer/client/src/components/graph/Graph.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb9598aeed483a8f06759c3b914d16184c43c3f47132ba8f939c13153ef38a05"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NodeUtils: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeUtils.ts"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"9819c1607d777713fec6b069889b1a20a19011951044089b04371ceab3827d8f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PeriodicProcessService: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea052044198a0598d7d647affacd566140dc67a69745ebb9f3e7b3ef80368fb"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: SelectStyled.selectStyled: FunctionTooLong \u2014 selectStyled runs 106 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 6 over it, 1.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/stylesheets/SelectStyled.ts"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"dda65278fc2eab00699948a96e4708251f85039a1218edc43f8a8f834593a153"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: api/ScenarioActivityApiHttpService.scala: FileTooLong \u2014 527 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: ScenarioActivityApiHttpService (41-666). The bar is 500 significant lines; this is 27 over it, 1.05\u00D7 the bar. 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":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ScenarioActivityApiHttpService.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4af48ec956559abab58095354b16684d7264dd29fb6b55abaf9268395cc1d267"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: AdvancedSearchFilters.AdvancedSearchFilters: FunctionTooLong \u2014 AdvancedSearchFilters runs 105 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/search/AdvancedSearchFilters.tsx"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8fdf172f17fdfa06a82e29c6c5a626db17edce374f8bcd6261c0d2c681e387d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: Assertions.Assertions: FunctionTooLong \u2014 Assertions runs 103 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node/NodeContent/TestingContentElements/Assertions.tsx"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dba200f1305adf90e9b50bb5bbadeb693d278e0791739c87d1b99b3f8fb25dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (14 corresponding lines): components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:86-99 | components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:111-124 \u2014 These two members are one piece of code written twice and then edited apart: 14 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa068a37e00ece021c2388b8b9160f401afcecc7cd6b4f289c1f8601d8c32f31"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala:211-230 | components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala:251-270 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"bacddbaeec830f8c2779977eca4579a85a482910e49fa328f6105331208cfebb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/sink/UniversalKafkaSinkFactory.scala:252-270 | utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/sink/UniversalKafkaSinkFactory.scala:299-317 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/sink/UniversalKafkaSinkFactory.scala:252\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/sink/UniversalKafkaSinkFactory.scala:251\u0060 calls \u0060DefinedEagerParameter\u0060 and \u0060utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/sink/UniversalKafkaSinkFactory.scala:298\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/sink/UniversalKafkaSinkFactory.scala"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"160327a57f5cf3e76dbe27753b0d4a69117729dbbf337e937984fb29d675f4bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioActionRepository.scala:269-285 | designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioActionRepository.scala:553-570 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioActionRepository.scala:269\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioActionRepository.scala"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"54a71a96af587f831d46c0b14c08272d1d9e360018597a47e4e3daa0bc263dda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): designer/server/src/main/scala/db/migration/V1_058__UpdateAndAddMissingScenarioActivitiesDefinition.scala:111-126 | designer/server/src/main/scala/db/migration/V1_058__UpdateAndAddMissingScenarioActivitiesDefinition.scala:158-173 | designer/server/src/main/scala/db/migration/V1_058__UpdateAndAddMissingScenarioActivitiesDefinition.scala:204-219 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/db/migration/V1_058__UpdateAndAddMissingScenarioActivitiesDefinition.scala"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9b8a4c8a7d328afbfedb30a6587f27eba63381e9c8a5f1c1690122ff6851db0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201316 lines \u00D7 2): utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala:119-134 | utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala:140-150 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala:119\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a04c1bbcca7ab0f55324cc7a7f4736222039d4a4fb8d9c82179ea21be3d61c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala:86-99 | components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala:112-125 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala:86\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"188d1020ebc12af801dc8f32e3f28991855bf24a0ec011430dd2a21939548a6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala:50-63 | engine/lite/components/base/src/main/scala/pl/touk/nussknacker/engine/lite/components/Union.scala:65-78 \u2014 before extracting anything, compare \u0060engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala\u0060 and \u0060engine/lite/components/base/src/main/scala/pl/touk/nussknacker/engine/lite/components/Union.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c2e5ab3e16f92b290352a7bfb8fbd0e48354337502c1dedda8e39bb4e356ed5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala:34-44 | engine/lite/components/base/src/main/scala/pl/touk/nussknacker/engine/lite/components/Union.scala:30-42 \u2014 before extracting anything, compare \u0060engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala\u0060 and \u0060engine/lite/components/base/src/main/scala/pl/touk/nussknacker/engine/lite/components/Union.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala:34\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1e5369167264da740dc10ff1dd5ec7f5cf720a2c7d5dca19423fa3ed39d2ea3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala:175-186 | designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala:195-206 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala:175\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0bf45146b40e93f9e8f9a793f9a872f4050fe8baddb4addc9db05777cda7e30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 2): designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala:160-169 | designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala:352-363 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"1addbfd652afc67a4b9e0b3a13671d4eba02eb93cc784bf4bd141385a4fe5f49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201311 lines \u00D7 2): designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala:289-296 | designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala:347-357 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3d8e8ed5d5436f083e931c99af63cc4b535d5a6a9d2402fac05533335f45831"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 2): defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/DefaultConfigCreator.scala:14-23 | engine/flink/management/dev-model/src/main/scala/pl/touk/nussknacker/engine/management/sample/DevProcessConfigCreator.scala:234-241 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/DefaultConfigCreator.scala:14\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/DefaultConfigCreator.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2089cd26abd6eb93ffe657f9fd4f84b415cc5de2291fc125327dd84a3c2faee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala:561-570 | designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala:593-603 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala:561\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bac02b94624aa6fc7c4b4a0df887556422ff26403b196e8198b21ebf1b94229"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): engine/flink/scala-utils/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinfo/caseclass/CaseClassTypeInfo.scala:118-127 | engine/flink/scala-utils/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinfo/caseclass/CaseClassTypeInfo.scala:140-149 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060engine/flink/scala-utils/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinfo/caseclass/CaseClassTypeInfo.scala:118\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/scala-utils/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinfo/caseclass/CaseClassTypeInfo.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"667381d338750f79423690a268e68fb8d97aa1bec2159688318761ab1553b0aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala:138-148 | utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala:154-163 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala:138\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d4b12d48d570aea24c5ee33c42f3dc57109984f6413f86640a8f0fac8dcbd99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:86-94 | components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:111-119 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:86\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ff5da04b84bf818cdaf2ce86d6f6352330f613f927ad9a18ceca0fb79b156fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/typing/RowConversions.scala:81-89 | live-data-collector/src/main/scala/pl/touk/nussknacker/engine/livedata/CollectedLiveData.scala:29-37 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/typing/RowConversions.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"15f12162ca418e32000bd1d37600a07891f600e7d1eedec57611944c89863966"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/migrations/UnionParametersMigration.scala:22-28 | designer/server/src/main/scala/pl/touk/nussknacker/ui/process/migrate/UnionParametersMigration.scala:18-24 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/migrations/UnionParametersMigration.scala:22\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/migrations/UnionParametersMigration.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"13a6d4c597194b03a65ea4e4c843ce28cf5bc48e61052071823b95d87fc15791"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala:117-123 | designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala:130-136 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala:117\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"495b2a0356bce8fc3d250216a13d755511490e3d80545b72cbeba536c0527804"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:89-94 | components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:114-119 | components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:143-148 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala:89\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/javaapi/context/transformation/JavaDynamicComponent.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dbe4ad981092ea7bbd4740903f09fe5a6676b3480b16df6dab16856e50118f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/DBFetchingProcessRepository.scala:79-83 | designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/DBFetchingProcessRepository.scala:100-104 | designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/DBFetchingProcessRepository.scala:124-128 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/DBFetchingProcessRepository.scala:79\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/DBFetchingProcessRepository.scala"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"436886eb6140a15e71de1afeb272304a92520408491376e9849a6155c648d718"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): designer/server/src/main/scala/db/migration/InvalidateComponentsUsagesCache.scala:20-24 | designer/server/src/main/scala/pl/touk/nussknacker/ui/db/migration/SlickMigration.scala:69-73 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060designer/server/src/main/scala/db/migration/InvalidateComponentsUsagesCache.scala:20\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/db/migration/InvalidateComponentsUsagesCache.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"47a9cd3de2f0c2c89f08fbd78a7677482fd53c0a6c289fa3d608d060fb906394"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): extensions-api/src/main/scala/pl/touk/nussknacker/engine/migration/ExpressionsMigration.scala:23-27 | extensions-api/src/main/scala/pl/touk/nussknacker/engine/migration/ParametersMigration.scala:18-22 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/migration/ExpressionsMigration.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"d20eca0479ab2b8418cb70dbeb4e792af0de3173d96a293bf93be6a24c4bdc02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/collection.scala:527-531 | utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/collection.scala:553-557 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/collection.scala:527\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/collection.scala"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"42a77548e253f4de72c2a4a6e3bf28bb79ad8bc2b1a2ed4e8451fb372b2b4373"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): designer/server/src/main/scala/db/migration/V1_061__PeriodicDeploymentManagerTablesDefinition.scala:64-76 | designer/server/src/main/scala/pl/touk/nussknacker/ui/db/entity/PeriodicProcessDeploymentsTable.scala:48-60 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/db/migration/V1_061__PeriodicDeploymentManagerTablesDefinition.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"b640c0495344a9b2c968ac4c66e56d82732a2ad6595a6de6e650b4aaf4801fcb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala:69-73 | engine/lite/components/base/src/main/scala/pl/touk/nussknacker/engine/lite/components/Union.scala:84-88 \u2014 before extracting anything, compare \u0060engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala\u0060 and \u0060engine/lite/components/base/src/main/scala/pl/touk/nussknacker/engine/lite/components/Union.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala:69\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/UnionTransformer.scala"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3aa2e787314afa9b1955f724578ca30a254feaeeb0e16e8bb4564013191c39b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): engine/lite/embeddedDeploymentManager/src/main/scala/pl/touk/nussknacker/engine/embedded/EmbeddedRequestResponseScenarioValidator.scala:16-26 | engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/RequestResponseScenarioValidator.scala:17-27 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/embeddedDeploymentManager/src/main/scala/pl/touk/nussknacker/engine/embedded/EmbeddedRequestResponseScenarioValidator.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"226c5666387a89c2ce3b3a9da13e83af7a8ebd726ded0f8228e9f1b52b4c83eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/migrations/GroupByMigration.scala:15-20 | designer/server/src/main/scala/pl/touk/nussknacker/ui/process/migrate/GroupByMigration.scala:15-20 \u2014 before extracting anything, compare \u0060defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/migrations/GroupByMigration.scala\u0060 and \u0060designer/server/src/main/scala/pl/touk/nussknacker/ui/process/migrate/GroupByMigration.scala\u0060 as WHOLE FILES: 92% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/migrations/GroupByMigration.scala:15\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/migrations/GroupByMigration.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0df3261f32378a52de126ec8d511757c8c03637331663d04ba3d0e17ae2bbe1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/SpelReflectionHelper.java:58-62 | scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/SpelReflectionHelper.java:67-71 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/SpelReflectionHelper.java:58\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/SpelReflectionHelper.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"20e1b715279fd4c4940c68f1b02cf2d304bfa017739f064de0f02b8a40cbe5c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): engine/flink/management/dev-model/src/main/scala/pl/touk/nussknacker/engine/management/sample/transformer/CustomTimestampExtractingTransformationCopy.scala:17-27 | engine/flink/test-utils/src/main/scala/pl/touk/nussknacker/engine/process/helpers/SampleNodes.scala:470-481 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060engine/flink/management/dev-model/src/main/scala/pl/touk/nussknacker/engine/management/sample/transformer/CustomTimestampExtractingTransformationCopy.scala:17\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/dev-model/src/main/scala/pl/touk/nussknacker/engine/management/sample/transformer/CustomTimestampExtractingTransformationCopy.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"c743252c276bf2ac89cb0e368a66dd2141c512db78a851fb50609fa23841f761"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): engine/flink/test-utils/src/main/scala/pl/touk/nussknacker/engine/process/helpers/SampleNodes.scala:430-437 | engine/flink/test-utils/src/main/scala/pl/touk/nussknacker/engine/process/helpers/SampleNodes.scala:452-460 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060engine/flink/test-utils/src/main/scala/pl/touk/nussknacker/engine/process/helpers/SampleNodes.scala:430\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/test-utils/src/main/scala/pl/touk/nussknacker/engine/process/helpers/SampleNodes.scala"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe9d027097c27f1a7cd10b4c927b178027df9d2760ea4b385ee86ecd03a29b7f"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: CaseClassComparator (LCOM4 7): CaseClassComparator\u0027s methods fall into 7 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 7 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/scala-utils/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinfo/caseclass/CaseClassTypeComparator.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8098830f15f4b1657c23767e48f09603e117e9fe0e97169741bf2e10d7ae04"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DbScenarioActivityRepository (LCOM4 5): DbScenarioActivityRepository\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/activities/DbScenarioActivityRepository.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"26526068a338cec8847c52be9b08ab091a3e427b9b9d898daff7f3fe6bec4a62"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TableSource (LCOM4 5): TableSource\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/source/TableSource.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae9cf16156090a62b9913f67f986e5a02bb7f35a30db965c74b0bcc59e5a1fd8"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ScenarioActivityApiHttpService (LCOM4 4): ScenarioActivityApiHttpService\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ScenarioActivityApiHttpService.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"764ddcce0c350f800f05431c628ba1aecb64b4c1094a9e4c035ff05ba71c3909"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DBFetchingProcessRepository (LCOM4 4): DBFetchingProcessRepository\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/DBFetchingProcessRepository.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4c284a544f3c0094b05dead8eeaf42c70bbfe7b1a2dceb7d7376f490d9eacff"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SlickPeriodicProcessesRepository (LCOM4 4): SlickPeriodicProcessesRepository\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/PeriodicProcessesRepository.scala"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"d94b2595b03664043d2f749ec919c9154478843b0a039d9a24a53a1371075103"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: JsonSchemaRequestResponseSource (LCOM4 4): JsonSchemaRequestResponseSource\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/request-response/src/main/scala/pl/touk/nussknacker/engine/lite/components/requestresponse/jsonschema/sources/JsonSchemaRequestResponseSource.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"b00acd6cb1502dc0decb7d4e268ed23a63cb6ec4ff38ef49616b9a28d7ff1112"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: NodeCompiler (LCOM4 4): NodeCompiler\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeCompiler.scala"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2936e5e52800769f50c013c69851cdf880f6964f0753dbc0f7442e235c78518"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should allow pan view: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/processSelection.cy.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe6695ccb924145eaea90d9dd16d9419932629d45f52d68725971c3ebb5ba7c8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should select only fully covered (to right): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/processSelection.cy.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"18bc4034442805bc806ad2dd45215de3b9ba6c1b84e21e7641868f6faf0d2377"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should select partially covered (to left): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/processSelection.cy.ts"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"2204db494bf61839b740ee4fb1c3a443df0a4d463663ae1e6f1e6a517eb08476"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should switch modes, append and inverse select with shift: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/processSelection.cy.ts"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"035589992cf8946ee48fc6a480790b98990e5c1864eb8210c5b88bcdb42d1a75"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should allow drag node: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/process.cy.ts"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb5e43a373dcd609c1b7095fbc7b927698d6f5775afb6e9e51f2bb94856271a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should make a deploy of the new version: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/process.cy.ts"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d501b01d1aa0e08e3ede8698cf340fb5f244727c572964cfef076789a050f68"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should display and expand advanced deploy section: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/deployAdvancedSection.cy.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"99f22867974a814b0bf8f76325ebe593bd9311444d7e432576ee1db539bc25bd"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should allow filtering by processing mode: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/components.cy.ts"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"02b4dde3fc74717a070e26f58f73f77d195614c500beca6bfe4a13c206937576"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: basic components - variable: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ae9294b9e5af409408740adb8d60c4488692e2735338cfaaa41860b73e4bc07"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: basic components - recordVariable: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"286b8ad4e19cbd895850c6f70b7bd55d5eb9a2a0598137a4b26b3fb2a9b11817"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: basic components - filter: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"1109ebcee9644ba04ca53140d7653d3d481c4a91bd2953591cdcdc341269b927"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: basic components - choice: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f23a462a1669a8d687d634df61a52d299a0744d26237685bcd09b0391e6c30"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: basic components - split: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f1bd71d965ce46f25dfde3bba80023362a4a8145b1daca651ec11e0ee3cfb58"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: basic components - foreach: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"69a6683d185b33e179382166bd6ccf451e9bb6954e2272b3389fd2b510bd3bbb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: basic components - union: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"3180c48f815ed5bb8d311e3f45e64bc68838728e558ba4e88438cc568e3a3c94"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: aggregates - Single Side Join: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"200ae8aa3b6c40feadafd415cea9b1a5b335eafd3bd9b0ad5d179f5edab0d8eb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: aggregates - Full Outer Join: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d4e6cdbd4aabb50384a9619e98a7a94634c19e1f1db4423b788913dda5485eb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: fragments - Properties: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"09daf26787cbc237d86f2b51c8e9d2d1eae52d9267fd24bdb9638fca1998e059"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: fragments - Inputs: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"41029ad3e8a6139a2fd90b57f5cd06f7a7ddb8e690eb5262386506e9c4993b5e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: fragments - Outputs: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/autoScreenshotChangeDocs.cy.ts"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4e6db6b2d9299ec29eac628d79151714446c9309052870538f355dff659ac1f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: resolves deep values: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/typeHelpers.test.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"39b0124612f52e330123f9afef0c7524b72fe59d0135a41eb894fb2cf1f0ba85"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: blocks invalid paths: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/typeHelpers.test.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bd3298356f4b0bb7038be2fa53ff1e4c6fe07e21492e405af32a72a0bb4c997"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: resolves deep values: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/typeHelpers.test.ts"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"edf2a45b9534fbe40f9dc23df9e2ff4fcdbd6487c341b065bc464866f77cf6c1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: blocks invalid paths: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/typeHelpers.test.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"3db50c85d962c96fe41f01496c2422dc76d57c913e2221cc39f5dcb2b319accb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should omit brackets: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/typeHelpers.test.ts"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd7f938bdac9837b51c011906edcf51c0891397435d18b8218c1b28b9ceb66a3"}},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cd4b1bb05d3cc77966fa8550daa4029c9e4a726ae0100502b88ade509a2622b0"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: designer/client/src/components/modals/CompareVersionsDialog.tsx: designer/client/src/components/modals/CompareVersionsDialog.tsx changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 62 in CompareVersionsDialog.VersionsForm at line 159. 1 of those changes was a fix/bug commit, and the other 1 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, 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. Counted over 2026-06-26..2026-09-24, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-26 11:31:12 \u002B02:00\u0027 --until=\u00272026-09-24 11:31:12 \u002B02:00\u0027 --full-history --no-merges -- designer/client/src/components/modals/CompareVersionsDialog.tsx\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/CompareVersionsDialog.tsx"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"c53026856f8ff5b51c504fd1f6f856fa0401ff41eb3eabccf85cd93fe294e87f"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 16 significant file(s) lose their only recent owner: designer/client/src/components/graph/node-modal/editors/expression/MultiSelectFixedValuesEditor.tsx, designer/client/src/components/graph/SelectionContextProvider.tsx, designer/client/src/containers/settings/collapsibleSwitchList.tsx, designer/client/src/components/graph/node-modal/io/InputOutputLayout.tsx, designer/client/src/components/toolbars/creator/CreatorPanel.tsx, designer/client/src/containers/liveData/LiveDataThroughputs.tsx, designer/client/src/components/graph/node-modal/aggregate/aggregateContext.tsx, designer/client/src/components/aiAssistant/InitializeChatStream.ts (\u002B8 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f2d9856c01d2b72f61009de25b58b2dc771f5666a06bb9c874d335bf50ec8820"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 15 significant file(s) lose their only recent owner: designer/client/src/components/modals/TestingDataRecords/drawText.ts, designer/client/src/containers/theme/styles.ts, designer/client/src/components/toolbars/testCases/definitions.tsx, designer/client/src/reducers/graph/testing.ts, designer/client/src/components/graph/node-modal/node/NodeContent/TestingContentElements/TestCaseSelect/TestCaseSelect.tsx, designer/client/src/components/graph/node-modal/editors/expression/AceEditorJsonBasedSnippets.ts, designer/client/src/components/toolbars/testCases/results.tsx, designer/client/src/components/toolbars/testCases/testCase.tsx (\u002B7 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9ff3e845a9bb3c5fd6d87c90e35bb68277372bb9bf1543f4e799dcbccdabe522"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 5 significant file(s) lose their only recent owner: engine/flink/aws-managed-flink-deployment-manager/src/main/scala/pl/touk/nussknacker/engine/assembly/JarEntryWriter.scala, engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/sql/FlinkSqlQueryComponentFactory.scala, engine/flink/aws-managed-flink-deployment-manager/src/main/scala/pl/touk/nussknacker/engine/assembly/UberJarAssembler.scala, engine/flink/aws-managed-flink-deployment-manager/src/main/scala/pl/touk/nussknacker/engine/assembly/MergeRuleResolver.scala, engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/sql/QueryContextSchema.scala. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0ee9c330fe4d2030420fc6d12ca7e5eba7d16443095a7015fe63cd1badeafb60"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 3 significant file(s) lose their only recent owner: engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/scenariotesting/DataRecordsSource.scala, engine/flink/components-utils/src/main/scala/pl/touk/nussknacker/engine/flink/watermarkstrategy/FlinkWatermarkStrategyRuntimeHandler.scala, engine/flink/management/dev-model/src/main/scala/pl/touk/nussknacker/engine/management/sample/source/GenericSourceWithCustomTestingSupport.scala. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f22a78639ca71708747782752b10d343ab9857b9660db99d0a2cc15df9e20f4a"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 5 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (47 single-owned of 1019 analysed files in total, counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 1019 of the 2660 production source files in this repository met that bar). They are anonymized user #5 (2 file(s)), anonymized user #6 (2 file(s)), anonymized user #7 (2 file(s)), anonymized user #8 (1 file(s)), anonymized user #9 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to FlinkStreamMetaData \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/TypeSpecificData.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d0ffb259383c612e1c29ca50a69f175fb6e4db5c0d9c08e17725b8ebc1abef7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: parallelism is fine? Maybe we should have other method to adjust number of workers? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/TypeSpecificData.scala"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed743720d388a1eec25929c25d22629ec715326cdf8f75a0fd598d6677f017c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // We should split this class - see TODO in ScenarioAction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/ProcessVersion.scala"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"5200f53d5067b9042dd6a2c5638d72cb9961b67e59d877bea6e8925ccab8ad5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This class should be moved into components-api, scenario-api shouldn\u0027t use this. It should hold only properties \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/MetaData.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18e7ab68a6c984134b935480e2a952a54f6b4bedd5e8e726af57b60d6cb392d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove legacy constructors after the migration is completed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/MetaData.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ec3f4a0c3727990cac838d0b3d0154ae49be9aec2a9974b4c91c25d2c56f579"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove metaDataType val and typeSpecificProperties def after the migration is completed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/MetaData.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"baecb956cdd86a56af12ab0517050773ccb621d0aed0c120f578020b80554e4e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is this currently needed? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/MetaData.scala"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6459781fdd57bbe5aebda7dc46bc97fed069e1adaaac7c3ced25d036add4e21"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename to ScenarioSlug / ScenarioId and add validations that it is a proper url path part \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ProcessName.scala"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf1285494fc1a45e9e371a297dfd327f50f0534a618906f56285025b0343561"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Avoid using it as a easy-to-change label. If we really need such a thing, we should introduce a separate ScenarioLabel class \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ProcessName.scala"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"b17d94643330b11341a81b223afd2b06956cdc6cd353924ac8142d7346514585"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should avoid exposing it anywhere, especially in the API as it is not safe to pass such information externally. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ProcessId.scala"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ee2b247a9763262836146669586f4c87cb3a996d3a60e537ce63eed022a5885"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Also we\u0027d rather not use a synthetic identifier, ProcessName (which meant to be a human friendly id) should be sufficient \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ProcessId.scala"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e829fc0802381080889b57900f2e7e4bf614730536fa243214fde7e7138be6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO in the future \u0027expression\u0027 should be a dedicated type rather than String, it would for example make DictKeyWithLabelExpression handling prettier \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"common-api/src/main/scala/pl/touk/nussknacker/engine/graph/expression/Expression.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"678bac2295fbb897890258eb6eb9c24036abb23a252cc90e78a6353f755917f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename to ComponentMainMethod \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/java/pl/touk/nussknacker/engine/api/MethodToInvoke.java"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"f37c6007060763f70b864cd8ea02e817532a66769f68af8842c57fd750772a19"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should parse this underlying config as ModelConfig class fields instead of passing raw config \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/ModelConfig.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"acda071407ef749d5f77570c704a2ddca35361eb16351af09f7a7b21eb8c28b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: We should use Designer db configuration here, but it is not easily available from the places where we use live data. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/ModelConfig.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"66cfd2c36d7b43fafb98164f06bf48d22d22686bb38683051bdbdd2d36cf07b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: left for a compatibility reasons, will be removed in the future \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/ModelConfig.scala"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0e9f06be7201afcf8ee72e837ae9710844fe8e4d80f25b517f5c2e2ac8311bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: EagerService shouldn\u0027t extend Lifecycle, instead ServiceInvoker should extend it - see notice in ProcessCompilerData.lifecycle \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/Service.scala"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"b46f16f40a13d04f916a4d838bce5811c50ac3eb2ecf6f0e8e0e289680ef4643"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should use fromParameterEvaluationResultMap instead of current variant. Thanks to that, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/Params.scala"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b7689ae9aa7430bd721ad625c631d81bd02237f0569176e4cc86f0cb57dd802"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to TypedFunction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/LazyParameter.scala"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"60c9fd4ccb8f53171924b388f4974aa21725959bef8b82c5eb1cfd24413f8ca2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO this could be scala-trait, but we leave it as abstract class for now for java compatibility \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/CustomStreamTransformer.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"844e2746a1a1d04cb8366cf929aa7ad6d920720ad11cc80084219b9cbf84f910"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: all methods should has NotNothing type check to avoid situation when scala\u0027s compiler implicitly put Nothing \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/Context.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"5834aabd7f0b5364c3534880503af5ef2697bbe3974198b1b76573f1dab43e51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider replacing NodeDeploymentData with Json \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/component/NodesDeploymentData.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"91bda81a1e9654722507f1eac677bae4278adb212154972052d983a4ee97bf98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this method - in every place of usage, should be accessible ComponentId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/component/NodeComponentInfo.scala"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f4d4673e597ff47b34483e28b7f0538d0b64107ea74f92dff74b322ea03557b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove Option from componentId - every Node used in runtime is related with some Component. After doing it, we should \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/component/NodeComponentInfo.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"1612d44465f0e27acb714a300c790989579c1eac8a34f6d747a659400b7ffb90"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO This class is used as a work around for the problem that the components are duplicated across processing types. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/component/DesignerWideComponentId.scala"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"be4aa3076a57d5cb271bc8f6a42d316c78fb1fa95e97635cc79bda59ffb5323b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: more configurable/extensible way of name customization \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/component/ComponentProvider.scala"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"04011bed5680f69fd342a0fcd91ce7a79a836c9db2b6e4ed55e80e3ceae15e3b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO We allow to define this id in the configuration as a work around for the problem \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/component/ComponentConfig.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ce61ee68cdbe97f615e682c0e231dc819cc7a11ce1074fdebe854d97c184720"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO global variables should not be part of ValidationContext \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/context/ValidationContext.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"c39753f9693ecaa45ce8da9a7f20e18c9fe1d7ecc165958253293f8eb3d4de0f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO global variables should not be part of ValidationContext \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeInputValidationContext.scala"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c5b5e4d9a99bd8e57c5e3c0458390935db19c0f70892d01c76659aa95417d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO global variables should not be part of ValidationContext \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeInputValidationContext.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"00dfc8ec3c8243a01629a4a2fd3cc3bd21254786f80463b5e47bf01d01400c93"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: better error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/context/transformation/DynamicComponent.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"35fde1ad5088b1dbdfb3806ebd78f395e2d674c7460dc77ca209c151cb7caf3e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use NonEmptyList instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/context/transformation/DynamicComponent.scala"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e4992338f45bee8a58e6349ad3e9c4bea950cc39149329ce298ba607bfcc2b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: and for branch parameters?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/context/transformation/BaseDefinedParameter.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee3558f54c043c334ff6bbdbf2cea23e54b28661866a1b3fa928e84c87273130"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: we should properly evaluate \u0060possibleValues\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/ParameterValidator.scala"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"179717c4fe90c778be53b32e1f91295ed79632381180fc227e6da498d8351abc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we need this validator because scenario properties do not have typing result, so we enforce proper type \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/ParameterValidator.scala"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"adfe2db8270cf49e478a9dec18cc48f425243df22662e1f8f91d9825064f5f13"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: currently only supports String/Boolean/Long dictionaries (same set of supported types as AdditionalDataValue) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/ParameterEditor.scala"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fbf0d3b618facc30f05e052663943eda24d965352305af7b499849bfc743fd8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: At the moment there is no way to declare parameter that depends on value of other parameter. The existence \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/ParameterDeclaration.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5b0a70cf5e9308d1a364fca2b1fd6880b3a20f6eb1351744a12cc498a535dc0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: extract Parameter class in the domain model (see ComponentDefinitionWithImplementation and belongings) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"24ffee477cee410453caffc1471ae885589b93bde56d6216ba66b84b77273eac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //  // TODO: all three methods below could be removed when we split this class into api class and domain model class \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b8a9e15bba979bc31154fb7259d3cb45a96bb486015dc30f63876c920a7f44f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to AdditionalVariableDefinition \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/definition/NodeDependency.scala"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"efa789d4ca24dd37146ce34e0299bee87a1adef3f0f02a848e5768c3bbbe86ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename/describe what is the purpose of input \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/exception/NuExceptionInfo.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6ccabf92fc7f6b65622d065f85af44b3a7371bed6d13631fd493867514267d8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename/describe what is the purpose of input \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/exception/NonTransientException.scala"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce5cd7a616075589452f3fa7a7941218ba932f161ccabf06050beacf19686198"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add instance invocation target if we decide that this feature is useful not only for global (static) variables \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/generics/TypingFunction.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0fe698159178852d081dbc100b99bdc8295bbf1d666464bc9eb6015d2e280a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: refactor way of encoding to easier handle decoding. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/json/encoders/TypeEncoders.scala"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"980b8263130b537824b6e0cdd2bbba73ea5b754c4bdd3cb8f183abb61fa612c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add support for dynamic parameters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/process/Source.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e618967fda5c52810e3f6e336be22318cd51ce09c97efdfcab9b68e498fa889"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this object because it causes typing.TypingResult in IDE \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0024b4bfa9e9328781ee9aedbc28b481d920ee6986b4c2743b6a64708373808"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"73ff3bdddb16c0b38ec73c54b3c545c572c90c0dc55c875e97f70f737d606cbb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename to Typed, maybe NuType? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"2912a79a78ddc72412b2f9aa126ac8451740d0eb430ce8d01f05d2e703a38e05"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should remove this method and instead, use variant with ConversionStrategy parameter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"11e6fc5c1d4149fcb3a2bee4da5927ec4c8d1c9e0e3e5704227a5eea2589bdcd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename to TypedRecord \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"011ab48cd106d6a776da03d53ace97514327bac2f8ad1c0a1fb0d9952f35cfcb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this class final - inheritance is only used in the InputMeta to override display \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"0759f96fb7e0b20f64b8bed67e291c959f6f5195063f2523974aaf0f7bc863ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to SingleTypingResultWrapper \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"61c270da83f00c7d8e6d87ab24488756618b5c2cb219f386dd0fb8680edea35a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how to assert in compile time that T != Any, AnyRef, Object? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ab6314cb8aefdbd62cc62c7ab969731a7df0160542004d6c257dde9740b8a6d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Those two methods below are very danger - dev can forgot to pass generic parameters which can cause man complications. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"79f900b3625a00b63d67c77d15e926a583b93b94fed1cfd0d2c1fb0c35829a87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We could do this smarter by reducing cases where there are two classes which one is a superclass of another \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/typing.scala"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d734eac45c281c9a07306add9eaac89a949b95a4ca7dbec9e99fcdb4a495b25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add feature flag: strictBigDecimalChecking (default false?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/TypeConversionHandler.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c120ec814ebd42ac8c3a9777a0097051ec24d0d7f1371cd2ec051dc4c03bfbc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove after full switch to ContextTransformation API \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/ReturningType.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"a85d6f271ae35e53722b45b2685886ff916006c5ac55663c1de9746adb986c7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove after full switch to ContextTransformation API \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/component/methodbased/MethodDefinition.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6a48029e678853faa257d78016076a35cd6e23003dd616baabcc264f86f8fff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Null should not be subclass of typed map that has all values assigned. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/AssignabilityDeterminer.scala"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"815181de60f660a901ca1695055474fdf57122db68937bab4177022f2770cb90"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle maps with known value. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/supertype/CommonSupertypeFinder.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f88936c7af4282e233d6275ae32fd6fc1b962d90e6ff8da4dd26380c9d9e46f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do this smarter - a little step towards this would be smarter folding of types inside Typed.apply(nel) - see comment there \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/supertype/CommonSupertypeFinder.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"40bfe89ade37938e2f1a4a62c3fa07c748f77d34dbdfc0be991adb77d6917bc0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO We can\u0027t do at the beginning if (l.canBeSubclassOf(r) =\u003E Some(l) and the same in opposite direction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/typed/supertype/CommonSupertypeFinder.scala"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b14fbdc6a7837228a3abd478dd0bf465cd8552e5e8695837e4b582807fde13a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add correct and more precise error messages \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/main/scala/pl/touk/nussknacker/engine/api/validation/Validations.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebe67463610c1060869f5ef3aaf3b19b261195012f6090683dac5250ebbca69f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: clean-up, split tests for Intersection (equals operator), Default (ternary), number promotion, can be subclass etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/test/scala/pl/touk/nussknacker/engine/api/typed/TypingResultSpec.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3a1b8f3707b9570f0fc5fa702c578e94fe33ddab940022e625d14d7ca09bf6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could fold it to Typed[Number] - see TODO in Typed.apply \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/test/scala/pl/touk/nussknacker/engine/api/typed/TypingResultSpec.scala"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"085bc36bf171be4a173848a01422e28d7d9a73c23d892057fdac7fc9a9058272"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add all combinations \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/test/scala/pl/touk/nussknacker/engine/api/typed/TypingResultGen.scala"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"a032d35ed3221a49d955ee9609a1ea2e8ccb7f8fa533e70f9f3b99588e0ecc67"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: tagged types doesn\u0027t work correctly \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components-api/src/test/scala/pl/touk/nussknacker/engine/api/typed/TypingResultDecoderSpec.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b159affdec3e95ed3954f1966393908dd0f3606b63bd83c3f2cef513aceb247"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: switch to liteBased after adding ability to override components there (currently there is only option to append not conflicting once) and rename class to *FunctionalTest \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/openapi/src/it/scala/pl/touk/nussknacker/openapi/functional/OpenApiScenarioIntegrationTest.scala"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02e344383dd99068c57d42b3236a4b14de99c487119b29ba1018956b7ddec5c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: enable adding custom Security settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/openapi/src/main/scala/pl/touk/nussknacker/openapi/SwaggerSecurity.scala"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"0abe01e95dd665753e04255a72fba887d5f142ed956e32b437a60732815385dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add configuration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/openapi/src/main/scala/pl/touk/nussknacker/openapi/enrichers/OpenAPIEnricherFactory.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c5dd96bfd8af5c62467d775e3a5cbbaf6342de43f8e0d69e05f3610a66121ed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Here should probably be default encoder and the loose one is for historical reasons TODO: verify and switch to default \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/openapi/src/main/scala/pl/touk/nussknacker/openapi/extractor/ServiceRequest.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e6b79150f975806b331e0aaacb3802c37fecd4c28fd6e7ac7158a5866afe4f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Here should probably be default encoder and the loose one is for historical reasons TODO: verify and switch to default \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/encode/ToJsonSchemaBasedEncoder.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"76fd44032dc91e75925a77588027dcb4f2078923b3a944aa07f813428fd01493"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: lepsza obsluga (rozpoznawanie multi headers, itp...) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/openapi/src/main/scala/pl/touk/nussknacker/openapi/extractor/ServiceRequest.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbf95480388342d6fcf6697e8b4ffb3f88915c762106350e1c0c1b6222ae7d09"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: figure out how to create client only once and enable its closing. Also: do we want to pass processId here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/openapi/src/main/scala/pl/touk/nussknacker/openapi/http/backend/HttpClientProvider.scala"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d7824e0d6e38511215787cadf4ea8f35eca5c8d6de84b01acccf25058f6df34"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: nicer way of handling application/json;charset... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/openapi/src/main/scala/pl/touk/nussknacker/openapi/parser/ParseToSwaggerService.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0073e548f28e0a5b81a470c7390b39f718579525a9f1bc27475647d37dc058"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle cookie param \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/openapi/src/main/scala/pl/touk/nussknacker/openapi/parser/ParseToSwaggerService.scala"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"48d510424015be613aba888d4956e8243d58490951b8600b296a4554c6221baa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: cache size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/sql/src/main/scala/pl/touk/nussknacker/sql/service/DatabaseEnricherInvokerWithCache.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"36f29e6743f7acfd7510bec50d39e27e8f8352915e847cd50af4f41f3ea257fe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: cache prepared statement? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"components/sql/src/main/scala/pl/touk/nussknacker/sql/service/DatabaseEnricherInvoker.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8f2795d44dbf077bd98a4e18738b5f0082182d7a6d2477db4b500a69d769f40"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Test sometimes failed because glide data grid elements overlap each other \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/testData.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e5a599d6589e7d6722dbc0f0df621ba650c43829fed51c0cc2dc58c9d4b8adc"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME flaky screenshot \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/stickyNotes.cy.ts"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7287fe9650723dcd18456c5bd68e1c207dadafb04e0732774dd8531f4de47a1"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME flaky screenshot \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/fragment.cy.ts"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b6a4b2374f136272e429e8773cefd0dfab797624a1945dd38b1915613f04c5d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME flaky screenshot \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/fragment.cy.ts"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0714bcacc9e27753e65d50be48e6ee6e7824c77737c1248b668205a5319b62e"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //.matchImage() FIXME \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/processes.cy.ts"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcec03ea79ffda4bca238396e77ddd77af552fc64ca0866402a6187796705834"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix validation display in node windows \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/nodeWindow.cy.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aedecb9891ddc9b048760e4c0b65457904b2f3fd667c385bd62ebf345cf4120"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: simplify, don\u0027t want to test dnd/save here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/nodeWindow.cy.ts"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8e08fccdc4e47094a755f6a49e4e12579f15898732c4c15779e5e79b2f4ec52"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: disabled snapshots because of styles blink problems (look for state \u0026 uuid) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/activities.cy.ts"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd08c9ac373e0db1b72f9134d5d72152d80464f5f9fefa829d4cb92efabf966"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: disabled snapshots - testing almost nothing now \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/cypress/e2e/activities.cy.ts"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dd43e4aea024a3441906959bdc5f320d7bd8c577d5d237f915e21487dae6938"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: use sth better, how long should be timeout? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/nodeDetails.ts"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"504fae0422f8496dd542d7006ec8061bfd70bc7fae51070369781eff8fc7bdda"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We synchronize fragment changes with a scenario in case of properties changes. We need to find a better way to hande it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/editProperties.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bf54103eb86b68295cb9860dbbd523a7eaf138765bc019e8d8177fb783a8e22"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: this is not an action, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/calculateProcessAfterChange.ts"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f78b8bb435920441af042b66ffd76354c6bc1e0f929194ff458d6ecf5f7018"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME: remove class from store - plain data only \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/assignUser.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a001581647dddad4a2a9f09ed904d59c138441df12e99e1e779f7feed09b35"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME: remove class from store - plain data only \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/models/User.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"94a99024311fae2643721693766ec91032e2728e541c1e9c4e028b826f2d085b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME: remove class from store - plain data only \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/settings.ts"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"1035d0bb6fa0d11483136bb03012cda6acb2436bb29c6f10573c232a72a0a987"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: verify usage \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/assignSettings.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"a82fc15bc1f00749ee2f27a62a1d4e951e9a780ac149d0a5361fcadec21d9168"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO move it to backend \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/TestResultUtils.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b33a0283fddd2cea40b4b2759a9848c42d8185d625d97e76e89df38fced7f2e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: what should be here? after aggregate input is not always present :| \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/TestResultUtils.ts"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ab82e9bc7e0474e86deac4ab04e96d2a5c8ccb116b4759658a72dbe4b3467b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO this pattern is not necessary, just export every public function as in actions.js \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/TestResultUtils.ts"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"b65c0d873290f5fc69ad50fad7f79f044d529e887619adbbbda0e26eb299bd0f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO this pattern is not necessary, just export every public function as in actions.js \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeUtils.ts"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fb352a9dbc35b1635db124f8df6f2215c06778483d4cdfe0f6b415c164dd846"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //fixme maybe return hasErrors flag from backend? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/ProcessUtils.ts"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"d67dbdb6d997ba34a9690b5ec73c0722f637d4be279147c34bae0dcedf1a6267"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: For now, when we use SPA navigation via \u0022to:\u0022 there is bad UX because of lack of loaders on scenario change. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/MenuBar/breadcrumbs.tsx"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ca73cc1b5a4c7565ccb5a15c7445c236a96af5037075fcb7fe8279eed713cb8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: replace with \u0022embedded\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/MenuBar/HideIfEmbedded.tsx"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"a356099ddf74a14595f8d4015704c97d4e567cc9f57448f2f64a0c0aa85d2771"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Find out how to pass threadId to the AiAssistant and use it instead of this variable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/InitializeChatStream.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c1fba58e4f3fc1eb38805dcde47ebcecac2d5ccb6c4536da78061120b25f983"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \u0022This repo is not actively maintained, these are legacy components and are not up to date.\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/components/ThreadWelcome.tsx"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"03b62069dc1081b04cd81b9f2116a3b2225a3f2df89bb9696aa6eb2e754a1768"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use Fab \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/components/OpenAssistantButton.tsx"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"1caf37bfa2133d6e001f23f23467145f1bd589db3651eea4720c7b199aee1fe6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: more types or any on BE \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/tools/ScenarioDataAIToolkit.tsx"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"106a7b5d1fc30e5f2785b22dfdd7dee08149803a0d13d1e2c1d697909ced386a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: get rid of renderClone to fix touch ux -\u003E replace CloneWrapper with styles to fix clone translation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/common/dndItems/DropTarget.tsx"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfb3740744f4b23f0295c5e17a2d022f12c33722632b0cb3f0cfd3ed61f61619"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix this without css \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/graphStyledWrapper.ts"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4f71ae61e42ad37431f326dad45928016a5ef59f26f79265453dd1d1534b00b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: when we add more configuration for joins, probably more complex logic will be needed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeUtils.ts"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b73a919d8dab9ad0d977318ea7d3508449de4d89a63648b3f4dd272484e99dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: i18next \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeUtils.ts"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cfb889e9311a64551ce757ce049cd2abdf060bd9256b5c0834f7a97dc0f2d84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO remove type (Source, Sink) comparisons \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeUtils.ts"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c719f71600f47cf7d959483294bb55e41ba0d11b42586e64cd9c78870be0450"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: methods below should be based on backend data, e.g. Fragment can have outputs or not - based on individual fragment... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeUtils.ts"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3c99a12838290b50de7f2ebc703180210f42bcd058e8b83b667098eee7c71c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check what happens with wrong nodes. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/SelectionContextProvider.tsx"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"383992c38dcb4bbc5fcafe27114aeb3e5f37542b2e6d8336188e2994e4358e70"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate cypress problems \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/ProcessGraph.tsx"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"18a1a7b2d373d86bf62698364e9dffa8ef2c202059eb81a02734a44e1158f07d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: show rendered description somehow on touch screens \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeDescriptionPopover.tsx"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"9811a4d35a5244924a1aad3bf728b5ca43ee57129190406a113ee2b15c68a730"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: look here for live data animations lag \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/Graph.tsx"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae29c04b88c33b6ffc2ed4b32fe7a1619283cece5caed64dd6ff914544648695"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: some different way to create id? Must be deterministic and unique \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/EspNode/link.ts"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1b932d75926f4e40775cf24cdb378328dc92b6e205e17977289629433916b47"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: check if it\u0027s fast enough \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/EspNode/esp.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4dd1264f0390beda9c7dfd6836de62a3eaca094b1559f1f2dd8393893663d97"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: figure out what should be here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/EspNode/element.ts"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"a55043bf97a33f58f2dcb8075d044ca60b4ee78c5a2c9e3566c36ad50f961553"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: handle \u0022piggybacking\u0022 of edges with different mechanism than empty edges \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/GraphPartialsInTS/EdgeUtils.ts"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f428164610a1e3aaa72a5746a84cf99fc61727eb7f8a21a0c3c9cef0058de2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: currently dynamic branch parameters are *not* supported... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/ParametersUtils.ts"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c03329a4b068855b6bba5dc04878788913c67de7581c9661226d6fdac0a4b92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: rearrange this once we have a better way to position buttons \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/fieldAddons.tsx"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc17b5c348e9ee93e626d27e94efe26bae8cc3b41a27632755d85e7aa6f5eb38"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: maybe we can rely only on node? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/BranchParameters.tsx"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"38a98a1d2209e44540853a852f35cae67805112c21980c89d513fb03338d9430"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: TypingResult is broken \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/NodeDetailsContent/selectors.tsx"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1cb19c84af17968dbcf848dcc9ebd60dcb5bde39eeda135b69329494329b0e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This style matches existing input placeholder styles. We should make it shareable somehow \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/NodeDetailsContent/NodeTableStyled.tsx"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa5b7a0853b96e0f6251e5221d10f14ce45022d33ed2086ce4194db34cf7b0cb"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME: this should not work this way. We should either provide some helper, or (even better) create mini-expression-languages for those types and do not try \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Formatter.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"a95fba7dd73bf92a197470905ea4ab96ae7e2d716d26611f1a538793c15079ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO handle expressions with escaped \u0027/\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/TextareaEditor.tsx"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2d6c18a0037dba0feb206c7b28c1185a427d32ed40d1615c6db88018c81c1ee"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: other fields have outline instead of border, so we need to compensate for that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/MultiSelectFixedValuesEditor.tsx"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"3de773d9590f298b6c53800801935daaa97ff30bca7cd0271d2b3fdcaf28e2f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: really used? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/FixedValuesRadioEditor.tsx"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"d721bd44ef92211b907e422b55d36a959cb7e169c499d04cb4240646242cf2d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Until we want have a better endpoint naming, we need to truncate it on the frontend side. Remove this logic when Backend ready \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/FixedValuesEditor.tsx"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e1288d66666d2bc18f6033f4ba77fb08e2f7b27523c0b42661dd982aedf3a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Table/TableEditor.tsx"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd827356acfc83fc47d4be6cc308e7f37d8b141001632b08f84d9b0f12d77583"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider moving this cursor logic to nk-windows \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node/HeaderWithGlobalCursor.tsx"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"aca973ffd844749dc56f55ecbbad7c7fc69dc209961513af40ba2869a130293a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider using library independent className, maybe append some in nk-windows \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node/HeaderWithGlobalCursor.tsx"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"46b40383af7e64e71b0c1d003133456766b4895db8d09f44e1c17ffc3442d4a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find better way \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/svg-export/prepareSvg.ts"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf69f26090926161601171b947467cd73652f73e1642a34ff35bb81571e6af8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: get rid of callbacks in store \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/GenericConfirmDialog.tsx"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d80f9d174affc2da28d2fd88f647ff38c4dd36b454754a38a1724382e372837"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: get rid of meta \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/GenericConfirmDialog.tsx"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"5872f78630375f0840b430fa5239ce78b19282e3aac3f7a228b6076a9d0be1b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: get rid of meta \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/DeployProcessDialog.tsx"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"44483781c2b7d6b8e30849164dc7c988b822422c95ee2cc59867135f600d60ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: get rid of meta \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/DeployWithParameters/DeployWithParametersDialog.tsx"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"975fbd72228ecd867d48205202068e0c80fc1e0bcfe31d73dfe539516765cc48"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: current validators work well only for string values \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/GenerateTestDataDialog.tsx"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"09943cc6de093d5ca7821d8c28ad83bf675fb13abfeea1bf38a3c49a51214fd9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fetch TestCapabilities and TestFormParameters in chain to avoid stupid errors \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/AdhocTesting/useAdhocTestingAvailability.tsx"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a2d1885576a6d8518b609a74c29dd105512a2b05dfc81e0a7ae89a4e2f2ffe8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate why there are problems with tabindex when parameters are wrapped by DOM element \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/AdhocTesting/FormFields.tsx"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"5176a0c0c624a2ce4012284976de1357ee35d2919a87e192d3504c348937c8d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: styled \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/CalculateCounts/Picker.tsx"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b2e20e906acad8c811a458a49e307bf0f964b6736fbe34d62fac73466752a2a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we need to change this fieldName on the backend from $id to name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/properties/NameField.tsx"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab71573aea55dfbc154b853f5f1fe6ea535cec5ba3cd09b57464a3555fa00059"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: flatten nested usages \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarButtons/Icon.tsx"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e67ea9d86c47a49b2977cb3b3c6db8f8fd2b37c81148b564aaa1908dc91fe63"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO we should split properties node logic and normal components logic \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/creator/ComponentIcon.tsx"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"83890c374e7b1c44a745991af5f5b47b6283cd0f88df90d3d3b6a14da320048f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add busy indicator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/process/buttons/PDFButton.tsx"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"0128f96dc949bb6f5bfd3bf4a9f013d0cf38f2ccc117d52fe4e93e8812d48f29"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: try to do this in worker \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/process/buttons/PDFButton.tsx"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"3db6170ab1677416138669b476e66b7e29bd9ca9c922b0dc5f21d29de626bf39"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: try to do this more in redux/react style \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/process/buttons/PDFButton.tsx"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ac2b556794d4f81fc4b78694a4900502940d337c6791b5f6ae9db62d5d01cf2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: better styling of process info toolbar in case of many custom actions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioActions/ProcessActions.tsx"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"84eb1410c21254ded31e6e1eed7539fac876c89281d33408da84b0ead5279e7f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: counts and metrics should not be visible in archived process \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/test/buttons/CountsButton.tsx"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"f388b1de38013c56774e910ad4b8047b2de5b44e4b07360b22009b4775ff9d92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: get rid of \u0027indicator-\u0027, maybe rename to \u0022warn\u0022, \u0022prod\u0022 etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/EnvironmentTag.tsx"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"208174fd76015bd1bf6b77fd0a962c33357ce0ab9eccc02024988ceea4daa8ab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ActionRedeploy? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/event-tracking/helpers.ts"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"39269b9875de4c70c197d6aaff6241a7ee85cffe0c371c4fcc3cd6daad3b16fc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: move this validation to backend to simplify FE code \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/hooks/useProcessNameValidators.tsx"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"a143bce339c20a2cdac9b5e49e077b89eda395c95b2cf99302ee9f5fc78485b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // See note in DefinitionPreparer on backend side. // TODO remove it after API refactor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/http/parametersUtils.ts"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"210225e42c491beef72abbd00d8be1c4d099d8a789e2416e4b0df9241277bae1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Move show information about error to another place. HttpService should avoid only action (get / post / etc..) - handling errors should be in another place. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/http/HttpService/HttpService.ts"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd09c2a115ca67db95f47136902991fa1cef0e3989802f0f80df491698acff2b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: include all from initialUserFlags \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/userSettings.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a89e67d11befbe1c4e3c003f7a3438642c1f15a6b5319c0c7c32e50d0fe9db1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: replace this by some other way of signaling that current status is outdate and will be validated soon \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/scenarioState.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d4ac4039f3c714a8544158063b929ee77eeaa6068b3a12d7ff8618e55230d69"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // defined parameters filled. see note in DefinitionPreparer on backend side TODO: remove it after API refactor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/utils.ts"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"65d2c9b135ec05a90deea13911da66c3cf4d5273d10f619b3b5b9ae676ff197a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: We should change namespace from graphReducer to currentlyDisplayedProcess \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/reducer.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a047cc311fa1ff9ac2c0530d21f8a0f9a344cedf0a0de57ccedfb888ed9e086"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: handle it differently? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/reducer.ts"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8f358e6be6691bba0c04f37bdeb5d33f6949ecbb6103ace57ef778bb6a9b4bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could not only check if hasOutput for from, but also check if Edge.edgeType.name matches \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/correctFetchedDetails.ts"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b1930ff8d46d66ead2cc7ac5dc9acda683be2982103ce843204b4b7bcb5cb3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This should be one on the BE side \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/correctFetchedDetails.ts"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ebad9c29dc0011c36b1fbf62a7f9ae6c2ce62cee654aaa687e582f1d35b454"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO input hides partially due to padding... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/stylesheets/SelectStyled.ts"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a53a04398fa213920b6c2f035e2893924c09813e1bd3188b9b865046799244e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO input hides partially due to padding... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/stylesheets/SelectStyled.ts"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"a291608f5d1a9f6f5a455797e986114e0cdc12afdb288e290a41b15c224b0d29"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Remove me and add correct properties \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/types/node.ts"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"32029a80f59f57336bc1d66580f045da886f157cf9657bd8c55f9706a6e1f076"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove the default value \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/DeploymentManagerProvider.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"baeb82f95147b96c4a15e9e7d14d4227049ce5a894c43f8ecad2d90cc3977425"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: replace scenario types by the separate lists of deployments and of models \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/DeploymentManagerProvider.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3d316901ccc4c222b334548d7c33288a430086ba1b10d98c56dd8ad0fca5dce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some cleanups such as rename to sth close to presentation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/ProcessStateDefinitionManager.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b77e2e98d3de2c2e4424de8b827c155513ea1f86a7565c659abe7d35c167e33"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO replace by simple tuple DeploymentId -\u003E DeploymentStatus after fixing TODOs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/DeploymentStatusDetails.scala"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"563c986e0a8c18287915fc33149565b78b2a2deead3177c07e5dc3ea9680a606"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should try to unify all commands below to the form: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/DMScenarioCommand.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"07eb69841bb4346f5b7029708bdd6e208b62e297cf14da14d08aecb7c721f2e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: job update strategy should be a part of deployment service logic, instead of DeploymentManager\u0027s \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/DMScenarioCommand.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b75f61f12039cf8f63c6d938303621b91b6a9b8846badb041cf8f5e6ba05fa8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should merge it with CancelDeploymentCommand \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/DMScenarioCommand.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"256f3392f6e58478e0bcf3964a25cd50c38bd0e3fd9cab49555670fcf285cde3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Commands below will be legacy in some future because they operate on the scenario level instead of deployment level - \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/DMScenarioCommand.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d1a834e4105cf7532df9326dd27a4ec75ce664621637b3ec888750e6df80f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace this class by a BaseDeploymentManagerProvider with default stubbed behavior \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/deployment-manager-api/src/main/scala/pl/touk/nussknacker/engine/testing/DeploymentManagerStub.scala"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"04ce9e5a75f64d9c73e423cbe6163322f1b75ad9c01f5204c8c10002589d9a88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use all command/action properties (not only deploymentComment) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/listener-api/src/main/scala/pl/touk/nussknacker/ui/listener/ProcessChangeEvent.scala"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef7f23985e10c62affb46eb8f24d0af110be5509f6660bf0e45ffad5c3ce6696"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Deprecated, please use modifiedAt \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/listener-api/src/main/scala/pl/touk/nussknacker/ui/listener/ListenerScenarioWithDetails.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4faf52013ef128d17279561a797f2aa6e4ebf8e1736a4286e8dbdb75b0c2ae8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Deprecated, please use modifiedAt \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/scenariodetails/ScenarioWithDetails.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c8e528dbaf31fd7b8c2c6e3d778c77cd7adeb3f689c49a8fec7ae90a467c173"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Deprecated, please use modifiedAt \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/component/ComponentService.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e354bb96990f6ccbbe2473d0964de3210ec78343f9c22467000e108ada6a39"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Deprecated, please use modifiedAt \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioWithDetailsEntity.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d86ed74775ca8804b7929f170f747ba2cc96acee39076d58f0f80d3751c73d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: probably we should just take one of them, but the one which is closer to t1? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/processReports/src/main/scala/pl/touk/nussknacker/processCounts/influxdb/InfluxGenerator.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dad1e8b8088da5632479afcf25db50c0e754467105177803c3a8adf6c1cca2c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: logger \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/processReports/src/main/scala/pl/touk/nussknacker/processCounts/influxdb/InfluxCountsReporter.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"28b305580ce83e3fe0d1bec7d1bc80945434223d0b84702122de0763639b3f78"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: test generated query, not just shape of output \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/processReports/src/test/scala/pl/touk/nussknacker/processCounts/influxdb/InfluxGeneratorSpec.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc94a14afb009bebf81c2d5539d6bee74d781a5f930965092a08238bccf7cf3f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The Option is taken for this compatibility reason, but should be changed to a required field: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/DeployRequest.scala"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"276f4113fac8b27ee022ec5b8fa8e29c905b26b41cb4ecfcce8981c5cf4a19a6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this field \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/definition/package.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"537e81710febba689982011a34f9b4e725ebb611371cc41fc2f9c3d7439f86a0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This field is not passed to FE as we always use ProcessName in our API (see the encoder below) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/scenariodetails/ScenarioWithDetails.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d72440230339da2498b213c64b66c691c6c3d4ed5b047be799bd9bb0c7533c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We remove null values from json to make response payload lighter. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/scenariodetails/ScenarioWithDetails.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc3ee101851262bf1f788d91ceca8fa8022cacbe4e4a024ea9251af07197ea0d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider extracting additional DTO class \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/validation/ValidationResults.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"b23e37a73fb95c8c420f1874ee644ad9e1741acee31e7a9d535be83ef055b8a4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: BaseFlowTest fails otherwise?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/validation/ValidationResults.scala"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"17b1bb45bc15840ee1c5a997fd487aa498a94c2dc47b32419e97bed3ea36771a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should remove this and instead of this, we should do node\u0027s parameters adjustment \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/restmodel/src/main/scala/pl/touk/nussknacker/restmodel/validation/ValidationResults.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cae5e9854cca7ab51febcf6ec77a1c1373c56415fefc8c37bbda012f42573ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The AdditionalInfoProvider interface should be changed to the factory that creates AdditionalInfoProvider \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/additionalInfo/AdditionalInfoProviders.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"8426deec8f2314b91c2f0054a27f831856113ce61b4d63b6e09015ae279a7cd3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should move loading of these extensions into the class where we see how many designer side model \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/additionalInfo/AdditionalInfoProviders.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"e21513cb48b89ed712c2f52e7968111d528e4254f8688e4579df24c737484c82"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Type me properly \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/TapirCodecs.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dec1a2d61f9f709704090ac702bd546705102db091a9fae27729de137f3a4ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make sure what type we want here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ScenarioTestingApiHttpService.scala"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"717b420de50a7c372e5194f47cd6c6a1888059061138014573120263f27335af"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO This endpoint is used by an external project. We should consider moving its logic to this project \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/RemoteEnvironmentResources.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"69e67edc4616d03ea62378ed246900bfbe17c0f79270a7e4533d60ece0167cf4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: The \u0060skipValidateAndResolve\u0060 flag has a non-trivial side effect. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ProcessesResources.scala"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"9af6e43a68108057096dc422c241348a931ba589d32a5aa206b621d6bb3b8047"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: disable fetching state when FE is ready \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ProcessesResources.scala"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5ba406dfa1ef26e0b316dd690343fe370d49d9eac92037a53795f2f313075e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: in the future we could use https://github.com/akka/akka-http/pull/1828 when we can bump version to 10.1.x"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"5143a95c0a889c188cf05abdb37c8e51bd658d497709fe1a09fe001e1964c8e2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This (deployRequestEntity and cancelRequestEntity) is used as a transition from comment-as-plain-text-body to json. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/ManagementResources.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3d336a38eadaa60455db06cf6c4a59750f6dc3f4407e7e5a3ce92a4951f84f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Warning, here is a little security leak. Everyone can discover configured processing types. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/AppApiHttpService.scala"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e57399a61bf8a2cdae3779e2447b1e7f6a6c16eb91ba46de78a072519b3481b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should remove this endpoint after we fully switch to processing modes - see ConfigProcessCategoryService.checkCategoryToProcessingTypeMappingAmbiguity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/AppApiHttpService.scala"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"689499edfeb0d6806624a3a0480dd8940b20f97f44d3df366aff707baded2d25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should use domain objects instead of DTOs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/AppApiHttpService.scala"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"4798668c10453d1874e1f160d17ce6b77166c6043d3b844b67ddb1448f155da2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: investigate which of these are still up to date \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/StatisticsApiEndpoints.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e719d7dabe781ab929ca2b83a83ce4bc6d3c71a7807e216534fee1614c99234"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should keep this in a map, instead of TypedObjectTypingResult as it is done in ValidationResult.typingInfo \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/NodesApiEndpoints.scala"},"region":{"startLine":1960}}}],"partialFingerprints":{"codehealthFindingId/v1":"efe38c7a64f4362172cf93c54c8d44469b00e7ccd792d511b71755968d8d7f84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove Option when FE is ready \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/NodesApiEndpoints.scala"},"region":{"startLine":1973}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef7e5a874a5dc71b1e9721938078524892e06f66b5f1ee464a6f719e80ad4e4e"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME uncomment examples when discriminator validation will work in the NuDesignerApiAvailableToExposeYamlSpec - \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/MigrationApiEndpoints.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ec91d3d98e745c49c60e36cf4f5e21914be11cef6b78347fb2a46b85cb8ecc4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: introduce separate labels for dictionaries, currently this is just equal to id \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/DictApiEndpoints.scala"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"56ddcb8a6ec79bc88afadd1fe89195a72763c94eff305becab239bf99226064f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: scenario graph version / the currently active version instead of the latest \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/DeploymentApiEndpoints.scala"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3fcef410491ec502e983404942c03d3186e4320b679fa2fb9745109cbf7438"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move to some details field \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/DeploymentApiEndpoints.scala"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"96a81a0831e7362f75384d5969052479bf05e14e96e9d569534b11d4a4a780f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove when it won\u0027t be used \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/AppApiEndpoints.scala"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"edd423b1380e0f9f465d5318ee366d79090240c6b9d8e943739002f9636529e7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME uncomment examples when discriminator (ParameterEditor) validation will work in the NuDesignerApiAvailableToExposeYamlSpec - \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/ActionInfoEndpoints.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7fdbb300118d6e81dcedf7cca8e419cba8ff9d801fe0e2380b45757136a945b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: remove when we no longer rely on legacy ContextId values on FE \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/scenarioTesting/ResultsWithCountsDtoCodecs.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e71f83b6006dc65bad2b80ed5e79cc318f9e6282e09da212f72a660153bbebd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO NU-2470: Maybe drop results from result(ResultsWithCountsDto) to not send excessive data."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/description/scenarioTesting/Dtos.scala"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f841540d6d52bdd210686545cab1ebef80b7a459db59762a63d4bb776d3ae7e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should introduce the common structure of Errors between different endpoints. Thanks to that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/api/utils/ScenarioHttpServiceExtensions.scala"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffee404406adeb2c0a8f6b9b7cf6d188d637c30970341fc9f644f3044dabbd89"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should parse configuration options to fields instead of accessing rawConfig. Thank to that: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/config/DesignerConfig.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"624bc3497d338131b6bbd7ad5655727df9ba9fa64030d1446eb64d4aafe5ee25"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: It should be probably supportedComponentIds - currently this filtering is unusable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/config/ComponentLinkConfig.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"b535ae68c25ed8eb87b9a99067afc4c2640634b67d5549272509a89e3d779ced"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: process -\u003E scenario \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/config/scenariotoolbar/CategoriesScenarioToolbarsConfigParser.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"77b6ede3ab1373d7c80553f883a1b693632ec9c67ca1eb9d527e73f9afe99866"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO impersonating user\u0027s name is added so it\u0027s easier to present the name on the fronted. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/db/entity/ProcessEntityFactory.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d3ad66c9b50dd2ee2febef85976c3e8a2c8f55c22a0df5629862a29862b130"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO impersonating user\u0027s name is added so it\u0027s easier to present the name on the fronted. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/db/entity/AttachmentEntityFactory.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf383538cb52e16009da61134f6b949629e97e835ef36fbb32ead24589ef3146"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename to ScenarioMetadata \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/db/entity/ProcessEntityFactory.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dda68580aaadc6f09a76cfc3033e2ce6c58328b6bf22826436e41d0fd3f3c7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Remove it in next release \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/db/entity/EnvironmentsEntityFactory.scala"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"24f8ff6589c65c57607eb5aa0e95b6fd0a15b6630434a3a0719605ee87dd26a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove it if automatic retention will be available: https://github.com/questdb/questdb/issues/4369"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/db/timeseries/questdb/RetentionTask.scala"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"c346effa46fad43066e0729c416e581d7af48faa058fd7d51f7b896479287f07"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: enable choice of output type \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/EdgeTypesPreparer.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"0621346797552176d0ca84a70a655a78829172082caa0a04a10e9269d9a22a93"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unify single-output components with this model - emit the entries (and so persist the named main \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/EdgeTypesPreparer.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"212a7cd933be1f14dc4a149344e02bdeed77f00c98ec14a6c9cb5690c6283ae3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support for fragments using other fragments \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/AlignedComponentsDefinitionProvider.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5feaa492ecdda885a70475aea42b89a2a556d88ceb0bf627630142c2c731fc9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should rather take ComponentDefinitionWithImplementation instead of ComponentListElement \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/component/ComponentsValidator.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ad8efa2c8b85cb8231f85135cf1d9e504406b4ba51b7cdefe07794c8abc746e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should firstly merge components and after that create DTOs (ComponentListElement). See TODO in ComponentsValidator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/component/ComponentService.scala"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"c24ab457856717d260f70c4caf80a406d94d483ee3a0ff723c3bc56343a95ffd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: some validator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/scenarioproperty/FragmentPropertiesConfig.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"0892b34990d176bcac09f8a6958f1000a17c1c3114a3d8a89082fdb7eda91491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should probably allow to add some properties definition using configuration like in the scenario case \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/scenarioproperty/FragmentPropertiesConfig.scala"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ea73cfd0db986d1b8fce0802c2ef661d9b8e191c0811f3bc2dce8d024739ab3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: get rid of Future based repositories - it is easier to use everywhere one implementation - DBIOAction based which allows transactions handling \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/factory/DomainServices.scala"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d6ff587d3dc7188c008c71668bc2aa5c0649ae6affc5af9f0568dd8a2c8ec43"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: scheduling mechanism shouldn\u0027t be implemented as DeploymentManager decorator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/factory/DomainServices.scala"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeadeb743cd42100d5b0ae69c9d04de5b1bd44f1e878747a73122f8305ac0153"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make it more configurable... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/initialization/Initialization.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"bce448dfd57aff2bd61e878e2aa23c440677fb9c11489086089fa52329a70c9c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Rename process to scenario everywhere it\u0027s possible \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/migrations/MigrationService.scala"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"32f8ea0990f4ee97f14d324546e7748863440eb4f9c8a750758076549a762623"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Instead of doing these conversions below, wee should transform ScenarioWithDetailsEntity with some additional context \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ScenarioWithDetailsConversions.scala"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f8d90b6f6609018f73433c3669cf7624fbfa22b6f42bd0ce9be39df89d7ae2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to nonArchived \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ScenarioQuery.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9ce497ab48dcf751bdb7912b5d4e241fd681a2c89fbee333e8871d468d9ea16"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Here we switch icon to non-animated version, in rather not sophisticated manner. We should be able to handle \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ProcessStateDefinitionService.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"3923d2e4f96ac80b1b2af65353aebbbf353f16ba3d0931cc50b36ac668585518"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For some reasons we don\u0027t check other properties (tooltip and description). This code would be \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ProcessStateDefinitionService.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2684fa932a3d6a00cc8766ccec832c25b170d6d10c4b352d4c6cbadc57fecab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO For scripting purpose we should also support optional scenarioGraph field to avoid creating and than updating each time \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ProcessService.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e4ff80316b5f9be8bd852085c0604909a05000f39529bf0596f2ce7e1458807"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move dto mapping to appropriate resource \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ProcessService.scala"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"58c284bec466c419e1a771d38bb745882a0ed54df3ea16c165a85dbd9e62d182"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This doesn\u0027t work correctly because concurrent request can change a state and double archive actions will be done. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ProcessService.scala"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ffece596e347dff7182a7163f781b92fdcd1372873985444fcf56f59dc907c4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Create process should create two inserts (process, processVersion) in transactional way, but right we do all in process repository.. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ProcessService.scala"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"0404d14b793499b85aaec68dd45dcb3985caa35a2881fdc82dd688a1986b9c99"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Update process should update process and create process version in transactional way, but right we do all in process repository.. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/ProcessService.scala"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f0c8859d10b65e0dbcd24e8f37311cb225c57e2b161a09892634267bbee993"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: explicit errors in the method signature \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/ScenarioTestExecutorService.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e56545abfc8a886f65fc8f78f789be7cbaccf1af0a52593c4c277474e473a4c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CancelScenarioCommand will be legacy in some future because it operates on the scenario level instead of deployment level - \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/ScenarioCommand.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c8801a37d87c51057e76fadc0f292a8d155fef0a9aeee92c3b650fbfff0855c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This class will be replaced by DeploymentService from newdeployment package, see docs there \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentService.scala"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"8815fe68992d31730988dfb2e07ebf562489c66d5f1941ca8a65e32520cd580a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This inconsistent action-state handling needs a fix. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentService.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"d652ce35cdad153985b955e5ad67c808b3b9b4cb72038950ce69b8963d50c48c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should validate node deployment data - e.g. if sql expression is a correct sql expression, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentService.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b9f6b34777b45c67c454c4e54d5959fe44b87a9373175eec88179dbb563aee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should fetch ProcessName for a given ProcessId to avoid returning synthetic id in rest responses \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/ActionService.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"584e25ad840d13ef5c1e0ee07b4f081c9f40c354c658eeb5a3ffaaf31c1d9a0e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should send notifications and add action db entry in that cases as well as for normal finish. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/ActionService.scala"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b3e16f021fe77abeafd4f6113356d167b2a28d4e9d9f530073d9a5ba7f19454"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Extract a new service that would should merged perspective for of deployment statuses. To do that, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/deploymentstatus/EngineSideDeploymentStatusesProvider.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc3f95e9601fc13987ef473cb290dbd5f1b0bebf8b89ae96f45dea353ce0ac8b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what should be in user name? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/reconciliation/ScenarioDeploymentReconciler.scala"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"71e46f1819188477292f728eda77fd0767596c8a43ca1840b5c19abae3f05d9e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Store this data and use them during jobs recovery. Currently after restart some jobs will work differently \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/reconciliation/ScenarioDeploymentReconciler.scala"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"75be4e6fefceca23ec433ee25e2ade09619d7ad4578ed2e2786cc43163f350d4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is it correct? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/reconciliation/ScenarioDeploymentReconciler.scala"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3faafe9cdf95ae5b3facd5c5f0899eb48ca304f916e093c93d5204a757c80aa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PeriodicDeploymentManager shouldn\u0027t be a DeploymentManager, we should treat it as a separate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/deployment/scenariostatus/ScenarioStatusProvider.scala"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"857318900472c6e324f9c5e24f2437b37c19d436a5cf7d40d44fd782b809e6c7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: async version should be used instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/fragment/FragmentRepository.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"f887d6bd5b6c72a6179595d73d8bf7548c162bedc8bb9d8bc043d106adb2fbfe"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: async version should be used instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/fragment/FragmentRepository.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"73e07acda6b12026d2225e97c32d0ff4d07a1e8da395582ff1c3e503b845142c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: extract interface to remote environment? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/migrate/StandardRemoteEnvironment.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff52f6dae3260a8e80186b0d9cdb5c65abc1c74994d9eec92578806a79b528b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO This method is used by an external project. We should move it to some api module \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/migrate/RemoteEnvironment.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffcba1f90a02ad7a27d5d97dc9d506e31474b01169ff72fa10d3ed67d3d4faba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This service in the future should handle all activities that modify anything in application. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/newactivity/ActivityService.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"89686c6b40abe8ad93d51e9d8557c86b8e238106ebb43a7bbaf9d3ab2e00d158"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This class is a new version of deployment.DeploymentService. The problem with the old one is that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/newdeployment/DeploymentService.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b24b61025fbe677c60e1d5e01a5eb87099e06c5b72d34f4064681ec9d95289a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should key metrics by deployment id and remove this limitation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/newdeployment/DeploymentService.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"a079524556519cc15527bc537e379048f0b5b5df7882da6aec3e3d57b4a097a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: It shouldn\u0027t be needed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/newdeployment/DeploymentService.scala"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c8f22426f88b2248abacb7c371a7ea9ba86db85a202f642d13a820438342c67"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: more explicit way to pass errors from DM \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/newdeployment/DeploymentService.scala"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b87458a0ee0b2cfee1ec4da2c32d554c39778406405ab6353fa31b215fad3d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we show allow to deploy scenarios with different scheduleName to be deployed simultaneous \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"9002c5bc53403a68303c078a5a4d94e3e3e5493a4ea957a76c5a17aa2f4bbbc6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: set status before deployment? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"b71ff43cc5fb5984f7b264376b90d03c46363ea2259303ba2f27d8932bda045f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: in the future we could allow users to specify nodes data during schedule requesting \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"494c9b530532da8d298f76462733d9d2827198c224b202cf2db42129a4829532"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add externalDeploymentId?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"798c25956342a3ec6930ca258b9c7e90f7b5c8fe638752a35ec7814592c9988a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: allow access to DB in listener? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe82074d72c4f37fb98153c599b16512a0d522414a0033bdb271648d7ce83f9f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: some configuration? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessService.scala"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"a45cf17e0cad6ba0a0b29231787daebd877c85a434c053e4add22451835d60b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should return List of SavepointResult \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicDeploymentManager.scala"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"871cd6ef61c6da949422492e5c723c38315440f15bf596de771e6d70bd9f55b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO We don\u0027t handle deployment synchronization on periodic DM because it currently uses it\u0027s own deployments and \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicDeploymentManager.scala"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"8861dd29037b50cacb5b7440aa6fedc82eb123882b820055fc87fe7cd41f570e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Why we don\u0027t allow running not scheduled scenario? Maybe we can try to schedule it? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicDeploymentManager.scala"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"61a3378f73ae2346e9c374ee534e8700ddb39220656d1bc49848eeea0d8c811b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: on lock loss, update deployment status in DB so other nodes don\u0027t re-deploy the same scenario \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/DeploymentActor.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"84084ab929248315e301876888e15417857aa0196b2db6d6a8df506a85db081c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: refactor data structure and replace all usages of groupedByPeriodicProcess by direct usage of more linear schedules \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/model/SchedulesState.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"a100b7498b19d2ef81d1e41a5e69097364173f574571aefa8258dab132d0572a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should separate schedules concept from deployments - fully switch to ScheduleData and ScheduleDeploymentData \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/periodic/model/PeriodicProcessDeployment.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2508152a743bb0463a7cd28bfb8d4239c23cd07403db99db31d64e135b8d097"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This method is for legacy API purpose, it will be removed in 1.15 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/ScenarioParametersService.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d95de70cf35358a1f309507e18167190c74893f45b797b036419a36bc563fe"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: some proper errors and tests for that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/ScenarioParametersDeterminer.scala"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"793936acb1b1fb5ab7703b82fea6a2b011d809b2ca6c3d332fcfe0169e18b3a6"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: some proper errors and tests for that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/ScenarioParametersDeterminer.scala"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e696f18df330063e954a9e760fc31f4f23db6e88433fdfa2aee36596bca5f34"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should replace all usages of this method with access to DeploymentData which is created separately from model \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/ProcessingTypeServices.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a5d0e952eaeb957a28cfda91d1c0df675289e43ec2951505417a1df5dacbb3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should replace all usages of this method with access to DeploymentData which is created separately from model \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/ProcessingTypeData.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"f19504d112979ffe9af59c366ada56bc7f228a9ca35783a2014a238fcc7fac7f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should allow to have \u003E1 processing mode configured inside one model and return a List here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/ProcessingTypeData.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0456215d24c96502cd5fee1d13c64a04fe2cb11d7299925339feca7bab41943"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider using ParameterName for property names instead of String (for scenario and fragment properties) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/ProcessingTypeData.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"57c90e606176ebb9d619cc233ea0315941354b2db2b49e740e9fe3e0d077028a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: separate scheduling from Deployment Managers - it complicates this logic \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/loader/DeploymentManagersLoader.scala"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"a00628b79eae196a7d1413f4e70e6d11677d71f2be6da0a8280feeb71edd5914"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should return a generic type that can produce views for users with access rights to certain categories only. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/provider/ProcessingTypeDataProvider.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a52902f7246343c0d5fc667fbed8087afb03ea9bce9ff02efaa4757ecc1d08d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: migrate application to IO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/provider/ProcessingTypeDataProvider.scala"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c4112bc82b26b1d5c9007ca4a4e21b2a4159878acb0b0751f95201afcebbf8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO we should split ScenarioDetails and ScenarioShape (json) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioWithDetailsEntity.scala"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc4997f79ba1a715bcc52bad3d81ff55a3e6e7227e7521b5519ea4a1828688e"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: remove \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioWithDetailsEntity.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"722e932b2d42e90563cf421b0fed1d48771b054fc50153cc39781ecf2989deae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consider replacing it by lastStateAction, check were on FE we use lastAction, eg. archive date at the archive list \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioWithDetailsEntity.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"41577e7339120439cb096eae859d7fe8320c5a448672c515b50f41329522a680"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename into scenarioGraph when we store DisplayableProcess instead of CanonicalProcess in the db \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioWithDetailsEntity.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"16241decc547c4f7556d77703628e53010fd86d7b0051a536d86384ec9ed7d56"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should replace FetchingProcessRepository and ProcessRepository by this class after we \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ScenarioMetadataRepository.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4242653df27ca2cf56c3f11e17b21967271562467291df7eb90499d3bcdde42"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: It\u0027s temporary way.. After merge and refactor process repositories we can remove it. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ProcessRepository.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"a38d0a965899f331669c73f8dba5c07de6ac7b548adfaf9e7ec405b1feb38779"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should use loggedUser.id \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ProcessRepository.scala"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b0b62fb2665ca0ced5b0d5ac4707de99012a60b133b21f0f79c12d61da15f57"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME: It\u0027s temporary trait. In future we should merge and refactor: DBFetchingProcessRepository, ProcessDBQueryRepository and DBProcessRepository to one repository \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/ProcessDBQueryRepository.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"5db5705b53bb4b3102ac3a59971a3bf7db090a03fa82156c0a8ffe0b47625403"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: It should return F[Option[ProcessingType]] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/FetchingProcessRepository.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"beb0b39315f2d49906e54bf9a1ffc0b7b23abc9d1b0cbab1db12f92668488482"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: for the operations providing a single scenario details / id / processing type, we shouldn\u0027t pass LoggedUser \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/repository/DBFetchingProcessRepository.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc01564a8656f620b805ca29404c4b67733296512b69b32bfa7804e19c940d0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: In current implementation, we do not have a single ScenarioActivity-related service. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/scenarioactivity/FetchScenarioActivityService.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"b47344d2ecba5c7bb1ffe6ab09be3e2f97aef0773ca78d2c6369382e8658e265"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: When we switch to common format, we can remove  canBeTested and canTestWithForm and the whole logic around that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/test/TestingCapabilities.scala"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"78afc4c917f1336801ae84717c80feb62195a7d9b494f6b87a7f2ced53dd0178"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO change to \u0022or\u0022 after adding support for multiple sources \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/test/ScenarioTestService.scala"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff516f0cb8301227d7314013f66bb3d3648a540071eb16975e0dd3da8b9fa4e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Redesign StubbedFlinkProcessCompilerDataFactory to remove error nesting \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/test/ScenarioTestService.scala"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"729a66283bbac26a6f5197f3ec1d1b6c9959d5da9cc6dada807a71ca423592ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: should it work recursively - e.g for arrays nested in lists? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/test/testcase/TestsFunctions.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f902dd5f2dd71ac577a01b8d41029a0e8ee9f55787b69b8ef6e76c4f9cfbde6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what about warnings? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/version/ScenarioGraphVersionService.scala"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f0f2b5a4fab71acbc10f624b3b14cbeb1957dececf75034559d24b84f51d0d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: scenario was already resolved during validation - use it here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/process/version/ScenarioGraphVersionService.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae9d8f8111cfd22911d14a285db6b0f9b934ebdae3f1b832ecabb5b81e3d7314"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should distinguish between NodeId for nodes of graph and something like \u0022node invocation path\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/processreport/ProcessCounter.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3f7ba4d41f19f370f3cb6dd931aac146f2cb6e7e6790789079ea08841b52c5f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is a bit of a hack. Metric for fragment input is counted in node with fragment occurrence id... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/processreport/ProcessCounter.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f848b27cef4fed4a154fc710766dbfb6b53d36cc21deaaa97ab2db5b352adcd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: validate that process exists \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/processreport/ProcessCounter.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0ab8a4f8378c2e4a52c288f1f1311a979eb000693f7365f520e27ba23248af3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: WARNING now all settings are available for not sign in user. In future we should show only basic settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/server/PekkoRoutesFactory.scala"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8513338b6a9e3be3789a1d0dfa57702c157b1cf21c701523351ddbaaeac2b5f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: In the future will be nice to have possibility to pass authenticator.directive to resource and there us it at concrete path resource \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/server/PekkoHttpBasedRouteFactory.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"9afd47f01987f7611e8f390142d4a2548ad96486189073c2fefb966dc6e47df5"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK!!! This is awful solution, but it\u0027s done for a purpose ProcessesResourcesSpec. The spec will be rewritten with \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/server/NussknackerHttpServer.scala"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"05523abd2290c40c22d2e1c132d23d27fccb9788304266f467aec528ec20f3bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Instead of passing deploymentManagerTypes next to processService, we should split domain ScenarioWithDetails from DTOs - see comment in ScenarioWithDetails \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/statistics/UsageStatisticsReportsSettingsService.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"679e0f8610daceb6a2508e7d46f991fedab7d7e29ca22bb042244e79043dd16d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Warning, here is a security leak. We report statistics in the scope of processing types to which \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/statistics/UsageStatisticsReportsSettingsService.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"f78965fb02a1317c28ca8306cebb87bad99e90e4e75e4f6183dad0aac01685d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: change to groupMapReduce in scala 2.13 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/statistics/RawFEStatistics.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"c645d51d232a49a317d4d700829aab0d5f027de7149c77b337a490be5f73ee7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The code below is added to ensure compatibility with older NU versions and should be removed in future release of NU 1.20. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/statistics/FingerprintService.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8dd280ab67098085b2f9997dfa1d1930d05faabce1affaabbafd88e653a7dd4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: cannot render polish signs..., better to strip them than not render anything... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2ca645e6d05cac2c548401ee0bc181487689500ee95bdba28901aa9f780a7ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: pass client timezone from FE \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ce407d725ab9d6745372763197604dbfbfe882f6d72ac200f62ab478bd5e31e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is one nasty hack, is there a better way to make fop read fonts from classpath? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c01a1af7dd3b061a048348b604cb5b97195b4c442e5c52d350a05a959df801"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what about Swtich?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd4c94b6d2a1f4fbec4ebd876d0454100c168461ab7706158d2f6fdf8c71ec03"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Enable further validation when save is not allowed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/validation/UIProcessValidator.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"199cce5a299323005a8d7a1ad93ebef8f942be7b40d8ad5ada75c72ba225d2a6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we validate after resolve? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/validation/UIProcessValidator.scala"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7d527145bdd2039e22cf9863c4a331270d291d352db7c575a94e646676aeef4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle types when fragment resolution fails \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/validation/UIProcessValidator.scala"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f01117cfd4eeab312a4ffc82101be592002944fb2932b2dc591ea0f5b7132c9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Validation errors for fragment nodes are not properly handled by FE \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/validation/UIProcessValidator.scala"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5c2748e0cb7a0d894d22b200ce43daf98b666b2bd3b7fd3fa37baf839e192ae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO There shouldn\u0027t be unclassified errors, but the current design of ProcessCompilationError allows for such errors \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/validation/UIProcessValidator.scala"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"6229cf60bf7fcad8e13e6d435298537ba1130a3088accd3365f8200008803722"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: scenario properties does not have TypingResult hence this little hack to convert them to proper values \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/validation/ScenarioPropertiesValidator.scala"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"3290298116c8bc944963e9af0ca0577c260a9af7075509b446b1a8dfec7f74cb"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: is this really Spel or just Literal expression? (currently we only have spel and spel template) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/scala/pl/touk/nussknacker/ui/validation/ScenarioPropertiesValidator.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"c800e52fb59479226592a0ba5b2a5caed509557f1c99fbb636ff72cd5631c3b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consider using NuItTest with NuScenarioConfigurationHelper instead. This one will be removed in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/base/it/NuResourcesTest.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"70b2b95a440fff093e3dc04c2ee3072b76d82974ec43e4068a6c69401e5e9017"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: See comment in ManagementResources.deployRequestEntity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/base/it/NuResourcesTest.scala"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"e31181b959ff64df9d504c19bb9484422cd1a97145aa7bf30f09ca56a618e1bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: See comment in ManagementResources.deployRequestEntity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/base/it/NuResourcesTest.scala"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"6517df963c2bc5b86a5217fea7acf4e2183602f2617d9fa975dcb146a84b99b7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Using method \u0060runInSerializableTransactionWithRetry\u0060 is a workaround for problem with flaky tests \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/base/it/NuResourcesTest.scala"},"region":{"startLine":579}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e41defc5fbbfccddf429139ce1f540932fd0587406ab1181818a8775dfdafa5"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Using method \u0060runInSerializableTransactionWithRetry\u0060 is a workaround for problem with flaky tests \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/utils/domain/ScenarioHelper.scala"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb11694b29019c1ffc7dccedf5421fb2d5b7c8b15a6b06c306b960bfddd83036"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO One test from ManagementResourcesSpec and one test from ProcessesResourcesSpec use this route. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/base/it/NuResourcesTest.scala"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc3c0bd99a57e0a71f13aea280af89b57e401e128a32cef051750a79bcc8148e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should switch to lite-embedded in most places in tests, because it has lower performance overhead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/config/ConfigWithScalaVersion.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"11e2022b06f55e2159b962969a9468b7462a3c9db6d3d93c693a91e9f6b8b035"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: merge with ProcessTestData? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/utils/domain/TestFactory.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"31daafd69fab9d81943b7484427b0e684d8e8ff683d3aeafec373d912fd2eb6a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: update \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/utils/domain/TestFactory.scala"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"941c71777b94513da8d5668b449c858a1040780a4d2aea2362e9b6013587a88f"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: update \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/utils/domain/TestFactory.scala"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7ed6e1e40ec3ed02a33a148b3272251a40fe94d346984715c0fce4578b8618"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: tests for user privileges \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/utils/domain/TestFactory.scala"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"743a305745db1620a20f4226e11d7c63271ba65e2fa3c553c07e28f37835fbcc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: tests for user privileges \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/migrate/TestModelMigrationsSpec.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d41047d8d9d314428a2d86d47cacd665aa751a154ec6d16387a2992d3077933"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: tests for user privileges \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/validation/ScenarioPropertiesValidatorTest.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b729abe6586003beec404abae0b7984ca6f370a33e664bf86bb70288f1f2235"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: merge with this below \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/utils/domain/ProcessTestData.scala"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce5cffb7d69121248336a416753b01ba2ca42facbc61914458d8a61e7a78475a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Merge with this above \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/test/utils/domain/ProcessTestData.scala"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"122d12b56037431ad4fef8a0c1cb3a19a5dcb7352925a1ede22d92e0a5a94215"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Test for the rename (name in path other then name in request) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ValidationResourcesSpec.scala"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ce860a5fd3618955149fd60b73c655075f5e9794cf9a7555dcfe9dee13c2aed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what about anonymous user \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/StatisticsApiHttpServiceSecuritySpec.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"1368be2ebc9ddec8a0df71de3817376854ea5b044ce315c7b4fafc57d02f957c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what about anonymous user \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/StatisticsApiHttpServiceSecuritySpec.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"c59336cb09387ef42b8e805afbec37f969f02ca0957a26c2eabd555e4252f547"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //  TODO: Should make a proper test for component mapping \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/StatisticsApiHttpServiceBusinessSpec.scala"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2327e005a992c5fa495a62295e5dda0b6e383bd8122f553e06e123315fa6662"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: add test, that will verify limiting the number of scheduling-related activities returned by the API \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ScenarioActivityApiHttpServiceBusinessSpec.scala"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e5b4e44635bf46d3b8efc281677fb9360e4417f2642e063d8492f70f36325b5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: when the spec is rewritten with RestAssured instead of pekko-http test kit, remember to remove \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ProcessesResourcesSpec.scala"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"80d2667259f07a9fdffb40dd308d5351960b2fb512a582df3151f979f6575627"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Implement fragment validation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ProcessesResourcesSpec.scala"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"1446179cdda1c6e0360aa979d75ccf4412c798e5c74ba1d14af05cac25633773"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: NU-1772: responses contain discriminator, it is not properly handled by validator,"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/NuDesignerApiAvailableToExposeYamlSpec.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"50a30fbf5ce4918eb014d04110ac3cf06b06e3a0e05c7f2b76cf4b95ac8404d3"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: For migrating between different API version should be written end to end test (e2e-tests directory) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/MigrationApiHttpServiceBusinessSpec.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"04ad47fe4c53a54421537bea15836f6181099103b0960e584d2f0bb27736e4d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: perhaps we should allow adapting spel value to dictionary value in the future \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/MigrationApiHttpServiceBusinessSpec.scala"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc73a27fc280df04d6c5285929062e1d3406767518be0e877ab72585f5ac2431"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: all these tests should be migrated to ManagementApiHttpServiceBusinessSpec or ManagementApiHttpServiceSecuritySpec \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ManagementResourcesSpec.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8ef312dc592406ff8b7bda4399e9395e9bb1b60ad7ab4ddff6f5c08caba3b3c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: all these tests should be migrated to ManagementApiHttpServiceBusinessSpec or ManagementApiHttpServiceSecuritySpec \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ManagementResourcesConcurrentSpec.scala"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"285c4e061df3257164f13bbfaf2526ab0b266e93f8c5709e4c56813385a1a2fe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: To be removed. See comment in ManagementResources.deployRequestEntity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ManagementResourcesSpec.scala"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac2218984be21b892461133145b61aef9de0a3bc070ec871be48802aafe4252d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: To be removed. See comment in ManagementResources.deployRequestEntity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ManagementResourcesSpec.scala"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"1df4569c44809046b303548361780236278bbe087fa887c8a1007ac4b584660b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove Deployment:, Stop: after adding custom icons \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ManagementResourcesSpec.scala"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"c32729b5a90a78aa0ae459186ad7c0a8487c2c394be281dad94e28151c90c603"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add some score to each suggestion or sort them from most to least relevant \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/ExpressionSuggesterSpec.scala"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"aed80e590fed4ca6bc389518adec9961acff299c2f59896b8558a649378c28c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: idempotence (return 2xx when previous body is the same as requested) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/DeploymentApiHttpServiceBusinessSpec.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c37c2d833ba832676e0018671c4c782d4e88ce5b7bce25fa8bd620b1b728060"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: currently branch parameters must be determined on node template level - aren\u0027t enriched dynamically during node validation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/DefinitionResourcesSpec.scala"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ad45bc7944ded8a61d28e694dd8396d7452fc12fa8082ba23aba05bbb1abcc0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: get rid of concatenating the key and pass the timedate to output table \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/BaseDeploymentApiHttpServiceBusinessSpec.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4036f2839c9509e8ee924acdf3780be803f520bbdad383afddd598d6350c20c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: should we return something more structured than toString of errors? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/testing/ScenarioTestingApiHttpServiceSpec.scala"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"eff58ce3b75b864324caabf325feb0798e572be840bfa6091f505efe1fd1ccf9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO lets talk about it, I\u0027ve changed behaviour of API, in old definition user without permission still got response, but with capabilities disabled. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/api/testing/ScenarioTestingApiHttpServiceGenericSpec.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"11b7381fb672d1ff2abd5a069a30bd85892c82b8c93957854b46afe9b244282b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should spit DesignerConfigLoader tests and model ProcessingTypeConfig tests \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/config/ConfigurationTest.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb8af1f350f0eb32945b64ee4413c0db4d2a3212e5d84cd5f79ed20df6b122bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use ComponentDefinition instead. Before this, add component group parameter into ComponentDefinition \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/definition/DefinitionsServiceSpec.scala"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f298b5e3111f8f373938c644019d7365245ae03ec02130ec16e242d4ab1b8d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use ComponentDefinition instead. Before this, add component group parameter into ComponentDefinition \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/definition/DefinitionsServiceSpec.scala"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b1d01e1b097b125ca479c7d4698badcdd41da629914c5817412db32f452e447"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // @see DevProcessConfigCreator.DynamicService, TODO: figure out how to make reload test more robust... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/integration/BaseFlowTest.scala"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"d58e551cfc62ee985a196adf615e2475f85a96e0d0f1fd92d78c6a6bc35b91db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: temporary step - we would like to extract the validation and the comment validation tests to external validators \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentServiceSpec.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e5c8a6394d5b38e8811bed3733a57c51f5e3a9d456ed75a2ac317a3876ad609"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: doesnt check recover from failed verifications ??? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentServiceSpec.scala"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd82e34c674593c0578a4e9047d9e451db60fecc78d2986f1db0916997b5f4c5"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: doesnt check recover from failed future of findJobStatus ??? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentServiceSpec.scala"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"28cd1de7f43ece8d945a644de3187a09aec20c7998eafde875a2fe3392b20014"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add tests for more advanced things such as changes in model api \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/deployment/DeploymentServiceSpec.scala"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed6844037b2a4893894b9ab84631fe2c8230695046f55e2a613abfbd48056f81"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: more unit tests, tests on higher level than (resolveScenarioStatus) not extractAtMostOneStatus \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/deployment/scenariostatus/InconsistentStateDetectorTest.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a05564288b13ae542f81387dae0cacd7e63035448458cd84bb8267f12051472"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we currently don\u0027t have Canceled status - to get full information about status someone have to check both state of PeriodicProcess (active/inactive) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/periodic/PeriodicProcessServiceIntegrationTest.scala"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed65aa74d163d9ff4320ab4150f92752643d46e82cc6c5d2ea90e2b55c685fbd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: active should be false \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/periodic/flink/PeriodicProcessServiceTest.scala"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4aa68f59608e547bd63c2c56c7e2bcaad2297403699acf9ace2034cb2daa23c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Instead of using PeriodicDeploymentManager directly, me should use DeploymentService/ScenarioStateProvider \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/periodic/flink/PeriodicDeploymentManagerTest.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c8796d3fea0821a8f5649d03b2e9fdc4bc45a05d71d36a03789dddd8578fa95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add tests for processing mode collisions etc. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/processingtype/ScenarioParametersCombinationProviderTest.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"b19c4801bc7f6d07d895ff28de40defbcb4a6b3149c928081d4204fa38f3d6c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this test when deprecated endpoint is removed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/test/scala/pl/touk/nussknacker/ui/process/repository/DBFetchingProcessRepositorySpec.scala"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"66a938fa13dd7f7788279d1d9c2dca114b92ebeae61d69bfa2160425d85f7d35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider creating webpack plugin \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/configs/webpack/withModuleFederationPlugins.ts"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d39d36f122953dd803b1bbf665206cd2c343a844bb0b4b1753b0f2d507cba6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: stopping specific deployment \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/development/deploymentManager/src/main/scala/pl/touk/nussknacker/development/manager/DevelopmentDeploymentManagerProvider.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed2c005ae96a2b61a3db57e0cc5f3ec3086352188a566ce22146531a02af39cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: cancelling specific deployment \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/development/deploymentManager/src/main/scala/pl/touk/nussknacker/development/manager/DevelopmentDeploymentManagerProvider.scala"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"762032b2a9e337c565ded49d05a4899e07bfa5ff763b7bc8bc5d78c7c3a66ada"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Pass here DeploymentId? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/NkGlobalParameters.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"21ce21d2c153cc79e94bec532339180aa8b348944a087e1ddc4260cf1bedf93c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Pass here DeploymentId? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/NkGlobalParameters.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dacb07f0a7ca714b0c64b50eb89538ff2333593d5a8833e9c8a66c01d3681c9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: temporary, until we confirm that IOMonad is not causing problems \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/NkGlobalParameters.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd4da3527a4f144ac7f42e63b8d9b6bb6f80c659fe6cd05e83e6b9e04e3a3a33"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to modelInfo \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/NkGlobalParameters.scala"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc2fa22157f9653dfb0edbc74decbc72e9ce42e4d7648365595dcfd601811a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: design better way of handling test data in generic FlinkSource \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/process/FlinkSource.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c77ff1fdfae181a740fa9e76d59ee413f781d7c3abb72afbbf43734841d52fe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how can we make sure this will invoke super.open(...) (can\u0027t do it directly...) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/process/FlinkLazyParameterFunctionHelper.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"36f6b0e505fd37cc6f0d806bd6511a049857b1f8f9fa5bf234bf6d3b59334ba0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: To be consistent with ContextTransformation should return Context \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/process/FlinkCustomStreamTransformation.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"908a13219776ec68d996fbac9e6efd313b346f56a3d53acc2c293e0d60f0d69d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: To be consistent with ContextTransformation should return Context \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/process/FlinkCustomStreamTransformation.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfdee79c6ae3000a67e14f0dc9835256484ad2ff2af645836124f6062aad4ced"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: it can be used in state recovery - make sure that it won\u0027t change during renaming of nodes on gui \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/process/FlinkCustomNodeContext.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"452e9bc2e7ca7ba12ee7f94d2eb59658d0fd5157c80b8fb486413e823340011b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment repeated across 14 files: The identical TodoComment appears in 14 files (15 occurrences) \u2014 almost certainly one boilerplate line from a single migration or decision, not 15 independent debts. Fix the systemic cause once rather than file-by-file. Text: \u0022// TODO: Remove after upgrade to Flink 2.x\u0022. Source code is not a task system: track the cleanup where tasks live. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-api/src/main/scala/pl/touk/nussknacker/engine/flink/api/typeinformation/SimpleTypeInformation.scala"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c92ff6db8afbabe444cf2aeab80d3e765d34cdf120fa1db984dec313248d09d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we probably should resolve this problem otherwise either by delivering our own GeneratorFunction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-utils/src/main/scala/pl/touk/nussknacker/engine/flink/util/source/CollectionSource.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca30ad2b99b9377b1ef2fd019fa8f17b377cb49e409d096b686e1e064f51f9ab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we mark this field? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components-utils/src/main/scala/pl/touk/nussknacker/engine/flink/util/timestamp/TimestampAssignmentHelper.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"4da9e621395920aae7f6915c1674ccab40c904cc1c84ca21f72a2270c65d79d9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: https://github.com/TouK/nussknacker/issues/8679"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-tests/src/test/scala/pl/touk/nussknacker/engine/flink/SinkWriterWithExceptionHandlerTest.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"b048f3fbf5d6580cf01c80fd9fd6c91b5605e65e373e4e9b91a68097c187692e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: split into separate types and pass two streams to separate source nodes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-tests/src/test/scala/pl/touk/nussknacker/engine/flink/table/batch/TableJoinTest.scala"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"807564d7d26ae7e563cd6bdadb80b2823de5a0edb72d296bbf88784d9abd8585"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: reverse order in aggregate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-tests/src/test/scala/pl/touk/nussknacker/engine/flink/util/transformer/aggregate/TransformersTest.scala"},"region":{"startLine":633}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e1909ed1878e89a3d0c5c0ecdf98dea0f0beb2e8e10b6899213a3e653d9f71b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: powinno byc ==? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-tests/src/test/scala/pl/touk/nussknacker/engine/flink/util/transformer/aggregate/AggregatesSpec.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"b293c90ec301306713c09b53d994b74b05fca5eeacd816ecfc09e3535fc8298d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Respect Event time parameter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-unbounded/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/EventGeneratorSourceFactory.scala"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f28738998499e746ef2144589799360c0521668402d017e1c0b8ec1f7d1f196"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: think about merging these with TransformStateFunction and/or PreviousValueFunction \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-unbounded/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/aggregate/transformers.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ecb35eedabc6ac2abe45cf932f1b04f419c91a02e873c134a1bfe2eeffa3c80"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: alignment?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-unbounded/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/aggregate/transformers.scala"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"888832426c39b818cd9785c1212ef27933d973800cc38914838a170ca4fc08b1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: better error? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-unbounded/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/aggregate/Aggregator.scala"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"933fa69d861b5e1205d94954f310dde7d41583ba48917b65fdbdbabe0bf28621"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add TypeInfo, it\u0027s probably outputType from AggregatorFunctionMixin? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-unbounded/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/join/SingleSideJoinTransformer.scala"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a75f309ff249f7e2cf69efe2b044c15d0bac8de1b81b2652260de4c54b84376"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Passing the valueTypeInfo here will cause serialisation problems with a List[Int] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/base-unbounded/src/main/scala/pl/touk/nussknacker/engine/flink/util/transformer/join/FullOuterJoinTransformer.scala"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c344942dd20cdb771238dfefc2ec46cd775bbd3aa7436362d64513c8e18c335"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should use objectName in label only when a table is defined inside the default catalog and the default database \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/TableComponentFactoryUtils.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"20cf06c65bdd65194a4f929b168f1f293227dd48b84dd2a24915445fa0e84a18"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: pass ModelClassloader here and use it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/FlinkTableIOComponentProvider.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee57604948c8fb6738b3a6fdf8c32b281993be1dba4ff4b63b1f411a371e73c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: extract this to a Kotlin-compatible API module \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/definition/FlinkDataDefinitionErrors.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc243d22a0ab76e5f91aeeea9f3f4aa57ea448f3f3fd25826c8f60ab4bbf4378"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: extract this to a Kotlin-compatible API module \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/definition/FlinkDataDefinition.scala"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"db90f951070c6129a0d3fda7c3d46db8f85544760b5c27a9e994216d51253bac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use apache lang3.exception.ExceptionUtils \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/definition/FlinkDataDefinitionErrors.scala"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"2082b5e4ab02156a33f76578680064e2065c9dd3600f3a28858b839226bf0045"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle better cases with non-descriptive root exception messages - like java.net.ConnectException \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/definition/FlinkDataDefinitionErrors.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"0362379611b1ff36d81907bd50fa1f268b4a3fbb1ba7c98a62ca04acf9c2e9d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Avoid blocking the thread. Refactor \u0060generateTestData\u0060 to return future and use a separate blocking thread \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/source/FlinkMiniClusterTableOperations.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"60475d1eeb7285e1226187f3949edb96706e11ab3809a1c7d3c6228de601d075"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should behave different depending on ValidationMode - currently we are lax \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/typing/ToTableTypeSchemaBasedEncoder.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"4afaa19006cd2e16c4c87254de7c636ed903c378d1473b6220a7d727288e6bdd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should behave different depending on ValidationMode - currently we are lax \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/typing/ToTableTypeSchemaBasedEncoder.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"126304c06a3d1e4776b09bd15582f1bf6940afdef616f46a88db07aeff3a1086"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle complex types like maps, lists, rows, raws and types alignment \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/typing/DataTypesExtensions.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"031e7b94afd0efc7747fb576195d45df8a8ca303fcd70ac2eb45469dea7a03b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: this is somewhat experimental - how should we behave?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/async/DefaultServiceExecutionContextPreparer.scala"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a1875e2e483c56ea907982977ed48a0ba2c9c3771f7ad2965659e058f19121d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be somewhere else? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/compiler/FlinkProcessCompilerDataFactory.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"5049e37f5f9823511e459b002bc46db0b86a9016e504a42a2b9e5ff08ad67ddd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be the default? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/compiler/FlinkProcessCompilerDataFactory.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d7490b176a394c80cd96061b76acc5073c19f8800b71da3a80a0f0c583e8b36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be configurable somehow? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/compiler/FlinkProcessCompilerDataFactory.scala"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"48983ba6f520ccf5d1a108dd3c212a65a7f14f588e586a6a1adf305fd3785bea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how should we handle branch? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/compiler/FlinkProcessCompilerDataFactory.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"b19ec89bb1cd39d5a45763d8c3250cfbee1a3b1d961cfe3e1a068d65243494be"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle non-configured rocksDB more transparently e.g. hide checkbox on FE? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/StreamExecutionEnvPreparer.scala"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"938e2e99a7d67080846d304eef80b85eff68bc6eec1f6831657d8d6d1b183e5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO JOIN - this is a bit weird, probably refactoring of splitted process structures will help... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/SplitFunction.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"86eee56d67bac00058e46f92c1749f902c1d05c173465b62e51faaea9f3fd558"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: It\u0027s a experimental version, there can be some issues with this serializer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/PartReferenceTypeInformation.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff10b1c82e58b6841d21bcc41a36548b6ff6dc1824d365268d86b2db274f2ef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For the FragmentEndReference type, fragmentOutputFieldsSerializer field is still serialized by the KryoSerializer :( \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/PartReferenceTypeInformation.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"15a42be5b690af69801a3fd416858d1d70e63a3085dc2892820e98110369b19a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should verify if component supports given node data type. If not, we should throw some error instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd34642638ca3066471e4bfe529135755998cd25d27d0531c989e77c8fc73f51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: get rid of cast (but how??) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"1946580ba86fddfde5b539c3f650a2c96d03ceca01fcc12582ec6ecc03ed5ce9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fixme \u0022part.obj\u0022 is not stringified well \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"66a86052c0349444163c646c95fbd17bf462fb1dd825b6a68aa78deaca78b6cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: for sinks there are no further nodes to interpret but the function is registered to invoke listeners (e.g. to measure end metrics). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed9fce22e6d4251b06c66112aca0a4125d3adef75f3f3af4d5e6622d4c6ffb16"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: maybe this logic should be moved to compiler instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/registrar/FlinkProcessRegistrar.scala"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"894b383698d8aa7b6f6a1c41acdbf7df3ec7fe191c4726bbd3ed56b8b07ba0a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle avro types - see FlinkConfluentUtils \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/typeinformation/TypingResultAwareTypeInformationDetection.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0161f220fdb46cad21deb0fb395f0b23d8c66e29cd1e53e841ffb8404fbaa3b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: better handle specific map implementations - other than HashMap? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/typeinformation/TypingResultAwareTypeInformationDetection.scala"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"032d23ef14d676c11babc85f8028b66f09db46d11b85260ec9828f50abc03ab4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // We generally don\u0027t use scala Maps in our runtime, but it is useful for some internal type infos: TODO move it somewhere else \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/typeinformation/TypingResultAwareTypeInformationDetection.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"385dade1643afa59667ac6e5ca557633c6ed8b0742a7c08cd98d537a76b12ab9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: scala case classes are not handled nicely here... CaseClassTypeInfo is created only via macro, here Kryo is used \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/typeinformation/TypingResultAwareTypeInformationDetection.scala"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"c459a9fd0809c02ef43dd4488f4ffffa21831f12ee3f17ee4c228ce32bb38dc5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how can we handle union - at least of some types? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/typeinformation/TypingResultAwareTypeInformationDetection.scala"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"760aeb0cef4e5bf53b6d7199d4fea6850488c98440667875415a6cb8436a8737"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove array allocation. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/main/scala/pl/touk/nussknacker/engine/process/typeinformation/internal/typedobject/TypedObjectBasedTypeInformation.scala"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffbcb06e5efb79aa8182c571ca9b12e5d931d3318bd779fce4ae5696ba679cab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Having TestResultsHolder in a one shared between all tests object is a bad pattern. It can cause interfere with other tests. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/test/scala/pl/touk/nussknacker/engine/process/helpers/ProcessTestHelpers.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"edb5ae8517c8b0a0dd3b0f932ae363c9214cafbb1649393dd95aac8c5fe2db6f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: some better check than \u0022it does not crash\u0022? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/executor/src/test/scala/pl/touk/nussknacker/engine/process/registrar/FlinkStreamingProcessRegistrarSpec.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"447b3b347c9427b0fd772f96fb212a1df6a5a537153445a5324041b85cb6ae27"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use a dedicated class for config \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/exception/KafkaExceptionConsumer.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"e797778472674e457513ea7fe61f39164eb7f1baadd3cf6b8c5e1105c6f396dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle key passed by user - not only extracted by serialization schema from value \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/sink/flink/FlinkKafkaSink.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bfbaa9ee101a7168c583933724c50651cde22a91609df2c46270f25ec1a6470"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Instead of using UniversalToJsonFormatter designed for the old, source-specific format, rewrite these things \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/source/flink/KafkaLiveDataProvider.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0b6db620d59829c1f7bf4d2a60fde4c4f44d820fd2cde66f049e662da63cc45"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we assume parsing for all topics is the same \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/source/flink/FlinkKafkaSource.scala"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"b937cfe22d69c0bd10f944babb96a92f668695ce490dda6e2123ef2d93795cf9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find out what\u0027s the correct value here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/source/flink/ConsumerRecordTypeInfo.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7d5d9bb7f9e389845ae69a929649949479132df38714a54d2b79a1df6fb851e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check is this correct? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/dev-model/src/main/scala/pl/touk/nussknacker/engine/management/sample/global/ConfigTypedGlobalVariable.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea3ec005918fb6efa80e1b6266e72394b7767c9704263a8b600d18a6c5705aa4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //FIXME: remove? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/dev-model/src/main/scala/pl/touk/nussknacker/engine/management/sample/transformer/ConstantStateTransformer.scala"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"2504658aae6c85539889acd8eb926940acdb631d0a3d8868b9b215f3536a2cff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // For scheduling mechanism this fallback is probably wrong // TODO: switch scheduling mechanism deployment ids to UUIDs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/FlinkStatusDetailsDeterminer.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fe4972abb6fa4ed4e362f78e7db32c38cbd5fff0163d8450b201baa6581086c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: deploymentId is optional to handle situation when on Flink there is old version of runtime and in designer is the new one. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/FlinkStatusDetailsDeterminer.scala"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"de1cb08e3cfdfe4bd0e2f7f020fd12f2434f61f47a975790f89f7bd6831f0e2e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: savepoint for given deployment id \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/FlinkDeploymentManager.scala"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e964a24ea436c3d735df2b7e8e6ed7af548da18de5e23835f70ce1bbac810da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Better handle situation with more than one jobs stopped \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/FlinkDeploymentManager.scala"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5fcfd4cfd68dcec32d31d2bc7328c99d906800200af3ee2c446b852c8521129"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: How to do it nicer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/FlinkDeploymentManager.scala"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"19216df20830de363a5ff953fced4902d0c3cc4085c23c9a9604a83e7b6b47e1"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: get rid of sleep, refactor? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/rest/HttpFlinkClient.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef6b0f2528bd4f2fef87322650cbd03634d1cae2943b437e0468fd92581560c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should change logic of DeploymentService to mark process deployed for *some* exceptions (like Timeout here) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/rest/HttpFlinkClient.scala"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"e75004eb7ddd974685e831b436451498b2f555d9d0eb70aba0a9347c96ead658"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we need cache here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/rest/CachedFlinkClient.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"27ff5814676d9281bae3eeeccb7888c90feda1b941ea68e12437628840fb43e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we need cache here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/main/scala/pl/touk/nussknacker/engine/management/rest/CachedFlinkClient.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcc350858b665fb21ca9a09e3f98bf2f232cf2fe2bf4bd6273c1de3b6802a734"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO move some tests to FlinkHttpClientTest \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/test/scala/pl/touk/nussknacker/engine/management/FlinkDeploymentManagerSpec.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eeec460be6a3a93800b611d2b68d07975da7ce9fac9b7eab9ecd6bd16efc4d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can be make behaviour more robust? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/management/src/test/scala/pl/touk/nussknacker/engine/management/FlinkDeploymentManagerSpec.scala"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"16c6e9729a085aac8e29eb2614e92903884d77aa643e0b9e5a677415610fa3d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find the reason why it occurs, and either resolve it or write a comment describing the issue \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/minicluster/src/main/scala/pl/touk/nussknacker/engine/flink/minicluster/FlinkMiniClusterFactory.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"450ff614fdcb4c730ea26f7bcbfe7342c4b56b2baab9b2efc01fbac15d26836f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: business error returned to endpoint \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/minicluster/src/main/scala/pl/touk/nussknacker/engine/flink/minicluster/scenariotesting/FlinkMiniClusterScenarioTestRunner.scala"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4d041825d19eb2f764d540c83f891c0b587535cf85e1280ba74f483d49eff86"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: business error returned to endpoint \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/minicluster/src/main/scala/pl/touk/nussknacker/engine/flink/minicluster/scenariotesting/FlinkMiniClusterScenarioStateVerifier.scala"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4535dbf089d197cd74c4e4be1974b890e89285bd506eb9e94e730b66ece0205"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // property on the top level. TODO: unify it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/BaseFlinkKafkaComponentProvider.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"4727b19b2c715235faf61903b15b7aea2d5ab6e4fae0054789f4871432068b6d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Creating TypeInformation for Avro / Json Schema is difficult because of schema evolution, therefore we rely on Kryo, e.g. serializer for GenericRecordWithSchemaId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/sink/flink/FlinkKafkaUniversalSink.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d59ad42f229435f7eb478b845e1e3dce3709d1ec82512d4b0673a5bc80e10ae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We could create one scala object and kept data keyed by TestRunId as we do with ResultsCollectingListenerHolder \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/test-utils/src/main/scala/pl/touk/nussknacker/engine/process/helpers/TestResultsHolder.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e81145d669fa18277846948fb17850817b0f890f01184d462933d7bbaa2fce9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: clean up sample objects... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/test-utils/src/main/scala/pl/touk/nussknacker/engine/process/helpers/SampleNodes.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf53bff384909c87b2996e6c6fdaa81b2f2e271b3515624d2de52bcbc80857bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: { timestamp: #eventTimestamp, sum: #sum } \u003C- allow to return event timestamp as well \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/tests/src/test/scala/pl/touk/nussknacker/defaultmodel/CustomWatermarkStrategySpec.scala"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"95da24984981180c975071237d8ab940d423e3354b5a5edd62b0dad92f56afa4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: { timestamp: #eventTimestamp, sum: #sum } \u003C- allow to return event timestamp as well \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/tests/src/test/scala/pl/touk/nussknacker/defaultmodel/CustomWatermarkStrategySpec.scala"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"a36a8cef766574e04bb47ad4d63068c24015a25e56c7fc542ca9228239aae2ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can Result be represented as Writer[Result, Unit]?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components-api/src/main/scala/pl/touk/nussknacker/engine/lite/api/interpreterTypes.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aa907ca1cc5ede2900f0513bca2a847a0bc4d9cdc6ab2f3f3c627607c3b4f2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: express in terms of WriterT[F, ...] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components-api/src/main/scala/pl/touk/nussknacker/engine/lite/api/commonTypes.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"384bbb12164bf3ec67bffca0617e1a65ac0bc34b2640af0b23b001b4ce8d4d5e"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: figure out how to pass componentName here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components-api/src/main/scala/pl/touk/nussknacker/engine/lite/api/utils/sinks.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5876926b2b5207ab4e7964feb083ce192ffba63a412f6162cf15d90a66e91f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: unify definition with UnionTransformer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/base/src/main/scala/pl/touk/nussknacker/engine/lite/components/Union.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f07d3d6d76bbb25c6bc545eabb545f588585795dbbb20221b51228449a42349"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add more tests for primitives, logical tests, unions and so on, add random tests - like in LiteKafkaAvroSchemaFunctionalTest \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalJsonFunctionalTest.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"d58158a46f6919a1fa94d802be85e28f21de3b966f8ed74c7732f7b75a71f9b5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add more tests for handling objects.. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalJsonFunctionalTest.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f12691bdb5eb2a2b0f234b107a4afae23b497b87c8e043bea067a1be860128"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: java.nio.ByteBuffer is not available from SpEL (sConfig(sampleString, stringSchema, bytesSchema, \u0022\u0022\u0022T(java.nio.ByteBuffer).wrap(#input.getBytes(\u0022UTF-8\u0022))\u0022\u0022\u0022), valid(ByteBuffer.wrap(sampleBytes))),"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalAvroSchemaFunctionalTest.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"24b63e95be3170912aff9aea5e27a636b59e199968d2f379fbd2e494a8556fab"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: List[Unknown] (rConfig(sampleInteger, recordIntegerSchema, recordWithArrayOfNumbers, s\u0022\u0022\u0022{$sampleBoolean, \u0022$sampleString\u0022}\u0022\u0022\u0022), invalidTypes(s\u0022path \u0027field[]\u0027 actual: \u0027${typeBool.display} | ${typeStr.display}\u0027 expected: \u0027Integer | Double\u0027\u0022)), \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalAvroSchemaFunctionalTest.scala"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fc713c0ae43caddccb6859d059d04820b2aaeee19f40f17632820d4395abb72"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: List[Unknown] (rConfig(sampleInteger, recordIntegerSchema, recordWithMaybeArrayOfNumbers, s\u0022\u0022\u0022{$sampleBoolean, \u0022$sampleString\u0022}\u0022\u0022\u0022), invalidTypes(\u0022path \u0027field[]\u0027 actual: \u0027${typeBool.display} | ${typeStr.display}\u0027 expected: \u0027Integer | Double\u0027\u0022)), \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalAvroSchemaFunctionalTest.scala"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"6104bad59e7fcf27b05ddb9643acb61d8b6e9f831d215a85dd3ae49fb390cf19"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: List[Unknown]  (rConfig(sampleInteger, recordIntegerSchema, recordWithMaybeArrayOfNumbers, s\u0022\u0022\u0022{$sampleBoolean, \u0022$sampleString\u0022}\u0022\u0022\u0022), invalidTypes(\u0022path \u0027field[]\u0027 actual: \u0027${typeBool.display} | ${typeStr.display}\u0027 expected: \u0027Integer | Double\u0027\u0022)), \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalAvroSchemaFunctionalTest.scala"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e853828c47ad5d9d1bcda94f4d7e93bcb7032fe71e037e0b9f253fb1da9382d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: List[Unknown]  (rConfig(sampleInteger, recordIntegerSchema, recordOptionalArrayOfArraysNumbers, s\u0022\u0022\u0022{{$sampleBoolean, \u0022$sampleString\u0022}}\u0022\u0022\u0022), invalidTypes(\u0022path \u0027field[][]\u0027 actual: \u0027Boolean | String\u0027 expected: \u0027Integer | Double\u0027\u0022)), \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalAvroSchemaFunctionalTest.scala"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"2124608843f43afff2477a66c7e26702674c4e14fcb63cceeb3bc4de25dc3882"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Comparing EnumV2 -\u003E Enum returns true, but in runner ToAvroSchemaBasedEncoder tries to encode String (that doesn\u0027t meet the requirements) to Enum \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalAvroSchemaFunctionalTest.scala"},"region":{"startLine":1112}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2c56c851061fc528e7c19fb16963b2d2d38fa699ef8f4fb73de46c9be3e52e8"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Comparing FixedV2 -\u003E Fixed returns true, but in runner ToAvroSchemaBasedEncoder tries to encode value FixedV2 to Fixed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalAvroSchemaFunctionalTest.scala"},"region":{"startLine":1118}}}],"partialFingerprints":{"codehealthFindingId/v1":"6792782f69d645eca31fca6e7e4c5c3b401cdefb289e1f8bbe4b556ab3239a71"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make this test use mocked schema registry instead of the real one \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/AzureSchemaRegistryKafkaAvroTest.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"f35d9da35f2ec291b3addcdd56ad8efccdd0e612149a75d541f34dd6069979fc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: maybe we should return this version in testRunner.registerAvroSchema as well? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/AzureSchemaRegistryKafkaAvroTest.scala"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"30a7b44de15b6d56ec8d6a9da95707dc6422d3a64ba54e788445ad7090d0cf47"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: we have to make sure ContextClassLoader is set to model classloader in lite \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka/src/main/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalSinkImplFactory.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"15fdafb11a27f31d6fd17dd60cff4c5f43a137d2f1467fce8719a992d1978453"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: timestamp, override topic, clientId, what about other props from KafkaSink? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka/src/main/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaUniversalSinkImplFactory.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f76655dba9ed20b8706da118f96d3816781033e7cf72a8d367f8e8e2f30e017"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // This options are not handled TODO we should either not present these parameters or add the support for them \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka/src/main/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaSourceImplFactory.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"efce5627f3fa02d8b2e79b03632d3464f3f9bc68357c882ea5f59c256a771b64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what about other properties based on kafkaComponentsConfig? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/kafka/src/main/scala/pl/touk/nussknacker/engine/lite/components/LiteKafkaSourceImplFactory.scala"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"8252be6844c73b2a4614a49fc9446f24f74d22e221f2b4bf575f9fd0740f3594"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: currently inline map is not properly typed here :/ \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/request-response-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/requestresponse/LiteRequestResponseFunctionalTest.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"f16b54e69e706b2fb8db92e0e25d8ff3e1dc766cb41006729822db07fcc13054"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle ref schemas on output... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/request-response-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/requestresponse/LiteRequestResponseFunctionalTest.scala"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"09ed00eadcc7f44f1bb41d6ef29f29432a92a524289579679fb4c6d20e31ed5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add more tests for primitives, logical tests, unions and so on, add random tests - like in LiteKafkaUniversalJsonFunctionalTest \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/request-response-tests/src/test/scala/pl/touk/nussknacker/engine/lite/components/requestresponse/LiteRequestResponseFunctionalTest.scala"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d38588ca2d1c4b95b975a2fb364d108db1ef06a730da6e8de6031be2cd9e5dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this lazy val is tricky - we should instead assign ContextIdGenerator in open, but we don\u0027t have nodeId in open \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/request-response/src/main/scala/pl/touk/nussknacker/engine/lite/components/requestresponse/CollectTransformer.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"d87a48e55096b40ec0992dc9ffded15d2e8c3af559ac2b233f1fc170f4146d9d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this lazy val is tricky - we should instead assign ContextIdGenerator in open, but we don\u0027t have nodeId in open \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/runtime/src/test/scala/pl/touk/nussknacker/engine/requestresponse/customtransformers/Sorter.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb2d72c8dca56c65130e34fe9b87a88f9d26aa9d4357fbacd37090516605afb9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This is an ugly workaround for the fact that we can\u0027t pass traceId from org Context to collect. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/request-response/src/main/scala/pl/touk/nussknacker/engine/lite/components/requestresponse/CollectTransformer.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1a45cb01bb8494e9262acec84db2d3d712ed155b9d2e38e2e4d34c96bba78e9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO handle anyOf, allOf, oneOf schemas better than \u0027first matched schema\u0027 - now it works kinda\u0027 like \u0022anyOf\u0022 for all combined schemas \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/components/request-response/src/main/scala/pl/touk/nussknacker/engine/lite/components/requestresponse/jsonschema/sources/JsonSchemaRequestResponseSource.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4b75675766d58f97e7e14dc5db433fc56f37d05455d7041b2068c8804c81be"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Lite DM will be able to handle both streaming and rr, without mode, when we add scenarioType to \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/deploymentManager/src/main/scala/pl/touk/nussknacker/lite/manager/LiteDeploymentManagerProvider.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b53c6b40839e7d20128a19b404547a84325cf0789c5fe020b8c24f41d01d7549"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: replace with RunnableScenarioInterpreterFactory usage \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/embeddedDeploymentManager/src/main/scala/pl/touk/nussknacker/engine/embedded/DeploymentStrategy.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8bead2141980d453643e78d797be333be84144d449934ea7848149009eadf44"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO think about some better strategy for determining tasksCount instead of picking just parallelism for that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/embeddedDeploymentManager/src/main/scala/pl/touk/nussknacker/engine/embedded/streaming/StreamingDeploymentStrategy.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdbeef05d063e5c9f39988c1861e3ed8ab8eb9f7dbd947b1b74ee5773bc7f812"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: test defined path case \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/integration-test/src/it/scala/pl/touk/nussknacker/engine/lite/requestresponse/sample/NuReqRespTestSamples.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"e01943a46f34090ad5b2cbd8dc4369f1d25e74393c4e5fdd0a1c357929072516"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use https://kubernetes.io/docs/reference/using-api/server-side-apply/ in the future"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sUtils.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"afd37a54608c39151f9002b47b92bf1d757641af5880caac8d8490feb3e0167f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: return internal deploymentId, probably computed based on some hash to make sure that it will change only when something in scenario change \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentStatusMapper.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"c51421ba675e2c13a6cef1ca7a5f5490cbd71d1fed37319ac2042918dc38c997"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we add responses to status attributes? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentStatusMapper.scala"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"37329cd1d9ff2c1899efae5f80192d952e3ca1edf3428bdbb3c7d9a58545ac57"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should overrides apply only to model or to whole config?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentManager.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"e80bffb334347517baa1fbb9a037d1c41f6a74215f67aa3f546fb586db15de11"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: noOfTasksInReplica currently has no effect in req-resp, maybe we would like to have some options to tune http throughput instead? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentManager.scala"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ca7f68c9de4985585c2ac199a1c7baa9083a15449b7c9c0461fc482704ed2d5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move to requirementForId when cancel changes the API... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentManager.scala"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"91f3ca22f1ae50c5d37a51a38ca68c89233250d4000cd78b56a6f3861466cdbc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO We don\u0027t handle deployment synchronization on k8s DM because with current resources model it wasn\u0027t trivial to implement it. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentManager.scala"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"2262a98c065edd6882145058f517e1d56d6a2161114866c9a2df78f0bad594ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix RequestResponseOpenApiGenerator so it\u0027s aware of ingress address \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/main/scala/pl/touk/nussknacker/k8s/manager/ingress/IngressPreparer.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"77a551f09a0d5a8be40bec0e975b193eebcad8700e143e0d64402b6a2f0bf2b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: some test for ongoing termination?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/k8sDeploymentManager/src/test/scala/pl/touk/nussknacker/k8s/manager/K8sDeploymentStatusMapperSpec.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"f88b386ef8480dec023b94006a1a08c689b5ad0403239dae5079c57662af5c86"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: probably there is some util for that? :) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/kafka/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/kafka/LoopUntilClosed.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddeddb668d120774fed90ce526ae1693ec7f773bde2753c91e2f1605708b3f37"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: consider more elastic extractor definition (e.g. via configuration, as it is in flink executor) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/kafka/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/kafka/KafkaSingleScenarioTaskRun.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"cca1792d5c951748a0d3c33dde54341f499813c6d3c03d3403e36767fb195a54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: try to handle source metrics in more generic way? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/kafka/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/kafka/KafkaSingleScenarioTaskRun.scala"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"00b1cf1f1d89b8a4fdb6b1dfc067e81130a4cb31a724a1cace3af463293cdf61"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: test behaviour on transient exceptions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/kafka/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/kafka/KafkaSingleScenarioTaskRun.scala"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"35a64d137e55c52786aab5d133982dc7e70a5a0dadddae552368a236ae263620"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME generate correct id - how to connect to topic/partition?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/kafka/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/kafka/KafkaProducerRecordsHandler.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9935c2bf7d8f13a3c10111ea330919f03da84465f089f289397feb728c44f32"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: figure out how to wait for starting thread pool? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/kafka/runtime/src/test/scala/pl/touk/nussknacker/engine/lite/kafka/KafkaTransactionalScenarioInterpreterTest.scala"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b250474997c55b74392040ecece03ca1bf3a02b19504bf363f77d0584b2487"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: figure out how to wait for starting thread pool? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/kafka/runtime/src/test/scala/pl/touk/nussknacker/engine/lite/kafka/KafkaTransactionalScenarioInterpreterTest.scala"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"61590caa9e7294d1e240f0ce37c1e1ce716ac8775ad37eeefe020639f68d9fde"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: this is a bit clumsy, we should think about: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/components-api/src/main/scala/pl/touk/nussknacker/engine/requestresponse/api/RequestResponseSourceFactory.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4163d9a79f4ee81355da9b3b69f3c02897ff5882a910f3069d5a8ff6d8f74cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add json schema validator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/components-api/src/main/scala/pl/touk/nussknacker/engine/requestresponse/api/openapi/RequestResponseOpenApiSettings.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"d97a80dcf99288eb24094a9dc5f2b99c73fdc855b75c36746991255fc14bc983"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add passing headers at tests from file \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/components-utils/src/main/scala/pl/touk/nussknacker/engine/requestresponse/utils/JsonRequestResponseSourceFactory.scala"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ceabcf1ce1c0deac4e6c82f9cbb90af042c9a51f04ea509506b56eae17cd03"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some smarter type in Input than Context? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/runtime/src/main/scala/pl/touk/nussknacker/engine/requestresponse/RequestResponseInterpreter.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b0b0a74061c12c2da7e2740f77ffb9e41e762469f9696a26aaadfa5798a9aec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove cyclic dependency: RequestResponseOpenApiGenerator -\u003E RequestResponseScenarioInterpreter -\u003E RequestResponseOpenApiGenerator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/runtime/src/main/scala/pl/touk/nussknacker/engine/requestresponse/RequestResponseInterpreter.scala"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f5fea6f4642353c4799dd16096b3903c1bcf2438a6bec0265de63210c6d4335"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: refactor responseEncoder/source API \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/runtime/src/main/scala/pl/touk/nussknacker/engine/requestresponse/RequestResponseHttpHandler.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"beb9369a73d49b968ad263fa89236c63095407109875ffd88266d899b91a9d29"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: maybe var initialized in \u0060open\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/runtime/src/main/scala/pl/touk/nussknacker/engine/requestresponse/metrics/InvocationMetrics.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3153963065413581e573427362fedb07192b5b6f5b18932145fd12c08c0a990"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO generate openApi for GET sources \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/request-response/runtime/src/main/scala/pl/touk/nussknacker/engine/requestresponse/openapi/RequestResponseOpenApiGenerator.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"db39b99879a1de4d4149277545224d0a555ddb46c1c4398251e6ffcc6aeb7c5f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: integrate with Engine somehow? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/TestRunner.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"9523305dd5c9b6cc72b3fbe2e90770cbf4c47f147eabd6d0a3d262c25306e4b1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: probably we don\u0027t need statics here, we don\u0027t serialize stuff like in Flink \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/TestRunner.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b0ad48b17d4e784ed3df470b91e34f8e82846dcc5600b6e1cf174b106e99f10"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: validation?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/TestRunner.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e30057637fb595e844087a55fa5b3dac65e694cc9f1b46b70c6423bd3617ede"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: it doesn\u0027t work properly with KafkaLite Engine, we should add proper converting method \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/TestRunner.scala"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"c74d642b7eaa709002bfef9d50134093d2f77b21a5093488f49138183340b3d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we consider configurable timeout? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/TestRunner.scala"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe19c70d0cda2317100e76e288299191b950ce0094942f007dae851259e3faa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Figure out how to invoke this properly. Solution below works when F.map is invoked \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/ScenarioInterpreterFactory.scala"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc3fc1abf815ac3f3fbe770999a394a3e308b9e3bba2391cc4b2c243874c0025"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: do we need it at all \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/ScenarioInterpreterFactory.scala"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"85903fb6f1788cf2cbaf316eaccfd94b75603852a58179ceea977920d7214942"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is too complex, rewrite F[ResultType[T]] =\u003E WriterT[F, List[ErrorType], List[T]] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/ScenarioInterpreterFactory.scala"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"8187184b1b6c02aef9011c740e1a3af292a60a317ad5f10391e783d8ff587f2a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is quick solution for https://github.com/influxdata/influxdb-java/pull/616"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/main/scala/pl/touk/nussknacker/engine/lite/metrics/dropwizard/influxdb/InfluxDbHttpReporter.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"0863cc5ca3380b446343a7b4812090d50cd1f8fe062d16b0d35b8d98d2c7b0d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: test for test-from-file \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/lite/runtime/src/test/scala/pl/touk/nussknacker/engine/lite/StateEngineTest.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d4d8a3f9142bda576f049a0aaae9cb223beef4504f6d40b07237b4e33bc3b35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should remove this extension mechanism - we already have these validators exposed by \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/CustomProcessValidator.scala"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc1e84ef26e9b44ac9677447d3fd0db7dd83d189654a93b2c6247e5347516f1e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace ModelData -\u003E BasedModelData inheritance with composition. Thanks to that it won\u0027t be needed to downcast \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/BaseModelData.scala"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"7097aa13b058d48f1fb5ae10e7607a74dba41dd8d064d1606e8d5406c9e94ff2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should consider loading all model plugins that we don\u0027t need to reload at application start time - \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/BaseModelData.scala"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"f32445f998f055e6e51eda8c9af80b7bbeeab6e5d1c0bc8d31289d390a75d92f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO We should pass here only scenario properties \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/additionalInfo/AdditionalInfoProvider.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"82eecbc6fcdce880fe9ecb9a26c26cf1f9977f288092759081bba3b6cc836118"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should use DeploymentStatus in StatusDetails which is returned by DeploymentManager.getScenarioDeploymentsStatuses \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/StateStatus.scala"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ec6a68070c5b74bf18f424820e71a2d7a05cd892c4dd13a6f453824d2b1ca98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: NU-1772"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/ProcessAction.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"d47ad34e5db922ead22fcb5b73ca1e9640c897a96d525711e78bb89e73fb9f58"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove unused action or implement in future.. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/deployment/ProcessAction.scala"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"903b2eec0b37447c7968b8d838e7cbc16e8827b17480b5de6fd2413b9ac5e42d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to DesignerDictServices \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/dict/DictServicesFactory.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6c69245664a76234b92ca4e46be1b44c0bf4d5bb7f3ee1f968e99b08e12c8b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should take only DictDefinition as a parameter to avoid dictId desynchronization - see notice in ExpressionConfig \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/dict/DictDefinition.scala"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"520639c3cd9aa5a2999e4425a1cef0423c17b934522dfbcb035ddfa66692b27f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should not take dictId - see notice in ExpressionConfig \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/dict/DictDefinition.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"395705de1f5069df7d5f38f06eeb32a2c32e2468a5036d363c03cc41b70b8a1d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace it by VO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/process/package.scala"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ee9b459af1692ff51b20e8ec346eaed7762645a6d4e431733a848a60f3527f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is deprecated API, remove it after ConfiCreator API will be removed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/process/WithCategories.scala"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c519fbf803217f2cde2f64b1c7b822e5f93fbc83fbc86ea3de6bddb2debbf6e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: move most of this things to some separate expression field inside ModelConfig \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ExpressionConfig.scala"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"268a26e7e08ca490c70d3842b452769d27f36a7e854cf3bbc4dc150d13dcd741"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO After moving categories on root level of all objects, we should consider replacing \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ExpressionConfig.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3e40b6958999250c4de8c6addcda1f088a4e990a201ac712e781c8655974dbf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename to ClassDefinitionDiscoverySettings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ClassExtractionSettings.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd6aeecc7679cac368a40b104c81ca8e07ee70e1c83e6130896506870d65cfe9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should change this to ReplaceGetterWithProperty which is more natural and which not introduces ambiguity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ClassExtractionSettings.scala"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c32a4b53a2ae145e6f232f2df5b57f1b002e6976db74c29c54b33ecf212edd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Not sure why these below exclusions are TODO describe why they should be here or remove it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/process/ClassExtractionSettings.scala"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"88d84771032b00ebc83c08e866a4e78f6651daa857f9067548bc0429336681e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename me to ServiceExecutionContextPreparer in the future (it will break the backward compatibility, so we \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/api/process/AsyncExecutionContextPreparer.scala"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"31361f9b438d427dd9967fb96c8fcd9334b2030eab0598858180f50e4cdc6802"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This class will be replaced by DeploymentId from newdeployment package, see docs in newdeployment.DeploymentService \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/deployment/DeploymentId.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"488494a29118c03546c31f97cacceaa2d2b352ea9ca3e617ff48fe49148b4558"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is it the best way to handle it?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"extensions-api/src/main/scala/pl/touk/nussknacker/engine/testmode/TestProcess.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"344fa4dc41f23514eeb411fb28dc0e93091acd8cd19a0da4fc33fce0aab7cbfa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: The LiveDataUploaderHolder object will not be shared between Flink jobs, because each scenario has its own isolated memory area and classloader \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"live-data-collector/src/main/scala/pl/touk/nussknacker/engine/livedata/LiveDataUploaderHolder.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"77f2d324ef29033a7a5387df96a77f6d7d1c3d56ab2e47e59038097540b0c7d4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: option can be removed, when we fully migrate to newdeployment.DeploymentId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"live-data-collector/src/main/scala/pl/touk/nussknacker/engine/livedata/LiveDataCollectingListener.scala"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8800f5754136f9fbedd33f34b9f11795c6763031ac7f010c68f6fac7a4c173c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: update sbt-assembly and replace with simpler CustomMergeStrategy from nussknacker-enterprise-extensions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"project/MergeStrategies.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"65e5d77cab5132a3c332bea744c57f42dde4f15f4c6d8c15d5e3ff203991be3a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove additionalFields nesting when we stop treating properties as a node on the FE side \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/api/graph/ScenarioGraph.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c776ac3d3061ba8b5375e8758b857ea414a2087c6bf1e4a4353170b9c5bb3e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove typeSpecificData-related code after the migration is completed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/api/graph/ScenarioGraph.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"76435c59da0fdb6946aab377cf5ac58cd799d8dc272e531f49eb7bfca483e19b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: exception when non-streaming process? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/build/ScenarioBuilder.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf1dfada6e788776b881186a1f717ae4364691c48d5dbfdef6b1d9fd09eb0b7b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: exception when non-streaming process? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/build/ScenarioBuilder.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b0132a93fa0b7ab59b4e147820c97ea1478b5a1de6999d6748a040e9ab2eca6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: exception when non-streaming process? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/build/ScenarioBuilder.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"bce12556fc68a20a5fbeb25afee7b067d3be90802fc4190d4dfd5aa1c5e2b1a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: exception when non-request-response process? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/build/ScenarioBuilder.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c020bda7de73f2f90f7dc5a87df463221b3c6e6b6748d3ef76decd9977db0b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should find root nodes based no structure to have loose nodes visible at canonical process level - otherwise \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/canonicalgraph/CanonicalProcessConverter.scala"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"4480ae3e151c033e1835f6b787c97a1e56c3d020143761cd25c60ae06110fa16"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO error handling? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/canonicalgraph/CanonicalProcessConverter.scala"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"a254a1476649e28d35d6575d81dfcefe0bac2cd067b6561c758f4a1402e1eaa0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should probably remove artificial nodes by dummy id if there is an error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/canonize/MaybeArtificialExtractor.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7a95b57f57c5041c3e9b343e64c3d1e529ad17602d5235a84e6990d3e89b3d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is basically a Writer; we should approach it differently? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/canonize/MaybeArtificial.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"11afb5b13ebd14f6576340a2bb3b5340aacfa67b4f957827dbf046196ab3278e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename typ to componentId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/source.scala"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"96248c4dc82fc45abd8fadc7a7407678b2c6e6ddccf1cd059c0d02b4f9c812a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename typ to componentId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/sink.scala"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6e75807e20e5541e1dbb3dc1ef63024759a8040274a333527b5cbbac4276ee3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO JOIN: this is a bit artificial, as we need it to handle BranchEnd - which is not \u0027normal\u0027 node. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"f86062679351bf8d31caa9c386585119a86c0ce15e7f6dbe3bc59b4d0d686d97"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: after migration to cats \u003E 1.0.0 shapeless cast on node subclasses won\u0027t compile outside package :| \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"5283c55bc95a365a6086ece58128aa1ffbdbc28899da352c30afeb330a2d2bff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to componentId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"f315f17877c09f97bc242aa9d9f3b1a3502c5da2fe5390f7fdf3d518c10eb10e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to componentId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5c9706d588496be4c39e8f0a4f2e342d00819ebff84bfd06ec894a16630154c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to componentId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c3e01c2930f9bfdabb356ea7d10112498c0ed9003f14be3252cb4082b5df519"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO JOIN: move branchParameters to BranchEnd \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce5a0fd2003504c6f8e918b606b9fb9877b4b9f5334b45fec41be97a16e2d310"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to Choice \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"02de33b4732e3b3c85f69a7b754a900fa35a2b2a3bffcc16492c76d782356089"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to RecordVariable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd905f68e7bf8237deb0b543486e451e0d78457873fbc547a7941c8a7bb1bbf9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we\u0027re using this also in ProcessUtils.ts (findContextForBranch, findVariablesForBranches). This should be refactored, so \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeb0518719d5e84404a7563b4b478073402195a2dce4579e4afc7baba8cf5672"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove it and replace with sth more understandable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"03478fd3bfdcec72b1b74e5bcbd8fe317f11210654e961a5dae1c364e4e36596"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: A better way of passing information regarding fragment parameter definition \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"825580a88f4888ecf44909cf26e5e74e69f7b13424faaa68824e4bf4344c446f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: probably should be able to handle class parameters or typed maps (i.e. use TypingResult inside FragmentClazzRef) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"e787534e4f174c07fabdd98f6b1191c241fa19bae200d533e4cd008f3332ff7c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move these FragmentInputDefinition related vals/def under FragmentInputDefinition for better organization \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaf8565fc52500e8793ab16b1862bc2dff31e6e4ecd3d198bc09a184f00cb657"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: after adding @JsonCodec \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/evaluatedparam.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"8820e00ab2d212d0910f607f16a301462f8037c606a09f94c6bf64df2ff82718"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to NodeParameter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/evaluatedparam.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e36c0bebac9efd355b7ee43c988ff6688992cf0bcb012d5614cb76ef3651b55"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this can lead to difficult to debug errors, when e.g. fragment is incorrect it\u0027ll be parsed as flatNode... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/main/scala/pl/touk/nussknacker/engine/marshall/ProcessMarshaller.scala"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd10aff9912a7eef2048e2d1c439e5d8339280affee02d145b9573f457542459"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: There is no way to create a node with additional fields. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-api/src/test/scala/pl/touk/nussknacker/engine/marshall/ProcessMarshallerSpec.scala"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"78a9db36ded3696059a734a2b31361bca427d095096a517a0d392ed10605527c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO don\u0027t lose generic info for the new map \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/java/org/springframework/expression/spel/ast/Selection.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c142fb2f5d72ffdea7f7a8300bdc53951784c6b18077fbaffcaf3d30ce282d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should move model extensions that are used only on designer side into a separate wrapping class e.g. DesignerModelData \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/ModelData.scala"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"2095d5e145aa1bd4d7bbca2d1acb6f2c7572d92ff692861fa82fc1be1eda0f57"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove it, see notice in CustomProcessValidatorFactory \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/ModelData.scala"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"7918074d8e13f0de48837384d3b0fa7238b21e8ac79eb54750572af55159b0da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Interpreter and things around for sake of clarity of responsibilities between modules should be moved to the separate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"d67492fe27873e3d41291614ab85eac918ffef1df07b5c2ffd86448b57d5207d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: perhaps we should refactor the way DeadEndingData is used, all nodes can be dead ends now \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b629a0ce5235890538e26d388b78c40220e83b650640b81cd8e320e291a5d5d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For eager services we should open service implementation (ServiceInvoker) which is hold inside \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/ProcessCompilerData.scala"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfa1ecf9acf0db4406f57c2e55f1cde725016aa89633bc69cef9c7b65f784bb3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what should be passed for joins here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/ProcessCompiler.scala"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c7d1bcb9a46ad077561e8bb6813a7d8e6a1ee4e27d035fc2a3d6f537509d10"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we recognize we\u0027re compiling only fragment? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/PartSubGraphCompiler.scala"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1a70e8e242e350dadad503ad499f73c155d5b65d5f0d8ed829f8f543cef36cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we validate it\u0027s process? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/PartSubGraphCompiler.scala"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f3f728fdd69b837279009ee374d5cf1a6223e849e0e9995190222e8172748bc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: does it make sense to validate FragmentOutput? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/PartSubGraphCompiler.scala"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d6d5758355a51eafc1db4398bd6c3e5365cde99240b7bc08668a00a1c5da0cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO JOIN: a lot of additional validations needed here - e.g. that join with that name exists, that it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/PartSubGraphCompiler.scala"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad7773ceeb1070ff4e73cfece5d3adeaea1e481ce256ef1d6b6b14f1da7b9aa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: disabling nodes should be in one place \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/FragmentResolver.scala"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db7803997c41a06689989adf6e8d96b8e56f87fb19d23bffe273350c23ee5a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO JOIN: branch id on error field level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/ExpressionCompiler.scala"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"d93cb8f0b413849ae2eb88b5ffbc55cdecf27cef2697f6ea12b7e3e2e42bc5a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO in the future, we\u0027d like to support more references, see ValidationExpressionParameterValidator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/ExpressionCompiler.scala"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbce8b8c75bc635326e836d5112ed610b62a71e8d41173dd96b3ffde5d6da9e9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // copying global variables because custom transformation may override them -\u003E TODO: in ValidationContext \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/StaticComponentOutputValidationContextDeterminer.scala"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fae19b9e94a0a58eacd9819a68a0677031431c18ef9bb9bb4f7ebced7474bc4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // copying global variables because custom transformation may override them -\u003E TODO: in ValidationContext \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/StaticComponentOutputValidationContextDeterminer.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"b244f4172dd072ac1c228058448bf0eba035b1f7f2808fbe0a205a132a8b33a9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO String -\u003E NodeId \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeInputValidationContext.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b89af6cd8438ee8cf8cb84f31002c12e4d86d09794f39ac376902567b26b76"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove ValidationNotPerformed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeDataValidator.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"27c0b8f5beb112a04c549a5ecdca2cc91ea80359c627f5e6d92a253a68efb283"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is this default behaviour ok? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeCompiler.scala"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd7be94967fbd04edf72a12a966992aa3824669f70aa0279da9a8f100659876"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: display all errors when switching to field name errors not reliant on parameter name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeCompiler.scala"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"710b52994d516291bd5027b54ec232877d0b8575621f9bb08a731474d7cade31"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: typing info here?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/NodeCompiler.scala"},"region":{"startLine":785}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b905743ae433ce03f603cda789581b833c500ef6e209c75873511d6f3cf4213"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: pass typed NodeCompilationDependencies instead of dependencies \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/DynamicNodeValidator.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"abf811529c763affdd45aed2ec59b15ec653c5215b3e21f7d859c97031028b64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this method is a bit duplicating ExpressionCompiler.compileNodeParameters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/DynamicNodeValidator.scala"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"049f06a54a37c0e6b28c0c386c59cd666ef25a43e59d9cd385057a54164c8ae1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: expression? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compiledgraph/part.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"1610fea48d45f5c5b8cc51f2f905511203302dfdaa45411864e393fcf56e752c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add new case for parameters. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/clazz/ClassDefinitionExtractor.scala"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"59165d7176c57b108ae9c9069e3e4ec41de7776896969b6197ac8d2b1fcb4d04"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this is not correct for primitives and complicated hierarchies, but should work in most cases \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/clazz/ClassDefinitionExtractor.scala"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c31c38c824c949fba47e47adf081b9a3d309d219213c80ab2b3c5ae51c986bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be somewhere in utils?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/clazz/ClassDefinitionDiscovery.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2b6506118c1baae71c38422686eddeb844eee6a35ef813f3ad557dfd760ec87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what else should be here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/clazz/ClassDefinitionDiscovery.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"667451809e2e179e3d2c4a6f82cd0eaca68247b520d1405a173f92676f1deeaf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Here, this static list of mandatory classes, should be replaced by mechanizm that allows \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/clazz/ClassDefinitionDiscovery.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc1136df12d80a017c1512f2c5cff4518731c3c5beff1058faaf41824460d6cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO verify if parameters are need and if they are not, remove this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/clazz/ClassDefinitionDiscovery.scala"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe8f2622328904b94bd1597775d213978ea89d6b22fcdb7d799752b3c31be6a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support for the components with many inputs and many outputs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/component/ComponentDefinitionExtractor.scala"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"c82186524f50df97dab58858d25a6735a4decceafbcb8c8d0d9c8bc35d795b3b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should return some \u0022unknown\u0022 icon in case when definition is missing, then we can introduce convention that icon = component name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/component/defaultconfig/DefaultsComponentIcon.scala"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7cab8ddfd8895db92db85c654407de35d2c816ae058a3e5a73d71c8ec503850"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use convention icon = componentGroup instead of code \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/component/defaultconfig/DefaultComponentConfigDeterminer.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"d21d49fc6a8e0f6b0f9408b85a481b512b65030485ad4cc87997fdf35aa0026f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move from defaultModelConfig.conf to here \u002B convention instead of code \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/component/defaultconfig/DefaultComponentConfigDeterminer.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"20892be2034cdd8a195344ff5062a937d9ed2bfc47420b92441e16eaa6233ae9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: pass typed NodeCompilationDependencies to implementation instead of additionalParams \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/component/dynamic/DynamicComponentImplementationInvoker.scala"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"a52ae7c4bfe322d3e262cda347c9d05847c91971b66dc08c9c51af76003eab1d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should validators from config override or append those from annotations, types etc.? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/component/parameter/validator/ValidatorsExtractor.scala"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"160b79d657931d8684803a5abd377132f562fd4525ef686be16e0122966584aa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: paramName should be used here, but a lot of parameters have names that are not valid variables (e.g. \u0022Topic name\u0022) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/component/parameter/validator/ValidationExpressionParameterValidator.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba5d70b5a08e6d1399cfddf13fe626b51dff55762ce6b37181c75b85be15c175"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should get rid of this. Most of these fields should be parsed from configuration instead of keeping in code \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/globalvariables/ExpressionConfigDefinition.scala"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"5350fd004322ff631bd2a52ec3bddbd3a9f2c22f01135df4fad5ffb17976426b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add ExpressionSubstitutionsCollector \u0022type class\u0022 for ExpressionTypingInfo so it will be possible to add new ExpressionParser without changing this class... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/dict/ProcessDictSubstitutor.scala"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"5489350fde9d35e701bd786cc8e5c5987863bf0912dfbf3fbd86284d1c715105"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: lbg - add casting methods to UTIL \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/extension/CastOrConversionExt.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9a7f0eb0665a823130a87d226cf0f4f4c94c729a796d34e1c576329107a6858"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //             We should skip surrounding quotes and escape quotes in string returned by an expression // TODO: we skip surrounding quotes but escaping is not available yet \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/language/json/JsonTemplateParser.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"a52e4731ed2f4cffc56e3128c40104c8d39137656c4cada9ad23a1f10487b9f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: validate indexer key - the only valid key is an integer - but its more complicated with references \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"05f3ad5df25c77b486978278bdefbf680640fdd83c9ceb67cfabf39256b40505"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add indexing on strings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c213dc80051578f2b327a6385c772351665eeed6a4c5b7fa758528ac8e0763"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how to handle other cases? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"2976fd8d6d35c5609e77d395e9e9e2426d65411ac3d5f11583042433f5b743e9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: what if more results are present? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"005802c755db2adb809c49a8bf20d963cb55bee394fe8933c0432dc607452098"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: validate constructor parameters... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cdf5338d0cb41e91cac669577913ddec980fed677d71e846c3e0cdef749acb7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what should be here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"916ae28dfed2302d17660a44eb4cd834163eff0dbf5b1b598320d0a8b49b8930"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what should be here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":579}}}],"partialFingerprints":{"codehealthFindingId/v1":"2af50db44796188924efe2b7f735f706c8471d1a8bd64181934bc7b839ea4714"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what should be here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe966a109502b310c47c6966c2c4ba51cb161ee3b38178eac08691c6b23c1ab3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: move intermediateResults into Writer\u0027s L \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelTyper.scala"},"region":{"startLine":987}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a5538c5e6126bc41ca730ec71ae80476257752e46fb27db0b744a58b562daff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: signal to user that some values have been filtered \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelExpressionSuggester.scala"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"3480e0765cb1a09fc44eb88d3bd61d0bb7fab1ef6d1f655793bf07370cfb1c75"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: present all overloaded methods, not only one with most parameters. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelExpressionSuggester.scala"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f84e175b31bb3ec3291e07e2db4f900b7da0af1f735a32e7504f3750690d32b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fromClass is used to calculate suggestion score - to show fields first, then class methods. Maybe we should \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/SpelExpressionSuggester.scala"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b595150f4fa922415c525c2f097aab836f54faf58eee0ebda46c0632132a383"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/CompiledSpelExpression.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"696773fcb8267881a94bd4b6581be3ae87af693a12bad533c3afd776e9aed1d5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what should happen here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/CompiledSpelExpression.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ffbe230c5805e72af0f8419f8293bcadbd3256a83a8eb79429ae8362da6bf1f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: better interoperability with scala type, mainly: scala.math.BigDecimal, scala.math.BigInt and collections \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/CompiledSpelExpression.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b2ef0488623d32f80a7724db8c6141186f8f2b9158b92f921767663944b5857"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle other languages, especially spel template \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/ast/SpelSubstitutionsCollector.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"55bc7a6ec5fafd04954cc367b8a3cdc4244f8248ab4340644c5a0b535cac69fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: figure out how to make bytecode generation work also in this case \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/internal/propertyAccessors.scala"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff036ef80307ec09420710e4af69e8f8b8f87e8bf8ba3ee57e3988ee5999e5d3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle methods with multiple args or at least validate that they can\u0027t be called \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/internal/propertyAccessors.scala"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"826cd019a2673f9d5a97a7a40318a74f6462d48da0b4238ee682ff1b2482f598"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle methods with multiple args or at least validate that they can\u0027t be called \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/internal/propertyAccessors.scala"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"613b672cc8103da2bc93d9c71e37e0a2dcdfa3e8d0bbf3cbc235bce0ff6d91c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove it once Spring is updated; it should work with version 5.3.22 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/internal/DefaultSpelConversionsProvider.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"32f76a98aa5b184f21361a225eb52765423243edc6dc3e86d57895a17ceb100e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: this should be somehow expressed via ResultCollector/TestServiceInvocationCollector \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/testmode/TestServiceInvocationCollector.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"235ed4c1d96ac908b8b00fef58d498c24a51facbc21abb5a8bc196844f6e2122"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: not sure if it\u0027s good way. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/test/scala/pl/touk/nussknacker/engine/compile/FragmentResolverSpec.scala"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b7c9c3f6c3d2a149b01a248ad3d419c85466c14ec0b1871670644b95bed50d8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: deprecated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"security/src/main/scala/pl/touk/nussknacker/ui/security/api/AuthenticationResources.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"3168a6a62b58e0047ce56f51b284dcf70a18294e20860aa8e263f1f506f1b883"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is strange that we call authenticator.authenticate and the first thing that we do with the returned user is \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"security/src/main/scala/pl/touk/nussknacker/ui/security/api/AuthManager.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"58ed36470e96c2bea448d157c9a2bbebecd356a3f700348887474fea37dd1d93"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: tests for asymmetric encoding \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"security/src/test/scala/pl/touk/nussknacker/ui/security/oidc/OidcServiceSpec.scala"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"805eb71eea4662d2d98229e02b4ef4020a654d656918478d2f0cf307a4ea0765"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Maybe we should replace ids with more meaningful: test-data, test-result? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/components-testkit/src/main/scala/pl/touk/nussknacker/engine/util/test/TestScenarioRunner.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"37246fc200fdb79cc0ca2ed15d9dbd1ebed5cc07396d1e55e63732ad58261899"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add generate test data support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/components-testkit/src/main/scala/pl/touk/nussknacker/engine/util/test/TestScenarioRunner.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4c65a4eecbaaf0fd0b103287bfe019ac6a1b6196539289b77e54b2978b45cbf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add generate test data support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/lite-components-testkit/src/main/scala/pl/touk/nussknacker/engine/lite/util/test/SynchronousLiteInterpreter.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"85a8e12588e2507c315c1adf2c5c5f6ca0e3841a65e8d9fffef6145d7e773952"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add metrics eagerly during open, so that we don\u0027t need this map \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/components-utils/src/main/scala/pl/touk/nussknacker/engine/util/service/TimeMeasuringService.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"5573925ee9f37656d14797eb19144915f834552a1c9ad11ede601a13e8d9ddf7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: so far in ServiceQuery we don\u0027t do open(...) because there\u0027s no RuntimeContext \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/components-utils/src/main/scala/pl/touk/nussknacker/engine/util/service/TimeMeasuringService.scala"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ab337fd3fcbdf627c5e0ddad13d933f389cbee047040642abacf7858357a79e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This method should be removed - instead, developers should deliver it\u0027s own ServiceInvoker to avoid \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/components-utils/src/main/scala/pl/touk/nussknacker/engine/util/service/EagerServiceWithStaticParameters.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"df433e34d7e9c7bdfb11f4a154679c658f70f3c94ab5db31731c4209a46f8bae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how to handle list definitions better? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/components-utils/src/main/scala/pl/touk/nussknacker/engine/util/typing/TypingUtils.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"94ed9192074fd28ec3fce34253ca0234f1dbd08f95e0abafdd18c61a82deb572"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how to handle classloaders?? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/components-utils/src/main/scala/pl/touk/nussknacker/engine/util/typing/TypingUtils.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"be9b347d4cd488a65d3ba9f63a57aeac60b4da4d338dc05845a06eb16d56e15a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add watermark alignment options \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/components-utils/src/main/scala/pl/touk/nussknacker/engine/util/watermarkstrategy/WatermarkStrategyOptions.scala"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"033aa856ce419a97d831f693bed1500690f32d3fb48f1a7a4e088c6c029f4952"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can be removed once we have a better support for Java arrays in SpEL expressions, then we could simply use \u0060\u0022\u0022.split(\u0022regex\u0022)\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/util.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"d31ec8f5368511c0e18f216fedd50e7150d303e7b3f6967408b74ef83174304c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - remove in 1.19 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/conversion.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb90b9c5d77bf8837dc84108e752d882cd1ab7157be022271895f03fa911e652"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO 1: We should probable rename toJson/toJsonOrNull to parseJson/parseJsonOrNull \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/conversion.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca1aef08259f37bcafd8df41580c6cba3c699504c352657f6125fb3dea4336c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO 2: We should extract a separate helper JSON and shorten parseJson/parseJsonOrNull to just parse/parseOrNull \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/conversion.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"91214a747b79ac0d254e0718b5540df19fd13e4afe7ff3c105b87c6e007d8202"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO 3: toJsonString can be a extension method like other toXYZ methods \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/conversion.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"48941659251decf75fa3bec1d368d90af580f5c7c16424d951da8e050c01849f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO 4: We should consider exposing Circe\u0027s Json class or similar interface. Thanks to that user could do: #value.toJson.spaces2 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/conversion.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d64ac119f4e3559e3b29159c0ead16e20135db6fda18a93c3f0d4831ca17f4e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This method currently has the following limitations: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/default-helpers/src/main/scala/pl/touk/nussknacker/engine/util/functions/collection.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"28f52dff72b0ee5f208e783fd3f261666bd415609c7e82c6f7c4cf58767117c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: configurable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/flink-components-testkit/src/main/scala/pl/touk/nussknacker/engine/flink/util/test/FlinkNodeCompiler.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffd8a4292a404c5a7c8aa65e163e769204339ccfe0fcd198de38ca6114217cbe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: configurable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/lite-components-testkit/src/main/scala/pl/touk/nussknacker/engine/lite/util/test/LiteNodeCompiler.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c5e3c4a68b126dfdd0ca90350320e34b11e77c2129062027307db51c9ff64e9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: does not work by default? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/http-utils/src/main/scala/pl/touk/nussknacker/http/backend/HttpClientConfig.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"b49344caf6f57e205dffb1dc25719c9ad1da5cc35f6171b9acc74adec92443b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: parsing schema should be consistent with [io.confluent.kafka.schemaregistry.json.JsonSchema.rawSchema] \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/JsonSchemaBuilder.scala"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"e899b08bb380741dc6616656e98d3a73440249500fb247c6328b24c84d095c6e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove strict setting DRAFT7 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/JsonSchemaBuilder.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa1df9e163781f886d260dadc00629e9d5b03d84c02907dbaf162fe65c02e6ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add support for others type: enum, const, combined, etc.. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/JsonDefaultExpressionDeterminer.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"5da8c74a86b9941481b91335ed38b337c49eea2ff5574f03143adcd806ef57b0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Right now wy try to convert BigDecimal to long but we should addictive conversion from schema.getMinimum and schema.getMaximum \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/encode/ToJsonSchemaBasedEncoder.scala"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"0924118bce8117ec0f9bfafc124640a19756870df2fa5090cbb6a73bccb6d201"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove duplication - JsonSchemaTypeDefinitionExtractor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/encode/JsonSchemaOutputValidatorPrinter.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ccbdce7beaa0c5e994149abc97532407b6b1bea74c278ded03055ec5a48f03e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add support for: enums, logical types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/encode/JsonSchemaOutputValidator.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b1ac35e7a7a6a6f8e9d451bf74433affcde438c7caaa15fab875b456a3b7fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should consider replacing everit by networknt\u0027s json-schema-validator (it uses jackson under the hood) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/serde/CirceJsonDeserializer.scala"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3698a25bb8f358fc619109db0030051fbb12de8fc7be38fa3490b42d84b8344"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: FixedValuesParameterEditor for other types e.g. numbers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/swagger/implicits.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"12bed1f10eead0cc6150337c5a3000ddfe4c010b3ea611674011a4f77e007246"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we don\u0027t handle cases when anyOf/oneOf is *extension* of a schema (i.e. \u0060schema\u0060 has properties) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/swagger/SwaggerTyped.scala"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"350673bf61a8c089e719578259bf5857b51f4c69c189e5a47acc4a174f02c6e0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: validations in openApi enrichers should be based on actual schema instead of \u0060TypingResult\u0060 instance \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/swagger/SwaggerTyped.scala"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"2808ddf8bf4424cf74cf5ceb4fc40ea0ad839b065a11042fa0b6c773588bcf0f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Validated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/swagger/decode/FromJsonSchemaBasedDecoder.scala"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"9475528df83d440536b07d5b0f50ddfd2d42f323f6e2b8dbbbd10abc05ff1092"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove flow control using exceptions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/swagger/decode/FromJsonSchemaBasedDecoder.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"d627bc160a66848b687b8c8ad132d7fc06caa959b3d2219c7729aa144b668c83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle case when we have fields common for both versions on \u0022main\u0022 level \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/json-utils/src/test/scala/pl/touk/nussknacker/engine/json/SwaggerBasedJsonSchemaTypeDefinitionExtractorTest.scala"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8e63c529b594815abcef832b376a3c2db46e134fd062ce01c66573aedfb2b9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: exclude non-key parameters to trait BaseKafkaInputMetaVariables and use it in TypesInformationExtractor.mandatoryClasses \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/source/InputMeta.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"46859145451306cb9e54b1c4943b94ebc465d52a1101a37fe1945a736f627ece"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add displayStrategy similar to this in Unknown type instead of extending case class \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/source/InputMeta.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e7dff37a85c70be3af8a28e1e903841a6bc8612c77e5affb9ea0266f7d187c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace this map with normal fields \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/kafka-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/KafkaComponentsConfig.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab0023af453a0e04e3fb9b64c2a567462bfeda11c038624963a6b1c7cb9e724e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Rename to processName and processName-nodeName \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/kafka-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/KafkaComponentsConfig.scala"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"d71dcc1533c9ecdf96a82887d90bab9ca99c107572bcf39234aa0577d0ca721d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: better hostname (e.g. from some Flink config) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/kafka-utils/src/main/scala/pl/touk/nussknacker/engine/kafka/exception/KafkaJsonExceptionSerializationSchema.scala"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df4f7f8a01d19b5a606856cead39b25112181de78f46690f2903a583e6925a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: expose like kafkaLite and flink version \u002B add docs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/lite-components-testkit/src/main/scala/pl/touk/nussknacker/engine/lite/util/test/LiteTestScenarioRunner.scala"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a5146a50ba00c45fcd33538a65b147ff89659a11a1c475c5311957916cffad"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: verify false positives \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/lite-components-testkit/src/test/scala/pl/touk/nussknacker/engine/lite/util/test/RequestResponseTestScenarioRunnerSpec.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fc1aa5fe044d81991bbe6a33efde6b3811ac2153cd16a8928573f2f95cdd1dd"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: verify false positives \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/lite-components-testkit/src/test/scala/pl/touk/nussknacker/engine/lite/util/test/RequestResponseTestScenarioRunnerSpec.scala"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff6af8a1193c3bfe81867028a7b5b8d727f56167040de5e35a4fab2922fc9c75"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: verify false positives \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/lite-components-testkit/src/test/scala/pl/touk/nussknacker/engine/lite/util/test/RequestResponseTestScenarioRunnerSpec.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"386dfe1b7d04d6c39249d0d66db704cc75781338b04eaf7911dc703307f582d7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: verify false positives \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/lite-components-testkit/src/test/scala/pl/touk/nussknacker/engine/lite/util/test/RequestResponseTestScenarioRunnerSpec.scala"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"b448423bed53f6e061c0bd96f475269e77f60aa2f814a975936659cb3a3e7fa5"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: verify false positives \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/lite-components-testkit/src/test/scala/pl/touk/nussknacker/engine/lite/util/test/RequestResponseTestScenarioRunnerSpec.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"a48242e5e6fd5cd74fa4de011d7f86ccbfbad02c20caf6a19685b224084e8e60"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add addNullOption feature flag to FixedValuesParameterEditor \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/KafkaUniversalComponentTransformer.scala"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"694cde12448a52cb6bd9e5eb672453a90cfb56b9fdb0c45a0f67a08e65a2405d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check optional? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/encode/ToAvroSchemaBasedEncoder.scala"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"72b287114437fa7bd6af6bb9ca60390b98ea18c05f5504df6a5f99bc696ecaa0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: for now, we don\u0027t use SchemaOutputValidator for Avro in editor mode, but we can add it in the future \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/schema/AvroSchemaBasedParameter.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ee3a2cfe75d47a0b3552574172f3194d90020554fb29f2ea0d7204978597b6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: It probable should be configurable: e.g would be nice to have possibility to define static topic -\u003E schemaName map in config \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/schemaregistry/azure/SchemaNameTopicMatchStrategy.scala"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"ace2f0f0ffe86d98c2b71461ec875b5a0c883a340ce3b1f8ad6c8e54fd96fd63"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: handle situation, where we have both json and avro payloads for one schema registry \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/schemaregistry/confluent/serialization/jsonpayload/ConfluentJsonPayloadKafkaSerializer.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"14f2ea129bc8cb5ed55d3cfbec3c5b1101bd98c84f8196a505b0c61dc46eadd0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: test this case when supporting json schema \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/schemaregistry/universal/UniversalKafkaDeserializer.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff985e0978833eb3f8f6e263fdccf5e1d2b0ccfaae7b051aed5a7a86d45c6081"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Here should probably be default encoder and the loose one is for historical reasons TODO: verify and switch to default= \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/schemaregistry/universal/RecordFormatterSupport.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"40af4e4a56cad03e0cedd31a321ecdb04e0a16026528926918476c864743cc9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ADT allowing to pass either information about schema or about ContentType \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/source/UniversalKafkaSourceFactory.scala"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e839aaf3274336810f3c40777935be80eb2a97aa91d2a3eaa964bdb3d60dd48"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is it ok? Or we should skip this element? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/main/scala/pl/touk/nussknacker/engine/schemedkafka/typed/AvroSchemaTypeDefinitionExtractor.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcbb136172c577682e56ec45a2f12982249b35c8fb13bcc52147b697d3089f76"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should check if schema name matches our topic-schema name matching convention in the serializer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/schemed-kafka-components-utils/src/test/scala/pl/touk/nussknacker/engine/schemedkafka/schemaregistry/azure/AzureSchemaBasedSerdeProviderIntegrationTest.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3f7fb0a8e27b97e5c599f446ca683033f0bc41a64dd9fb29e7acea379ca3070"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: reuse AvailablePortFinder \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/test-utils/src/main/scala/pl/touk/nussknacker/test/UniquePortProvider.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"c500265153b944f28c20706ed89355142e30948b4bd3bc43b7013b4a3e5e3298"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no project overview: The first paragraph under \u0027What is Nussknacker\u0027 states what the project does but gives no overview of what it is and its scope (e.g. whether it is a tool, library, or service). Add an overview section that explains what Nussknacker is, its main value proposition, and which tiers it serves."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"66dbf18d06aa983c06246108610908ba99aae6784280b3aacd1a6655733d71be"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no project overview: The OpenAPI integration guide begins with metadata but does not state what the project does or what it integrates beyond describing OpenAPI specs. Add a one-line overview stating that Nussknacker reads OpenAPI interfaces and generates enricher components for each operation."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"docs/integrations/openAPI.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9923db33984ab7e6886b34f6ef54505012d1010e5e14b11a608638c0447ca57d"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 1 of 1 project(s) overshoot their size bounds, lowering Project Cohesion to 0.0/10. The most over is \u0060(repository root)\u0060 (112761 LoC, 4838 public types across 395 directories). Review these for cohesion \u2014 draw the boundary inside the module first (group each responsibility into its own package or directory and keep the cross-boundary members non-public), since splitting a published package moves types between packages and breaks consumers."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a94650dc74886a0f1f08eb9fb6775f1fc395279ef7e901c970c9d26f767a72"}},{"ruleId":"D28","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":"957e5d47f881d6c86258ece760c328ad18985b48df767124325f85d014bd28eb"},"properties":{"commitSha":"e7de9a92a90a0f1c7968cbb46f873f6fdff73d34"}},{"ruleId":"D28","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":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"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":"d5b8f11381d61a58459ffc7c595fd52d09c03c711894a63a9578043d2338412b"},"taxa":[{"id":"CWE-829","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":"92f687ee7ce67937bfafb4d740faa07bf4576707f7d82ce13ea2f0927ea69cb4"},"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":"21c71b11cc5482b7934b76714389b56bef34d67cdc5857f26a3c7f679e6307a8"},"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":"305fbdd0afc42ff47e021844b1e1860058f31cff45d74c066403e76cc057c2cd"},"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":"84c64d1b0fa50b47880720b9985483bb1ac43a6cd232724d32d310daf40868d6"},"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":"1c8c3431b2477089e9af07bdce50402b156db101c53e8155904b72a0dfd0bc2e"},"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":"77b089fa8400ff87f2a27d79a06b904edc5b0f111747f4fd84ea903f42c0a6d6"},"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":"3e1efc67d1afa23cea00e0a1989d9b0098a8b50d2e28d59dfce134c39ba1460b"},"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":"efd4538d3681c7930732941893c361409fe5a09058ec77e7ac773ab0f00333fe"},"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":"9d8137e2843a4d9ace312984d4d1b8b07998cf19f7a31e2c7e904de2ca9c84a6"},"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":"049934f307b3b15aab8afd22c82b2246c8e05a2c0f7c7075fd2c24748b6b67a9"},"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":"46185eafc25b9c90227abb743d42a1f517d21008668c42a07363c9246202c641"},"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":"44d872487c19a5845d04cc8a7367ed60778b911c4885c009314639afce6c938f"},"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":"3868a631067dee987d06af69fc1b1d2b615b94bf75fe5bca15f34c7b74bcf96c"},"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":"c2d906f5815b7843c67dbd1eae75ac223c5e75303448da64e981b5a554999b87"},"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":"63f7f0beaa933f72e23c4e6b837874694afcf546891ae0a14869b5ad1c622b4f"},"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":"84418bbd2230e8118c3f80271ea51ad9f03509d2f9b6b4b88c47e66b2f790d2a"},"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":"38a6f24b51e80626a5f27173710c4536be889581cfb94fd8a8fe2f2b0c82eb9f"},"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":"5a76c73807a7c7e846a7771eb137ecb5aedc92b492e7bc244def99b83457a63c"},"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":"88e3419eb26ce3a102dd5247f85af23ae60d384bfc3f7459302fbae03ca0ba79"},"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":"93c91351efabf36ee05faddb69939db55b1eaa3db5af8e5faf000221dfe3cb6f"},"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":"28df00027ed98e3b16bfe3688a8f9b687cc1c557b4cdf606b3637db0077d05ce"},"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":"b8a4d588836abc5dc34c27b2d1d1e4a34f05878f8c50649cc9103415d67e9db7"},"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":"7cbb43b0796fcd98d6e7c097efe2ed751a26b457757401030ba741b325f38942"},"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":"fed421d316891f732586d21df1ed58b473f77d170ac2d14de1de187c089d50f0"},"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":"b290d141e7546d0f3e8bc3cad793d4c3a1b1fe5cad192a3f46d62e981f762917"},"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":"aaefdff97a82ad4ce2e5017b4061b0b655e783431e3cc7b71618d8ff73f22dbf"},"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":"dc00a773c479146767e194423874680a3beeef5684ae1dd677b3f9554bbab38d"},"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":"381710f60907350310ff6590460235571b8217281c0b2b7559b4a4d6fdd0e9b9"},"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":"53f472e5940de96c91035bc9d801daa8add5f035061bf4c673feafbc0124169a"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"ee981fdc218b616e44d76d255399dae07d467dd92e4068069d220f03729aae6a"},"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":"54a3aeae3b36698c079962230e6f61e8a34eaa9fd136fcf8677f3255754970ac"},"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":"7ab2f8d1309a7480af8af9cd4acc2dd69a219884763e732ae1cee26f2fc717ac"},"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":"15819d84603e5066b56e13d4f3ef6505d69fbaef5a6b874975405eee55fdfae2"},"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":"b0949e968aeee597567f7fb09b67f33564ce3d6f678512b9c706fd4f3f6e04c9"},"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":"ddfbce4a606c0742c594fa0f757fcdc0dc0a1d91afab7e572866d1f4aebccb86"},"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":"c29b1c8bace1a6ffd6e2eb3b606a5fe5f8069920b0acc496f1eaec19e914e2ee"},"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":"c987bab7534293cf692fdc8a662e30ad19e15999c2b72bd70adfedccbd6db86a"},"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":"245a6c479e9b6275f71fd58ba4764526985358498fa5ec324191e444e981ecad"},"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":"cadbf7a9eb116d0ce34a3092b2e1583ff66ab086c78c246532c8c42710e69f76"},"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":"111ee6e930aed854c01fd55b3f907a44296ccdc9f53387046f4b9c0343c69db9"},"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":"272f2f41fedb5244595a404c4be68c994131c3a2206aa1d816bdc976a192f483"},"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":"5bdeb47e08a532a411b005478006a0982ab13d4e8f402491370ce980044580e7"},"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":"aa40782597bef7133f5f58dc900ee5b9952955bf31c577521f9cf77aa5372410"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"b737e4a2fe70c39e326810a9c1d9f10bb5d627e3911baa0e07deb1b877a4b615"},"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":"2f79b01a41c493a086f758a922d52dbb9f02e396ad3c9489f9ba116484a62a6f"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"96ddffa1a80beaf3b70bfe14c2f4c0b00acf3392a9fe0443cea671b1bf2e7cb3"},"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":"9233e28849c58d01c42b845fdfa1385aaa07ac66366b38d5659bd2a33e8d8341"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"5f72b24ff86fa9b2e8f2dd4066a0679914c2f72aacca027e04463443953c3261"},"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":"be6a53485774f0e3f71211461d117b6820fd94f3ed2cf72a29f8714c8667e929"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"0b7103f27bb5f01f79f2aee3766efa8d9df922c51438424644c87ed1022395ec"},"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":"855489e590e789b7fc4ac192a06be61cadeea13b8cff380a743835281618b400"},"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":"c5844ff59048e78ce24fc6df1b0650bac62c8a7372fea4df3348766567c33fae"},"taxa":[{"id":"CWE-94","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":"0368062220b7d03a1fa9e9d2bccb854d86c67fc9ecc0cc9ff48703e4ad75233a"},"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":"25b7354911fca1be81878bcc7d906d689dedf6c3652793a82f09009ba88a7619"},"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":"abaca134b0077464533bcf611411185fc7fee957917d13ad6a7e0bfe6879ab95"},"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":"406c0684976782726824281612285f2596c5de354a93ee0b9814bd3016b1c622"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"54dc40403c6b302a7c03a79a9f4778ae7ccd8dc140dd74fc88ad42bb4c518504"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"49d19ec44f4c8b2c7f8172b5134b4d58fbfc9b802965c8f0e4394faba55dce3a"},"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":"f1b966c70d2e5f6ab697ac6d268d54938c60e802d8ea58ea6ff9cb7e10a35f70"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"693249723480b7d3690fbc9002e4acaa2fd5c4f5277d52948268b51530c89d1e"},"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":"835c692e6e46c59925bc38affeba138c585100bce41ae8517e8cb7e6c37f3c76"},"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":"a4fa3a3025b7a9052cbd7b0d8a17b7d24287898600c95850a4b97997b4072afa"},"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":"38d21ae4a0f169ecb4ed1031dc65cd5ae3dc61b8e2c8518bb52f1f2ddde09f3b"},"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":"3560cd7f949b4f538a22ed9a986c6e55f4f69e174223eb36106d95f643d6e20c"},"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":"3e8d0fad5308c9305f4c5a73c1dede7393dae24eab37f445f7de631ec0ae4cb0"},"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":"0e579e2ec0f2ecce14f6ca2b69e07963453bd7802f593ce342b975d1ffb88093"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"b779d772829cc371a5afd9e691dd712a1bf93e15691a1dfc1806fa907d6e91cb"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"189637438c98047c31a6811543f84e904c1462c24d23649c58776128a115651c"},"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":"94aa3ff1f1173784f51a733099106ddc4f3da87566123e4fa71f1eea5c67ba45"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"d19857193a4ac4367cb57e876cf2eee5f3adb4bac72f279312d31bbfee4f6a4d"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"d2afc5a81f5e606c4e1b87b7b2a2619fef6a3941060ed4ebb04aa258f3608437"},"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":"a0575aa838c3187c935a8f94b0e68e2bd8df7de20c7984c3ab633bef4a8aea62"},"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":"5e7be56ea80bfc7620c792c6c0c0e7a8077adf810ceb50005b549a82b5dd6eca"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"42f62c08a817d669faeb12abe184e3cc97ec457fcb1dc948b204c9b3c3b8039b"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"929621487ce4e1305a09c879e634c2f9f44340438af201cb51f9705324c145da"},"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":"42cf222607072d987ceb949cb109b1abd6ca34812190f000bccb9a41b89fa3bf"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"2f2c19db600c8f8784e79ae79361808be56b34eebcb9cc678f9ed5b4edf6f7db"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"957b150e90b8de065e3fab913d6db8aa84cc38085b4826b482eaabde0c4cf347"},"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":"19e97ef27a1088f3104b0970adc0f76ee2e4cebbb01f0fbef40973471cf279b9"},"taxa":[{"id":"CWE-269","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","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":"9e5b4fbac9f8d6755a5478f479af41d234c22b2137d8d57ae5469c5c4363e66a"},"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":"4e5521c93502f26ac1545b508b903471c9cfdce4ba41f3dad988434a33934bd0"},"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":"35c64ddf1b46f1c2cbb1bcbc27b1bee48e7cbf079586a52ea456aad299877289"},"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":"e93f4323dae492f223159fe0b2c08c0fd70c98e681d31c254854b8de4ea616ea"},"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":"83eed39083d58b258aecc3d33674adb4295b9df73b1f090bab2eca846217b695"},"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":"bd9f305bbdd264660a0df88c835d1427d94ced74c91af7e4c2617eaea7506bc7"},"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":"0e50b6f82992a14b8cc56f92a20e11f83739c4f5e329114cc167ad83a01eeea7"},"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":"f53537b351315745e7303cea886c748975b2a03a10a5afd17e40e295e7ce83cc"},"taxa":[{"id":"CWE-829","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":"2fccab6651cd4831c4aef2f098f3e584f244445418810953a9ab37a7d7af1e64"},"taxa":[{"id":"CWE-829","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":"d7b65818c5c8ab50cd9e7293f94258d883543aaf09f15cd681e7638ffa12da67"},"taxa":[{"id":"CWE-287","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":"b2f908dde6a824ae2b7f855e7886170267522ae9e268aa3f62cb51fb40ce172d"},"taxa":[{"id":"CWE-125","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":"e169431ef9752e22f9babef527a477977c37831b93b860daf7634d4d2b862343"},"taxa":[{"id":"CWE-125","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":"45f235e3357da4ba3870a6b13eea8208d8fd733159b6799812a3ce020372f2f6"},"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":"a2735d017eab1bb90604c7cfaa1bfe8cf9c465eb38509453b84b3954c3f45de1"},"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":"1c5bbc733110f33be07a4839fd7e6930f6ae635c3c7512f1df0c35376d058cfb"},"taxa":[{"id":"CWE-125","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","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":"1b0f9a129e93e473b813d927d323c3e5055eab4c2c798cbed5cc23851e58fc74"},"properties":{"dependency":{"package":"tar","version":"6.1.11","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"92d3051ee58dcaf7e1523e2ca8af08053cb1284c9b120015f5f4783f0f85c820"},"properties":{"dependency":{"package":"loader-utils","version":"1.4.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"3780ec3e41b857e9b04bc7bf46e7f05462ef6a0c4cc1ef1c72b928421298b3b5"},"properties":{"dependency":{"package":"loader-utils","version":"2.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"8cdaf1f1c2bd244065cf0fe9aaa62c42ec724fa9b98bc3f2d51b64abece09f04"},"properties":{"dependency":{"package":"sha.js","version":"2.4.11","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"74e81a6cb32e6b7b99f4079cbf5073431b251770efa2ce5a34b9c14fa90371eb"},"properties":{"dependency":{"package":"cipher-base","version":"1.0.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"578aed52b7ac1bfe03e73fbc288dbf1d6867f94908bb072ad32758e58588c1f8"},"properties":{"dependency":{"package":"pbkdf2","version":"3.1.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"955bfdaeecb789331dcf343320c23e32a65eeaa511aaec0d3f6bc42e841c7f46"},"properties":{"dependency":{"package":"shell-quote","version":"1.8.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"b39ab67aadaacd1ecd1fc21ee5fc00ecedaa486ef9e92a883cafbc09119ee209"},"properties":{"dependency":{"package":"websocket-driver","version":"0.7.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"0b5cedbdd67648809b0e165f5abf4a764b86540d225a12af65ffb74291e36cb7"},"properties":{"dependency":{"package":"elliptic","version":"6.5.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"92c044578f2bba9ccb61701d86c00eecca7b93d7df5e8a5cf05268309ca5fd87"},"properties":{"dependency":{"package":"form-data","version":"4.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"d663a3032c4c747be09e9b6dacbda138248428555d4eac5707952d2310df54e6"},"properties":{"dependency":{"package":"decompress","version":"4.2.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"4537310da6e9530c218720ec414c3857b33799970edfc5af8df25a5f0713b756"},"properties":{"dependency":{"package":"node-forge","version":"1.3.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"37dfc03d4f2259075c67768e286fda7f48b5094a3799784f5fa0c77f38e0df68"},"properties":{"dependency":{"package":"minimatch","version":"10.1.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"825a5d958b9ced215321fc345a1aa7bb00f424444534f84d46b125d1bbe6dc14"},"properties":{"dependency":{"package":"minimatch","version":"3.1.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"cf8e4d5e89713725d7a95aceaf36ac34917b24c4c2552f5d4d23aefb6326c525"},"properties":{"dependency":{"package":"minimatch","version":"5.1.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"32b10c39d7fab4cae8d8a584a73c903a8cf0aa836d9ae1c79d86c3ec38b7b7bd"},"properties":{"dependency":{"package":"minimatch","version":"9.0.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"1909fab6a5d3fff30a3ef3c90039679513dd3727409bd795cb0e64a42ac0e137"},"properties":{"dependency":{"package":"flatted","version":"3.1.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"ec28aa948491aea6d66f2d4f845670259e652ddbf5fd4a5fd358d8d60d52648c"},"properties":{"dependency":{"package":"js-yaml","version":"3.14.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"2817cb1374d8b849df818c60d1d44e04e99f59d70b2aa0d1a1ababc27afec394"},"properties":{"dependency":{"package":"js-yaml","version":"4.1.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"5937260c5049e5e9fc1e73bb34e2bc1d8d102f2c1c169ee4a6ad42d9936a5141"},"properties":{"dependency":{"package":"nanoid","version":"3.2.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"e857bd87c6ad0de2ad7f171ea252eb5dbc72d9df94cc68a344e7dd1d4c5bdd32"},"properties":{"dependency":{"package":"nanoid","version":"3.3.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"0c3d8a767bef9b54f392b00ce81ed3beabfb543180196ab2c31d054a4d28faeb"},"properties":{"dependency":{"package":"nanoid","version":"3.3.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"9cb9f6fe44c593eea3627b16dabb56ee7f3b939fb1a58ca852a3d60b0d866e23"},"properties":{"dependency":{"package":"nanoid","version":"5.1.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"98c33cf5e14b9c9601435b0910b0611bdebd8f069ed0ad2ef1aed7564b486e56"},"properties":{"dependency":{"package":"svgo","version":"2.8.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"test-or-tooling","file":"designer/client/package.json"}}}},{"ruleId":"D30","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":"3c87a3d2b6f11667370b58808a27a366787fb535fe042e969aaeae520a25ca67"},"properties":{"dependency":{"package":"svgo","version":"3.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"test-or-tooling","file":"designer/client/package.json"}}}},{"ruleId":"D30","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":"5b6984e3a468148c1b43792efd08ebe095b0ea859950e231b4cfcd7627ac3f6c"},"properties":{"dependency":{"package":"@remix-run/router","version":"1.21.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"b2ebed6187ceba1ca0269ad7664f91e9cfe636d208c3b72d25e94e26528f5288"},"properties":{"dependency":{"package":"path-to-regexp","version":"0.1.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"9a1b85d78b893cdbb77a3f5a72276251f285fd7baf99771d932df1487ef3633d"},"properties":{"dependency":{"package":"effect","version":"2.0.0-next.62","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"eef4c6adf29a36a18c3afd25abf54c7d3acac2de4eddede65d64941b724e5e96"},"properties":{"dependency":{"package":"axios","version":"0.21.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"designer/client/src/actions/nk/liveData.ts","line":1}}}},{"ruleId":"D30","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":"e13d8369400eb729571b5d902094d67d04dc7cb38a9efb49d11a34dabce79631"},"properties":{"dependency":{"package":"ws","version":"7.5.9","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"81a4bc63bfdf2ecb47bff93f98543e746812d06da8c4ff58173313072828b950"},"properties":{"dependency":{"package":"ws","version":"8.13.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"99030f2d2290ba7fe7fb4fb5981f84cbb745e94a1c3ca8477183aa4f7546d018"},"properties":{"dependency":{"package":"brace-expansion","version":"1.1.11","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"c045e0e68542201140c0296be936d048d492b40589689f6a6597ea6ab63adb5c"},"properties":{"dependency":{"package":"brace-expansion","version":"2.0.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a5bcea3bec07193138aa0bbd9deb4fa794783f4c1ee08ab9efed5175c08efc9d"},"properties":{"dependency":{"package":"brace-expansion","version":"2.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"18ab3e2de62ad2a3e3d28d4803be1998bb07d77700df1964b52cfceeb4429d96"},"properties":{"dependency":{"package":"cross-spawn","version":"7.0.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"01ea401885921b8591570e28199f091d81f57cfe83dd9d8b974fc9779a934f03"},"properties":{"dependency":{"package":"systeminformation","version":"5.31.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a5ec3ee3136a43552c332cd55b6107064b2f443b1db4dd9328f575b552b2c4f2"},"properties":{"dependency":{"package":"postcss","version":"7.0.35","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"test-or-tooling","file":"designer/client/package.json"}}}},{"ruleId":"D30","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":"e53ee087c4f0f9040d7d59fd2575c4ba31b5bfb7912827405f4dd8e634ba1f5b"},"properties":{"dependency":{"package":"postcss","version":"8.4.24","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"test-or-tooling","file":"designer/client/package.json"}}}},{"ruleId":"D30","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":"9dbcae03139f7d19c338c4b225094864f7aa6c76683cb10692bf11f5a4c06ce5"},"properties":{"dependency":{"package":"postcss","version":"8.4.35","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"test-or-tooling","file":"designer/client/package.json"}}}},{"ruleId":"D30","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":"abccb6c781d0bcd418d0697b48ad91e10b6b780f5eab3992cd4f20b78e1c2acb"},"properties":{"dependency":{"package":"postcss","version":"8.4.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"test-or-tooling","file":"designer/client/package.json"}}}},{"ruleId":"D30","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":"6a6249c5f094c668e21d89a469cd562b6af8e868ba5b74d43479eaae7d43790d"},"properties":{"dependency":{"package":"browserslist","version":"4.28.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"90e7fe27ffa3d4e237db90911bc2f752d6ee190ea1429e1753d77962be0af67e"},"properties":{"dependency":{"package":"@isaacs/brace-expansion","version":"5.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"f61181b5a4f613507c87d9c2d36a4a5934458e2162c7e7b3bdd5525ed37267cd"},"properties":{"dependency":{"package":"extract-zip","version":"2.0.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a7df91c5fcf6680b3a393d467adef7af6c16da4fd53b88811ff9df22cbc871bf"},"properties":{"dependency":{"package":"jws","version":"3.2.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"61e70cba67db727d82290ca322267740b80b68f096964783ba1c99d3723faf58"},"properties":{"dependency":{"package":"jsonwebtoken","version":"8.5.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"1a50359e4886e4f8059ac896b289f539739913b942fb20eee97af0ea1e04f152"},"properties":{"dependency":{"package":"json5","version":"1.0.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"69cb2111a3bc3f547d4c3e2278d2ba5439154869f4dcaf642a246cbae1600612"},"properties":{"dependency":{"package":"launch-editor","version":"2.6.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a537fd206c9f917663dc7239fe024d4fc99b709215d42c02295ff019fbd6bf17"},"properties":{"dependency":{"package":"picomatch","version":"2.3.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"32b7a27ea9cf1a074a24cc775db19e64fb02270b12148a8fbbd2a5d487974f27"},"properties":{"dependency":{"package":"semver","version":"5.7.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a4a716ef7147a85d6fbb79024765bb8809b5b5442a0a6ae74386621c8ba0c46a"},"properties":{"dependency":{"package":"semver","version":"7.3.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"10504696aedb4b2960be3d40993693c280fe4dae99ef8d9ec2c0bfce1bbb05e2"},"properties":{"dependency":{"package":"semver","version":"7.3.8","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"4e69cbb4351a904fd70a11326fc7fe12bb8d63f1273dd5f061be6cd1494e2375"},"properties":{"dependency":{"package":"semver","version":"7.5.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"9825dd96104789d8b8665bc2e58dbfbf4adb36487bdf3c749b815381e517d563"},"properties":{"dependency":{"package":"semver","version":"7.5.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"0a28466c99f828a69982d211e093008ab0b33e820ebe15d7c394c264455de46f"},"properties":{"dependency":{"package":"http-proxy-middleware","version":"2.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"designer/client/server.js","line":5}}}},{"ruleId":"D30","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":"1821598bfb72258c5046d69356c55c41901e4c643039b9bca8eb3f685c056199"},"properties":{"dependency":{"package":"http-proxy-middleware","version":"2.0.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"designer/client/server.js","line":5}}}},{"ruleId":"D30","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":"188682bce55efb8cb3f21be07b3d82a3893b9bc79d1a708efb48438f89aaecb6"},"properties":{"dependency":{"package":"undici","version":"6.21.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"6bb5a3159dc30d17f7c5a2a523d1e493308f243e6e9a12b5bc91fd9f385a1c54"},"properties":{"dependency":{"package":"yaml","version":"2.1.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"0f6a515761d9d358e08af2bb156c08c27cc6022c426ece234d93302c78395690"},"properties":{"dependency":{"package":"@babel/plugin-transform-modules-systemjs","version":"7.29.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"9030ea2e1daad3c0b830b0c38804f15370d233d6de1d1080c89423fe5b2d37b6"},"properties":{"dependency":{"package":"braces","version":"2.3.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"4d2399573cc2c2749c26c24d35fcc1612c2b53603b8a513a0fe1ea8297157d84"},"properties":{"dependency":{"package":"braces","version":"3.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"c101d8b3bb858ea8eac3e2e08128fcaca66fb8cd7ec7c421521465e550e52354"},"properties":{"dependency":{"package":"form-data","version":"4.0.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"c867b35382a4fea3b944a6cf017692952c3cf2a072f3073f475a9dde83c98ef0"},"properties":{"dependency":{"package":"tmp","version":"0.0.33","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"d13b8301961ced312a32455d4b72b414785264757fade6a6d5953aef497893c5"},"properties":{"dependency":{"package":"tmp","version":"0.2.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"3dd288c6ebcfb655bdfcfeea1a72e6cf912a0cb36caba0b718fa5e2d2380ada9"},"properties":{"dependency":{"package":"css-what","version":"5.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"73bab5892041d3ef10c23b94e60d86d429b50e59d7a4b9dbe4f1462d5ba5647c"},"properties":{"dependency":{"package":"underscore","version":"1.13.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"7cc6788978a1bda8af31f57e3644d78b6aa4cec3935c20b158d37eb30b0ae382"},"properties":{"dependency":{"package":"body-parser","version":"1.20.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a0d6336953bc1a116e88c5261a43cdad4202abe4d4c075da744961de2980aab3"},"properties":{"dependency":{"package":"lodash","version":"4.17.21","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"designer/client/progressBar.js","line":2}}}},{"ruleId":"D30","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":"543bcf9f3e45ba4c431f7b802d3897706d2457e087f9905dd2f54c2e3cdc2774"},"properties":{"dependency":{"package":"lodash","version":"4.17.23","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"designer/client/progressBar.js","line":2}}}},{"ruleId":"D30","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":"3d1195ea9bf08b3a3b1493efb5c337687a11b5024f32f4586d1d7929e163f544"},"properties":{"dependency":{"package":"lodash-es","version":"4.17.21","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"23160c27275c80388d521c2ff5282177a0cff2ce0d92bb19a424cc204f5e699e"},"properties":{"dependency":{"package":"immutable","version":"4.3.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"7cd3482d4db46ebec5d4dbfd18743d24db82362d878307f5029de635d7da62b5"},"properties":{"dependency":{"package":"tar-fs","version":"2.1.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"fb1c645eebbed5040226c2b9f8e2dae986c9e15c7004283ed9f95c208b5cd0bf"},"properties":{"dependency":{"package":"webpack-dev-middleware","version":"5.3.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a523aeb79f11c00ed02d752a99a05c405cb4d0de307855bd69db05d4dcb9d8c2"},"properties":{"dependency":{"package":"browserify-sign","version":"4.2.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"f66de808705320575358e1450f3b74c3d51a0ffd67d932004e0a03f253f404ba"},"properties":{"dependency":{"package":"sharp","version":"0.32.1","advisory":"[GHSA redacted]","aliases":["[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"8b46e381e806035914734298033d76081b79932dad608bdef59a582679cb9e0a"},"properties":{"dependency":{"package":"serialize-javascript","version":"6.0.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"4876554862d7d1ecc67f68f400f3e26fad700f801f09abf0e97a3e1cf02fdc07"},"properties":{"dependency":{"package":"flatted","version":"3.2.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"0388f8c36d2fa25a1dc2a4a5c7539872122c90ed82d903db14b7d664ed8db308"},"properties":{"dependency":{"package":"nanoid","version":"3.3.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"362eb9d8677bdc5be50060950aeb753ac91ef812529156225e7a2e3ae32b694d"},"properties":{"dependency":{"package":"svgo","version":"3.2.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"cb60110c471f0f5c229f39ef42d0f0c374aaf2e716493565f06d5f25f49dbb22"},"properties":{"dependency":{"package":"ws","version":"8.16.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"2387ac66bb05da175c33cf0d4159d0983f6f543ccc6479c0ccb4e7c0c9cece29"},"properties":{"dependency":{"package":"cross-spawn","version":"5.1.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"6f3c634e73e7675cf0015e32025a5a0f27fe1aae7b27fbf3b33dc1ee86da5bdd"},"properties":{"dependency":{"package":"cross-spawn","version":"6.0.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"89d11fa2e912bc16603771e0c8d45e631a28e10300db65e7ce992b408cd8115a"},"properties":{"dependency":{"package":"semver-regex","version":"2.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"eba809e2ce31c4fc4ffb296d99e8453270eebfe63207aa69e146d16b73f8df48"},"properties":{"dependency":{"package":"postcss","version":"8.4.21","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"10f62a85dc45338d11dd7d50f4728b8803480071880b52cf0809b5f41b67a49e"},"properties":{"dependency":{"package":"http-proxy-middleware","version":"2.0.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"9ff550165d948ed5446bcaee70f5efdc75ff4c60a8be679e66d31f71064e17be"},"properties":{"dependency":{"package":"http-cache-semantics","version":"3.8.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"81709e6351733773ae4370505ff777c6e8593ab200773f183effd986627a32d0"},"properties":{"dependency":{"package":"immutable","version":"4.3.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"d14874dccfbcf416cf26c8e7cb4e4c5874523557ea2b0db71166d731cf1d1d5a"},"properties":{"dependency":{"package":"webpack-dev-middleware","version":"5.3.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"8ff217144755ba0993ab9558e053ed89a81e5c385b365dc6ec83c408a9c0f1bf"},"properties":{"dependency":{"package":"serialize-javascript","version":"6.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"9fb2b9a3980368ed3156ca6aa595c5276c81353221eadaabb55a56eb6a6151fd"},"properties":{"dependency":{"package":"axios","version":"1.8.4","advisory":"[CVE redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}},"taxa":[{"id":"CWE-770","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","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":"f926785667b92c8ac8574695adbe9a8e64af21f0ab29c3b735eca87ad4a04456"},"properties":{"dependency":{"package":"ajv","version":"6.12.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"2f5811219ec177f3d776e7330c7eb68f221b49b06ab0f167e4d25d849c0f1f88"},"properties":{"dependency":{"package":"ajv","version":"8.12.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"18025d0ca9747dc17afbaef5f7d2589117fa8858bdb65581f75d7eb4759bf937"},"properties":{"dependency":{"package":"react-router","version":"6.28.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"bee5b702c711fe05c7f14577e9a758eedccaddf14b243cf79e2385ed2279d1f8"},"properties":{"dependency":{"package":"bn.js","version":"4.12.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"2408b7c65ed99d8c9bd0a43ade2d78592d03f739e5759b8e1e86e604a299b185"},"properties":{"dependency":{"package":"bn.js","version":"5.2.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"6d106f25128f57919a6ee7d52800e123e85130aea1dfa0036f754af38557b19a"},"properties":{"dependency":{"package":"dompurify","version":"3.2.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"designer/client/src/components/graph/EspNode/stickyNote/stickyNote.ts","line":2}}}},{"ruleId":"D30","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":"e5d351fd2a2456e3f7e1544e252898796da577b4340d0d4a17d9104f1e6cc807"},"properties":{"dependency":{"package":"yaml","version":"1.10.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"0282e62924e54e8c70e0cba704d142a8162076c620aa08e91d4aafb6943e2b2b"},"properties":{"dependency":{"package":"yaml","version":"2.3.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"2c19d39cfd68c412bb77e7c615e3b49e81aea4b9f04ced9e1931f8dc7190617e"},"properties":{"dependency":{"package":"mdast-util-to-hast","version":"13.2.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"5c09b3a0ca3584c61678fc2f85126a5beda8d228580a5bfb6b710c0066c01252"},"properties":{"dependency":{"package":"qs","version":"6.11.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"f5e43932e440f8f533fb77b60e2d2fa146f3b96d41e86b7a4b3db777ff10dda6"},"properties":{"dependency":{"package":"qs","version":"6.14.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"631af42eb35499b4b45e69760e1d9e908589e676e63ab9d675cfaf3dfc6d7753"},"properties":{"dependency":{"package":"webpack-dev-server","version":"4.15.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"test-or-tooling","file":"designer/client/package.json"}}}},{"ruleId":"D30","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":"904ebe80fba2de7ce6fab08578fcf544fd863e548673f5da61d02b4d9c063fde"},"properties":{"dependency":{"package":"webpack","version":"5.88.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"f6cad9d7bb87b794cc9892c26c5acc9dfecdab7112263a79e01d3e6cfec67cf0"},"properties":{"dependency":{"package":"micromatch","version":"3.1.10","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"2d5a16c4edeb47f3b766916cbe4718513b201a1427643756d976de02ac203594"},"properties":{"dependency":{"package":"micromatch","version":"4.0.4","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"5e1771e806f6055db7874e281489e9bd002478bff3f03fa2b129b29f1518a121"},"properties":{"dependency":{"package":"micromatch","version":"4.0.5","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a7c3d59a1ea645525324d6b68a590266393c530a987e1c4696f63eeeee85fd02"},"properties":{"dependency":{"package":"word-wrap","version":"1.2.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"ec1b86e328163b2e8838061858d50933b078844c8548ab3574dda90b3ede5000"},"properties":{"dependency":{"package":"joi","version":"17.4.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"4d081b6a0afbe351cfd519afa3da3b864a688838c4be951b792e8d0c46fd3a88"},"properties":{"dependency":{"package":"i18next-http-backend","version":"3.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"0e7baa25f780f349280f3e715cd401e5214e96dddaa099e26210a9b619cbd4b6"},"properties":{"dependency":{"package":"follow-redirects","version":"1.15.6","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"6c48e908b3fc20150be42df80ec12bce7775b358874c313edfa407135f8cdfc7"},"properties":{"dependency":{"package":"express","version":"4.18.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"designer/client/server.js","line":4}}}},{"ruleId":"D30","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":"fec65fcf9c93a1ab53c443c0681a9b6c21cc3b0d5c1d9eb21477e84919e24e97"},"properties":{"dependency":{"package":"decode-uri-component","version":"0.2.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"9daf8e7da22a1a931e6b19785a8dc3ed485d5f56b262547b6139fd54ea4b5e20"},"properties":{"dependency":{"package":"uuid","version":"8.3.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]"],"reachability":{"kind":"production","file":"designer/client/jest.config.js","line":16}}}},{"ruleId":"D30","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":"32023cf6b7ab7dd0cdaf4cd060a27051ab96cfc90ddaa7d2b20fe370309707ca"},"properties":{"dependency":{"package":"baseline-browser-mapping","version":"2.10.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"a73f2213a261744a9255292bea3491b696e9b090568b51943c3b7f9bab330265"},"properties":{"dependency":{"package":"ajv","version":"8.10.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"f144b61a22408d2c9410539d9ec24611cb4d7fe3893b0bb592f60316d3672129"},"properties":{"dependency":{"package":"ajv","version":"8.11.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"ff264befb3b80c12cc245546226bc17c4986f81bf6c1ef47cdace0987bdc248a"},"properties":{"dependency":{"package":"@babel/helpers","version":"7.23.9","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"d8216c1068fda012c9b1fab9706313cec71133691c80db31641b3514024796fe"},"properties":{"dependency":{"package":"fast-xml-parser","version":"3.21.1","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"aea274cee348453e6cc33a420b4b2eb75e3a6b11a906c53bfa5492a50b8d6f60"},"properties":{"dependency":{"package":"@adobe/css-tools","version":"4.1.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"8187cf1ac846449ba223fbd4802c3a39e65dd4a3a4da3e5b2103a5fac0452a87"},"properties":{"dependency":{"package":"got","version":"7.1.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"3e625cf70400a95ba00a8c1b804356362c5ec4b803a60733dde425b0fd761cad"},"properties":{"dependency":{"package":"got","version":"8.3.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"7cf86afc3909187c7d9d9436e199ae8e628b206fb5d7c3c6b48430fcfbd34176"},"properties":{"dependency":{"package":"uuid","version":"3.4.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D30","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":"85bdcd061267b222624927b77e56e1dc839eb5cfa63bd92bd7242a63db6cbbb3"},"properties":{"dependency":{"package":"@babel/core","version":"7.29.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"test-or-tooling","file":"designer/client/package.json"}}}},{"ruleId":"D30","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":"1c5617af59e815eded252ef9b0904c0946d60a195274d943aff649d27b2a3362"},"properties":{"dependency":{"package":"diff","version":"4.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"1141f26c4234a59ca6abef1707e74eacbb40c37bf256dfcb5daa63b697bd2e39"},"properties":{"dependency":{"package":"on-headers","version":"1.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"f4f737523e20743bd663a3de862af71e9a4b96636ed0b7103bbcd3ca89c56403"},"properties":{"dependency":{"package":"serve-static","version":"1.15.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"222670913f68e6547c741fb155f36e7a20eb7b1cb1c2233b6e6f8b97f1ec9eb4"},"properties":{"dependency":{"package":"send","version":"0.18.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"ea4642a3dda35d4f607e58afbec9e7f88ecaca76b2bb6e005878a9bf664e5213"},"properties":{"dependency":{"package":"cookie","version":"0.5.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"5da9160378cb5955143370383643dd6aaeedf7df2fe332a0fafc14b173bb1035"},"properties":{"dependency":{"package":"@tootallnate/once","version":"2.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"8c9ad5893757548179ef5cfff65e8784bdc2971f8f12903c4ca7b726072d0855"},"properties":{"dependency":{"package":"@babel/core","version":"7.23.9","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"unknown"}}}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6ab646afdd28d0901bf2e09a17094d00f1965ba32185896764c274fa3314a67f"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7af096907ed9a8e2c4bea8822a3afea460ab7e7b30fc247628ea1ad69e84ae26"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9bb92539c5651e9abd12de772226eb1a35d585c0a015d24e4675601d900a28e0"},"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":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"836ddc09c6867ec82c73545987f31f51080e45d2f71d2572fc5f24a0a7cea0b5"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"315481fd589fc82115e3a141e5bf7d23a37ea37a680fe8d41ebfd90fd94d76ab"}},{"ruleId":"D32","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":"b9b409d93b188d51cdd7bab743649e09524c70869c69a5ec1bff2fe0f8e372a7"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned files with no living knowledge: 371 of 1019 analysed file(s) have no living knowledge left \u2014 their last meaningful change has decayed away, so if one breaks, no one currently understands it (counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 1019 of the 2660 production source files in this repository met that bar). None is large enough to earn a read-through of its own, so this row stands in for the per-file rows rather than raising one each \u2014 most significant first: scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/definition/clazz/ClassDefinitionExtractor.scala, scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/spel/internal/propertyAccessors.scala, utils/math-utils/src/main/scala/pl/touk/nussknacker/engine/util/MathUtils.scala, utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/encode/JsonSchemaOutputValidator.scala, scenario-compiler/src/main/java/pl/touk/nussknacker/engine/spel/parser/NuSpelExpressionParser.java, designer/server/src/main/scala/pl/touk/nussknacker/ui/process/newdeployment/DeploymentService.scala, utils/json-utils/src/main/scala/pl/touk/nussknacker/engine/json/swagger/SwaggerTyped.scala, scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/nodecompilation/BuiltInNodeCompiler.scala (and 363 more). Attach the read to the next change that touches one of them: have a second person review that change, and leave behind a short comment or test recording what the file is for, so the knowledge comes back at the cost of a change you were making anyway."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: Interpreter.scala \u2194 LoggingListener.scala: \u0060scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala\u0060 (context scenario-compiler) and \u0060utils/utils-internal/src/main/scala/pl/touk/nussknacker/engine/util/LoggingListener.scala\u0060 (context utils) sit in DIFFERENT parts of the tree yet change together 80% of the time (12 of the 15 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 12 shared commits counted here, the most recent 3 are \u0060e1802a98\u0060 Fix live data counts in node directly after fragment (#8782); \u00600cd2a509\u0060 Cleanup: remove deprecations (#3610) (at that commit the file was still \u0060interpreter/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala\u0060); \u006041ed5f89\u0060 Fix missing metrics for end nodes (#3040) (at that commit the file was still \u0060interpreter/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cef639a13912048bf6d7660cf9c7e7359b2572c6f0a47da176d091bd6b8bc40f"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: nodeDetails.ts \u2194 nodeDetailsState.ts: \u0060designer/client/src/actions/nk/nodeDetails.ts\u0060 and \u0060designer/client/src/reducers/nodeDetailsState.ts\u0060 change together 90% of the time (9 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 9 shared commits counted here, the most recent 3 are \u00607f6b0513\u0060 [NU-2440] switch mocks mechanism to test cases (#8891); \u0060dc19e87d\u0060 NU-2160-show-loader-during-dynamic-parameters-loading (#8059); \u00603909867e\u0060 cleanup unnecessary errors in console (#5511) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/nodeDetails.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b4b91bb1cb586e2d7203e854a43691bd28531fab57a548552bd56ee3921c000"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: TableSource.scala \u2194 RowConversions.scala: \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/source/TableSource.scala\u0060 and \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/typing/RowConversions.scala\u0060 change together 60% of the time (6 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060aebee4e5\u0060 Table types alignment (#6546) (at that commit the files were still \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/source/TableSource.scala\u0060 and \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/utils/RowConversions.scala\u0060); \u00603c5861ac\u0060 [NU-1766] TypedObjectTypingResult.fields are backed by ListMap for co\u2026 (at that commit the files were still \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/source/TableSource.scala\u0060 and \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/utils/RowConversions.scala\u0060); \u00600582b2c6\u0060 TableAggregation: using stream of rows with specified typeinformation\u2026 (at that commit the files were still \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/source/TableSource.scala\u0060 and \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/utils/RowConversions.scala\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/source/TableSource.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a84dc1e29029a6320996bce8f495ff75ecb429083fcaf5355f183d444001081"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: process.ts \u2194 reducer.ts: \u0060designer/client/src/actions/nk/process.ts\u0060 and \u0060designer/client/src/reducers/graph/reducer.ts\u0060 change together 58% of the time (7 of the 12 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 7 shared commits counted here, the most recent 3 are \u00605fad387f\u0060 [NU-2483] fix scenario validation error for imported scenario (#9132); \u0060525063fa\u0060 Bulk fe (live data) bugfixes (#8312); \u00604960c6a6\u0060 Live data bugfixes (#8291) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/process.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0510dbf4506c3a9c0ccbf8c2fd44040adc6043d0ddf2bc8ea2555a1ccd32674c"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: TableSink.scala \u2194 RowConversions.scala: \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/sink/TableSink.scala\u0060 and \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/typing/RowConversions.scala\u0060 change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u0060aebee4e5\u0060 Table types alignment (#6546) (at that commit the files were still \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/sink/TableSink.scala\u0060 and \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/utils/RowConversions.scala\u0060); \u00600582b2c6\u0060 TableAggregation: using stream of rows with specified typeinformation\u2026 (at that commit the files were still \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/sink/TableSink.scala\u0060 and \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/utils/RowConversions.scala\u0060); \u00601882a946\u0060 [NU-1728] Move table components to public distribution (#6294) (at that commit the files were still \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/sink/TableSink.scala\u0060 and \u0060engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/utils/RowConversions.scala\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"engine/flink/components/table/src/main/scala/pl/touk/nussknacker/engine/flink/table/io/sink/TableSink.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0fee3d1286db4711e499ff8f019e5a3963e028a1660dcc5dd64cd1b75cdca41"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: actionTypes.ts \u2194 node.ts: \u0060designer/client/src/actions/actionTypes.ts\u0060 and \u0060designer/client/src/actions/nk/node.ts\u0060 change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u006000cdd3d3\u0060 fixed search focus and keyboard/clipboard events (#7207); \u00609c655ca8\u0060 [NU-1145] fragment outputs (#4933); \u0060c57979f9\u0060 fixed fragment node id prefix (#3232) (at that commit the files were still \u0060ui/client/actions/actionTypes.ts\u0060 and \u0060ui/client/actions/nk/node.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/actionTypes.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e84db3161acb593e274d21d83ba1f19a6e0a02ba13566cd95b9ede9a6af65329"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","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":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","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":"d068c977b62d9a977df1bb6f53e8b00b586c3abee955f91d715f92b8e019d624"}},{"ruleId":"AC1","level":"error","message":{"text":"\u003Cimg\u003E without a text alternative: An image with no alt (and no aria-label/aria-labelledby) is unreadable to assistive tech. Add alt \u2014 alt=\u0022\u0022 if it\u0027s purely decorative."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/markups/bounding.html"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e73e23d7f554900536eefb16acaa4205d9833aa6b21ce657135b8915454ea8"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/common/DropdownButton.tsx"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c156bd9a7b8ed56a942bcab8b5b35b7747b53ffaac074b49292f67a51968e21"}},{"ruleId":"AC2","level":"error","message":{"text":"Custom control with no accessible name on \u003Cdiv\u003E: This \u003Cdiv\u003E carries a click handler, which makes it a control, but it has no text, aria-label or labelled child (the icon-only case), so assistive tech has no name to announce for it. Note that switching it to \u003Cbutton type=\u0022button\u0022\u003E \u2014 the right fix for its keyboard operability \u2014 does not give it a name either: an icon-only button still needs one. Add visible text or an aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/common/DropdownButton.tsx"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"93843554d7d4ff8702362cb5a34101f8cc0371a985b0a344c09f8ddcbf6cfeab"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionBuilder.tsx"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"45e1dda47e8fa44309f36987e115dff51b656c744d0dec778a9ba59b01aa8332"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name, and nothing it renders carries one either. The text inside it does not stand in for one: these compound APIs render a trigger with role=\u0022combobox\u0022 (or role=\u0022button\u0022), and those roles take their name from the AUTHOR, not from their content \u2014 so the words on screen never reach the accessibility tree as a name. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionBuilder.tsx"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f127d1cec647ca1929ebc7826b2784d65d0f58d2e073c5bd262e1e1f8c2e52c"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name, and nothing it renders carries one either. The text inside it does not stand in for one: these compound APIs render a trigger with role=\u0022combobox\u0022 (or role=\u0022button\u0022), and those roles take their name from the AUTHOR, not from their content \u2014 so the words on screen never reach the accessibility tree as a name. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionRow.tsx"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"5df47c3c27437a12f1fbd51363eba28b2ff150d0293396f02df64fafdc8d9063"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionRow.tsx"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e2a858de29f86521ccb1f228d2d2cc6b52dd41c8955379646b50fb8254994d4"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/DataMapper.tsx"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d13eced5e2b506a7e6dc467d93080d5ba8648bde022f6333e4b80934730cfd"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/FieldRow.tsx"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f0118e80f7af25e658d167680af5bd1369b9504141521faffaca96221401400"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CSelect\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name, and nothing it renders carries one either. The text inside it does not stand in for one: these compound APIs render a trigger with role=\u0022combobox\u0022 (or role=\u0022button\u0022), and those roles take their name from the AUTHOR, not from their content \u2014 so the words on screen never reach the accessibility tree as a name. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/FieldRow.tsx"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae3a7d4bc40158bdd2f24be203b43c404b258d454998f8ce2074ae63b6c409c8"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/FieldRow.tsx"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf9a1e821edbf013ee4a42d52ffb3326512a7ccd4457099f08ba1478049354de"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/SampleJsonPanel.tsx"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fcd27386d4e6e69b74e810d607fa93ab5b9bdd33963358d04a1e9646835eb7a"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CAutocomplete\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/DictParameterEditor/DictParameterEditor.tsx"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"f63e9f7a0cde31c9598edb1c821dabcdfa87d1e68126a9062ff6967ff0a7f1de"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel htmlFor\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Duration/TimeRangeComponent.tsx"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdc4aedb35256a6c3fe7af84b2db0f108ca861a30bedbbde67336121f5799b9b"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CRadioGroup\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/FixedValuesRadioEditor.tsx"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6ed130c78ff262f7c7dda87b0bdc7606a6d28b24f5398e75c5a02f4849e66f6"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CAutocomplete\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/MultiSelectFixedValuesEditor.tsx"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ee86423a5337e4ee3e22740d6962faee507d4da3c5e342b8a79df2440141d0f"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextarea\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/TextareaEditor.tsx"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"64fb1e55b4b23f0c4ea8eaab859f2b2bcae9101b16cdddb2a1d8d284017e2431"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextArea\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/field/Textarea.tsx"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"df274243e0c39f3d11fc59b49225bb100a7d11ac9312092fb6b760e83d29ff9f"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CRadioGroup\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/fields/FixedValuesGroup.tsx"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"e83003657e8f137d7b394a51b184c57d28db288d9d65b028037bc588b02bb731"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/AppendFromLiveDataButton.tsx"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"966deb09b8c25f72b2cda5a5bcbd681bc23e2954bb4627765d1d1e54e85d9f46"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/PasteRecordsDialog.tsx"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a059becf228a6af4bb118a8ccfdeffcac6a466f875eabb2c179f51d637ac234"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CAutocomplete\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/sidePanels/SearchLabeledAutocomplete.tsx"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8e66a21e751fdb1b2cfe7d768d0ce13aef3ec2158555079ad32897569959a55"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel htmlFor\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/sidePanels/SearchLabeledInput.tsx"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"d95d002aaf7038858bc3f8b81a2c282273f236e53838c27258c2a72ef3ca7a4b"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component is named only by a placeholder \u2014 a placeholder is not a label (it vanishes as soon as the user types, and many assistive technologies ignore it). Give it a real name whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/spelExpressionBuilder/SpelExpressionBuilder.tsx"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"bae68a1419a73a9926ba002f979593b4b7db5bcb1e3adff61ac2e1207d85421c"}},{"ruleId":"AC2","level":"error","message":{"text":"Custom control with no accessible name on \u003Cdiv\u003E: This \u003Cdiv\u003E carries a click handler, which makes it a control, but it has no text, aria-label or labelled child (the icon-only case), so assistive tech has no name to announce for it. Note that switching it to \u003Cbutton type=\u0022button\u0022\u003E \u2014 the right fix for its keyboard operability \u2014 does not give it a name either: an icon-only button still needs one. Add visible text or an aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/themed/InputWithIcon.tsx"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"082bc9854bb86587912a6e4389f9e65e212e2c66076f1874dea5562f209042a7"}},{"ruleId":"AC2","level":"warning","message":{"text":"\u003CTextField\u003E field component without a label: This UI-library field component has no label / aria-label / aria-labelledby / id / name \u2014 and neither does anything it renders \u2014 so it likely renders an unlabelled control. Name it whichever way this library supports: a label prop, an aria-label, or an id on the rendered control with a \u003Clabel htmlFor\u003E pointing at it. For a group of controls, name the group itself (aria-label, or a fieldset with a legend) \u2014 labelling each item leaves the set unnamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/settings/SearchField.tsx"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"babc7d4ad2b58861c201a94c7fd831c4da81d63100f55381b5cf915f2eb59695"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/index.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"a57fb4d340542098cfe6b56c4f1a5cd3707d340f46639d90303cf83cb07632c3"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/WrapAllMethods.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"db39170200aa1704ef8753264f2a1d1511ff1a727a186ff0f2f1e80c7bf0953f"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/WrapAllMethods.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"29952eecbe034f4b657a01d29ad8b3f352c438f28990f15a0167ed5bb742a6bc"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/index.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d2db38b28119585e0c5a13d835ac000cd2891b27cdfb16e03935eb00339a59"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/abortControllersStack.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c9989a88bd024dc47fc5365eb3c709ed02054761dbc2608bd0644d3a2049f2e"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/abortControllersStack.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"339ed657cb8b2ddfcf858a20bf0ce485da243a624bc0981989676f48fd9db652"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/calculateProcessAfterChange.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ecd1c8527112b5513cf54fe2205d5ee5a7cdcf10093973d647d2a9b6fcaa618"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/calculateProcessAfterChange.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea906ced2c334bac6b6a6d56d21c0035880aa15772e4e9ab6fdb841016949ad"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/checkPendingChanges.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"200470cacc05f56d99ff825b82795549161b72253904930dd99dec57e0a4b5f2"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/checkPendingChanges.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eeab4b036c481d5a42187bbf78b874125f0b7ac529a564263989b3e84764224"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/displayProcessCounts.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dce31f680cffade060af153e24f37b4a11f8404f122e04a94abf21648ee6aad"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/displayProcessCounts.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"22165f607805948c2a4626675531c353c1804274f799d137a7269735bfa5aa9d"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/editProperties.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"c911158401879709f880e7ec6ce2fa530692d97ac3200a4fb89f7f0c466da0fd"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/editProperties.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"af33d59b7aff4e494ced06d75edfd0d32d87c29a0b9800f96e38b572e8b6fd44"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/index.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"9efe52668e2591ec587eef80ea9b3098e30a1fd7b9e25f6ee6b519bfc7678ef6"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/liveData.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"a556c30bd13e2600667a6c41cc84f0dcf350bafbf32226eb4a28fa5014b341a9"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/liveData.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"702747fc14936b762e504bef7f06fcf718a57a07c93fe411ba5ddc4105c9b18f"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/node.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"bae7f728d9b78e6456dc03240038b22324d57220f9aebf844afa29aa7a49cfa3"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/node.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"c67150088aec43ec4a475cedb084b63cf1e41c5da8db48f42b30a288f2af01b3"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/preApplyValidation.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd3a4fd1c753c1963cf3732cbf011ec9ae7ddf7d83e7868ab398fbf7e7a0f5dd"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/preApplyValidation.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4e99c1d5fee1d655924e5fef1873e99eddff7100110b70b66a2dea11323b513"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/process.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"190c6a710ad13f77e76f3b00bec2c75f2df45618182986b3cc0abbca8c92c376"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/process.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb6e36c1141ccee11369c34d03b179b9a3256c18ee47c6af7b8715f3abe30eb1"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/processDefinitionData.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"420c0bb6299b9c82719d3b621523e178ddd25531b21345c256a254687dc27bc0"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/processDefinitionData.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"7194139c3bb8be79a4de0985a42a3b13fae74f870b2c9454fd3083426869873d"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/scenarioActivities.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbf97b0d5eb67abffc23f0dee75f03b1b99d276fc52bedf72ac8a58663588f9c"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/scenarioActivities.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"44236193437f87d7aaf7667cbee8207814b34730c44946da4bbe8673b728df43"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/testCasesActions.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b61cb813263c69d78f73975625e8b42e218dcc2546783bb468a40b4f2bd50b3"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/testCasesActions.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"0400d24ff5f62f0a88d74734bc653195c6be521b7f5cd13835ed76fec2a42b0d"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/testingActions.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f418e2d061873314e07cd91caf21fe59c2c112f054eb295397e9a164a650e1b"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/testingActions.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"32d6a54afb63aeccfd352807703858479c8fda877523fec527754978923f4ac6"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/ui/index.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d2f9f53b45fdd5eda410f57e716224f72bb8c3e8048639a7ed16180dcea1102"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/ui/layout.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9b4e5ebe7014032a43fc628eb1753480d3ce6cf35f61a867ab7a8a3dd78d916"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/ui/layout.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"277d8d1662a17f434fdbd034f70591b7375f8482284c6106eb90caf76bf5facb"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/ui/panelSide.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccb330329dc3c45afc0bfe26320d5f17e0ee1a3ca8f6224292084ba9ebb937b8"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/ui/panelSide.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"e60b9e458c448684ca7e8c1eb33ed2a919c82152fe402a94b7c40f9ab6e885ce"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/userSettings.ts.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24ef25ea588a6b2eacaaba624e1ed218ab6f897635bb8434e9930107b286115"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/nk/userSettings.ts.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"47cc42cce9faecbacf24f6deef73f007f6a67a5d854196cb89d845a031db6e54"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/notificationActions.tsx.html"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"31b2af427d7c4177638f55875f5af24411f533075c9796f58d46670ab1573cb7"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/jest-coverage/lcov-report/src/actions/notificationActions.tsx.html"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"cff0d3763a7a59da76e484c26ac3e3acad93a483058f8f2a9421069df6fde8ea"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/common/DropdownButton.tsx"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"595357a4063e14387ef1f2f3e57f6e9caa50ab5a372ca265c6fab6ea08c49573"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/themed/InputWithIcon.tsx"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee6fb6f365ff18d859f8ee9c5cde0f63c5eb2370ec564463954cb5e150eea177"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/creator/Tool.tsx"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"6abc58c0b341cf2d85511afff917e51e3f8c06390128eb275a84e165447293de"}},{"ruleId":"AC7","level":"warning","message":{"text":"Accessibility enforcement below the top rung: No accessibility enforcement found \u2014 no a11y linter (eslint-plugin-jsx-a11y) and no axe/pa11y/Lighthouse in tests or CI. Start with the linter to catch issues at author time. What was searched, so you can tell an absence from a miss: the 1005 markup file(s) this pass actually assessed, the linter configuration checked in beside them, and this repository\u0027s test and CI files \u2014 matched by name against the accessibility checkers this dimension carries. An audit run outside the repository, a hosted scanner, or a check whose name is not one of those, is not seen here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d46019b86eff5ddad9db289e6802ac158899e980df54c34f67722442787ead62"}},{"ruleId":"M1","level":"warning","message":{"text":"README may be stale: 325 code files changed in the last 6 months but the README was not touched \u2014 it may no longer reflect the system."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e973e7a8d5d866995cbf78b120250fe7f132bf928812d48ca62e69aba11b9910"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"P2","level":"note","message":{"text":"Logging is not universal: Only 2/3 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060designer/client\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"P7","level":"warning","message":{"text":"Outbound HTTP without resilience: \u0060axios.create(\u0060 makes an outbound HTTP call, and nothing bounds it: no timeout, deadline, retry or circuit breaker is set for it here, and the client has no process-wide default. A slow or failing dependency will hold this service\u0027s request, thread or connection until the call gives up on its own \u2014 or never, for a client with no default timeout."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/api.ts"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"07023a737ef9822df600441209f716fd9bd363007011bc98f33e07ca5f4c3762"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 7 sibling directories (19 clone groups): 19 duplicated blocks under designer/client/src/components/ have copies in at least two of the sibling directories conditionBuilder, dataMapper, graph, modals, spelExpressionBuilder, tips (\u002B1 more sibling(s) not listed) \u2014 16 of them are reported below, and 3 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 19 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 19 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 19 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionBuilder.tsx"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"41c88dac79d94688a24b5eb3fb5331d8c80911b10a4905f72344cc8b8ba89889"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 6 sibling directories (13 clone groups): 13 duplicated blocks under designer/client/src/components/toolbars/ have copies in at least two of the sibling directories creator, edit, process, scenarioActions, search, view \u2014 3 of them are reported below, and 10 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 13 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 13 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 13 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/process/buttons/SaveButton.tsx"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"56db3dc415d394586fb0353204aa02963e44f037625e9645a8e5d44c4deba596"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 3 sibling directories (10 clone groups): 10 duplicated blocks under designer/submodules/packages/components/src/ have copies in at least two of the sibling directories common, components, scenarios \u2014 8 of them are reported below, and 2 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 10 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 10 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 10 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/components/usages/usagesTable.tsx"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"1df255199a0d00588caa032a4174096e2fc4f9d8db39edfdbb3f6ff42b3d02d1"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 2 sibling directories (7 clone groups): 7 duplicated blocks under designer/ have copies in at least two of the sibling directories client, submodules \u2014 6 of them are reported below, and 1 is counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 7 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 7 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 7 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/configs/simpleScriptPlugin.ts"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"68b6a4115adf31be60412f2d93d176eecfd46b9a514e7ab5fa90304366c1b0a8"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 5 sibling directories (6 clone groups): 6 duplicated blocks under designer/client/src/components/graph/node-modal/ have copies in at least two of the sibling directories aggregate, editors, fragment-input-definition, node, node-action-buttons \u2014 2 of them are reported below, and 4 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 6 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 6 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 6 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/FixedValuesEditor_ReactSelectCreatableVariant.tsx"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"206967dd6cd00910f7cf30595ea5664e6883fde3e5c2d843b116661c069f32de"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (111 matched lines \u00D7 2 locations): designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts:113 \u00B7 designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts:142 \u2014 the two spans are one implementation copied and then locally edited \u2014 543 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"de00007e3b2cf057ca03dcb0441bbd34d0fd4abfbc9c92d4c116aa6c256f8c2e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (109 lines \u00D7 2 locations): designer/client/src/components/toolbars/scenarioActions/buttons/DeployButton.tsx:83 \u00B7 designer/client/src/components/toolbars/scenarioActions/buttons/RedeployButton.tsx:81 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioActions/buttons/DeployButton.tsx"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"96dce40451daefe3e6b3b1877a03ab86be3d9d45cb964f8dcb33664473882271"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (105 matched lines \u00D7 2 locations): designer/client/src/components/conditionBuilder/ConditionBuilder.tsx:164 \u00B7 designer/client/src/components/spelExpressionBuilder/SpelExpressionBuilder.tsx:151 \u2014 the two spans are one implementation copied and then locally edited \u2014 632 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionBuilder.tsx"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"725f605787aff1d0c3a0b62352162b6e724eb98ea94878dbb096a2d9e2d1a79d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (75 matched lines \u00D7 2 locations): designer/submodules/packages/components/src/components/usages/usagesTable.tsx:34 \u00B7 designer/submodules/packages/components/src/scenarios/list/tablePart.tsx:23 \u2014 the two spans are one implementation copied and then locally edited \u2014 555 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/components/usages/usagesTable.tsx"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe9f77fafe93e8a8bfbbc46b78e1f3905334e09af4f18ddd917326ef736c4125"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (50 matched lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/editors/expression/Duration/DurationEditor.tsx:32 \u00B7 designer/client/src/components/graph/node-modal/editors/expression/Duration/PeriodEditor.tsx:28 \u2014 the two spans are one implementation copied and then locally edited \u2014 320 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Duration/DurationEditor.tsx"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbd0a4644ece7df79f0ca99a2b893fd2efa51fa6a0c9060a01f346eb6de6b007"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (50 lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/StringBooleanVariants/AnyValueWithSuggestionVariant.tsx:16 \u00B7 designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/StringBooleanVariants/FixedListVariant.tsx:15 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/StringBooleanVariants/AnyValueWithSuggestionVariant.tsx"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"546e33aeb4140c4ae784cd9d94f8b55a0846e5df088766fd158e24255395253a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (49 lines \u00D7 2 locations): designer/client/configs/simpleScriptPlugin.ts:8 \u00B7 designer/submodules/configs/webpack/simpleScriptPlugin.ts:8 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/configs/simpleScriptPlugin.ts"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a405ca4d2ed8cd6fad7aa51ff4097595b3eac8821ade88f457ae35cc0485166"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (48 lines \u00D7 2 locations): designer/client/src/components/graph/EspNode/stickyNote/advancedStickyNoteConfig.ts:63 \u00B7 designer/client/src/components/graph/EspNode/stickyNote/basicStickyNoteConfig.ts:63 \u2014 the 2 copies are spread across 2 files, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/EspNode/stickyNote/advancedStickyNoteConfig.ts"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a72f6abaf2ccd211436b2d101ce456f210997026159d0bca44c79457b4e26ff"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (47 lines \u00D7 2 locations): designer/client/src/http/HttpService/HttpService.ts:263 \u00B7 designer/client/src/http/HttpService/HttpService.ts:311 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/http/HttpService/HttpService.ts"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"12f4f06a4524cc4797fc196ced9f7d887a1a4d2e257de334413b98f1a9aecbbf"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (46 lines \u00D7 2 locations): designer/client/src/components/toolbars/scenarioActions/buttons/DeployButton.tsx:25 \u00B7 designer/client/src/components/toolbars/scenarioActions/buttons/RedeployButton.tsx:25 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioActions/buttons/DeployButton.tsx"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe184e8b3f151d284764c7045aec08375a0a70423d251983a4b3aaf48447301e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (41 lines \u00D7 2 locations): designer/client/src/components/notifications/copyTooltip.tsx:15 \u00B7 designer/submodules/packages/components/src/scenarios/list/copyTooltip.tsx:31 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/notifications/copyTooltip.tsx"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"699125632acc702852a8d15bf5ac3843ed7e67008f0ce654d27bd1668c551be2"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (38 matched lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/StringBooleanVariants/AnyValueVariant.tsx:14 \u00B7 designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/StringBooleanVariants/AnyValueWithSuggestionVariant.tsx:16 \u2014 the two spans are one implementation copied and then locally edited \u2014 226 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/StringBooleanVariants/AnyValueVariant.tsx"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"a61a86dcc14987342124930d8f1da4b78daa22932fa2dc30699b409e5beb4621"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (37 lines \u00D7 2 locations): designer/client/src/http/HttpService/HttpService.ts:927 \u00B7 designer/client/src/http/HttpService/HttpService.ts:1075 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/http/HttpService/HttpService.ts"},"region":{"startLine":927}}}],"partialFingerprints":{"codehealthFindingId/v1":"68685a60383360c1ca2f2225556defbf1d05da831e360cfce113ddb168b89744"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2 locations): designer/client/src/components/graph/EspNode/stickyNote/advancedStickyNoteConfig.ts:159 \u00B7 designer/client/src/components/graph/EspNode/stickyNote/basicStickyNoteConfig.ts:149 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/EspNode/stickyNote/advancedStickyNoteConfig.ts"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c021b047b2f21ba169ef8f3ca65b9819deb19a8065ee53e2415bb373380e74d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/DescriptionField.tsx:10 \u00B7 designer/client/src/components/graph/node-modal/DisableField.tsx:9 \u2014 the 2 copies are spread across 2 files, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/DescriptionField.tsx"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"c00ac54fa60d29c4eed64951ed1252c5c086b0cce001ff97af3b717f0f1a83e9"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2 locations): designer/client/src/components/modals/DeployProcessDialog.tsx:46 \u00B7 designer/client/src/components/modals/DeployWithParameters/DeployWithParametersDialog.tsx:48 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/DeployProcessDialog.tsx"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"c47a592775b16a691890f40378d757d0f4f88d59b322cec210a16e9b73a03ef8"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/DefaultVariant.tsx:35 \u00B7 designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/StringBooleanVariants/AnyValueVariant.tsx:27 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/fragment-input-definition/settings/variants/DefaultVariant.tsx"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ba5ed3ad593000be688c6653e23c25d47044b9807041953e1cc722d4f0729bf"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/editors/expression/DateTimeEditor/DateTimeEditor.tsx:16 \u00B7 designer/client/src/components/graph/node-modal/editors/expression/DateTimeEditor/TimeEditor.tsx:14 \u2014 the 2 copies are spread across 2 files, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/DateTimeEditor/DateTimeEditor.tsx"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ef8cca57ae25c68cb03370eaffcb5e31fc6dc60ac24dc41eed81d2925a85be0"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2 locations): designer/client/src/components/modals/AddCommentDialog.tsx:28 \u00B7 designer/client/src/components/modals/saveScenario/SaveScenarioDialog.tsx:22 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/AddCommentDialog.tsx"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc749ddb1bd344e566ee3c1ae2b4d66fe41bae7f7ab1c9b6822d7817198d1018"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 3 locations): designer/client/src/components/graph/node-modal/NodeTypeDetailsContent.tsx:60 \u00B7 designer/client/src/components/graph/node-modal/NodeTypeDetailsContent.tsx:126 \u00B7 designer/client/src/components/graph/node-modal/NodeTypeDetailsContent.tsx:150 \u2014 all 3 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/NodeTypeDetailsContent.tsx"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"55633fdd05900d511d02942e686f9405ec652d1d35d4e9882a889477276d32a3"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2 locations): designer/client/src/components/conditionBuilder/ConditionRow.tsx:86 \u00B7 designer/client/src/components/conditionBuilder/ConditionRow.tsx:136 \u2014 all 2 copies are in the same file, and the SHAPE of this repetition could not be determined. It is not a run of declarations, a listing, a declaration header, a type body or a slice through a construct \u2014 and it was not measured as a run of executable statements either, so this row cannot tell you whether a function can stand where these lines are. Read the two spans before acting, because the move is opposite in the two cases. Where they are statements, the ordinary answer holds: give the shared part one home and call it from each site. Where they turn out to be declarations, a literal\u0027s entries, or the cases of an enumeration, there is no call site to call anything from, and collapsing them would delete what each copy pins \u2014 a shared base type, a generated set, or one exported constant each site refers to is the move instead, and sometimes the honest answer is that there is nothing to extract at all. Reported because the copies drift apart the first time only one of them is edited, which is true whichever of those they are."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionRow.tsx"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24b94a2b432515c895d578ba6ecb9db5af09a641d3bfb80af90f06777732bc1"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/FragmentOutputDefinition.tsx:25 \u00B7 designer/client/src/components/graph/node-modal/MapVariable.tsx:30 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/FragmentOutputDefinition.tsx"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"f248b7355f96a884363716ca07511aac1b53426ece9a1cb1303c93a6de286fd6"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2 locations): designer/client/src/components/modals/GenerateDataAndTestDialog.tsx:38 \u00B7 designer/client/src/components/modals/GenerateTestDataDialog.tsx:41 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/GenerateDataAndTestDialog.tsx"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"937d7cd9f868852ae59da9bfc3bbbde6d8be2118c5295832da31e95910b0bf7a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2 locations): designer/client/src/components/dataMapper/dataMapperUtils.ts:339 \u00B7 designer/client/src/components/graph/node-modal/ParametersUtils.ts:30 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/dataMapperUtils.ts"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"c54db96fad59d637a52fe37d6a9c78fe82f8c4864243a70fdc83409bf3ef7852"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/editors/expression/FixedValuesEditor_ReactSelectCreatableVariant.tsx:62 \u00B7 designer/client/src/components/graph/node-modal/fragment-input-definition/TypeSelect.tsx:107 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/FixedValuesEditor_ReactSelectCreatableVariant.tsx"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"80493385c4cf0dff1ff19c6275d3e0c70f1e9de8c923c7013732ac6b29b42a7c"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (22 matched lines \u00D7 2 locations): designer/submodules/packages/components/src/scenarios/filters/filterRules.tsx:6 \u00B7 designer/submodules/packages/components/src/scenarios/list/tablePart.tsx:123 \u2014 the two spans are one implementation copied and then locally edited \u2014 216 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/scenarios/filters/filterRules.tsx"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"4be368ac8004f45e055c23655d7ff94af9fcb6d48b8c8df9c40b53c4e56d0199"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2 locations): designer/client/src/components/graph/node-modal/editors/expression/Table/CellMenu.tsx:45 \u00B7 designer/client/src/components/graph/node-modal/editors/expression/Table/CellMenu.tsx:91 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Table/CellMenu.tsx"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e45610c47abc8f8754eef8ef079a4e30cad2a2053cc597b3a4ae24faf95d036"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2 locations): designer/client/src/common/copyToClipboard/useCopyToClipboard.ts:5 \u00B7 designer/submodules/packages/components/src/scenarios/list/copyTooltip.tsx:7 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/copyToClipboard/useCopyToClipboard.ts"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"854c7bcc793b727f39dc159971ecd3d97f76e87c54169acc3c26a5420d99bad0"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2 locations): designer/client/configs/withModuleFederationPlugins.ts:64 \u00B7 designer/submodules/configs/webpack/withModuleFederationPlugins.ts:119 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/configs/withModuleFederationPlugins.ts"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"4130caf20607ff8eb07fc5186f300cebcd2032fbe0a54675453f0a94cec98d53"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 3 locations): designer/client/src/components/toolbars/scenarioActions/buttons/CancelDeployButton.tsx:78 \u00B7 designer/client/src/components/toolbars/scenarioActions/buttons/DeployButton.tsx:146 \u00B7 designer/client/src/components/toolbars/scenarioActions/buttons/RedeployButton.tsx:144 \u2014 the 3 copies are spread across 3 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioActions/buttons/CancelDeployButton.tsx"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"74dd77dd4acd1690be1a499b1f3de22af49a38156fe9b24bc81f04bef6d5136f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2 locations): designer/client/src/components/conditionBuilder/ConditionBuilder.tsx:65 \u00B7 designer/client/src/components/dataMapper/useDataMapper.ts:292 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/ConditionBuilder.tsx"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"51906a097ff869c4186658fcf4063dbbcf01ec0a68278ac53f364b7640c0e30f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2 locations): designer/client/src/components/dataMapper/dataMapperUtils.ts:215 \u00B7 designer/client/src/components/dataMapper/dataMapperUtils.ts:239 \u2014 all 2 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/dataMapperUtils.ts"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"888397e624e2a176d9fa250d01cfdaec080fa40c4705a8329da85afbd50384a8"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2 locations): designer/submodules/packages/components/src/components/usages/usagesTable.tsx:206 \u00B7 designer/submodules/packages/components/src/scenarios/list/tablePart.tsx:159 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/components/usages/usagesTable.tsx"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"d76b3011259b0716f13a5d0b761ceed1868fc6120a4350a1b4cf46ac64471fe6"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2 locations): designer/client/src/components/graph/EspNode/stickyNote/advancedStickyNoteConfig.ts:99 \u00B7 designer/client/src/components/graph/EspNode/stickyNote/basicStickyNoteConfig.ts:99 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/EspNode/stickyNote/advancedStickyNoteConfig.ts"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"e45e0d97594b6b130f33fad46a9dd32150b05e357f131cf65cd25ce28351db86"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4 locations): designer/client/src/components/graph/node-modal/DescriptionField.tsx:23 \u00B7 designer/client/src/components/graph/node-modal/DisableField.tsx:22 \u00B7 designer/client/src/components/graph/node-modal/sink.tsx:21 \u00B7 designer/client/src/components/graph/node-modal/source.tsx:20 \u2014 the 4 copies are spread across 4 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/DescriptionField.tsx"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a32596465f7ad6302cad6e909eed6186573cca82889e4e48ec3d466e95ec413"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/configs/withModuleFederationPlugins.ts:9 imports webpack/lib/util/extractUrlAndGlobal, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/configs/withModuleFederationPlugins.ts"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7856ed6a710fe5fdd92c477a767ede4a50baf8495db65023463d212a68d0ba8"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/common/error-boundary/fallbackComponent/DialogErrorFallbackComponent.tsx:10 imports designer/client/src/components/toolbars/test/buttons/ButtonProgress.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/common/error-boundary/fallbackComponent/DialogErrorFallbackComponent.tsx"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"211e6be8dfe27b079c67507767ad9e2fdf9e6bb00b960ced1a465ccad428463d"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/common/error-boundary/fallbackComponent/DialogErrorFallbackComponent.tsx:11 imports designer/client/src/components/toolbars/test/buttons/useProgress.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/common/error-boundary/fallbackComponent/DialogErrorFallbackComponent.tsx"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2de7e64c4c09287a93c20a0b69232d55d43875fea1764fdb8a08d86e27eb24c"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/graph/node-modal/editors/expression/ExpressionField.tsx:10 imports designer/client/src/components/graph/node-modal/tests/ExpressionTestResults.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/ExpressionField.tsx"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"60e06acf7c285ca4b160fd392b995e402eaedba56d66ad65907acb04c829b6a1"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts:1 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../../invariant, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f7f10705e20342b86f44ed4c0876c791373655726a7d9dd31bcad58a3dd4a06"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts:8 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../event-bindings/bind-events, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"11d2516abf7a81f1e2472c40787227762a9ae9e6152315f691edd02e99030436"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts:15 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../key-codes, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eda2fa05076cb8f4aa88f6a6eaa39dccc41cde50efe2d1f185f81f35b6f75b8"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts:16 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../use-isomorphic-layout-effect, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb251472b16342c193f20e667aa614e4d1c96b0ab79cb368abbcbae0cc2ea188"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts:17 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/util/prevent-standard-key-events, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"65140f2cbfb8f73ab6a65e70b6f530a775978e400604bf798b895ae360182e08"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts:18 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-keyboard-sensor.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"4959581709379456cd62554c6e51c05c6d654f209ca2224240cab58e12f6fec8"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts:1 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../../empty, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03d2bb497b652a7da82b0368979d9406fe3d9a2f775fca2ef335b322b6f6eae4"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts:2 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../../invariant, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6512e76c76107241d29e5fb2f537243741c0e516eea0a50b6c358704b651d11"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts:10 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../event-bindings/bind-events, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"9400ceea9e448b049044f24e1e408b14c351ebd26a4d2f734a39e4704f058587"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts:18 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../key-codes, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"1326e0fcd75b6f7f5aa710c4ab19b3e54ae25b9cdbfc728c485752248b1d27a1"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts:19 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../use-isomorphic-layout-effect, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d58593e6f7933e5f73e24b629c23d1748741c48f183656a2de5c6b96ebf9c92"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts:20 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/util/prevent-standard-key-events, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fc1ed41c41cad8c93080f04523b188d28e7f46337ce937997509f9ecf385d65"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts:21 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-mouse-sensor.ts"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"c27199d6744c4dcb07a48bf777baa5c7ce834f5dd92f6a0e0be3d37c40c2b52f"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts:1 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../../empty, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"592d4b699009271112417510899e2745501cd9eb5cdc86c538b6a3ccbb9c30c8"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts:2 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../../invariant, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"376b746848243ada7773eae5d88177e658028cec76e893069f413735854bcd85"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts:9 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../event-bindings/bind-events, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eae727142884e9cf06931e2cd83ea3057d4c1bc43ec4e14b5abd7ecd4d64330"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts:16 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../key-codes, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"c862133222d21a723a29f72d063ae71f03698c39611ab2e505822d53303a2491"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts:17 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/../../use-isomorphic-layout-effect, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfe5d75db4f226f6dc1d6a4eecd348b6b3ba18fad729e589f6ee018d7d76ace8"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts:18 imports @hello-pangea/dnd/src/view/use-sensor-marshal/sensors/util/supported-page-visibility-event-name, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/sensors/use-touch-sensor.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcaf120df2271a28a8c37e449ca91bb460077b1fe758b46aeceee7ffff5c4e54"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarComponents/toolbarButtons/ToolbarButton.tsx:6 imports designer/client/src/components/toolbars/test/buttons/ButtonProgress.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarButtons/ToolbarButton.tsx"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c77342c37a028f6e9b5e7e89e5ac2fc1b029239cbebe16c65fd649d89781a4f"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:23 imports designer/client/src/components/toolbars/test/buttons/AdhocTestingButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"1834a494099098a577088c75ae408268d9faa3b44f18b60cf0f2ad16fed279a9"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:24 imports designer/client/src/components/toolbars/test/buttons/CountsButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"2168144ab3e563dadc52802fa97e7054b7a4c1a709d171264c9364eb54b5c81a"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:25 imports designer/client/src/components/toolbars/test/buttons/FromFileButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ec620731b80750ff7e906a8ad13a208fce5160005d8f2cd19e86872586fd592"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:26 imports designer/client/src/components/toolbars/test/buttons/GenerateAndTestButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ba30f434864b1832499a30dd73a98e0dddb2d00dde832a91ff85b3c1196c0f3"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:27 imports designer/client/src/components/toolbars/test/buttons/GenerateButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"c15f21e56da47cd8e488584ad46d990513a1eb02c430a6ff2cb2a979ff3bbd08"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:28 imports designer/client/src/components/toolbars/test/buttons/HideButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eb3e96f4ca804e370d287d2983acc9bbf8ba716a1a9510178450837a08177a7"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:29 imports designer/client/src/components/toolbars/test/buttons/LiveDataButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ba062767ce2c003f818be763bf24b75ab3fd2474eafb00bce49315ec5161ba4"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:30 imports designer/client/src/components/toolbars/test/buttons/ScenarioTestButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"bad74604e8a96bc116ccf684923b6e6a2ccf552f5d7c20b41f26cd8f6776826c"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts:31 imports designer/client/src/components/toolbars/test/buttons/SnowSnowButton.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/buttons/buttonsMap.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"8078f370245390ffe630eb0aa24b8ee5831361d982465fec6d7b5ac3fa23f196"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-suite-dependency]: designer/client/src/components/toolbarSettings/getToolbarComponent.ts:35 imports designer/client/src/components/toolbars/testCases/testCasesPanel.tsx, a module inside the test suite \u2014 test helpers carry no compatibility contract and are maintained for the suite, not as an API, so production code that depends on one is coupled to a module nobody keeps stable. Move the shared helper into a source directory both layers may depend on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarSettings/getToolbarComponent.ts"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"8db5802a9e399c6119a01881183ae634af34bda2b5cc1da60492cc195b503f20"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/reducers/notifications.ts:3 imports redux-persist/lib/storage, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/notifications.ts"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"b77016f4e61b8e229c5cb543f689989c9478c35cf6e7b4765ae14d8ccabf92a7"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/reducers/toolbars.ts:3 imports redux-persist/lib/storage, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/toolbars.ts"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"144faad3ba836c456b5aeee9e9fbd341fb0bbf49129ba4b691c15f912d66c794"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/client/src/reducers/userSettings.ts:2 imports redux-persist/lib/storage, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/userSettings.ts"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2c063d132da8770f40afd8171f7557251e178640af655ea46dad1fe8c7a081c"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:relative-cross-package]: designer/submodules/configs/webpack/common.ts:8 reaches into another package with a relative path (../../../client/version) \u2014 import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/configs/webpack/common.ts"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"b801dd6fbf7142120a61bbdc2942b83f1633c642bd0249956dabbf99f4945840"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: designer/submodules/configs/webpack/withModuleFederationPlugins.ts:7 imports webpack/lib/util/extractUrlAndGlobal, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/configs/webpack/withModuleFederationPlugins.ts"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a86b79134f01a4aaa808ca9de253bb93bc78613f928b8c729dc251a7f21ba09"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:relative-cross-package]: designer/submodules/configs/webpack/withModuleFederationPlugins.ts:9 reaches into another package with a relative path (../../../client/version) \u2014 import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/configs/webpack/withModuleFederationPlugins.ts"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"30bc685535b93712cb317827841a178e9632195f89505cbc7cab299b32606286"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function FieldRow (cyclomatic 40, cognitive 35): FieldRow has cyclomatic complexity 40 and cognitive complexity 35; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/FieldRow.tsx"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"5810545e4e8d468fc9ed78d572041dc7304cb2e716c2e74a17bb6d3821cd595a"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function ContextTreeNode (cyclomatic 36, cognitive 35): ContextTreeNode has cyclomatic complexity 36 and cognitive complexity 35; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/builderComponents/ContextTreeNode.tsx"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"896c44113c719aedf68358ab8461590a20b99cc127a4dac3f8fc1d8a2903c1e9"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 33, cognitive 8): (anonymous) has cyclomatic complexity 33 and cognitive complexity 8; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/reducer.ts"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"9346812fd95e086023f42006526ab466d82c68febea4ae5379dc6103121254c8"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 26, cognitive 75): (anonymous) has cyclomatic complexity 26 and cognitive complexity 75; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/drawText.ts"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b6c48d2aa951c12d49db1e02b380090ca09fca3d76433016847b197891c7ce9"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 22, cognitive 24): (anonymous) has cyclomatic complexity 22 and cognitive complexity 24; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/useDataMapper.ts"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5a43adde71d132e989a007f6a51ebff2cc3d0c0b125c9ff2963d60680a38e1a"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 19, cognitive 20): (anonymous) has cyclomatic complexity 19 and cognitive complexity 20; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/ProcessUtils.ts"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c054a3775cc09ac6b2a8595bb59ba5f44b489945cdfd9666d44d7cf83268cc9"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function DataMapper (cyclomatic 19, cognitive 17): DataMapper has cyclomatic complexity 19 and cognitive complexity 17; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/dataMapper/DataMapper.tsx"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c4b4bbe441ae52c86d818f014c745170ac0b5eb664deed613295a835997d061"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function ToolbarWrapper (cyclomatic 19, cognitive 16): ToolbarWrapper has cyclomatic complexity 19 and cognitive complexity 16; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarWrapper/ToolbarWrapper.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cc5e59539501347e1fedddb6d1d7706cd79ad7adb9b7601701a7f3741ed9d85"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function testingReducer (cyclomatic 19, cognitive 8): testingReducer has cyclomatic complexity 19 and cognitive complexity 8; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/testing.ts"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2dedcfbd293996a1ffa2e90fd10e08012a664e9260a9d631f605810fb6faab1"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function buildFragmentsForTokens (cyclomatic 18, cognitive 43): buildFragmentsForTokens has cyclomatic complexity 18 and cognitive complexity 43; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/drawText.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfe0d3b7b27e22320d729dff63e9e8671d3a2e1bc38a8db7117beb08e815fe3b"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function parseConditionAst (cyclomatic 17, cognitive 18): parseConditionAst has cyclomatic complexity 17 and cognitive complexity 18; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/conditionBuilder/spelUtils.ts"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"e168cb36717dfad4f25d946086002d3341569c1b3eb2e4c50a86429a8c676040"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function typingResultToSample (cyclomatic 17, cognitive 16): typingResultToSample has cyclomatic complexity 17 and cognitive complexity 16; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/builderComponents/typeUtils.ts"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"5365a773eac1b90cc31a4f7072cf3b1c3b0533450565e51c826216978f30b7bd"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function VariantWrapper (cyclomatic 17, cognitive 16): VariantWrapper has cyclomatic complexity 17 and cognitive complexity 16; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarButtons/ButtonRoot.tsx"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"5954fb52a1e5a857b207184450cc6b3bc79a1424d635882243960f0742ffe641"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 16, cognitive 28): (anonymous) has cyclomatic complexity 16 and cognitive complexity 28; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/useActivitiesSearch.ts"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"951d3269d73ccb55d04a18e70b326fe6610c898248b78d149231c0c31b4f9aaf"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function adjustEdges (cyclomatic 16, cognitive 25): adjustEdges has cyclomatic complexity 16 and cognitive complexity 25; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/NodeSwitcherUtils.tsx"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ef1c349106a506e63e754d7afdfc3cef3a98e64b029d0a6b5680832f6dac57a"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 16, cognitive 19): (anonymous) has cyclomatic complexity 16 and cognitive complexity 19; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/drawText.ts"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"bed5664e1c4b696603ae055fa7a0c516a9beac2183622e3d6d2fc89fa3257995"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function refClazzToValue (cyclomatic 16, cognitive 14): refClazzToValue has cyclomatic complexity 16 and cognitive complexity 14; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/Variable.tsx"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"acc663962dffbc4105ffd15e48f3c167b70dfb731155d38808b7c161c1689d1d"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function NodeDetails (cyclomatic 16, cognitive 3): NodeDetails has cyclomatic complexity 16 and cognitive complexity 3; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/NodeTypeDetailsContent.tsx"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fde217fb2f7d2989a5388515630c70e59a5cace25928a47556e03f89f188757"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/Graph.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"60a7df68ca2618136e27e625ea8d86c0e597db8924e80f6608456f5221a580ec"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/reducer.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd87b7af3042039ba687b95b3d89f471ce9334e0a2e626f83c6aa4c05b40518"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioDetails/ScenarioLabels.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6db57c830a29487345b85a2ae86ca0e28c8e6f49085e289754ab94a9568fef82"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/ActivityPanelRowItem/ActivityItemHeader.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"865c7ba405f33d2fb6800187cada08a1d14c8d9d7e42460062ce9b2426dee648"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/Table.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a27b37c41ddbd03226891fbdb095a1420ef6fe9e39cbd23df3722ad40d9b75ab"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/RangeSelectPlugin.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a9e0b4382ad967c285c137480b85d760b876048eae99d38bcbfc2767573daa4"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node/NodeContent/TestingContentElements/InputDataRecords.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"917ea30e820aa26734cb502b7a77dcae9e2af13ebb4d86edce760335fc500867"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/search/utils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d37692bc8e31955418bc204aae03d497f060f649955b2fa2c646eaafdb40f26"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/Visualization.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecc19815215668d9bb4f9fd89d07fd4706e9f31b9bd50b66bc2a440d91c61b4b"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/components/usages/usagesTable.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"baff47ce9372c029b3ada139ccee148d9caa5970193bf4a1e70ebe2b07c3a005"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/AddProcessForm.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ed3b82e4140fc98125604fbf3f05e50f36de040d575cde0792c44b1150c11d8"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/ParametersUtils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f2618585fab0b5e2c08c27ee4f1f36a13b990718b641dd27e0b9a331101cb1"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeDescriptionPopover.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"54aebc696b732813440d5228147126b9e2d73020b23bc630f5bf947eeee78283"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/io/InputOutputLayout.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e319ada679cff2831cdc99c6773bbae50d7f9817bc0c57479c9ece8d75c9fc6a"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/components/listWithFilters.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"51dc9812684f21ee5cb6ebb162a00ed44a4c23632e208dbbd73b448f77a25a15"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/ToolbarsLayer.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"918140a5836ad2b1f92c8a6c6b343afb2a244ab0e6d00577f6f2d5367c34142e"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/settings/collapsibleSwitchList.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ac48abd6173751535db01c9e1e788b3696754919ceb1b48296a21c4eefaf61b"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node/NodeDetails.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf60ebd8979019747c7bc44f6570b3cb94c093ed36990bf6892a3a6f307663eb"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/ActivitiesPanel.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce52932e46ff45db81222f2eb7f4441645ebb6baa3eee00300dc204ac281a59"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/scenarios/list/tablePart.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4fd8c258fad7914c86a25fd4f2a8976a2d238a32cfaf2a7579cb76cff0dc3f7"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/ActivityPanelRowItem/ActivityItem.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad8b414a64c3f9a1a26c675f557c054290112833a37c80b1b4b9c90a43eb4a8a"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/creator/ToolBox.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7576aaa99781cdd0d91c3e7c2b7da79c4f22826144d508fd054db75da80772"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/creator/CreatorPanel.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"700744203050faddc8dbc5774a39e3b3a41b37ef783913df9cfb16f3b3d96ac7"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/PanZoomPlugin.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7234784dcbee3387bbcd8f552c4b7b7301f746c15247d24b9cea69c9dfdc2828"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node/NodeContent/TestingContentElements/Assertions.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9645deba4ac7a47fcbe0511dd4c203010cd4ec8bde9bb72a1b2655044e478612"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/Notifications.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"941790bdebe03f384329e036c88bf8a4b53be68ea72fe8708016c2f74dfaf3f9"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/io/ContextTree.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd6bb1bbfffb09dfe312a6a322124b0ee2926a1fe9bf9be977992a165d883213"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/scenarios/list/itemsList.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5277533af8d06365ba809b201032ecfd32325312d4a872387d85a16677fa17e9"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/scenarios/filters/filtersPart.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c13f9a8450b1cb30b45aba3998ac4b62c4e649f8f2bc9aa4cda1be9477942ab"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/TestingDataRecords/useDataRecordsActions.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f90c1eb33f19473f3e76d07399acdd2dc865b32ed7c86af89908859e7bff9b6d"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/windowManager/ContentGetter.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff9b8ceaaf11b5c94c88de30b5e738bfebdd4710d357c9883e7691b01db15472"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/common/DropdownButton.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92a358a1ca6804fa75407caaeb432a395cd1dd80516e6ad685971b0e5fcb8aa0"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/AddProcessDialog.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3f168e7834b224c053e7969bb80c89eb1a25607c83d8047aef5cd8901c7cff8"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/scenarios/filters/quickFilter.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df216c6a58ac4541979b76508aa18449100cc7bd89339517dcdf66802eb156a8"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/MenuBar/menu.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"712dde7b1e9ea26e46b5a66d2860760eb9a32895d4f5ace43261f4fe45ec7320"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/liveData/LiveDataThroughputs.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fa43245380279d58bbd6c57613cb7dfe669a9adde5510f0eb5e8623b7a020b6"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/common/filters/filtersContext.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6dd67d270f51771fb49eb91af441932cbe01132509d5144242734a177bc21f8"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/activities/ActivityPanelRowItem/ActivityItemComment.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f2ce600564f36428fda8d901f32bf35ca2764401d63e47c3e6370a2de1f00fb"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/configs/webpack/withModuleFederationPlugins.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a616e722149b0240b3d84df380ca5a62744360d2e68ef1d7fe37cca99cc6c1b"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/EspNode/link.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5c6f477e3939382f78afa043e7821f77756e9e9b2d358b0bede3122544c3a40"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~436 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (designer/client/src/components/toolbars/scenarioDetails/ScenarioDetails.tsx, designer/client/src/components/toolbars/scenarioDetails/ScenarioStatusContent.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/scenarioDetails/ScenarioLabels.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd9d791f9d5f83681ed8ee3bf3b9de313979714950a36cd08a8a92783ca4103a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~260 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (designer/client/src/components/toolbars/search/AdvancedSearchFilters.tsx, designer/client/src/components/toolbars/search/SearchResults.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/search/utils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"138c27b03d8901cb8f51eca875184475d150befc6ff981dcb5c0a6098802e801"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~252 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/RootRoutes.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/Visualization.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcd4e8b3e974f099d9d3b33607dc74b8d03b8ec70a3643736d6d2d5d88c19d40"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~197 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/toolbars/Toolbars.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/ToolbarsLayer.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"90aab1f433ba23d63089ad4babd3147bc4cc499d05ac2b281ee848b8c780c743"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~172 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/toolbarSettings/getToolbarComponent.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/creator/CreatorPanel.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34db93e52567ca6ff1bf13a3a9e0a04243e9180a698f5ffb2e66105d50ed0bcf"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~161 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/windowManager/WindowManager.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/windowManager/ContentGetter.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a777bfad876902f7fe0eebf09ebeb0b797b11ee75df0d951662744b47b53746"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~160 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/modals/CalculateCounts/CountsStyled.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/common/DropdownButton.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"443b91a03786ed083b8b06d7ee59c133eaa4fef2abad9e62b27fbdac6e0d1d0d"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~156 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/windowManager/ContentGetter.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/AddProcessDialog.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"950d8e418450bda0152b72d21b423245e011771591717d91dc22f5ae6ff70095"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~151 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/MenuBar/index.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/MenuBar/menu.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d051f700c9ffe06a2e14a56a2f81472b5dc9a3ee3322426a35fab054c08afa1a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~151 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/Visualization.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/liveData/LiveDataThroughputs.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0cdea52ee3cb956c02af0527b109c63837ee45a1d1158de57db303caced314b"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~140 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/toolbars/search/SearchPanel.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/search/AdvancedSearchFilters.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"453e4f9a5c090889d7292a0ed4cf06c529e60ed5b9c334f8548be875ec6a1c20"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~139 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (designer/client/src/components/aiAssistant/ModelAdapter.ts, designer/client/src/components/aiAssistant/debug/MockAssitantFetch.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/InitializeChatStream.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af4052e5204f6f5d4c610fddf702123304493afae44ae3171062e8d000b06a1a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~139 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/Visualization.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/ScenarioDescription.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef24979d1e2b9beb30e47dd355e0ac80613bd081f595b2e689193040168e8fe"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~137 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/Auth/strategies/index.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/Auth/strategies/OAuth2Strategy.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d614e51dbb6ce0fb91096f351e93079ad3bb8e2c62613d81d9805bf0bedc7924"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~127 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/windowManager/ContentGetter.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node/DescriptionDialog.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4a99c95deedfe2ac7d4e25d7089abf2a4d3ccd33320de68685bb42bd451a5e1"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~126 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/aiAssistant/components/AiAssistantModal.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/components/Composer.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"29c5f5905e38fcb63486e9064f67550a43288afcfec8e9336f5fe3a15bfe26cd"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~122 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/modals/CalculateCounts/CalculateCountsForm.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/CalculateCounts/RefreshSelectButton.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fad85afc2519e28e12b5af9a65073712ab404158f8deb09ad5d157fb118d536"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~121 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/windowManager/ContentGetter.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/MoreScenarioDetailsDialog.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a79ea7a80eddac069cc93d6c42d7454cd0d60d9548d4c3be00942b84555c9304"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~117 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/modals/DeployWithParameters/DeployWithParametersDialog.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/DeployWithParameters/AdvancedParameters.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b7845fe2f1217542395f2079d44e4c05f530af611a5e0ca3a312908e5d0a88d"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~113 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 5 in-repo import(s) from 5 other file(s) do name it (designer/client/src/components/SidePanelToggleButton.tsx, designer/client/src/components/sidePanels/SidePanel.tsx, designer/client/src/components/toolbarComponents/ToolbarsLayer.tsx and 2 more) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/sidePanels/SidePanelsContext.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa95b089483b30ec0d52ef0ba430b5f1b4a6faba969a6f89c2ddbaf52dc952f3"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~113 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/toolbars/creator/CreatorPanel.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/NodeCreationHandler.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8aa2357c99db4496ee2eb5f7fc55765d3f3820a2acda8a4a36c2535e100bf26"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~110 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/aiAssistant/AiAssistantProvider.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/ModelAdapter.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1d4dffedc474a94381ea512fdf5d440cd3310e7bc1deac38ff19ede8c6f38f7"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~109 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/Visualization.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/tools/ScenarioDataAIToolkit.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fb4a928886d361a7103205e4282c00bd41c6777f8f8a50bab69fea291bb5f3c"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~108 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 2 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/liveData/LiveDataThroughputs.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/liveData/animationHelpers.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd170a2b4e04f4d1c2f7f6d5bf8f20f133a2795f962426b9681ab769b48beb0e"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~105 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 4 in-repo import(s) from 3 other file(s) do name it (designer/client/src/components/toolbars/search/AdvancedSearchFilters.tsx, designer/client/src/components/toolbars/search/SearchPanel.tsx, designer/client/src/components/toolbars/search/utils.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/search/SearchResults.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05bc0f6d5aa2af71ed82c75db0a5cc35e53a029afab5810e7bae6c342c5454f3"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~104 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/windowManager/ContentGetter.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/DeployWithParameters/DeployWithParametersDialog.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a2f8f94749f84974cc76e56149503bbfedda9367e0e2237e6bfa0e4449ba3e"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~104 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/NussknackerApp.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/versionInfo.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c198a72c0534a54dc0567ab8984b3bee7d090e3dd9bb37ec7ca5471d9f32baf"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~102 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (designer/client/src/components/CommandBar/settings/useRegisterSettingsCommands.tsx, designer/client/src/containers/RootRoutes.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/settings/SettingsView.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc638e19b02987811df114bc76059be31b8a167823187df2a275960f0ee61a1"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~93 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (designer/client/src/components/modals/CalculateCounts/CalculateCountsForm.tsx, designer/client/src/windowManager/ContentGetter.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/CalculateCounts/CalculateCountsDialog.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe9e49ecf4eec0fe2e5bfb3ec81abbd307af4d7b055d45b8d555bf625afc51c"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~91 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/configs/withModuleFederationPlugins.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f2663111d4d0603af56ca1b21dea5a5847e054bd65fcd9783699a1665f16ab2"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~90 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/aiAssistant/InitializeChatStream.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/messageHelpers.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"83fbdacbe465e12fdf59ce0ecc96e3b4b1b73375bd9f72097dbf6eb97ada1d9e"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~89 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/MenuBar/index.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/MenuBar/breadcrumbs.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57b4a1cf89417de896ed00e411286003c3b7edb5950c69af73c3cd7efe1479fd"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~89 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/aiAssistant/InitializeChatStream.ts) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/debug/MockAssitantFetch.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3748c1ebd3632cfa8b21d808b54065d94700ceb5e895805523d23b340fb4d7a7"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~89 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/windowManager/ContentGetter.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/modals/PropertiesDialog.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd1df52e398ae38813103934fe5920fdedbb520ca5c8b5c98735d69d610b05a4"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~87 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/Visualization.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/AddComponentsButtons.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a72f6ed4a7c0873d06fd48a45366175b17f444738c1f890461f22eff96f9ec2"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~84 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/aiAssistant/components/AiAssistantModal.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/aiAssistant/components/AssistantMessage.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31574278d299df711833f0da027734c4cea548c49fd57d20e6085bd8e6630b5"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~81 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/sidePanels/CollapsibleScrollPanel.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/sidePanels/CollapsiblePanel.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"feb3caa4a12a247db4a704dc0d4bb87ee0b69ad290f49e20e9e08d0f91e21911"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~80 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/components/tips/Tips.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/tips/Warnings.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"86440e284d6cb2398e61546787b19eef391346ce49136242950c40e8902446df"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~80 LoC): no import path from any entry point (40 application, 10 tooling, 126 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (designer/client/src/containers/Visualization.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/containers/assertions/addAssertionResultToNodes.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4add57205a0e5433b73f79c967bcb1e59cf5b4d0312346410d9ad119290c36e"}},{"ruleId":"R8","level":"error","message":{"text":"Unlisted import \u0027@emotion/cache\u0027: Imported but not declared in any reachable package.json \u2014 installs work only by hoisting accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/settings/rootProviders.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4063705792340ae8d0fa8e23ad0286775d483d5c0f9325b949607f534b486b17"}},{"ruleId":"R8","level":"error","message":{"text":"Unlisted import \u0027@mui/system\u0027: Imported but not declared in any reachable package.json \u2014 installs work only by hoisting accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/common/PlaceholderIconFallbackComponent.tsx"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccb276db8d41f3acc21c33122c101f9dd89f4d8e5c95919298f37f786135efe8"}},{"ruleId":"R8","level":"error","message":{"text":"Unlisted import \u0027stylis\u0027: Imported but not declared in any reachable package.json \u2014 installs work only by hoisting accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/settings/rootProviders.tsx"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"32a93b6047de3d484e66edc01f100bf759b540779cbbda5010096de024fbe66d"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027d3-transition\u0027: Declared in designer/client/package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d3ad0bfe9d1e9bb7e60830323a95a02e9887b78332a873e2052ba568bc7d85e4"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027glob\u0027: Declared in designer/client/package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"70383cf03107da7b95199f32558be143fecec5ce4ab29af9b166270952e6c145"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027moment-duration-format\u0027: Declared in designer/client/package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"97b27eee92674b26a3ba906e6e1a22a2abd994cc5eae7fe7063fd30fed96bc29"}},{"ruleId":"R8","level":"note","message":{"text":"Type-only dependency \u0027react-notification-system\u0027 in production deps: Every import is type-only \u2014 move it to devDependencies."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/notificationActions.tsx"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"fca0a38d80bbcea843fd2c2672e254ebaac37de8ef2918686023f70dc2c8c5cc"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/actions/nk/editNode.ts \u2192 designer/client/src/components/graph/node-modal/node/useNodeState.tsx \u2192 designer/client/src/actions/nk/editNode.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/editNode.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfc8afa458050aebe8b1c32a9bfa9a5e8aa6d12620f664e0619fe5c2fb3035f6"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/actions/nk/liveData.ts \u2192 designer/client/src/actions/nk/process.ts \u2192 designer/client/src/actions/nk/liveData.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/liveData.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd4d81798de983bc1be3d03bc6cb2ad5b271f635731d24a3ad0998c6a855181"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/actions/nk/nodeDetails.ts \u2192 designer/client/src/actions/nk/validationsActions.ts \u2192 designer/client/src/actions/nk/nodeDetails.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/nodeDetails.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dbf78a78bf9de4c30d7f4574736608a1e7e4ee342e9ff746727955434b61e1b"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (4 files): designer/client/src/actions/nk/testCasesActions.ts \u2192 designer/client/src/actions/nk/testingActions.ts \u2192 designer/client/src/reducers/selectors/testCases.ts \u2192 designer/client/src/components/graph/node-modal/editors/expression/MockExpressionField.tsx \u2192 designer/client/src/actions/nk/testCasesActions.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/actions/nk/testCasesActions.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b593e68bf257bfc2b15c6ade85adcbce80d76a483ff7b91444428d14d7ebcc5"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/toolbarComponents/toolbarButtons/ToolbarButton.tsx \u2192 designer/client/src/components/toolbarComponents/toolbarButtons/ButtonMenu.tsx \u2192 designer/client/src/components/toolbarComponents/toolbarButtons/ToolbarButton.tsx (one verified cycle inside a mutually-dependent group of 53 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbarComponents/toolbarButtons/ToolbarButton.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5199d3da21bf1cbec810fba3417d3b468faa259a3b70c4c6e4f715efce5c4bb"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (6 files): designer/client/src/common/CodeBlock.tsx \u2192 designer/client/src/common/copyToClipboard/CopyIconButton.tsx \u2192 designer/client/src/components/graph/node-modal/editors/InfoTooltip/InfoTooltip.tsx \u2192 designer/client/src/components/graph/node-modal/editors/InfoTooltip/StyledInfoMarkdown.tsx \u2192 designer/client/src/components/graph/node-modal/MarkdownStyled.tsx \u2192 designer/client/src/components/graph/node-modal/MarkdownWithPlugins.tsx \u2192 designer/client/src/common/CodeBlock.tsx (one verified cycle inside a mutually-dependent group of 8 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/common/CodeBlock.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eae2c2e031d26b20f72d290a67dab528d32f275f0389f66616d2d4d86b53c1c1"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/ValueDragPreview.tsx \u2192 designer/client/src/components/graph/node-modal/editors/expression/useAceDndTarget.tsx \u2192 designer/client/src/components/ValueDragPreview.tsx"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/ValueDragPreview.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3d62d12be89455e868da0d6486e571cc3b45ae047cb3389b738bebf76cc7544"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/graph/EspNode/element.ts \u2192 designer/client/src/components/graph/EspNode/esp.ts \u2192 designer/client/src/components/graph/EspNode/element.ts (one verified cycle inside a mutually-dependent group of 11 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/EspNode/element.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec037bfad9b77c02f40cb4a7355f09a365bf1127f993b686a45b18f96de77a3a"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/graph/Graph.tsx \u2192 designer/client/src/components/graph/utils/dragHelpers.ts \u2192 designer/client/src/components/graph/Graph.tsx"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/Graph.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9176d8b5b09f05dbbc2702ae8ab74ca6f82bfc0633662a02d525e59c1fa6e82c"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/graph/NodeUtils.ts \u2192 designer/client/src/reducers/graph/utils.ts \u2192 designer/client/src/components/graph/NodeUtils.ts (one verified cycle inside a mutually-dependent group of 3 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/NodeUtils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4f4a86ae6862cef30008def5b8f086db19bf2cf3f9fbd1c3977806cd8e4676b"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/graph/node-modal/TestResultsWrapper.tsx \u2192 designer/client/src/components/graph/node-modal/tests/TestErrors.tsx \u2192 designer/client/src/components/graph/node-modal/TestResultsWrapper.tsx (one verified cycle inside a mutually-dependent group of 3 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/TestResultsWrapper.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55148056faf9a97bb18c2d28952ee5a980c6faf44c46078aa6633de9bf3a0edb"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/graph/node-modal/editors/expression/Editor.ts \u2192 designer/client/src/components/graph/node-modal/editors/expression/BoolEditor.tsx \u2192 designer/client/src/components/graph/node-modal/editors/expression/Editor.ts (one verified cycle inside a mutually-dependent group of 26 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/expression/Editor.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"336ddc6ce897ec81877dcf2e9d2918d260ddbe748b422faca783bbef04ccef1e"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/graph/node-modal/editors/map/Map.tsx \u2192 designer/client/src/components/graph/node-modal/editors/map/MapRow.tsx \u2192 designer/client/src/components/graph/node-modal/editors/map/Map.tsx"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/editors/map/Map.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2abd266b28f952d7533fa4c99f7182b1b09f4768d94d09f048606deee693ce31"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/components/graph/node-modal/node-row-fields-provider/FieldsControl.tsx \u2192 designer/client/src/components/graph/node-modal/node-row-fields-provider/buttons/AddButton.tsx \u2192 designer/client/src/components/graph/node-modal/node-row-fields-provider/FieldsControl.tsx"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/graph/node-modal/node-row-fields-provider/FieldsControl.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3c01c059918d555d28bd9c07801d8670d730fdc9284e81563443785c226ab02"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (3 files): designer/client/src/components/toolbars/creator/ToolBox.tsx \u2192 designer/client/src/components/toolbars/creator/ToolboxCommands.tsx \u2192 designer/client/src/reducers/selectors/getFilteredComponentGroups.ts \u2192 designer/client/src/components/toolbars/creator/ToolBox.tsx"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/components/toolbars/creator/ToolBox.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2bccbb7cf74d829b4438e3123b26f540ce2b532bd7b2c56602e35fbd14d099b"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/client/src/reducers/graph/historySquash.ts \u2192 designer/client/src/reducers/graph/reducer.ts \u2192 designer/client/src/reducers/graph/historySquash.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/client/src/reducers/graph/historySquash.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"81347af19fd3700d15ddf34b4ddf426db9b1cfaf53db8ecea76c022723c4e464"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): designer/submodules/packages/components/src/components/usages/nodesCell.tsx \u2192 designer/submodules/packages/components/src/components/usages/usagesTable.tsx \u2192 designer/submodules/packages/components/src/components/usages/nodesCell.tsx"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/submodules/packages/components/src/components/usages/nodesCell.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac501b2ea372bd00385b43fec9fe03e39ab6a1f19453c42c197ff8a94e73402e"}},{"ruleId":"S1","level":"note","message":{"text":"No security response headers detected: No Content-Security-Policy / X-Frame-Options / X-Content-Type-Options configuration found \u2014 defense in depth, even when a reverse proxy could set them. This is reported because \u0060defaultDesignerConfig.conf\u0060 is committed to this repository and declares the server that serves it, so the configuration that would carry these headers is in this repository and was read in full. (\u22122.0 on this card.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"designer/server/src/main/resources/defaultDesignerConfig.conf"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"97f188df5b810e291ba1dfbe82037c51a3d58a7255a7ac6ad289b7ba9bb58028"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-125","guid":"98717707-96bf-ca5b-9568-8d1d257574c1","name":"CWE-125","shortDescription":{"text":"CWE-125"},"helpUri":"https://cwe.mitre.org/data/definitions/125.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-200","guid":"b0ce3b1d-7a29-fe50-8aab-9aba899d2988","name":"Exposure of Sensitive Information to an Unauthorized Actor","shortDescription":{"text":"Exposure of Sensitive Information to an Unauthorized Actor"},"helpUri":"https://cwe.mitre.org/data/definitions/200.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-269","guid":"70e1f5f6-81e5-4e5a-ba40-b541c3a346e2","name":"CWE-269","shortDescription":{"text":"CWE-269"},"helpUri":"https://cwe.mitre.org/data/definitions/269.html"},{"id":"CWE-287","guid":"ec161954-9db0-355d-9539-ae741453fd44","name":"CWE-287","shortDescription":{"text":"CWE-287"},"helpUri":"https://cwe.mitre.org/data/definitions/287.html"},{"id":"CWE-312","guid":"96724ece-b0b2-a45c-83f9-0869fa3f6bea","name":"Cleartext Storage of Sensitive Information","shortDescription":{"text":"Cleartext Storage of Sensitive Information"},"helpUri":"https://cwe.mitre.org/data/definitions/312.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-359","guid":"b7dfe5b0-0351-645b-a311-b936102c2929","name":"Exposure of Private Personal Information to an Unauthorized Actor","shortDescription":{"text":"Exposure of Private Personal Information to an Unauthorized Actor"},"helpUri":"https://cwe.mitre.org/data/definitions/359.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-506","guid":"401d6455-56e3-0552-9a39-f77461673e3f","name":"CWE-506","shortDescription":{"text":"CWE-506"},"helpUri":"https://cwe.mitre.org/data/definitions/506.html"},{"id":"CWE-522","guid":"71fb233e-ce6a-ae57-9419-ef8373540b09","name":"CWE-522","shortDescription":{"text":"CWE-522"},"helpUri":"https://cwe.mitre.org/data/definitions/522.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-770","guid":"aeddd25d-2b4f-7255-92c9-e933d075dd43","name":"CWE-770","shortDescription":{"text":"CWE-770"},"helpUri":"https://cwe.mitre.org/data/definitions/770.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-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.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":237,"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."]}]}